pengantar
Jonny ingin bermain Frogger. Namun, dia tidak terlalu baik. Faktanya, dia hanya akan mencoba untuk bergerak maju, dan hanya setelah platform telah bergerak.
Cari tahu apakah katak Jonny berhasil mencapai ujung jalan atau jika mati di jalan.
Tantangan
Program akan menerima sebagai masukan kisi Frogger yang disusun oleh 0
s dan 1
s, dengan format berikut:
- Kotak akan memiliki lebar dan panjang acak, dan setidaknya 3x3
1
mewakili platform0
mewakili airF
mewakili posisi awal katak- Setiap baris pertama dan terakhir dari grid akan disusun oleh hanya
1
s, dan tidak akan bergerak, dan katakF
akan ditempatkan secara acak di baris terakhir - Setiap lapisan menengah akan selalu bergerak, dan akan memiliki
<
atau>
di akhir setiap baris yang menunjukkan apakah itu bergerak ke kiri atau ke kanan
Mengganti simbol-simbol ini dengan simbol Anda diperbolehkan, asalkan semuanya berbeda dan Anda menentukan penggantian dalam jawaban Anda.
Input dapat dalam format apa pun yang kompatibel (string dengan jeda baris, larik string, larik karakter, ...).
Aturan Tantangan
- Setiap belokan, semua platform akan bergerak satu kotak, berdasarkan arah yang ditunjukkan oleh tanda
<
atau>
- Platform muncul kembali di sisi lain grid jika terdesak "layar"
- Jika katak berada di platform bergerak, ia akan bergerak bersamanya
- Setelah itu, katak akan melompat satu kotak ke arah baris atas. Katak akan bergerak setiap belokan.
- Katak mati jika melompat di air (
0
) atau menyentuh sisi grid bersama dengan platform yang bergerak
Program Anda harus menampilkan nilai kebenaran jika katak bertahan dan nilai palsu sebaliknya.
Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang. Celah standar berlaku.
Contohnya
Contoh 1
Memasukkan
11111
00111>
00101<
1F111
Keluaran
1
Eksekusi
Putar 1:
11111
10011
01010
1F111
11111
10011
0F010
11111
Putar 2:
11111
11001
F0100
11111
11111
F1001
10100
11111
Belok 3:
11111
1F100
01001
11111
1F111
11100
01001
11111
Contoh 2
Memasukkan
11111
00100<
00100<
1F111
Keluaran
0
Eksekusi
Putar 1:
11111
01000
01000
1F111
11111
01000
0F000
11111
Putar 2:
11111
10000
F0000
11111
11111
F0000
10000
11111
Belok 3:
11111
00001
00001
11111
sumber
<
atau>
jadi kita dapat mengambil array persegi panjang sebagai input? Ngomong-ngomong, tantangan bagus!<
atau>
di akhir.0
di depannya, atau akankah ia menunggu yang berikutnya1
? Jika itu bisa menunggu, apakah akan maju pada setiap1
, atau dapatkah itu menunggu dengan cerdas? Yaitu dengan test case11111 00001< 00011< 11F11
, apakah itu palsu karena melompat di air ( pastebin langkah ); apakah itu palsu karena ia bergerak keluar dari bingkai ( pastebin langkah ); atau akankah itu benar karena ia menunggu dengan cerdas untuk platform kedua sebelum melompat maju ( pastebin langkah )?0
.Jawaban:
Python 2 ,
168165152145137129 byteCobalah online!
Format input adalah daftar string; karakter yang memiliki makna seperti yang diberikan dalam pernyataan masalah.
Penjelasan:
i
adalah nomor belokan (dimulai dengan Belok 1);x
adalah posisi katak pada awal belokan itu.Baris yang akan dilangkahi oleh sang katak adalah string
l
(perhatikan bahwa melalui slicing, ini berada di urutan bawah ke atas).d=('<'in l)%-2|1
menghasilkan-1
atau1
tergantung pada arah baris bergerak.Karena ini adalah
i
tikungan ke - th, baris itu akan bergeser dari posisi aslinya olehi
byte; jadi karakter yang hendak dilompati si katak adalah dil[(x-d*i)%L]
manaL
lebar baris, jadi kita ingin agar karakter itu sama dengan'1'
; yaitu>'0'
,.Selain itu, kami ingin memeriksa bahwa katak tidak akan bergeser dari tepi pada awal belokan berikutnya ; itu adalah fungsi ekspresi
-1<x+d<L
.Kondisi ini dirantai (karena
'0'>-1
selaluTrue
); dan jika suatu saat ekspresi yang dihasilkan salah,k
akan menjadi (dan kemudian tinggal)0
.Bagaimanapun, kami memperbarui posisi katak
x+=d
dan menabrak nomor baris; lalu busa, bilas, ulangi.sumber
Python 2 ,
246245244242 byte-3 byte terima kasih kepada Tn. Xcoder
-1 byte terima kasih kepada Jonathan Frech
Cobalah online!
Penjelasan
d
adalah arah setiap lapisan akan bergerakq
adalah karakter yang akan dililitkan[q,' '][q<'L']
akan menjatuhkan katak di layarsum([r[d+1:d-1],[[q,' '][q<'L']]][::d-~d],[])+r[-1:]
akan menghapus karakter terakhir (arah), kemudian menghapus karakter pertama dan menambahkannya atau menghapus kedua terakhir dan menambahkannya (berdasarkand
), dan menambahkan arah kembali, secara efektif memindahkan seluruh baris ke kiri / kanan.if'F'in r:j=r.index('F');r[j]='L';m[i-1][j]=min('F',m[i-1][j])
akan membuat katak melompat majumin('F',m[i-1][j])
akan membuat katak jatuh di airmin
dan<
) mengikuti urutan' ' < '0' < '1' < 'F' < 'L'
Input akan menjadi daftar daftar karakter:
' '
- air'F'
- katak'L'
- plataform'0'
- pindahkan layer ke kiri'1'
- pindahkan layer ke kanansumber
if i<len(m)-1
mungkin sajaif~-len(m)>i
.Java 8,
293277 byteMenggunakan karakter default seperti yang ditentukan dalam deskripsi tantangan (
01F<>
).Cobalah online.
Penjelasan:
sumber