Tugas Anda adalah menulis sebuah program yang menemukan jumlah gerakan optimal yang diperlukan untuk mendapatkan dari sudut kiri bawah persegi panjang ke sudut kanan atas yang berseberangan.
Program Anda akan menerima input sebagai pasangan yang dipesan (width, height)
. Ini akan menjadi dimensi persegi panjang yang akan Anda kerjakan. Program Anda akan membuat ASCII-art dari solusi (gunakan .
untuk kotak kosong dan #
untuk bagian dari solusi, X
untuk memulai kotak) dan menghitung jumlah gerakan yang diperlukan untuk mencapai titik akhir. Pergerakan diagonal tidak diizinkan. Jika ada beberapa solusi, pilih satu untuk di-output.
Program terpendek dalam byte menang.
Contoh
Memasukkan: (4, 5)
Keluaran:
..##
..#.
.##.
.#..
X#..
Pindahkan hitungan: 7
#
"solusi optimal" (yang merupakan solusi yang tidak pernah bergerak ke kiri atau ke bawah) juga?#
karena tidak masuk akal untuk pergi ke kiri atau ke bawah.Jawaban:
05AB1E ,
2724 byteKode:
Penjelasan:
Cobalah online! . Menggunakan pengodean CP-1252 .
sumber
Retina ,
5453 byteMengambil input yang dipisahkan oleh umpan baris dan menampilkan kisi solusi diikuti oleh jumlah langkah.
Cobalah online!
Penjelasan
Ubah kedua bilangan bulat menjadi banyak
.
, yaitu konversikan menjadi unary.Ini membangun kisi
.
s, dengan mencocokkan masing-masing.
di ketinggian unary dan menangkap representasi lebar unary. TheS
mengaktifkan mode split yang mengembalikan string ditangkap, dan|\D
dan_
bersama-sama memastikan bahwa segala sesuatu yang lain dihapus dari string.Ini mengubah karakter terakhir dari setiap baris serta seluruh baris terakhir menjadi
#
s.Ini menggunakan satu ton opsi untuk mengkonversi hanya yang pertama
#
di baris terakhir keX
(kita perlu memastikan bahwa hanya baris terakhir yang terpengaruh karena lebar-1 input).m
mengaktifkan mode multi-line yang^
cocok dengan awal baris.-1=
memberitahu Retina untuk melakukan penggantian hanya pada pertandingan terakhir. Akhirnya,:
nonaktifkan mode diam standar sehingga grid dicetak ke STDOUT sebagai hasil antara.Akhirnya, kita cukup menghitung angka
#
dalam string, yang sesuai dengan jumlah gerakan.sumber
Pyke, 26 byte
Coba di sini
Atau 34 byte yang tidak kompetitif, tambahkan apply node dengan ast)
Coba di sini!
Atau 30 byte jika spasi diizinkan sebagai bantalan
sumber
Pyth,
322924 byteCobalah online!
Input sampel:
Output sampel:
Bagaimana itu bekerja:
Upaya sebelumnya:
Cobalah online!
Input sampel:
Output sampel:
Bagaimana itu bekerja:
sumber
AtMQ
. Ini menetapkan dua nilai keG
danH
.CJam,
3533 byteMengambil input dalam bentuk
width height
dan menampilkan jumlah langkah pada baris pertama, diikuti oleh kisi solusi.Uji di sini.
Ini juga berfungsi untuk jumlah byte yang sama:
sumber
Ruby, 48 byte
Ini adalah fungsi anonim, yang menurut meta post ini dapat diterima kecuali pertanyaannya menyatakan "program lengkap." Saya biasanya tidak terlalu jago tentang hal ini tetapi masalahnya sangat sederhana dan melakukan suatu program akan meningkatkan% skor secara signifikan.
Input adalah dua argumen. Nilai kembali adalah array yang berisi string seni ASCII dan jumlah
#
dalam path.Dalam program uji
Keluaran
Itu hanya serangkaian h-1 baris w-1 dots, diikuti oleh a
#
dan baris baru. Saya meletakkannya#
di bagian akhir untuk menggunakan satu#\n
literal untuk keduanya#
dan baris baru (kode tersebut berisi baris baru yang sebenarnya dan bukan urutan keluar.) Baris terakhir kemudianX
diikuti oleh w-1#
.Itu lebih pendek untuk mengurangi nilai-nilai w dan h selama generasi seni ASCII, sehingga perhitungan akhir sederhana
w+h
.sumber
JavaScript (ES6), 60 byte
Pemakaian
sumber
MATL ,
282625 byteEDIT (10 Juni 2016): tautan di bawah ini mencakup modifikasi (
5L
digantikan olehIL
) untuk beradaptasi dengan perubahan dalam bahasaCobalah online!
Penjelasan
sumber
Scala, 118 byte
sumber
Haskell, 64 byte
Contoh penggunaan:
Bagaimana itu bekerja:
sumber
Java,
137132 bytesumber
Lua, 81 byte
Cobalah online!
Golf:
Tidak Disatukan:
sumber
Python, 48.
Untuk menggunakannya, tambahkan
f=
sebelum baris di atas dan panggil seperti ini:Hasil:
sumber