Saya yakin semua orang telah melihat sebelumnya bahwa cangkir dapat ditumpuk menjadi piramida (dan bentuk lainnya):
A
A A A
A A A A A
A A A A A A A A
Ya, A
jelas merupakan karakter yang memadai untuk mewakili piala.
Cangkir baru dapat ditambahkan baik di tanah, di sebelah kanan struktur, atau di atas dua cangkir yang berdekatan. Berikut adalah struktur di atas lagi, tetapi semua tempat yang tersedia untuk cangkir baru ditandai dengan _
:
_ A
A A A
A _ _ A A A A
A A A A A A A A _ _ _
Katakanlah kita ingin membuat robot yang dapat merakit tumpukan piala ini. Robot akan memahami dua instruksi sederhana untuk memanipulasi struktur seperti itu:
a
: Tambahkan cangkir baru di tempat pertama yang tersedia dalam urutan membaca kiri-ke-kanan (yaitu, memindai baris dari atas ke bawah, kiri ke kanan hingga Anda menemukan tempat yang tersedia, lalu tempatkan cangkir di sana). Contoh di atas akan menjadi:A A A A A A A A A A A A A A A A A A
r
: Lepaskan cangkir pertama dalam urutan membaca kiri-ke-kanan. Contoh di atas akan menjadi:A A A A A A A A A A A A A A A A
Ternyata setiap struktur dapat dibangun dari awal hanya dengan menggunakan dua operasi ini. Misalnya
A
A A A
A A A A A
Dapat dibangun dengan urutan instruksi
aaaaaaaaaaaarrrrraa
Contoh yang lebih besar di atas dapat dibangun menggunakan
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaarrrrrrrrrrrrrrrrrraaaaaaarr
Inilah yang lebih besar:
A
A A A
A A A A A A A
A A A A A A A A A A A A
A A A A A A A A A A A A A A A
yang dapat dibangun dengan
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrraaaaaaaaaaaaaaaaaaarrrrrrrrrrrrrrraaaaaaaaaaaaaarrrrrrrrrrraaaaaaaa
Catatan: Jika bintik-bintik di tanah dilepaskan oleh instruksi pelepasan, mereka akan digunakan kembali sebelum menempatkan cangkir di sebelah kanan semua cangkir yang ada. Misalnya
aaaarrra
akan menghasilkan
A A
tidak
A A
Anda dapat menganggap tanah berada di atas deretan gelas semi tak terbatas.
Tantangan
Diberikan struktur gelas bertumpuk, kembalikan urutan yang mewakili instruksi untuk membangun struktur ini. Skor utama Anda adalah jumlah dari jumlah instruksi untuk kasus uji yang disediakan di bagian bawah. Dalam hal terjadi seri (yang kemungkinan besar, karena saya yakin bahwa solusi optimal yang efisien dimungkinkan), solusi terpendek akan menang.
Berikut ini beberapa detail tentang aturan:
- Anda mungkin berasumsi bahwa tidak ada spasi di baris paling bawah dari input, sehingga titik tanah paling kiri untuk cawan selalu digunakan.
- Anda dapat mengasumsikan jumlah ruang trailing yang masuk akal (tidak ada ruang, satu ruang, empuk ke persegi panjang, empuk ke persegi panjang dengan ruang trailing tunggal).
- Anda dapat secara opsional mengharapkan input berakhir dalam satu baris baru.
- Anda dapat memilih dua karakter ASCII yang dapat dicetak yang berbeda (0x20 hingga 0x7E, inklusif) dan bukan
A
spasi (aturan tentang spasi lalu transfer ke karakter yang Anda pilih). - Keluaran Anda harus mengandung hanya dua karakter berbeda yang mewakili operasi (Anda dapat memilih karakter selain
a
danr
). Anda dapat secara opsional mencetak satu baris baru. - Kode Anda harus dapat menyelesaikan semua kasus uji di bawah ini dalam waktu kurang dari satu menit pada PC desktop yang wajar (jika saya membutuhkan dua menit, saya akan memberi Anda manfaat keraguan, tetapi jika butuh sepuluh, saya menang 't - Saya percaya algoritma optimal dimungkinkan yang memecahkan salah satu dari mereka dalam waktu kurang dari satu detik).
- Anda tidak boleh mengoptimalkan kode Anda terhadap setiap kasus uji (mis. Dengan meng-hardcodenya). Jika saya curiga ada yang melakukannya, saya berhak mengubah kasus uji.
Anda dapat menggunakan skrip CJam ini untuk operasi terbalik: ini akan mengambil serangkaian instruksi pembuatan dan mencetak tumpukan cangkir yang dihasilkan. (Terima kasih kepada Dennis karena menulis ulang cuplikan dan mempercepatnya secara signifikan.)
Sp3000 juga menyediakan skrip Python alternatif ini untuk tujuan yang sama.
Uji Kasus
Setelah setiap kasus uji, ada angka yang menunjukkan jumlah instruksi optimal sesuai jawaban Ell.
A
A A
A A A
A A A A
A A A A A
A A A A A A
A A A A A A A
A A A A A A A A
A A A A A A A A A
A A A A A A A A A A
A A A A A A A A A A A
A A A A A A A A A A A A
A A A A A A A A A A A A A
A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
820
A
A A
A A A
A A A A
A A A A A
A A A A A A
A A A A A A A
A A A A A A A A
A A A A A A A A A A
A A A A A A A A A A A A
A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
1946
A
A A
A A A
A A A A
A A A A A
A A A A A A
A A A A A A A
A A A A A A A A
A A A A A A A A A A
A A A A A A A A A A A A
A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
2252
A A
A A A A
A A A A A A
A A A A A A A A
A A A A A A A A A A
A A A A A A A A A A A A
A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
9958
A A
A A A A
A A A A A A
A A A A A A A A
A A A A A A A A A A
A A A A A A A A A A A A
A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
5540
A A A A A A A A A A A A A A A A A A A A
10280
A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
10320
A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
5794
A
A A
A A A
A A A A A
A A A A A A A
A A A A A A A A A A
A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
3297
A A
A A A
A A A A
A A A A A
A A A A A A
A A A A A A A
A A A A A A A A
A A A A A A A A A
A A A A A A A A A A A
A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
4081
A
A A A A
A A A A A A A A A
A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
4475
A
A A A A A A A A
A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
5752
Itu artinya, skor terbaik adalah 64.515 instruksi.
sumber