Setelah perjalanan kano yang membawa bencana , Anda akhirnya jatuh dari air terjun di ujung jeram sungai. Sampan Anda meledak, tetapi Anda berhasil selamat dari ledakan itu. Namun, perjalanan sungai Anda benar-benar hilang dari peta - Anda sekarang telah menemukan diri Anda tersesat di tengah-tengah hutan. Untungnya, Anda masih memiliki keterampilan pemrograman, sehingga Anda memutuskan untuk mengukir program ke sisi pohon untuk membantu Anda menemukan jalan melalui hutan. Namun, tidak banyak area permukaan pada pohon, jadi Anda harus membuat program sesingkat mungkin.
Hutan dapat digambarkan sebagai n
oleh n
( n > 5
) kuadrat karakter, yang hanya akan terdiri dari huruf kecil a-z
. Contoh hutan:
anehcienwlndm
baneiryeivown
bnabncmxlriru
anhahirrnrauc
riwuafuvocvnc
riwnbaueibnxz
hyirorairener
ruwiiwuauawoe
qnnvcizdaiehr
iefyioeorauvi
quoeuroenraib
cuivoaisdfuae
efoiebnxmcsua
Anda mungkin telah memperhatikan bahwa di hutan ini, ada garis diagonal a
karakter berjalan melaluinya dari sudut kiri atas ke sudut kanan bawah. Ini adalah "jalan" melalui hutan yang akan membawa Anda ke suatu tempat jika Anda mengikutinya. Tugas Anda adalah menulis program yang akan menemukan jalur tunggal. Sekarang saya akan lebih spesifik menggambarkan apa yang berkonotasi "jalan" dalam tantangan ini.
"Jalur", dalam tantangan ini, didefinisikan sebagai garis yang serupa dengan jalur yang mungkin dihasilkan dengan algoritme Bresenham , tetapi dengan persyaratan tambahan yang:
- Panjang garis harus minimal 6 karakter
- Setiap kelompok karakter collinear (benar-benar berdekatan) dalam garis harus memiliki panjang yang sama .
- Itu akan dimulai di satu ujung hutan dan berakhir di ujung yang berlawanan (lihat komentar saya di sini untuk penjelasan lebih lanjut)
Untuk menjelaskan persyaratan kedua lebih jelas, pertimbangkan baris berikut:
aaa
aaa
aaa
aaa
aaa
Baris ini terdiri dari "segmen" collinear karakter, yang masing-masing panjangnya tepat tiga karakter. Itu memenuhi syarat sebagai jalur. Sekarang pertimbangkan baris ini:
a
aa
a
aa
a
aa
Baris ini terdiri dari "segmen" collinear yang tidak semua panjang karakternya persis sama (beberapa di antaranya panjangnya 1 karakter dan beberapa di antaranya 2). Dengan demikian, yang ini tidak memenuhi syarat sebagai jalan.
Program Anda, diberi peta hutan, mengidentifikasi karakter yang digunakan di jalan. Input untuk apa pun yang nyaman (mis. Argumen baris perintah, STDIN prompt()
,, dll.). Itu tidak dapat diinisialisasi menjadi variabel. Bagian pertama dari input adalah bilangan bulat tunggal yang n
mewakili ukuran hutan (hutan selalu persegi). Setelah itu adalah spasi dan kemudian seluruh hutan sebagai string tunggal. Sebagai contoh, contoh hutan akan disajikan, sebagai input, seperti ini:
13 anehcienwlndmbaneiryeivownbnabncmxlriruanhahirrnraucriwuafuvocvncriwnbaueibnxzhyirorairenerruwiiwuauawoeqnnvcizdaiehriefyioeorauviquoeuroenraibcuivoaisdfuaeefoiebnxmcsua
Output untuk ini adalah:
a
karena jalur dibentuk menggunakan huruf a
. Hanya akan ada satu jalan di hutan. Ini adalah kode golf, jadi jumlah karakter terendah yang menang. Jika Anda memiliki pertanyaan, tanyakan di komentar.
Jawaban:
APL (Dyalog 14) (70)
Penjelasan:
⎕ML←3
: diaturML
ke3
, artinya⊂
memiliki arti APL2.I←⍞
: baca baris dari keyboard dan simpan diI
I⊂⍨' '≠I
: splitI
pada spasi{
...}/
: terapkan fungsi ini ke dua string yang dihasilkan:2/⍎⍺
: mengevaluasi argumen kiri dan menggandakannya dua kali, memberikan ukuran matriks⍵⍴⍨
: memformat argumen yang tepat menggunakan ukuran ituF←⊃
: hapus kotaknya dan simpan diF
.{(⍳≢⍵)⌷¨↓⍵}¨(⊂F),⊂⌽F
: dapatkan diagonal: dari setiap baris di keduanyaF
dan⌽F
(dicerminkan secara vertikalF
), dapatkan nilai di kolom X, di mana X adalah nomor barisnya(↓⍉F),(↓F),
: dapatkan baris dan kolomF
Z←∪¨
: temukan nilai unik pada setiap baris, kolom dan diagonal dan simpan diZ
.Karena 'hutan' berbentuk persegi panjang, jika ada jalur yang valid, artinya salah satu dari ini hanya terdiri dari satu karakter, yang merupakan karakter jalur, jadi:
Z/⍨1=≢¨Z
: ambil subarrays dariZ
yang hanya memiliki satu elemen.Ini akan menampilkan karakter untuk semua jalur yang valid, tetapi karena seharusnya hanya ada satu yang tidak masalah.
sumber
Lua -
506380 - byteSaya merasa agak buruk karena Anda belum menerima pengajuan untuk tantangan dipikirkan dengan baik, jadi saya melemparkan ini bersama. Itu berhenti menyenangkan menyimpulkan apa sifat dibedakan minimum jalan harus dari informasi yang Anda berikan. Saya harap saya melakukannya dengan benar ... DAN mengimplementasikannya dengan benar.
Itu dapat diuji dengan:
Jika penantang liar muncul, saya akan mencari kode golf saya untuk apa nilainya.Update : golf untuk menghormati mereka yang akan naik di atas kita. Sementara saya berada di sana saya harus memperbaiki kode saya ke jalur yang dikenal pergi dari kanan ke kiri. Ups.
sumber
MATLAB - 270 karakter
Berikut ini mendefinisikan fungsi
x
yang menerima string hutan sebagai argumen dan mengembalikan karakter yang mewakili "jalan" yang valid melalui hutan tunduk pada aturan yang diberikan.Versi non-minified adalah
Premis dasarnya adalah untuk membangun topeng boolean untuk setiap jalur yang valid yang mungkin dan mengembalikan karakter yang fungsi indeksnya dalam matriks mencakup topeng apa pun. Untuk mencapai hal ini, hanya topeng berbentuk backslash vertikal atau top-to-bottom yang dibuat, tetapi matriks hutan dibandingkan dalam keempat orientasi: identitas, diputar, diputar 90 °, diputar diputar 90 °.
Fungsi berjalan untuk apa saja
n
. Contoh dari itu dipanggil pada commandline adalahsumber
Python -
384325275Algoritma ini pada dasarnya memeriksa baris pertama dan terakhir dari matriks untuk karakter yang cocok dan kemudian menghitung panjang setiap segmen baris
Dalam Contoh di atas:
V di baris pertama adalah di indeks 2, V di baris terakhir di indeks 4.
Jadi panjang setiap segmen baris akan menjadi n / (4-2) +1 = 2 dengan n = 6 .
Itu kemudian memeriksa apakah garis itu valid.
Untuk menemukan jalur dari kiri ke kanan, ia bertukar baris dengan kolom dan melakukan hal yang sama lagi.
Sunting: Tidak bisa mencapai 270 (Sialan Anda Python dan indentasi sialan Anda !!)
sumber