pengantar
Semua orang tahu bahwa kemungkinan berhasil menavigasi bidang asteroid adalah sekitar 3.720 hingga 1. Tetapi meskipun Anda memperingatkan, Han Solo masih bersedia untuk mencoba peruntungannya.
Takut untuk kehidupan buatan Anda, Anda memutuskan untuk membuat kode, dalam dialek khusus kapal ( baca: bahasa Golf Kode pilihan Anda ), program penghindaran asteroid yang akan memutuskan jalur mana yang akan diambil dalam labirin ASCII bidang asteroid.
Memasukkan
Millenium Falcon memiliki program pemetaan lapangan asteroid, yang memberikan data serupa dengan ini:
| ##### ######### |
| ###### # ### # |
| # # # # #### # |
@ ## ####
|# # # ### ## |
|## ## #### # # |
|#### ##### # ## |
Baris atas adalah kiri dari Falcon, baris bawah adalah kanan dari Falcon, dan kolom mewakili apa yang ada di depan kapal.
- Masing
#
- masing adalah hambatan. - Setiap ruang adalah ruang kosong tempat kapal dapat terbang.
- Input selalu tinggi 7 karakter. Ini adalah batas lebar pemetaan asteroid.
- Input selalu panjang 32 karakter (30 untuk bidang itu sendiri dan 2 untuk batas awal dan akhir). Ini adalah batas kedalaman pemetaan asteroid. Bilah vertikal
|
menandai awal dan akhir pemetaan. @
adalah Falcon. Itu selalu di baris tengah (baris 4) dan kolom pertama di input.- Ruang yang tersisa di bilah vertikal pada kolom terakhir adalah tempat kapal harus tiba. Itu selalu di baris tengah (baris ke-4) dan kolom terakhir di input.
Input dapat diambil sebagai string multi-line, array string, dari STDIN atau parameter fungsi, atau dibaca dari file.
Kemungkinan manuver
Anda dikejar oleh TIE-Fighters, oleh karena itu Anda harus selalu maju. Dengan demikian ada tiga cara kapal dapat terbang di setiap langkah:
-
Meneruskan/
Maju dan belok kiri\
Maju dan belok kanan
Misalnya, ini adalah jalur yang valid:
@---
--
/ \ /
@ -
-
/ \
/ \
@ \
Seperti yang Anda lihat, selalu ada tepat satu gerakan per kolom. Falcon adalah sepotong sampah, oleh karena itu ia tidak dapat melakukan pergantian yang keras. Yang berarti bergerak seperti /\
atau \/
tidak diizinkan . Harus ada minimal satu penyerang murni di -
antara dua belokan yang berlawanan. Di sisi lain, memutar satu cara untuk beberapa langkah berturut-turut dimungkinkan, seperti yang terlihat di atas.
Falcon terhempas jika satu gerakan menuntun kapal berada di tempat di mana hambatan terjadi. Misalnya, gerakan ini menyebabkan crash:
@-#
@
\
#
#
/
@
Perhatikan bahwa ini bukan kerusakan:
@-#
\
-
Keluaran
Anda harus menampilkan bidang asteroid yang sama ASCII, dengan jalur yang valid hingga akhir. Falcon harus dicetak di titik akhir dan bukan di titik awal.
Misalnya, output yang valid untuk contoh input yang diberikan sebelumnya adalah:
| ##### ######### |
| ###### #-------- ### # |
| # # #/ # ####\ # |
--------- ## \ #### ----@
|# # # ### \ ## / |
|## ## #### \ #/ # |
|#### ##### #-- ## |
Jalur Anda hanya perlu tidak menabrak elang. Itu tidak perlu menjadi jalan terpendek yang mungkin.
Anda dapat mengasumsikan bahwa akan selalu ada setidaknya satu jalan yang mungkin sampai akhir.
Anda dapat menampilkan ke STDOUT, dalam file atau apa pun yang setara asalkan bidang asteroid dicetak persis seperti yang ada di pos ini (mis., Mengeluarkan daftar koordinat untuk jalur tidak valid).
Uji kasus
Bidang asteroid normal
| ##### ######### | | ###### # ### # | | # # # # #### # | @ ## #### |# # # ### ## | |## ## #### # # | |#### ##### # ## |
Output yang mungkin
| ##### ######### | | ###### #-------- ### # | | # # #/ # ####\ # | --------- ## \ #### ----@ |# # # ### \ ## / | |## ## #### \ #/ # | |#### ##### #-- ## |
Bidang asteroid yang tidak teratur
|# # # # # # # # # # # # # # # | | # # # # # # # # # # # # # # #| |# # # # # # # # # # # # # # # | @ # # # # # # # # # # # # # # |# # # # # # # # # # # # # # # | | # # # # # # # # # # # # # # #| |# # # # # # # # # # # # # # # |
Output yang mungkin
|# # # # # # # # # # # # # # # | | # # # # # # # # # # # # # # #| |# # # # # # # # # # # # # # # | -# #-# #-# #-# #-# #-# #-# #--@ |#\#/#\#/#\#/#\#/#\#/#\#/#\#/# | | #-# #-# #-# #-# #-# #-# #-# #| |# # # # # # # # # # # # # # # |
Inti bintang kematian
| # # # # | | # # # | | # # # # # | @ # # # # # | # # # # | | # # # # # | | # # # # |
Output yang mungkin
| # # # -- # | | --- # # / #\ - | | / #\ # # / # \ /#\ | - # \ # #/ # - # ----@ | # \ # ---- # # | | # \#/ # # # | | # - # # # |
Parit bintang kematian
|##############################| |##############################| |##############################| @ |##############################| |##############################| |##############################|
Keluaran
|##############################| |##############################| |##############################| ------------------------------@ |##############################| |##############################| |##############################|
Gua asteroid
|### ##########################| |## # ############### ## ######| |# ### ######## ### ## # #####| @ ###### ###### ### ## ### |######## ### ### ## #########| |########## # ### ## ##########| |########### #####|
Output yang mungkin
|###-##########################| |##/#\############### ##-######| |#/###--######## ### ##/#\#####| -######\###### ### ##/###-----@ |########--### ### ##/#########| |##########\# ### ##/##########| |###########-------- #####|
Mencetak gol
R2D2 sibuk berenang di rawa-rawa, jadi Anda harus memprogram pengontrol Falcon sendiri, yang membosankan. Karenanya kode terpendek menang .
-
di jalur di setiap belokan, yang didefinisikan sebagai gerakan "maju". Tapi gerakan sebenarnya selalu dua diagonal-kiri diikuti oleh dua diagonal-kanan.Jawaban:
JavaScript (ES6), 186
201Cuplikan yang dapat dijalankan:
Fungsi ini menerima string tunggal dengan baris baru. Fungsi ini membagi string menjadi array menggunakan
...
operator dan mendapatkan indeks untuk(x,y)
koordinat dengan(33 * y) + x
.Fungsi ini berjalan secara rekursif, menguji kemungkinan gerakan yang berbeda untuk setiap ruang. Ketika menemui kendala, ia mengembalikan nilai palsu, dan ketika mencapai ruang tujuan akhir, ia kembali
true
. (Dalam kode golf, initrue
dibuat oleh!console.log(...)
.)Perhatikan bahwa kode ini tidak menggunakan jangka panjang dari gerakan belok kanan, tetapi belokkan dengan gerakan lurus. Artinya, ia melakukan opsi kedua di bawah, bukan yang pertama:
Ini tampaknya legal, karena
-
bisa secara hukum datang sebelum atau setelah belokan, jadi mengapa tidak keduanya sekaligus? Itu terlihat sangat aneh di akhir, ketika langkah terakhir\
tetapi ditampilkan sebagai@
:Retas golf nasty favorit saya di sini adalah penyalahgunaan argumen default
c=k=" "
. Argumen(i,l,c=" ")
akan mengatakan "gunakan string" "
untukc
jikaf
tidak disediakan argumen ketiga". Namun, dengan melakukanc=k=" "
, kita mengatakan "jikac
tidak disediakan, simpan" "
dalam variabel globalk
dan kemudian simpan nilai ituc
juga". Karena rekursi dimulai dengan hanya satu argumen,k
selalu diinisialisasi pada pemanggilan fungsi pertama.Tanpa ungolfed:
sumber
" "
dalam variabel) yang membuat skor saya turun lebih rendah.C (program lengkap),
249247235 byteIni adalah program lengkap yang membaca input dari file dan mengeluarkan hasilnya ke stdout. Nama file dilewatkan sebagai parameter ke program.
Tidak Disatukan:
Keluaran:
sumber
-
diikuti oleh\
, tetapi\
ditutup oleh@
. (Program saya melakukan hal yang sama.)Common Lisp, 303 byte
Bersenang-senang dengan tantangan ini, ini adalah tugas codegolf pertama yang saya lakukan. Pada dasarnya ada fungsi rekursif sederhana yang mencoba setiap gerakan yang layak sampai posisi akhir tercapai.
Golf / Diminimalkan
Membaca input dari file i di direktori kerja. Saya cukup yakin masih ada ruang untuk perbaikan.
Kode polos
Output sampel
sumber
ActionScript 3, 364 byte
Saya membagi ini menjadi dua fungsi; satu untuk mengubah array menjadi array array, dan satu array rekursif untuk menghitung jalur penerbangan.
Versi ungolfed dalam suatu program dengan satu bidang sampel asteroid ditentukan:
sumber