Tantangan
Diberikan kotak karakter persegi panjang
ABCDE FGHIJ KLMNO PQRST
dan kotak dengan dimensi titik dan spasi yang sama
. . . . . . . . . . .
Keluarkan string yang dihasilkan dengan mengikuti titik-titik melalui grid mulai dari sudut kiri atas. Contoh ini akan menghasilkanABGLQRSNIJE
Catatan
- Anda dapat menggunakan kisi input sebagai array 2D atau alternatif terdekat dalam bahasa Anda alih-alih string multiline.
- Anda dapat menggunakan nilai NULL dari bahasa Anda alih-alih spasi. Tetapi Anda harus menggunakan titik untuk menandai jalan.
- Anda tidak perlu memisahkan titik pada garis yang sama dengan spasi. Saya baru saja menambahkannya agar mudah dibaca.
- Grid sekecil mungkin memiliki ukuran 1x1.
- Titik awal dan akhir hanya memiliki satu tetangga. Titik-titik di antara mereka akan selalu memiliki dua tetangga vertikal atau horizontal yang tepat. Ini menjamin bahwa jalannya tidak ambigu.
- Jalan tidak akan menuju diagonal.
- Karakter dalam kisi akan berupa semua karakter huruf besar atau kecil dalam rentang
[a-z]
apa pun yang paling nyaman bagi Anda. - Jalan akan selalu dimulai di sudut kiri atas.
Aturan
- Fungsi atau program lengkap diizinkan.
- Aturan default untuk input / output.
- Celah standar berlaku.
- Ini adalah kode-golf , sehingga byte-count terendah akan menang. Tiebreak adalah pengiriman sebelumnya.
Uji kasus
Kisi # 1
ABCABCW DEFGHUQ XLUSDQZ ASUKWXI WUKOAIM AIAIOUP
. . . . . . . . . . . . => ABEFGSKUSAWA
. . . . . . . . . . . . . . . . . . . . . . . . . => ABCABCWQZIMPUOIAIAWAXLUUK
Kisi # 2
Perhatikan spasi rangkap di baris kedua dari contoh pertama dan kedua.
AB CD
. => A
. . => AB
. . . => ACD
Kisi # 3
SEBUAH
. => A
Selamat Coding!
ABCABCUQXIUOIAIAWAXLUUK
.Jawaban:
APL, 63 byte
Ini adalah fungsi yang mengambil dua matriks karakter (mereka harus matriks), kisi karakter sebagai argumen kirinya dan kisi titik sebagai argumen kanannya. Matriks titik mungkin lebih kecil dari matriks karakter.
Penjelasan:
(,⍵='.')/,⍳⍴⍵
: dapatkan posisi titik-titik, dalam urutan kolom-baris1↓
: drop yang pertama (diketahui berada di1 1
)(⊂1 1){
...}
: mulai dari1 1
, jalankan fungsi berikut, yang mengikuti jalur (argumen kirinya adalah posisi saat ini, argumen kanan adalah posisi yang belum dikunjungi). Ini bekerja dengan memilih titik yang belum dikunjungi terdekat setiap kali. (Jika asumsi dari penangguhan pertanyaan, ini benar.)×≢⍵:
: jika masih ada posisi yang belum dikunjungi:+/¨2*⍨⍺-⍵
: temukan jarak Manhattan antara setiap posisi dan posisi saat iniV←(+=⌊/)
: untuk setiap posisi, lihat apakah jaraknya sama dengan jarak terkecil, dan simpan diV
.⍵/⍨~
: pilih semua posisi yang bukan ini masalahnya, ini adalah bidang yang akan dikunjungi berikutnya(V/⍵)
: Menemukan posisi yang merupakan kasus, ini akan menjadi kolom berikutnya∇
: jalankan fungsi lagi dengan argumen baru ini⍺,
: hasilnya adalah posisi saat ini, diikuti oleh hasil melakukan ini untuk sisa daftar⋄⍺
: jika tidak, kembalikan posisi sekarang dan berhenti (yang terakhir)⍺[
...]
: untuk setiap posisi, pilih elemen yang sesuai di kotak karakter.Kasus uji:
sumber
JavaScript (ES6), 122 byte
Penjelasan
Mengambil kisi sebagai string multiline.
Terasa seperti usaha yang layak tetapi saya kehabisan waktu saat bermain golf sehingga mungkin bisa ditingkatkan.
sumber
APL (Dyalog Classic) , 43 byte
Cobalah online!
sumber