Tantangan
Dengan dua string dalam format I / O default apa pun, lakukan hal berikut:
CATATAN: Tantangan akan merujuk ke string pertama sebagai "data" dan yang kedua disebut sebagai "program".
- Ubah program menjadi string tanpa batas yang hanya merupakan program yang diulang tanpa batas (misalnya
10
->1010101010...
). Tantangan akan menyebut ini sebagai "program tak terbatas" Sementara data tidak kosong, lakukan hal berikut sambil mengulangi program tak terbatas:
Sebuah. Jika perintah saat ini adalah "0", hapus bit paling kiri dalam data. Jika data kosong, "0" tidak melakukan apa pun.
b. Jika perintah saat ini adalah "1", tambahkan karakter berikutnya dalam program ke data jika bit paling kiri dalam data adalah satu.
c. Jika data tidak kosong sekarang, output data.
Uji Kasus
Data adalah sisi kiri input dan program adalah sisi kanan.
100, 0 --> 00, 0
1111, 1 --> 11111, 111111, 1111111, ...
10, 011 --> 0, 0, 0
1110, 011 --> 110, 1101, 11010, 1010...
Catatan
- Data dan program hanya terdiri dari 0s dan 1s
- Untuk data / program yang tidak berhenti, program Anda tidak perlu berhenti.
- Data dan program tidak akan kosong dalam input.
- Anda mungkin memiliki beberapa trailing dan memimpin baris baru
- Celah Standar dilarang
- Anda dapat menggunakan format I / O yang nyaman
Seperti biasa dengan kode-golf , kode terpendek menang !
code-golf
interpreter
MilkyWay90
sumber
sumber
100
menuju ke10
cmd0
, yang definisi adalah "hapus bit paling kiri dalam data." tidak akan sedikit paling kiri dari100
menjadi1
?Jawaban:
Haskell,
777162 byteCobalah online!
Edit: -9 bytes berkat @xnor.
sumber
f:[e,f++take d q]!!p#q
.C # (Visual C # Interactive Compiler) , 82 byte
Cobalah online!
sumber
0
, dan 49 adalah nilai ASCII dari1
List
danSkip
, atau sesuatu seperti ituJ , 65 byte
Cobalah online!
Saya bisa bermain golf ini lebih jauh nanti. Perhatikan bahwa
5
pada akhirnya akan menjadi tak terbatas_
dalam program yang sebenarnya, tetapi saya telah meninggalkannya di sana untuk membuat menjalankan contoh-contoh yang tidak berhenti menjadi lebih mudah.sumber
Python 3 , 74 byte
Cobalah online!
Argumen::
d
data ,:p
program.sumber
05AB1E ,
2421 byteMengambil program sebagai input pertama dan data sebagai input kedua. Input.
Cobalah online.
Penjelasan:
sumber
Ruby ,
6259 byteCobalah online!
Bagaimana
c
dan datad
, panggil merekaa
danb
. Pasanga
kembali di akhirc
.b
di awald
jikaa==1
. Ini dapat disingkat menjadi[b]*a
c
di akhird
ifa==1 and b==1
. Ini dapat disingkat menjadic[0,a*b]
.sumber
Python 2 ,
9682 byteCobalah online!
Mencuri sedikit dari jawaban Emodiment of Ignorance ...
Generator yang menggunakan daftar 1 dan 0 untuk input / output.
sumber
Jelly , 40 byte
Cobalah online!
Saya berasumsi bahwa mengikuti baris baru tidak masalah. Saya juga pergi dengan daftar dua daftar nol dan satu sebagai input, dan output ke stdout.
sumber
Python 1 , 75 byte
Cobalah online!
sumber
[]
bukan baris baru misalnya, data[1,0,0]
, program[0]
.C ++ (gcc) , 178 byte
Cobalah online!
sumber
C ++ (gcc) ,
294289272 byte-22 byte berkat @ceilingcat
Cobalah online!
Algoritma yang cukup mudah. Menyalin data ke dalam antrian, dan berulang kali mengulangi program. Pada "0", itu menghilangkan elemen pertama dalam antrian ("bit" pertama). Pada angka 1, ia menambahkan "bit" berikutnya dari program ke data jika "bit" pertama dari data adalah 1. Kemudian ia menggulung data, mencetaknya "bit" dengan "bit", dan akhirnya mencetak ruang untuk memisahkan entri data berturut-turut.
sumber
c[1]
! Diperbarui.