Ini adalah "labirin panah":
v <
> v
> ^
> v
^ < *
The *
menandai tempat di mana Anda akan menyelesaikan. Tujuan Anda adalah untuk menemukan di mana maze dimulai (karenanya, maze terbalik). Dalam hal ini, ini adalah yang pertama >
di baris kedua.
v------<
S-+---v |
| >--^
>-+-------v
^ < *
Perhatikan bahwa semua panah harus digunakan. Perhatikan juga bahwa Anda dapat mengasumsikan garis akan diisi dengan spasi dengan panjang yang sama.
Program Anda harus memasukkan maze dengan cara yang masuk akal (stdin, dari file, kotak pesan, dll.), Namun maze harus benar-benar utuh. Misalnya, Anda tidak dapat memasukkan garis yang dipisahkan oleh koma; input harus persis labirin.
Anda harus menampilkan awal maze dengan cara yang masuk akal. Misalnya, Anda bisa
- output koordinat awal
- output seluruh labirin dengan panah mulai diganti dengan
S
- Keluarkan seluruh labirin dengan semua panah kecuali panah awal dihapus (whitespace intact!)
- dll.
Selama Anda bisa tahu dari output Anda panah mana yang merupakan panah awal, maka tidak apa-apa. Misalnya, output dari
"0"
"2"
tidak apa-apa, terlepas dari baris baru dan kutipan, karena Anda masih dapat mengetahui di mana awal itu.
Ini adalah kode-golf , jadi kode terpendek dalam byte akan menang.
>v^
dalam>
menunjuk kev
, bukan^
. Saya akan mengedit lebih banyak barang ketika saya pulang ke komputer hari ini.Jawaban:
GolfScript, 55 byte
Demo online
Asumsikan bahwa semua jalur input diisi dengan spasi dengan panjang yang sama dan dipisahkan oleh baris baru. Output byte offset dari panah mulai dari awal string input (misalnya
12
untuk labirin contoh dalam tantangan).Secara khusus, program ini menemukan offset byte dari semua panah yang tidak memiliki panah yang menunjuk ke mereka (dengan asumsi bahwa semua panah menunjuk ke panah atau tujuan; perilaku aneh dapat terjadi jika ini tidak benar). Secara default, jika ada beberapa panah seperti itu (yang, per spec, seharusnya tidak dimungkinkan dalam input yang valid), offset mereka hanya akan digabungkan dalam output. Jika mau, Anda dapat menambahkan
n*
ke program agar dipisahkan oleh baris baru.Versi de-golf dengan komentar:
sumber
w
.z
untuk&
menghindari membutuhkan ruang tambahan, meskipun. OTOH,?~.~)
membuat senyum yang cukup bagus. :-)GolfScript (
101100 bytes)Output dalam bentuk di
[[x y]]
mana koordinat keduanya berbasis 0.Demo online
Pemrosesan ada dalam dua fase: fase pertama mengubah labirin menjadi array
[x y dx dy]
tupel; fase kedua memetakan setiap panah / tanda bintang ke tanda panah / tanda bintang yang ditunjukkannya. (Tanda bintang dianggap menunjuk pada diri mereka sendiri). Dengan definisi masalah, ada tepat satu panah yang tidak ada dalam hasil peta ini, dan itu adalah solusinya.sumber
;'STUFF'
mensimulasikan memasokSTUFF
melalui stdin.Mathematica
491323Tidak dikoleksi dengan komentar
Prosedur dimulai dari selesai ("*"), menemukan panah yang mengarah ke sana, dan seterusnya hingga mencapai awal.
Fungsinya, f [maze].
prekursor [{Ratakan [{atasMe [loc, a], belowMe [loc, a], rightOfMe [loc, a], leftOfMe [loc, a]}, 2], a, Prepend [daftar, loc]}]]
Golf
Contoh
Labirin. Setiap pasangan yang dipesan berisi baris dan kolom sel. Misalnya {2, 3} menunjukkan sel pada baris 2, kolom 3.
Memasukkan
Output : Jalur dari awal hingga selesai.
sumber
Saya pikir saya menemukan cara yang baik untuk menyelesaikan ini, tetapi saya kebetulan mengisap golf itu. Saya kira ini bisa jadi WAY lebih pendek, jadi saya akan menjelaskan ide saya sehingga orang lain dapat menggunakannya jika mereka merasa baik.
Jika setiap panah harus digunakan, maka semua panah akan diarahkan oleh panah lain, kecuali satu, itu adalah solusi kami.
Ini berarti kita tidak benar-benar harus memainkan labirin mundur, tetapi, mulai dari yang kiri atas, kita hanya perlu memeriksa panah yang dapat ditunjukkan terdekat untuk masing-masing. Ini adalah penghilang rasa sakit yang nyata untuk labirin yang lebih besar (karena Anda tidak perlu memeriksa keempat arah, tetapi hanya satu).
Inilah solusi saya:
PHP, 622 byte
Tidak Disatukan:
sumber
PHP - 492 byte
Solusi ini mengandaikan bahwa peta dapat ditemukan dalam variabel lokal
$m
. Metode terpendek yang saya miliki untuk melewati itu adalah melalui$_GET
:$m=$_GET['m'];
pada 14 byte. Versi ungolfed dengan peta dalam variabel disediakan di bawah ini untuk kejelasan membaca.sumber
K,
281277258Ini versi yang lebih awal dan tidak dikoleksi
Mengembalikan titik awal
x y
dengan 0 indeks berbasis.sumber
Python 422
Input ada dalam file bernama
m.txt
. Outputnya adalah(x, y)
tetapi jika Anda mengubah pernyataan cetak terakhir keprint g
, output akan menjadi daftar seperti[(x, y), (x, y), ...]
dengan semua langkah untuk mendapatkan dari ujung ke awal.sumber