Diberi labirin pada stdin dan titik masuk, tulis sebuah program yang mencetak jalur ke jalan keluar di stdout. Jalur apa pun dapat diterima, selama program Anda tidak menghasilkan jalur sepele (melewati setiap titik di labirin) untuk setiap labirin.
Pada input, dinding ditandai oleh a #
dan titik masuk oleh a @
. Anda dapat menggunakan karakter apa pun untuk menggambar labirin dan jalur di output, asalkan semuanya berbeda.
Anda dapat berasumsi bahwa:
- Titik masuk dan keluar ada di tepi input
- Setiap baris input memiliki panjang yang sama
- Labirin dapat dipecahkan dan tidak memiliki siklus
- Hanya ada satu titik keluar
Solusi terpendek oleh (Unicode) jumlah karakter menang.
Contohnya
(perhatikan bahwa input diisi dengan spasi)
####
# #
@ #####
# #
#
#######
####
# #
@*#####
#* #
#******
#######
### ###################
### # #
## ######### # #
# ##### #
############### #@##
###*###################
###*********#*********#
## *#########* # *#
# *********** #####**#
############### #@##
code-golf
path-finding
maze
Lowjacker
sumber
sumber
Jawaban:
Ruby 1.9, 244 karakter
Keluaran untuk dua contoh:
Suntingan:
sumber
ANSI C (
384373368 karakter)Inilah upaya C saya. Dikompilasi dan dijalankan di Mac OS X.
Contoh output untuk beberapa tes:
Keterbatasan: Hanya berfungsi untuk labirin hingga 1000 karakter, tetapi ini dapat dengan mudah ditingkatkan. Saya hanya memilih nomor arbitrer daripada repot-repot ke malloc / remalloc.
Juga, ini adalah kode yang paling sarat peringatan yang pernah saya tulis. 19 peringatan, meskipun sepertinya lebih dengan menyoroti kode XCode. : D
EDIT: Diedit dan diuji untuk menjatuhkan int dari utama, untuk menggunakan ~ bukannya! = EOF dan putchar bukan printf. Terima kasih atas komentarnya!
sumber
int
" sebelummain
dan simpan 4 karakter. Juga gunakanputchar(*(s-1))
alih-alihprintf("%c",*(s-1))
menyimpan 4 lagi.0xA
dengan10
dan!=
oleh^
.~
operator untuk memeriksa EOF:while(~(c=getchar())
Python, 339 karakter
Menghasilkan jalur terpendek melalui labirin.
Output untuk labirin misalnya:
sumber
Python -
510421 karaktersumber
*
di sudut kanan bawah, pada test case pertama (python 2.6.1). Adakah pikiran?print b,r
danprint (i,j)
, yang sayaPython 3 , 275 byte
Cobalah online!
Port jawaban saya untuk Menemukan rute terpendek di jalan ASCII .
Penggunaan
'#'
untuk memulai,'*'
untuk akhir,'@'
untuk dinding dan' '
untuk ruang kosong. Dalam hal ini, fungsi tersebutq
adalah fungsi pembantu yang mengembalikan array satu dimensi dengan jalur terpendek dalam labirin. Fungsif
dapat dipersingkat 4 byte dengan tidak menugaskan variabels
. Ini sangat tidak efisien dan kemungkinan akan habis, karena ini memanggil fungsi pencarian jalan untuk setiap karakter di maze.sumber