Ambil string, s
berisi karakter ASCII yang dapat dicetak sebagai input, dan output "jumlah binernya". Perlu penjelasan?
Bagaimana Anda mendapatkan jumlah biner?
Kami akan menggunakan string A4
sebagai contoh dalam penjelasan berikut.
Ubah karakter menjadi biner, perlakukan setiap huruf sebagai karakter ASCII 7-bit
A -> ASCII 65 -> 1000001 4 -> ASCII 52 -> 0110100
Menggabungkan nomor biner menjadi angka biner baru
A4 -> 1000001 & 0110100 -> 10000010110100
Membagi nomor biner baru menjadi potongan-potongan, di mana tidak ada yang
1
bisa0
ke kiri Anda tidak boleh membagi secara berurutan1
.10000010110100 -> 100000, 10, 110, 100
Ubah angka biner ini menjadi desimal
100000, 10, 110, 100 -> 32, 2, 6, 4
Ambil jumlah dari angka-angka ini:
32 + 2 + 6 + 4 = 44
Jadi, output untuk string A4
seharusnya 44
.
Kasus uji:
a
49
A4
44
codegolf
570
Hello, World!
795
code-golf
string
base-conversion
binary
Stewie Griffin
sumber
sumber
8372
sebenarnya.Jawaban:
Python 2 ,
868176 byte-5 byte terima kasih Adnan
-5 byte terima kasih xnor
Cobalah online!
for c in input():s=s*128+ord(c)
untuk melakukan konversi ASCII secara numerik, di mana*128
digunakan untuk meninggalkan shifts
7 kali (langkah 1 dan 2)eval(('0'+new_bin).replace('01','0+0b1'))
untuk membagi dan menjumlahkan (langkah 3, 4 dan 5)sumber
eval
! Melakukan konversi ASCII secara numerik menghemat beberapa byte.Jelly , 13 byte
Cobalah online!
Bagaimana itu bekerja
sumber
MATL , 14 byte
Cobalah online!
Penjelasan
Pertimbangkan input
'A4'
sebagai contoh.sumber
05AB1E , 18 byte
Kode:
Penjelasan:
Menggunakan penyandian 05AB1E . Cobalah online!
sumber
05AB1E , 14 byte
Port jawaban Jelly saya , menggunakan offset 128 dari jawaban Adabab's 05ab1e (bukan 256 dalam jawaban Jelly yang saya tulis).
Cobalah online!
Bagaimana?
sumber
JavaScript (ES6),
9792 byteSunting: Disimpan 5 byte dengan bantuan dari @ ConorO'Brien.
sumber
s=>eval([...s].map(e=>(e.charCodeAt()+128).toString(2).slice(1)).join``.replace(/1+0*/g,'+0b$&'))
Anda dapat menggunakan metode ganti saya untuk menghemat satu byte, saya kiraJapt ,
1812 byteMengambil input sebagai string tunggal.
Saya juga mencoba penambahan 128 atau 256 yang digunakan oleh jawaban lain, tetapi 0-padding lebih pendek untuk digunakan.
Mencukur 6 byte total berkat produk ETH dan Oliver .
Cobalah di sini.
sumber
òÈ<YÃ
bisaò<
(dengan spasi tambahan), danËn2Ãx
bisaxn2
. Anda juga dapat menggunakanT
di tempat0
untuk menghemat koma. (Juga, silakan bergabung dengan kami di chatroom Japt jika Anda memiliki pertanyaan atau ingin membantu bermain golf :-))T
triknya, tidak tahu Anda bisa (ab) menggunakan variabel untuk itu, itu sangat berguna. Fungsi-otomatisnyaxn2
terlihat agak aneh ketika dikompilasi,x("n", 2)
jadi saya pikir ini masih akan memakan waktu sebelum saya sepenuhnya memahami logika di belakangnya. Dengan bantuan Anda, solusi Japt sekarang diikat untuk tempat pertama dengan jawaban Jelly .n2
:Í
. Itu belum mengenai TIO, tetapi Anda dapat menggunakannya di sini: ethproductions.github.io/japt/?v=1.4.5&code=Y1+k+VQ3w/…Jelly ,
1615 byte-1 byte berkat Dennis (tidak perlu diratakan oleh 1 ketika rata penuh baik-baik saja - ganti
;/
denganF
)Cobalah online!
Bagaimana?
sumber
;/
dapat diganti denganF
.PHP, 116 Bytes
Versi Online
PHP, 117 Bytes
Cobalah online!
PHP, 120 Bytes
Cobalah online!
atau
sumber
Pyth , 21 byte
Itu terlalu panjang ...
Suite uji.
sumber
[F #],
249245 byteCobalah online!
Catatan: versi pada tio.run memiliki "Sistem terbuka" di header, saya telah menambahkan hitungannya ke kode di atas. Saya tidak yakin apa aturan impornya.
Tidak disatukan
sumber
open System
sama dengan C # susing System;
maka ya Anda harus memasukkannya dalam hitungan. Jika Anda dapat melakukannya di F #, Anda sepenuhnya dapat memenuhi syarat untuk apa punSystem
. Misalnya, dalam C #System.Console...
alih-alihusing System;Console...
Perl 6 , 62 byte
sumber
.ords
sebagai ganti.comb».ord
. awalan[~]
sering dapat digunakan sebagai gantinya.join
.comb
ada yang melakukanm:g/…
hal itu./11*0*/
dapat disingkat menjadi/1+0*/
. Saya datang dengan{sum map {:2($_)},comb /1+0*/,[~] .ords».fmt('%07b')}
J , 34 byte
Cobalah online!
Penjelasan
sumber
Mathematica 193 byte
sumber
f=FromDigits;l=Flatten;
di awal, dan kemudian mengganti semua instance dari kedua fungsi tersebut denganf
danl
.J , 40 byte
pemakaian:
pengembalian 44
sumber
Clojure, 150 byte
Yah saya berharap konversi dari ASCII ke byte lebih pendek dari ini. Badan loop aktual cukup pendek, digunakan
r
untuk mengakumulasi hasil saat ini danR
untuk mengakumulasi hasil total. Jika bit sebelumnyap
adalah0
dan bit saatc
ini1
maka kami membagi sepotong baru dan menumpukR
, jika tidak, kami memperbaruir
dan tetapR
seperti itu.sumber
Python 123 byte
Diperbarui, terima kasih kepada Martin Ender.
sumber
lambda w:
akan cukup untuk membuat jawaban Anda valid.lambda w:
.f=
, karena kami mengizinkan fungsi yang tidak disebutkan namanya (kecuali jika Anda merujuk nama fungsi untuk panggilan rekursif).K (oK) , 31 byte
Larutan:
Cobalah online!
Contoh:
Penjelasan:
Konversikan ke nilai ASCII, konversikan ke biner 7-bit, ratakan, temukan tempat berbeda, dan terhadap daftar asli untuk menemukan di mana
1
s berbeda. Potong pada indeks ini, konversikan kembali ke desimal dan jumlahkan:Bonus
Mengelola versi 31 byte di K4 juga, tetapi karena tidak ada TIO untuk itu saya memposting solusi OK saya.
sumber
APL (Dyalog) , 30 byte
Cobalah online!
Bagaimana?
⎕UCS⍵
- Unicodify2⊥⍣¯1¨
- menyandikan masing-masing dalam biner¯7↑¨
- dan pad ke kiri dengan nol ke 7 tempat∊
- Ratakan1∘+⊆⊢
- Partisi sendiri meningkat satu2⊥¨
- decode masing-masing dari biner+/
- jumlahsumber