Terima kasih, Paman (ceritanya)
Paman saya yang sedikit gila baru-baru ini pergi ke koloni luar angkasa, dan menyerahkan bisnis barang paletnya kepada saya. Gudang persegi panjang itu penuh dengan palet barang kecuali satu kotak di dekat pintu, dan saya baru saja menerima daftar palet pertama yang dipesan oleh pelanggan untuk dikirim hari ini.
Untungnya saya memiliki peta yang ditulis dengan cermat di mana masing-masing palet berada, dan paman saya yang gila merancang beberapa robot mini yang dapat memindahkan palet ke ruang yang berdekatan, seperti 15 puzzle geser. Saya tidak peduli di mana palet berakhir, saya hanya ingin palet dalam daftar tiba di pintu.
Pertanyaannya adalah, serangkaian perintah apa yang harus saya berikan kepada robot untuk mendapatkan palet yang diperlukan?
Tantangan
Diberikan
- ukuran grid (baris, cols)
- daftar palet (berdasarkan lokasi mereka saat ini) untuk mengambil secara berurutan
Anda harus menampilkan daftar posisi kisi yang sesuai dengan posisi mana yang akan dipindahkan, dan ke arah mana. Jika hanya ada 1 arah yang tersedia, Anda dapat menghilangkannya. Palet akan dihapus segera setelah kedatangan oleh pintu (di satu sudut, indeks N dalam contoh).
Contoh yang berhasil
01 02 label the contents A B
03 04 C D
05[ ] E _
Request: 03 (contents is C)
Command 0: 04
D moves into the (only) adjacent space at index 06
Result: A B
C _
E D
Command 1: 03
C moves into the (only) adjacent space at index 04
Result: A B
_ C
E D
Command 2: 05
A B
E C
_ D
Command 3: 06
A B
E C
D _
Command 4: 04
A B
E _
D[C]
(C removed having arrived by the door)
Batas dan kebebasan
- Ukuran kisi maksimum adalah 100x100
- Tantangan adalah kode-golf
- Solusi harus dijalankan dalam waktu 2 menit pada beberapa mesin dunia nyata
- Anda dapat memilih pengindeksan, sintaksis perintah, struktur input, dan sebagainya, asalkan konsisten.
- Saya telah memilih untuk menggunakan lokasi grid untuk perintah, tetapi Anda bisa memancarkan nilai dalam elemen sebagai gantinya (ditambah arah) karena mereka unik.
- Jika Anda ingin membuat animasi negara (terutama untuk jaringan besar), saya yakin itu akan menghibur!
Contohnya
A: 3x2, 1 palet
01 02
03 04
05 [__]
Request: pallet at 03
Valid solution: 05,03,04,06,05
This leaves the following state:
01 02
04 05
__ [03]
B: 15-puzzle, 1 kotak
01 02 03 04 05
06 07 08 09 10
11 12 13 14[ ]
Request: box 01
Valid solution: 14,13,12,11,06,01,02,07,12,11,06,07,12,11,06,07,08,13,12,11,06,07,08,09,14,13,08,09,10,15,14
02 07 03 04 05
08 12 13 10 14
06 11 09 __[01]
C: 3x2, 4 kotak
01 02
03 04
05[ ]
Request: 02,04,01,05
Valid solution: 04,02,01,03,05,06,04,05,02,06,03S,05E
Pallet taken at: ^ ^ ^ ^
Indicating directions with NSEW
Final state:
03 __
__ __
__ __
D: 10x10, 2 kotak
10x10, request boxes at 13,12 (row 1, cols 2 & 1 with 0-index)
Valid solution: (90,80..20, 19,18..12, 22,32..92, 93,94..100) x 15, 90.
E: 4x1, semuanya
4x1: 01 02 03 [ ]
Req: 03,02,01 (only valid order)
Optimal solution: 03,02,03E,01,02E,03E
F: 100x100, 3 di dekat pintu
100x100
Req: 9900,9899,9898
Result: 9000,9989,9000S,9898,9898E,9000S
sumber
Jawaban:
JavaScript (Node.js) -
425424420395Cobalah online!
Mengambil n, m dan sebuah array palet, mengembalikan daftar perintah di mana setiap perintah adalah array 2 elemen dari lokasi palet untuk dipindahkan dan lokasi ruang untuk memindahkannya.
Mungkin ada strategi yang lebih baik daripada yang saya gunakan, tetapi memposting apa adanya untuk saat ini.
sumber