Deskripsi Masalah
Bayangkan Anda seekor kura-kura di atas kisi-kisi. Anda diberi dua angka f dan b , dan Anda menghadap ke timur. Anda melakukan pawai melintasi kisi-kisi, menghitung setiap sel yang Anda temui, sesuai dengan aturan berikut:
- Secara default, Anda menulis hitungan ke sel tempat Anda berada, lalu berjalan maju.
- Jika hitung dapat dibagi oleh f , Anda menulis
F
ke sel tempat Anda berada, lalu belok kanan, lalu berjalan maju. - Jika hitungannya dapat dibagi dengan b , Anda menulis
B
ke sel tempat Anda berada, lalu belok kiri, lalu berjalan maju. - Jika hitung dapat dibagi oleh f dan b , Anda menulis
FB
ke sel tempat Anda berada, lalu berjalan maju. - Jika Anda mencapai kotak Anda sudah pernah ke, Anda berhenti.
Misalnya, mengikuti aturan ini menggunakan f = 3 dan b = 5 akan menghasilkan pola seperti ini:
F 28 29 FB 1 2 F
26 4
F B B F
23 7
22 8
F B B F
19 11
F 17 16 FB 14 13 F
Tantangan
Tulis program atau fungsi yang menerima dua angka sebagai input, yang sesuai dengan f dan b , dan menghasilkan sebagai pola untuk angka-angka ini diberikan oleh aturan di atas.
Persyaratan pemformatan:
- Setiap sel memiliki lebar dua karakter
- Konten sel disejajarkan dengan benar dalam dua karakter ini
- Sel di baris yang sama dibatasi oleh spasi
- Kolom sel pertama harus berisi sel yang tidak kosong
- Semua baris harus mengandung sel yang tidak kosong
- Trailing whitespace tidak diperlukan, tetapi diizinkan
- Namun, total lebar setiap baris tidak boleh melebihi 3 kali jumlah kolom yang tidak kosong
Kode Anda harus berfungsi untuk kasus uji yang disediakan.
Celah standar tidak diijinkan.
Ini adalah kode golf; jawaban terpendek dalam byte menang.
Uji kasus
(f = 3, b = 5 kasus diulang di sini sebagai kenyamanan sopan).
f=3, b=5 ->
F 28 29 FB 1 2 F
26 4
F B B F
23 7
22 8
F B B F
19 11
F 17 16 FB 14 13 F
f=4, b=10 ->
F 25 26 27 F
23 29
22 1 2 3 F
21 5
FB 6
19 7
18 B 9 F
17 11
F 15 14 13 F
f=3, b=11 ->
F 16 17 F
14 19
13 1 2 F
F B 4
10 5
F 8 7 F
f=5, b=9 ->
F 41 42 43 44 1 2 3 4 F
39 6
38 7
37 8
F B B F
34 11
33 12
32 13
31 14
F 29 28 B B 17 16 F
26 19
F 24 23 22 21 F
f=5, b=13 ->
F 31 32 33 34 F
29 36
28 1 2 3 4 F
27 6
F B 7
24 8
23 9
22 B 12 11 F
21 14
F 19 18 17 16 F
Jawaban:
JavaScript (ES6), 230
240Kurang golf
Uji
sumber
Python 2,
379338326 byteMengambil input sebagai dua angka, dipisahkan oleh koma. Misalnya.
4,5
atau(4,5)
Versi yang berfungsi jika jalur lebih panjang dari 99,
384343330 byteMenunjukkan 2 digit signifikan.
Contoh:
input=(4,16)
input=(6,7)
(versi memotong)@ Edit: Terima kasih kepada Jonathan Allan, Copper, dan shooqie karena telah menyelamatkan saya banyak byte.
sumber
while((x,y)not in p.keys()):
kewhile(x,y)not in p:
danfor x,y in p.keys():
kefor x,y in p
. Anda dapat mengubahl,r=i%b==0,i%f==0
kel,r=i%b<1,i%f<1
dand=(d+[0,1][r]-[0,1][l])%4
ked=(d+r-l)%4
. Anda bisa berubahs=[[`i`,'F'][r],' F'[r]+'B'][l].rjust(2);p[(x,y)]=s
menjadip[(x,y)]=[[`i`,'F'][r],' F'[r]+'B'][l].rjust(2)
. Mungkin ada lebih banyakh*[' ']for x in range
alih - alih[' ']*h for x in range
. Juga,x+=[-1,1][d==1]
bisa diganti denganx+=(d==1)*2-1
, dany+=[1,-1][d==2]
bisa diganti dengany+=(d!=2)*2-1
. Juga, apakahf,b=inputtt
salah ketik?p[(x,y)]
=>p[x,y]
(tidak yakin apakah itu bekerja dengan Python 2)Excel VBA,
347421 byteVersi baru, untuk menangani persyaratan ruang putih. Tidak memiliki ini dalam versi pertama saya adalah pengawasan di pihak saya, tetapi ini mengambil korban dalam bytecount ... Sekarang memotong dan menempelkan rentang yang digunakan ke sel
A1
.Inilah versi lama yang tidak memindahkan hasil akhirnya
A1
Mulai dari 70, 70 (atau BR70 di Excel) dan berjalan di sekitarnya. Fungsi dipanggil dengan
f
danb
sebagai parameter:Call t(4, 16)
@ Neil baru saja menyelamatkan saya banyak byte, terima kasih!
sumber
q=q-1
denganq=q+3
danSelect Case q
denganSelect Case q Mod 4
maka Anda dapat menyingkirkan dua pernyataan sebelumnya.However, the total width of each row must not exceed 3 times the number of non-empty columns
Saya kira ini ditambahkan untuk menghindari hanya memasang grid besar dan memulai agak jauh dari perbatasanExcel VBA,
284278277261259255254253251 BytesSub
rutin yang mengambil input sebagai nilai-nilai,F
,B
dan output ke sel-sel padaSheets(1)
Object (yang terbatas padaSheets(1)
objek untuk menyimpan 2 Bytes)Pemakaian:
sumber
C, 349 Bytes
Kompilasi dengan gcc (dengan banyak peringatan)
Versi yang sedikit lebih menjorok:
Ini adalah versi 364 byte yang menangani angka lebih besar dari 100
sumber
Perl, 275 byte
Lekukan disediakan untuk keterbacaan dan bukan bagian dari kode.
Penjelasan:
Kode ini bekerja dengan melacak hash dari semua tempat penyu telah, dan nilai yang sesuai, disimpan di
%m
. Misalnya: di3 5
,$m{0,2}
berisi2
, dan$m{1,-3}
=26
. Ini berlanjut dengan cara ini sampai mencapai tempat yang telah ditentukan. Selain itu, ia melacak batas arus jalur kura-kura, menggunakan$a,$b,$c,$d
maksimum dan minimum.Setelah mencapai tempat yang sudah ada, itu mencetak jalan menggunakan batas, semuanya diisi dengan spasi.
Tidak ada batasan untuk ukuran jalan, atau ukuran angka.
sumber
PHP , 292 byte
Cobalah online!
Lekukan untuk kejelasan, tidak dihitung.
Mengikuti banyak algoritma yang sama dengan jawaban Perl. Lacak di mana kura-kura berada dalam larik 2D
$a
,$u, $d, $l, $r
lacak tempat penyu menghadap, dan lacak batas untuk dicetak.str_pad
memungkinkan kami untuk memastikan bahwa setiap entri tepat 3 ruang lebar untuk format cetak.Untuk beberapa alasan saya tidak dapat mengerti, PHP tidak keberatan saya tidak menginisialisasi setengah variabel menjadi 0, tetapi mengacaukan pemformatan jika saya tidak menginisialisasi yang lain, meskipun biasanya memperlakukan variabel yang tidak diinisialisasi sebagai 0 ketika mereka pertama kali bekas. Karena itu
$x=$y=$u=$l=0
sedikit.sumber
Python 2 ,
267262258249245243 byteCobalah online!
sumber