Buat program yang menentukan, diberi input jalur, apakah Mario dapat mencapai akhir, dilambangkan dengan E
, dari awal, dilambangkan dengan S
.
Path akan terlihat seperti ini:
S = E
=====
Di jalan, berbagai simbol dan apa yang mereka wakili adalah:
=
: dinding / lantai / langit-langit. Mario tidak bisa berjalan menembus dinding, dan tidak bisa jatuh melewati lantai, atau melompat melewati langit-langit (dia akan mengenai kepalanya)S
: air, kecuali menunjukkan dari mana Mario memulai. Ini akan selalu muncul di kolom paling kiri dari input, di permukaan tanah.E
: air, kecuali menunjukkan di mana Mario ingin mendapatkan. Ini akan selalu muncul di kolom input paling kanan, di permukaan tanah.
Masukan akan memiliki ruang di setiap tempat di mana Mario bisa berjalan.
Mario hanya bisa bergerak maju; dalam contoh ini Mario tidak dapat mencapai tujuan
S
===
===
E
====
dia juga tidak bisa dalam hal ini
E
==
==
#==
==
==
==
S ==
======
Namun, ia dapat mencapai ruang yang dilambangkan dengan #
(yang tidak akan muncul pada input), karena ia dapat melompat hingga empat sel; Mario adalah manusia super. Sebagai contoh lain dari kedewasaannya:
S
=
=
=
=
=
= #
= =
=
=
=
= E
=======
Mario dapat mencapai E
jarak yang sangat jauh, bertahan, dan berjalan dengan tenang ke sana E
. Perhatikan bahwa ia tidak dapat mencapai #
, karena Mario langsung jatuh ke bawah.
Mario dapat melompat sangat tinggi, tetapi tidak terlalu jauh dibandingkan dengan perbandingan.
S E
== ==
= =
Mario mungkin mencoba untuk melompati celah, tetapi ia akan gagal, dan langsung jatuh. Ia tidak dapat mencapai akhir.
Mario dapat mencapai tujuan dalam semua contoh ini:
E
=
=
=
S=
==
=
= E
S= =
== =
= =
=====
S
=
= E
====
Ini adalah kode golf, byte paling sedikit menang!
sumber
#
, karena Mario langsung jatuh ke bawah." Jika saya melihat ini dengan benar, bukankah dia akan jatuh langsung ke atas#
? Juga, apakah lompatan didefinisikan sebagai maksimum 4 spasi dan maksimum 1 spasi?#
. Mengenai pertanyaan kedua: Saya bukan OP tapi saya kira Anda benar. (itulah yang saya asumsikan dalam solusi saya)E
tidak muncul di kolom paling kanan karena permukaan tanah memanjang satu ke kanan dari sisa peta.Mario cannot walk through wall , and cannot fall past a floor, or jump past a ceiling
Jawaban:
Slip ,
382725 byteMembutuhkan input untuk diisi ke persegi panjang sehingga ada ruang di setiap sel yang Mario perlu lintasi (berpotensi dengan garis depan penuh spasi). Mencetak string yang mewakili jalur yang valid (yang mencakup
S
,E
dan semua jalur=
berjalan kecuali yang terakhir) atau tidak sama sekali jika tidak ada jalur yang ada.Uji di sini.
Penjelasan
Slip adalah entri Sp3000 tantangan desain bahasa pencocokan pola 2D kami. Agak seperti perpanjangan 2D regex di mana Anda dapat memberikan instruksi kepada kursor mesin saat diizinkan atau diminta untuk belok kiri atau kanan. Ini juga memiliki fitur yang nyaman di mana Anda dapat mencegah kursor maju, memungkinkan Anda untuk mencocokkan satu posisi dua kali berturut-turut (dengan pola yang berbeda).
Slip tidak memiliki sesuatu yang sebanding dengan lookaround di regex, tetapi karena Anda dapat berpindah posisi apa pun beberapa kali, seseorang hanya dapat menguji kondisinya dan kemudian kembali. Kami menggunakan ini untuk memastikan bahwa kami hanya melompat ketika di tanah dengan pindah ke ubin tanah setelah setiap langkah.
sumber
Java
234 230 221 216 208 207 205179 BytesLihat, saya mengalahkan C dan python? Saya telah mencapai transendensi sejati di antara manusia! Selain lelucon, ini adalah tantangan yang menyenangkan. Fungsi berikut mengambil input sebagai array dari string kolom masing-masing dengan panjang yang sama. Jika ini melanggar aturan, tolong beri tahu saya. Ini menghasilkan 1 yang berarti menjalankan mario yang sukses, dan nilai lain yang menyiratkan menjalankan mario yang gagal.
Berikut ini adalah logika yang lebih lama (yang mirip dengan versi saat ini) dengan contoh penggunaan dan keluaran. Ditambah beberapa komentar yang menjelaskan logikanya
sumber
Python,
260239222215209206 Bytes,coba di ideone (dengan test case)
panggilan seperti:
f([' S=', ' E='])
tambalan catatan:
Sekarang, seperti beberapa solusi lain, anggap input adalah array string kolom, masing-masing dimulai dengan ""
Wrapper untuk formulir input lama:
g=lambda x:f(map("".join,zip(*([" "*x.index("\n")]+x.split("\n")))))
Juga, saya memperbaiki bug di mana Mario bisa melompati blok di atasnya.
versi ungolfed dengan penjelasan:
f
secara berulang menyebut dirinya ke segala arah yang bisa dituju Marioy,x
. Ini kembaliTrue
ketika mencapai"E"nd
, yang kemudian kembali melalui semua panggilan fungsi sampaig
akhirnya kembaliTrue
.sumber
else
sebelum finalreturn
?Siput ,
413729 byteTerima kasih kepada feersum atas bantuannya untuk menghindari jalur yang tumpang tindih dan untuk menghemat 4 byte.
Membutuhkan input untuk diisi ke persegi panjang sehingga ada ruang di setiap sel yang Mario perlu lintasi (berpotensi dengan garis depan penuh spasi).
Cobalah online!
Penjelasan
Snails adalah entri feersum untuk tantangan desain bahasa pencocokan pola 2D kami. Seperti Slip, ini juga mirip dengan regex, tetapi perbedaan utama adalah a) yang satu ini mendukung pernyataan (lookaround) dan b) selain dari pernyataan ini, tidak mungkin untuk menelusuri sel dalam jaringan dua kali. Itu membuat masalah ini sedikit rumit, karena ada beberapa kasus di mana Mario harus jatuh ke dalam lubang dan melompat keluar, misalnya:
Terlepas dari perbedaan-perbedaan ini, sintaks dari kedua bahasa juga sangat berbeda.
Untuk menghindari masalah yang tidak dapat dilalui sel dua kali, kami selalu mengganti langkah horizontal dengan langkah vertikal. Namun, ini berarti bahwa kita harus menangani jatuh sebelum kita melangkahi langkan. Jadi air terjun akan secara teknis benar-benar melewati ubin tanah tetapi kami akan memastikan bahwa itu hanya terjadi di sebelah ruang terbuka.
sumber
C,
256236213197 byte20 byte disimpan oleh "Ini akan selalu muncul di kolom paling kiri dari input"
23 byte disimpan berkat sistem berbasis kolom @ RohanJhunjhunwala
Cobalah di ideone, dengan uji kasus ...
Pemakaian:
Tidak digabungkan dengan penjelasan:
sumber
PHP,
399338284265251 bytemengharapkan input sebagai argumen baris perintah dengan jeda baris unix dan spasi tambahan di setiap baris, mengembalikan kode keluar
1
untuk sukses,0
untuk kegagalankerusakan berfungsi
tes (pada fungsi m)
sumber
Ruby,
153147 byteMaaf, Jawa ... tempat Anda sebagai bahasa non-golf terbaik untuk pekerjaan itu diambil alih!
Input adalah daftar string kolom, yang didahului dengan satu spasi dengan gaya bagaimana solusi Slip dan Siput membutuhkan input mereka untuk diisi dengan persegi panjang ruang kosong.
Cobalah online!
sumber
Grime, 46 byte (tidak bersaing)
Saya telah memperbarui Grime beberapa kali setelah tantangan ini diposting, jadi jawaban ini tidak memenuhi syarat untuk menang. Beberapa perubahan sangat baru sehingga saya belum bisa memasukkannya ke TIO, tetapi begitu saya melakukannya, Anda dapat mencoba programnya . Bagaimanapun, repositori saya mengandung versi yang menangani kode ini dengan benar.
Program mencetak
1
jika Mario dapat mencapai tujuan, dan0
jika tidak. Masukan harus berisi spasi di semua tempat yang perlu dikunjungi Mario. Untuk input umum, saya memiliki solusi 57-byte berikut :Penjelasan
Penjelasan tingkat tinggi adalah bahwa nonterminal
A
, didefinisikan pada baris pertama, cocok dengan sub-persegi panjang 1 × 1 dari input di mana Mario dapat mencapai tujuan.A
didefinisikan sebagai literalE
(Mario sudah di tujuan), atau sebagai pola 1 × 1 yang ada di kolom kiri beberapa persegi panjang 2 × n yang berisi lompatan Mario yang valid ke pertandingan lainA
di kolom kanan. Baris kedua menghitung jumlah kecocokanA
yang juga berisi karakter awalS
, dan mencetaknya.Berikut adalah rincian kode:
Idenya adalah bahwa
\ {,-4}
bagian di sebelah kiri cocok dengan ruang di mana Mario melompat ke atas, dan\ /*
bagian di sebelah kanan cocok dengan palung ruang di mana ia kemudian jatuh. Kami mengharuskan dia mendarat di pertandinganA
(karena kami ingin mencapai tujuan) yang ada di atas a=
. Tumpukan vertikal di bawah kedua kolom hanya akan menjamin bahwa kolom memiliki ketinggian yang sama, sehingga kita dapat menyatukannya (yang dilakukan oleh ruang tunggal di tengah). Berikut adalah diagram seni ASCII dari contoh lompatan, dipecah menjadi empat persegi panjang tersebut, dan dengan spasi diganti dengan*
s:Di baris kedua, opsi
n
memicu penghitungan semua pertandingan, alih-alih menemukan pertandingan pertama. Dalam solusi umum, spasi juga bisa berupa karakter out-of-input khusus, dan opsib
menyebabkan input diisi dengan karakter out-of-input.Saya harap semua ini masuk akal!
sumber