Balikkan dan Balikkan String
Tantangan
Dalam tantangan ini. Anda akan menulis sebuah program yang akan menampilkan atau mengembalikan input, terbalik dan terbalik.
Pertama, setiap karakter harus dikonversi ke kode karakternya. Kemudian, itu harus dikonversi ke basis-2. Mengikuti, string itu harus dibalik. Setelah itu, string harus dibalik (1 -> 0 dan 0 -> 1). Akhirnya, itu harus dikonversi kembali ke basis 2 dan kemudian dikonversi kembali ke karakter. Jika sebuah karakter menghasilkan sesuatu yang tidak dapat dicetak, Anda dapat membuatnya secara opsional tetapi mereka tidak harus dihapus.
H -> 72 -> 1001000 -> 0001001 -> 1110110 -> 118 -> v
e -> 101 -> 1100101 -> 1010011 -> 0101100 -> 44 -> ,
l -> 108 -> 1101100 -> 0011011 -> 1100100 -> 100 -> d
l -> 108 -> 1101100 -> 0011011 -> 1100100 -> 100 -> d
o -> 111 -> 1101111 -> 1111011 -> 0000100 -> 4 -> (unprintable)
, -> 44 -> 101100 -> 001101 -> 110010 -> 50 -> 2
-> 32 -> 100000 -> 000001 -> 111110 -> 62 -> >
W -> 87 -> 1010111 -> 1110101 -> 0001010 -> 10 -> (newline)
o -> 111 -> 1101111 -> 1111011 -> 0000100 -> 4 -> (unprintable)
r -> 114 -> 1110010 -> 0100111 -> 1011000 -> 88 -> X
l -> 108 -> 1101100 -> 0011011 -> 1100100 -> 100 -> d
d -> 100 -> 1100100 -> 0010011 -> 1101100 -> 108 -> l
! -> 33 -> 100001 -> 100001 -> 011110 -> 30 -> (unprintable)
Mencetak gol
Kode terpendek dalam byte menang.
-15% Bonus: jika program Anda menghapus yang tidak dapat dicetak dari output. Ini harus setidaknya semua karakter di bawah 32 kecuali baris baru (karakter 10)
GBktnkZs
0010000
, harus diperlakukan sebagai10000
kebalikannya00001
Jawaban:
CJam, 14
Cobalah online
Penjelasan:
Cukup mudah:
Versi "Cetak", 20 - 15% = 17
sumber
Pyth, 14 byte
Cobalah online.
Bagaimana itu bekerja
sumber
smCi!MvM_.Bd2z
smCi.r_.Bd`T2z
smCiqR\0_.Bd2z
Perl,
5751 karakter(50 karakter kode + 1 opsi baris perintah karakter.)
Contoh dijalankan:
sumber
-p
s/./$_=unpack b8,$&;s|0+$||;"chr 0b".y|10|01|r/gee
.unpack b8,$&
lebih pendek darisprintf'%b',ord$&
, dan juga menerjemahkan dalam urutan terbalik. Sayangnya itu juga menghasilkan trailing 0s, yang perlu dihapus.unpack
masih merupakan daerah yang belum dijelajahi untuk saya.-p
s/./"chr 0b".unpack(b8,~$&)=~s|1+$||r/gee
. Balikkan karakter, tidak perlu transliterasi;)JavaScript (
ES6ES7),119114108 byteIni ternyata jauh lebih lama dari yang diharapkan :(
Berkat @ vihan untuk 5 byte yang disimpan! Terima kasih kepada @ETHProductions untuk 6 byte lainnya yang disimpan!
Untuk menguji: Jalankan cuplikan di bawah ini, masukkan input like
"Hello, World!"
, dan klik Test!sumber
parseInt
dengan+('0b'+<code>)
seperti yang dijelaskan di sini dan yang lain dengan menggunakanw^1
bukannya+!+w
x=>String.fromCharCode(...[for(y of x)if((c=+('0b'+[...y.charCodeAt().toString(2)].reverse().map(z=>z^1).join``)) >31||c==10)c])
(127 - 15% = 107,95) Mungkin ini tidak legal, meskipun; itu hanya menangani10 == \n
, bukan13 == \r
. @ V, apa pendapat Anda?Unexpected token '>'
ketika saya mencoba menjalankan cuplikan.JavaScript (ES7), 126 byte - 15% = 107.1
Saya bermain-main dengan jawaban ini untuk melihat apakah bonus itu sepadan. Rupanya begitu. Test suite dicuri dari jawaban yang sama, tetapi saya menambahkan twist saya sendiri: dukungan penuh dari bonus 15%! :)
sumber
getScore()
fungsi yang memeriksaHello, World!
kepatuhan uji kasus (dengan mudah berisi baris baru dan karakter yang tidak diinginkan), dan mengembalikan skor dikalikan dengan 0,85 atau 1, tergantung pada hasilnya. Dan ya, akses ke cuplikan yang tidak ditambang akan sangat bagus. :)PHP -
187182163 byteBerikan nilai sebagai
GET["s"]
.array_map mengembalikan array dengan semua elemen dari parameter kedua (sebuah array) setelah menerapkan fungsi callback (parameter pertama) untuk semuanya.
Tidak yakin apakah saya harus mengambil 15% off, karena
echo
tidak menghasilkan karakter yang tidak patut, tetapi saya tidak menghapusnya.Senangnya saya selesai, karena ini adalah tantangan pertama saya ambil bagian.
sumber
$m='array_map';echo join($m("chr",$m("bindec",$m(function($v){return strtr($v,[1,0]);},$m("strrev",$m("decbin",$m("ord",str_split($s))))))));
.STDIN
. By the way, Anda tidak perlu menggunakan tanda kutip tali ("chr"
,"bindec"
, ...) karena kita tidak peduli tentang peringatan. Itu akan menghemat 12 byte.str_split($s)
denganstr_split(fgets(STDIN))
misalnya.K5, 28 byte
Ini agak tidak nyaman karena
decode
operator K5 melakukan konversi basis lebar-tetap, jadi untuk mematuhi pernyataan masalah saya harus memotong nol terkemuka. Lambda{x@&|\x}
menyelesaikan langkah ini.Mengolesi:
Mengumpulkan:
Memilih:
Seluruh program dalam aksi:
Saya percaya perilaku alami oK dengan unsintables membuat ini memenuhi syarat untuk -15%, memberikan skor 28 * 0,85 = 23,8 .
sumber
Julia, 77 byte - 15% = 65,45
Ini menciptakan fungsi tak bernama yang menerima string dan mengembalikan string. Karakter yang tidak dapat dicetak dihapus, yang memenuhi syarat ini untuk bonus.
Tidak Disatukan:
sumber
filter(isprint,)
dan hanya 11,55 byte yang disimpan melalui bonus.s->map(c->Char(parse(Int,join(1-digits(Int(c),2)),2)),s)
(for 56 bytes)filter(isprint,)
keduanya memenuhi syarat untuk bonus dan membuatnya sesuai dengan aturan.\x04
dan sejenisnya), makaprint()
harganya tujuh, yang akan membawa 56 hingga 63.PowerShell,
199 175(171 - 15%) = 145,35Penggunaan
jumlah yang tidak menguntungkan daribeberapa panggilan .NET / built-in, yangsecara signifikanmenggembungkan kode.Dijelaskan:
Mengambil input
param(..)
dan melemparkannya sebagaichar[]
sehingga kita dapat mengerjakannya dengan tepat.Bit selanjutnya
(..)-join''
mengumpulkan dan menggabungkan output kami bersama.Di dalam parens itu, kami beralih ke
$a|%{..}
loop foreach.Di dalam lingkaran:
$b
, yang merupakan surat masukan kami yang dilemparkan sebagai int+$_
dan[convert]
ed ke basis2
$c
, rumit, jadi mari kita mulai di dalam dan mencari jalan keluar$b
dengan(-join$b[$b.length..0])
"$(..)"
[convert]
denganToInt32
dari dasar2
, yang akhirnya tersimpan yang menjadi$c
$c
lebih besar dari31
, atau sama dengan10
, kita melemparkannya sebagai char dan nilainya tertinggal di pipeline untuk output (yang dikumpulkan dan-join''
diedit bersama di atas), kalau tidak, tidak ada yang tersisa pada iterasi khusus ini.Fiuh.
Memenuhi syarat untuk bonus -15%, juga.
Contoh
sumber
Fungsi C, 63
sumber
𝔼𝕊𝕄𝕚𝕟, 39 karakter / 73 byte
Try it here (Firefox only).
sumber
Minkolang 0,11 , 26 byte
Coba di sini.
Penjelasan
sumber
MATLAB, 60 byte
Pada dasarnya setiap karakter pada gilirannya dikonversi menjadi string biner (tanpa nol di depan). Array dibalik dan dikurangi dari 97 ('0' + '1') yang membalik karakter. Ini dikonversi kembali ke desimal. Setelah semua karakter diproses, seluruh array kemudian dikonversi kembali ke karakter sebelum dikembalikan.
sumber
Python 3,
9591Implementasi langsung.
Tidak Disatukan:
sumber
Ruby, 62 karakter
Jalankan sampel:
sumber
C #, 156 byte - 15% = 132,6
Lekukan dan baris baru untuk kejelasan:
sumber
Javascript 123 byte
sumber
Retina ,
1107629 byte - 15% = 534,65 (tidak bersaing)Menggunakan fitur yang ditambahkan setelah tanggal tantangan. (Perilaku implisit dari
$*
,¶
, Sorting)Retina tidak memiliki built-in untuk mengubah karakter menjadi ASCII atau belakangnya ... jadi lihatlah panjangnya yang berkilau. Ini menangani ASCII yang dapat dicetak, dan menghapus yang tidak diinginkan serta baris baru. Hitungan byte mengasumsikan penyandian ISO 8859-1.
Kode berisi karakter yang tidak patut dicetak.
Cobalah online
Jika Anda melihat tutorial Retina untuk aritmatika unary , Anda akan mengenali beberapa bagian kode saya yang berasal dari sana.
Terima kasih kepada Martin untuk bermain golf ratusan byte
sumber
Java, 205 - 15% = 174.2
Tidak Disatukan:
Saya pikir solusi ini sedikit menarik dalam penggunaan
Integer
metodeInteger.reverse
danInteger.numberOfLeadingZeros
apa yang mereka lakukan, dan perubahan di-1 >>> s
manas
adalah angka nol terkemuka, untuk mendapatkan topeng untuk menutupi bit tinggi yang tidak kita inginkan. Saya hanya menyesal bahwa nama metode yang terakhir ini sangat bertele-tele, tapi itulah yang saya dapatkan untuk bermain golf di Jawa.Keluaran:
sumber
Japt, 25 byte
Ingin membuat program JavaScript golf, tetapi metode terpendek melibatkan banyak nama fungsi yang panjang? Untuk itulah Japt dibuat. :)
Cobalah di penerjemah online !
Bagaimana itu bekerja
Menggunakan versi Japt saat ini (pada v1.4.4), jumlah byte dapat dipotong menjadi 14:
Uji secara online!
sumber
Haskell, 167 byte
Sayangnya Haskell menjadi sangat verbose ketika perlu membaca / mencetak di basis lain ...
sumber
Perl 6, 66 byte
Keluar habis-habisan dengan menghapus karakter kontrol non-cetak membuat saya (83 + 1) -15% = 71,4
Jika saya menghapus kode yang menghapus karakter kontrol saya menyimpan sedikit 65 + 1 = 66
(Saya menggunakan
»
bukan>>
untuk kejelasan)sumber
Jelly , 6 byte (tidak bersaing)
Cobalah online!
Penjelasan:
sumber
Racket 250 15% bonus = 212 byte
Tidak Disatukan:
Pengujian:
Keluaran:
sumber
PHP, 80 byte
menerima input dari STDIN; jalankan bersama
-R
.versi bonus,
97110 byte -> skor 93,5mencetak ASCII 10 dan 32 hingga 126 (baris baru dan barang cetakan)
kerusakan, TiO dan jika mungkin golf akan mengikuti; Saya lelah sekarang.
sumber