Ambil string karakter biner yang dipisahkan oleh spasi, dan ubah menjadi string ASCII.
Sebagai contoh...
1001000 1100101 1101100 1101100 1101111 100000 1010111 1101111 1110010 1101100 1100100
Akan dikonversi ke ...
Hello World
String biner akan disimpan dalam variabel yang disebut s
.
Ini adalah tantangan kode-golf sehingga solusi terpendek menang.
ZX81
sini.Jawaban:
Ruby,
3632Atau 31
Optimalisasi berkat Chron
sumber
.join""
untuk*""
menyimpan beberapa karakter. Anda juga dapat melakukannya dengan gsub alih-alih split + map + join, sesuatu seperti:s.gsub(/\w+ ?/){$&.to_i(2).chr}
(31 karakter).s.gsub(/\d+./){$&.to_i(2).chr}
bekerja dan 30 karakter, saya tidak tahu mengapa itu berhasil. The.
tidak harus sesuai dengan terakhir kali tetapi tidak.JavaScript (ES6) 49
55 56 64Edit Menerima saran @bebe - terima kasih
Edit2 Tidak tahu tentang literal angka biner - terima kasih @kapep
Edit3 Wow 6
tidak 4byte disimpan thx @ETHproductionsPenjelasan seperti yang diminta dalam komentar
String.replace
dapat mengambil 2 argumen:/\d+./g
: satu atau lebih digit diikuti oleh satu karakter yang berbeda - bendera g menentukan untuk mencari pola lebih dari sekaliPerlu dicatat bahwa pada akhir string regexp cocok dengan urutan digit tanpa spasi tambahan, dalam hal ini titik cocok dengan digit terakhir. Coba '123'.match (/ (\ d +) ./) untuk memverifikasi.
(Tetap) salah satu potongan javascript paling verbose yang pernah ...
(Penugasan ke string s tidak dihitung)
sumber
s.replace(/\d+./g,x=>String.fromCharCode(parseInt(x,2)))
56s.replace(/\d+./g,x=>String.fromCharCode(eval("0b"+x)))
55/\d+./g,x=>
fungsinya?eval('0b'+x)
ke'0b'+x-0
untuk menyimpan 4 byte.Bash + utilitas linux umum, 25 byte
penjelasan dc
m
untuk:m
makro jika tumpukan tidak kosongm
mendaftarKarena kita mendorong seluruh string biner ke stack terlebih dahulu, ketika kita memunculkan setiap nilai, kita berakhir dengan string yang dibalik. Jadi kami menggunakan
rev
utilitas untuk memperbaikinya.Contoh penggunaan:
sumber
PowerShell, 49
EDIT: Tidak melihat jawaban PowerShell lainnya. Tetapi pada dasarnya hanya ada satu cara untuk menyelesaikan ini.
sumber
C -
574338/31Versi 38 Byte:
Atau hanya 31 byte jika s adalah pointer:
Saya tidak berpikir ini persis bagaimana untuk dan sementara loop seharusnya digunakan ... tetapi berfungsi.
sumber
Pyth , 12
Perhatikan bahwa s bukan variabel hukum dalam Pyth, jadi saya menggunakan Z sebagai gantinya.
Penjelasan:
Contoh:
sumber
id2
di tempatv+"0b"d
? Bagaimanapun, ini tidak dapat dibaca dan keren.kode mesin x86 pada DOS - 22 byte
Karena tidak ada variabel string nyata dalam kode mesin (dan khususnya, tidak ada variabel bernama "
s
"), saya memilih stdin sebagai input.Input NASM:
sumber
Powershell (
5249)Simpul sederhana di atas string biner dalam $ s. Namun harus memasukkan [konversi] membunuh skor saya.
EDIT: Hanya ada satu cara untuk melakukan ini di Powershell, wowie. Joey dan saya sama-sama mendapat jawaban yang sama dengan bekerja secara mandiri!
Memasukkan:
Keluaran:
sumber
Mathematica, 52 byte
Ah, nama fungsi Mathatica yang indah
sumber
Perl
3332Edit: Solusi yang diperbarui, 32.
Solusi sebelumnya (33):
atau
Uji:
sumber
J (23)
Uji:
Penjelasan:
sumber
Golfscript - 21
Anda bisa mengujinya di sini .
sumber
Kerang Python
4440 karakterTerima kasih atas bantuan Griffin .
sumber
APL (15)
Uji:
Penjelasan:
⍎s
: mengevaluasis
, mengubahnya menjadi array bilangan bulat. Array ditulis sebagai angka yang dipisahkan oleh spasi, jadi ini terbagis
.{
...}¨
: untuk setiap elemen:⍕⍵
: ubah nomor kembali menjadi string⍎¨
: mengevaluasi setiap digit individu, memberikan bitstring2⊥
: base-2 decode, memberikan angka⎕UCS
: dapatkan karakter untuk setiap nomorsumber
PHP (61)
sumber
foreach(str_split($s,8)as$v)echo chr(bindec($v));
str_split($s,8)
tidak akan berfungsi.foreach(explode(' ',$s)as$v)echo chr(bindec($v));
akan valid tetapi saya tidak berencana untuk mengedit salah satu jawaban PPGC pertama saya yang jelas tidak benar-benar golf. Bagaimanapun, terima kasih!Bacchus , 25 byte
Penjelasan:
S,' 'j
pisahkan String S dengan ruang kosong dan mengubahnya menjadi sebuah blok (semacam array).:A=
dapatkan Blok sebelumnya dan asumsikan ke variabel A.(),A¨
untuk Setiap elemen dalam AÖ,2,10b
Baca elemen saat ini (diwakili olehÖ
) di basis 2 dan ubah menjadi basis 10.:c
dapatkan nilai sebelumnya dan cetak sebagai charsumber
GolfScript 23
Tes online di sini .
sumber
C - 63
karena C tidak memiliki basis 2 converter di perpustakaan standar: tes di sini
edit: ada, aku terlalu bodoh untuk mengetahuinya
sumber
Jalankan Panjang Encoded Brainfuck, 49 byte
Karena tidak ada variabel di Brainfuck, saya hanya menggunakan input dan output standar saja.
Kode
32+
harus ditafsirkan sebagai 32+
detik oleh penerjemah. Ganti saja secara manual jika juru bahasa Anda tidak mendukung RLE.Versi yang diperluas (non-RLE): (91 byte)
Kode mengasumsikan bahwa EOF dikodekan sebagai 0.
Penjelasan
Tata letak berikut digunakan:
Di mana
x
byte ASCII yang akan dicetak,a
adalah karakter dari input standar danflag
1 jikaa
adalah spasi.sumber
Java 8: 60 byte
Menggunakan lambdas di Java 8 (75 byte):
Dan jika Anda mengizinkan impor statis (yang sebagian digunakan di sini) itu adalah (61 byte):
Versi kecil yang lebih pendek menggunakan for loop (60 bytes):
sumber
Clojure 63 (atau 57)
Implan all-Clojure:
Dengan Java interop:
Sesi REPL:
sumber
QBasic, 103
Apa? Kami tidak memiliki fungsi biner hingga desimal di sini. Lakukan sendiri!
Saya menghitung baris baru (yang saya pikir perlu untuk mendapatkan if-then-else tanpa
END IF
) sebagai satu byte, per posting meta ini . Saya tidak tahu apakah QB64 di Windows akan menerima file kode seperti itu atau tidak. Mungkin tidak masalah.sumber
NodeJS - 62
PHP - 75
sumber
JavaScript 111
Ini melakukan konversi angka tanpa parseInt atau eval. Membaca string ke belakang dan menghitung bit-bit itu mengatur bit x jika itu satu. Ketika spasi ditemukan angka dikonversi ke char dan angka 0 baru dimulai untuk pengaturan bit.
sumber
Groovy 64
sumber
CJam, 11 byte
s bukan nama variabel hukum di CJam, jadi saya memilih N sebagai gantinya.
Cobalah online.
Contoh dijalankan
Bagaimana itu bekerja
sumber
Haskell - 48 (+13 impor (?))
Ini usaha golf pertama saya di Haskell.
Anda perlu mengimpor Data.Char
penggunaan (dalam ghci):
Penjelasan:
sumber
GNU Sed, 19 byte
Terinspirasi oleh jawaban Trauma Digital yang sangat baik .
Golf
Uji
sumber
Pyth, 7 byte (tidak bersaing)
Mengambil input sebagai string.
Cobalah!
sumber
05AB1E , 4 byte (tidak bersaing)
Disimpan 3 byte berkat @Emigna
Cobalah online!
sumber
#CçJ
juga berfungsi. Meskipun dalam kedua ini dan versi Anda, Anda perluð¡
bukannya#
jika input hanya 1 char.