Saya perhatikan bahwa odometer mobil saya berada di 101101 ketika saya mulai bekerja hari ini. Yang merupakan angka keren karena biner (dan palindrom, tapi itu tidak penting). Sekarang, saya ingin tahu kapan waktu berikutnya saya akan membaca biner odometer. Saya tidak dapat membaca odometer saat mengemudi, karena itu akan berbahaya, jadi harus berupa biner ketika saya mulai bekerja atau pulang.
Ada lalu lintas yang sangat buruk dalam perjalanan ke dan dari kantor saya, jadi saya harus mengambil rute yang berbeda setiap hari.
Untuk keperluan tantangan ini, satu hari adalah perjalanan pulang pergi dan dimulai dengan perjalanan saya untuk bekerja.
Anda harus mengambil pembacaan awal odometer dan urutan 10 elemen yang mewakili jumlah mil setiap jalan. Urutan ini harus diulang sampai Anda mendapatkan pembacaan odometer biner. Anda kemudian harus menampilkan jumlah hari yang diperlukan sampai kita mendapatkan pembacaan biner.
Baik jarak tempuh untuk rute dan pembacaan odometer akan menjadi bilangan bulat positif. Hitungan hari akan menjadi x
atau x.5
, jadi output Anda dari hitungan hari perlu mendukung floating point selama setengah hari. Jika hitungan hari adalah bilangan bulat, Anda tidak perlu menampilkan .0
. Odometer pada akhirnya akan selalu mencapai status biner.
Segala bentuk input / output dapat diterima dan celah standar tidak diizinkan.
Kasus uji:
101101, [27, 27, 27, 27, 27, 27, 27, 27, 27, 27] == 165.0
1, [13, 25, 3, 4, 10, 8, 92, 3, 3, 100] == 22.5
2, [2, 3, 1, 2, 7, 6, 10, 92, 3, 7] == 2.0
Jawaban:
Jelly,
221716 byteCobalah online!
Bagaimana itu bekerja
sumber
Javascript,
6863616052 byte5 byte off terima kasih @ETHproductions .
2311 !! mati byte terima kasih @NotthatCharles .Tes di sini.
sumber
(i+=a[++m%10])
bekerjar
ataum
apa pun (mereka harus default ke nol, yaitu., 0)m=0
inisialisasi dan selisih setelah modulo (m++%10
) ... di mana Anda hanya bisa menjatuhkanr
seluruhnya. Seluruh metode kemudian di 50MATL ,
292625 byteFormat input adalah
EDIT (10 Juni 2016): Tautan berikut menggantikan
v
dengan&v
( 26 byte ) untuk beradaptasi dengan perubahan dalam bahasaCobalah online!
sumber
Lua, 108 Bytes
Pertama kali menggunakan pengulangan..sampai loop dalam codegolf!
Tidak disatukan
Setelah loop pertama,
o
akan memiliki bagian desimal karenatonumber
, saya harus menghapusnya ... Dan menambahkannya untuk kasus pertama, itu sebabnya saya menggabungkannya dengan a"."
.sumber
Java, 112
milbytesumber
05AB1E , 31 byte
Kode:
Entah bagaimana, kode tidak berhenti berjalan (dan saya tidak tahu mengapa). Rupanya saya lupa bahwa ada tiga loop yang terjadi bukannya 2. Jadi itu masih akan masuk ke loop yang tak terbatas ...Cobalah online!
sumber
PowerShell,
8473675957 byteMengambil input
$a
dan$b
, berharap$b
menjadi array jarak tempuh yang eksplisit (mis.,.\binary-car.ps1 1 @(13,25,3,4,10,8,92,3,3,100)
). Kami kemudian memasukkando
/until
loop. Setiap iterasi, kita bertambah$a
dengan jarak tempuh di$b
posisi$i++ % 10
sehingga kita terus menerus melewati array. Ini akan mulai dari nol karena untuk loop pertama$i
tidak diinisialisasi, dan mengevaluasi$null
, yang sama dengan0
dalam konteks ini, dan hanya setelah evaluasi itulah yang++
terjadi.Kemudian,
until
pernyataan memeriksa apakah nomor kita hanya0
dan1
dengan pertama--replace
tama1
memasukkan semua dengan tidak ada, melemparkannya kembali sebagai bilangan bulat dengan+
, dan kemudian mengambil Boolean-bukan dengan!
. Jika itu bernilai true, kami akan menyelesaikan loop, output$i / 2
, dan mengakhiri program.Penjelasan untuk kondisi loop - Di PowerShell, bilangan bulat bukan nol adalah
$true
apa pun, dan string apa pun yang tidak kosong juga$true
. Misalnya,231145
(integer) akan berubah menjadi"2345"
(string) setelah-replace
, yang akan integer-cast sebagai2345
(integer), yang!
mana adalah$false
. Namun,101101
(bilangan bulat) akan berubah menjadi"00"
(string) yang akan dilemparkan sebagai0
(bilangan bulat), yang!
mana adalah$true
. Jika kita tidak memiliki+
,"00"
kemauan!
untuk$false
karena itu adalah string yang tidak kosong.Sunting - Disimpan 11 byte dengan menukar kesetaraan-pada-panjang untuk ketat-nol
Sunting 2 - Menyimpan 6 byte lainnya dengan menyadari bahwa
$b.count
akan selalu10
...Sunting 3 - Menyimpan 8 byte lainnya dengan menggunakan do / sampai alih-alih untuk
Edit 4 - Jika objek
-replace
d adalah nilai integer, tidak perlu tanda kutip, menyimpan 2 byte lagisumber
Ruby, 58
Tidak ada yang spesial. Hanya satu siklus ...
sumber
->s,a,i=0{a.cycle{|e|i+=0.5;break i if/[2-9]/!~'%d'%s+=e}}[1, [13, 25, 3, 4, 10, 8, 92, 3, 3, 100]]
atau ...f=->s,a,i=0{a.cycle{|e|i+=0.5;break i if/[2-9]/!~'%d'%s+=e}}; f[1, [13, 25, 3, 4, 10, 8, 92, 3, 3, 100]]
Mathematica, 92 byte
Ya. Input adalah odometer dan daftar waktu. Output adalah hitungan hari.
sumber
PHP,
10298Versi Tidak Serigala
Pemberitahuan PHP dapat dihapus dengan biaya tambahan 4 karakter
$d = 0;
dalam versi golf.Contoh
sumber
if
, menghapus 0 dari0.5
, dan menghapus|
antara 1 dan 0 di regex Anda menghemat 4 byte.function f($i,$s){while(1)foreach($s as$v){$d+=.5;$i+=$v;if(preg_match('/^[01]+$/',$i))return$d;}}
Pyth,
363230 byteCoba di sini!
Penjelasan
sumber
C Sharp, 180.
Tuan C # yang panjang.
sumber