Sunting penting: Sebelumnya, ada nilai yang salah dalam Contoh 1. Sudah diperbaiki.
Anda diberi array dua dimensi di mana setiap sel berisi satu dari empat nilai.
Contoh:
1 2 2 2 2 1 @ . . X X V
1 3 1 4 1 4 e . @ I C V
2 3 1 3 4 2 H H @ X I V
1 4 4 2 1 3 V C C
2 2 2 3 2 3 X X X
Keempat nilai mewakili panah arah (atas, bawah, kiri, dan kanan), meskipun Anda tidak tahu nilai mana yang mewakili arah mana.
Panah arah membentuk jalur tak terputus yang menyertakan setiap sel dalam array, meskipun Anda tidak tahu di mana titik awal atau akhir berada.
Tulis beberapa kode yang menentukan ke arah mana masing-masing dari empat nilai mewakili dan di mana titik awal dan akhir berada.
Nilai pengembalian yang dapat diterima untuk array yang berisi nilai-nilai A, B, C, dan D akan menjadi sesuatu seperti:
{ up: A, down: C, left: D, right: B, start: [2, 0], end: [4, 2] }
Karena Anda dapat melintasi jalur dengan dua arah (dari awal hingga akhir dan dari ujung ke awal), akan selalu ada lebih dari satu solusi yang benar, dan mungkin ada lebih dari dua. Asumsikan bahwa input yang Anda terima (seperti dalam contoh di atas) selalu memiliki setidaknya satu solusi yang benar. Dalam kasus di mana ada lebih dari satu solusi yang tepat, mengembalikan hanya satu dari solusi yang tepat sudah cukup.
Kode terpendek menang. Saya akan memilih pemenang setelah 7 hari atau 24 jam tanpa pengiriman baru, mana yang lebih dulu.
Saya menyertakan solusi untuk contoh di atas, tetapi saya mendorong Anda untuk hanya memeriksanya setelah Anda menulis kode Anda:
Satu:
{atas: 3, bawah: 1, kiri: 4, kanan: 2, mulai: [0,0], akhir: [2,5]}
Dua:
{atas: '@', bawah: 'e', kiri: '.', kanan: 'H', mulai: [1,1], akhir: [0,0]}
Tiga:
{up: 'I', down: 'V', kiri: 'C', kanan: 'X', mulai: [0,2], akhir: [4,2]}
Jawaban:
C #
EDIT: Memperbaiki divisi dan pemformatan. Dan menambahkan kelas pembantu.
Ini adalah kode golf, 807 karakter
Hasil untuk tiga kasus uji:
Ini adalah kode mentah tanpa "golf", hampir 4.000 karakter:
Ini adalah hasil untuk tiga contoh:
sumber
Mathematica 278
Spaces ditambahkan untuk "clarity"
Sesi & Keluaran:
Yang merupakan awal Vertex, End Vertex dan aturan transisi yang terkait dengan masing-masing simbol.
Berikut ini adalah kode pelengkap untuk menunjukkan grafik yang berorientasi:
sumber
Mathematica (151)
Ini mengembalikan titik awal, titik akhir, dan aturan transisi. Indeks pertama adalah baris, yang kedua adalah kolom
Perhatikan bahwa kode saya berfungsi dengan baik
{-1,0,1}~Tuples~{4,2}
. Untuk mempercepat Anda bisa menggunakannyaPermutations@{{1, 0}, {0, 1}, {-1, 0}, {0, -1}}
.sumber
APL (207)
Saya tidak bisa membuatnya lebih pendek dari Mathematica, karena saya tidak bisa beralasan dalam hal TopologicalSort dan semacamnya. Orang yang lebih cerdas dipersilakan memerasnya lebih jauh.
Golf:
Tidak Disatukan:
Contoh:
(Indeks dimulai pada 1)
sumber