Anda seorang penjelajah, memetakan dunia yang tidak dikenal. Kapal Anda terbawa angin. Kemana perginya, siapa yang tahu?
Setiap hari, di spyglass Anda, Anda melihat fitur di utara, selatan, timur dan barat. Anda selalu melihat empat fitur tersebut, sesuai dengan arah mata angin. Spyglass Anda melaporkan simbol ASCII seperti ini:
~~.*
, ~~~~
, ~.^^
,~#~#
Simbol berada dalam urutan (utara, selatan, timur, barat).
Ini adalah simbol: ~
= laut, .
= pantai, ^
= gunung, *
= pohon, #
= tidak valid (tidak ada pengamatan, ini terjadi setiap kali Anda melihat ujung dunia, atau bentang alam dikaburkan oleh kabut). Spyglass Anda melihat tepat satu unit di setiap arah.
Setiap malam, Anda melihat bintang-bintang untuk melihat seberapa jauh Anda bepergian. Melihat bintang-bintang melaporkan simbol ascii seperti ini:
n
, s
, e
,w
masing-masing sesuai dengan Utara, Selatan, Timur dan Barat. Anda selalu memindahkan tepat satu unit ke utara, selatan, timur atau barat setiap malam. Jadi Anda, sebagai penjelajah akan menerima aliran simbol tanpa akhir:
~~.*n~~~~s~~.*s~.**
Tugas Anda adalah menampilkan peta 2D dunia (di mana ?
ada bagian peta yang tidak diketahui, utara naik, timur kanan):
?~~~??????
?~~~??????
?~~~.^^.??
?~~.***.~~
~~.*^^*.~~
~~~..~~~~~
~~~~~~~~~~
~~~~~~~~~~
Demi kesederhanaan, mari kita asumsikan Anda mulai di sudut kiri bawah peta. Asumsikan semua peta adalah 8x8.
Berikut ini adalah contoh 3x3 sederhana. Asumsikan peta terlihat seperti ini:
~.~
~^~
~.~
Dengan input berikut: ~#.#n~~^#s
Anda akan mendapatkan hasil ini:
~??
~^?
~.?
Lebih banyak contoh input dan output:
memasukkan
~#~#n~~~#n~~~#n~~~#n~~~#n~~.#n~~.#n#~~#e#.~~e#.~~e#.~~e#.~~e#~~~e#~~~e#~#~s~~#~s~~#~s~~#~s~~#.s~~#~s~~#~s~##~w~#~~w.#~~w^#~~w.#~~
keluaran
~~~~~~~~
~....~~~
~.????~~
~~????~~
~~????.~
~~????~~
~~?.^.~~
~~~~~~~~
Memasukkan:
~#~#e~#~~e~#~~e.#~~e^#~~n.~..n~^~.n~.~~n.~~.n.~~*n~.~.n#.~~w#.~~w#.~~s~*..s..*.s*~.~s.~~~s
Keluaran:
?~~~~~??
?....~??
?.**.~??
?~..~~??
?~~~~~??
?~~..~??
~~~.^.??
~~~~~~??
sumber
~#~#n~~~#n~~~#n~~~#n~~~#n~~.#n~~.#n#~~#e#.~~e#.~~e#.~~e#.~~e#~~~e#~~~e#~#~s~~#~s~~#~s~~#~s~~#.s~~#~s~~#~s~##~w~#~~w.#~~w^#~~w
) salah, dan output seharusnya ada di??
mana dikatakan?.
Jawaban:
MATL ,
685958 byteCobalah online!
Penjelasan
Peta disimpan di bagian bawah tumpukan dan secara bertahap diisi. Posisi explorer saat ini disimpan di clipboard J.
Peta menggunakan koordinat matriks, sehingga (1,1) adalah kiri atas. Selain itu, pengindeksan linear kolom-utama digunakan. Ini berarti bahwa elemen-elemen dari matriks 8 × 8 yang mewakili peta diakses dengan indeks tunggal sebagai berikut:
Jadi misalnya elemen (3,2) dari matriks adalah elemen dengan indeks linier 11. Gerakan ke arah Utara, Selatan, Timur dan Barat masing-masing berhubungan dengan menambahkan -1, 1, 8 atau -8 ke indeks linier. Array [-1 1 8 -8] berfungsi untuk menyandikan dua hal yang berbeda:
String input disusun menjadi potongan-potongan
5
karakter. Karena potongan pertama tidak memiliki karakter pertama (yang menunjukkan gerakan), inisials
dimasukkan secara sewenang-wenang untuk membuat semua potongan ukuran yang sama. Untuk mengimbangi ini, penjelajah mulai di posisi 7, bukan 8, sehingga perpindahan awal ke Selatan (tambahkan 1 ke indeks linier) membuat mereka di posisi 8.Potongan 5 karakter diproses dalam satu lingkaran. Karakter pertama memperbarui posisi, dan 4 sisanya, jika berbeda dari
#
, dituliskan ke dalam entri matriks yang mewakili peta.sumber
C,
210208207 byteYang ini menggunakan printf dan scanf untuk membaca input, dan array yang dilinearisasi bukannya x, y; jadi saya merasa cukup berbeda dengan milibyte .
Golf:
Agak tidak terserang:
Perwakilan:
Juga, Anda mulai di posisi 8 karena ini mencukur sekitar satu atau lebih loop cetak.
sumber
Fortran,
263251247235234216 byteVersi 1D (mirip dengan yang dilakukan oleh Don Muesli):
Versi 2D:
Untuk mengaktifkan formulir dan pra-pemrosesan gratis, file memerlukan ekstensi
.F90
, misexplorer.F90
. Masukan dibaca dari STDIN:sumber
C,
265226224 bytePeta ini 8x8, saya tidak menyadarinya sebelumnya. Dan di sini adalah solusi 265 byte yang berfungsi untuk peta dengan dimensi variabel:
sumber
a[8][8]
seharusnya cukup?int a[8][8]
memberi Anda inisialisasi peta gratis, dan penggunaan charm[64]
memberi saya diskon besar untuk output peta. Hitungan sangat dekat, meskipune
danw
dalam representasi peta Anda, maka Anda dapat menggunakanfor(x=8;x--;)putchar((i=a[x][y])?i:63)
untuk mencukur dua byte pada output.c=getchar(),c+1
tidak setara dengangetchar(),c++
atau ada beberapa tipu daya yang terlibat?Ruby,
169147 byteProgram lengkap. Mengambil dalam string input dari STDIN (Anda mungkin perlu memasukkannya dari file untuk mencegah baris baru yang tertinggal dari mengacaukan segalanya) dan mengeluarkan peta yang dihasilkan ke STDOUT.
Memotong satu ton dengan menempatkan semua string menjadi satu dan kemudian membaginya nanti.
Tidak Disatukan:
sumber
Lua, 354 byte ( coba online )
Golf:
Sedikit tidak berbulu:
sumber
x=x+(("w e"):find(e)or 2)-2 end
bisax=x-2+(("w e"):find(e)or 2)end
?Kotlin, 242 byte
Baris baru dapat diganti dengan titik koma jika diinginkan.
Coba Di Sini
sumber