Menggulung Dadu
Jadi, saya melempar dadu beberapa waktu lalu dan memikirkan tantangan.
Diberikan kubus dengan jaring yang diambil dari input dan daftar gerakan, cari kotak di bagian bawah di bagian akhir.
Saya akan menggunakan gambar ini untuk contoh di sini.
Memasukkan
Anda menerima string dengan daftar gerakan. String hanya berisi huruf ASCII kapital N, S, W, dan E. Ini terkait dengan menggulung kubus satu langkah ke arah itu.
Dalam gambar, satu N akan membuat wajah bagian bawah 6. Dalam gambar ini, Utara jauh dari kamera, Selatan menuju, Timur kanan, dan Barat kiri.
Anda juga menerima string dalam format berikut: 1P 2P 3P 4P 5P 6P, di mana setiap P adalah posisi dari N, S, W, E, T, dan B. T & B berada di bagian bawah dan atas.
Angka-angka adalah wajah dengan nomor itu, dan surat itu mewakili posisi wajah itu. Jika tidak jelas, jaring akan selalu dipesan dengan nomor tersebut, jadi 1P 2P 3P 4P 5P 6P, tidak pernah 2B 1T 3N 4S 5W 6E.
Posisi dalam gambar adalah 1S 2B 3E 4W 5T 6N.
Keluaran
Program Anda harus menampilkan angka yang mewakili sisi bawah.
Uji Kasus
(nothing), 1S 2B 3E 4W 5T 6N -> 2
N, 1S 2B 3E 4W 5T 6N -> 6
NS, 1S 2B 3E 4W 5T 6N -> 2
NWS, 1S 2B 3E 4W 5T 6N -> 2
NWSNWS, 1S 2B 3E 4W 5T 6N -> 2
NWSS, 1S 2B 3E 4W 5T 6N -> 3
NNNNNN, 1S 2B 3E 4W 5T 6N -> 5
SNWEEWS, 1N 2T 3E 4W 5B 6S, 6
SNEEWS, 1N 2T 3W 4S 5B 6E, 4
Peraturan Lainnya
Anda juga dapat mengasumsikan kubus berada di bidang datar yang tak terbatas, mungkin dengan semacam gesekan.
Celah standar tidak diizinkan, meskipun saya tidak dapat menemukannya.
Untuk input yang tidak valid, kode Anda dapat melakukan apa pun kecuali memulai kiamat.
Karena program ini harus sesuai dengan dadu saya, itu harus sekecil mungkin. Saya menghitung dalam byte, dengan beberapa pengecualian untuk bahasa seperti Folder .
(nothing) -> 2
rata - rata tidak ada jaring disediakan, atau haruskah ada jaring di suatu tempat?Jawaban:
CJam,
43403734 byteTerima kasih kepada Dennis karena telah membantu saya menghemat 6 byte.
Uji di sini.
Penjelasan
Adapun cara pemetaan karakter instruksi ke permutasi bekerja, berikut adalah tabel praktis:
Saya sudah memasukkan
5%
kolom karena itulah yang dilakukan pengindeksan siklik ke dalam string secara implisit. Untuk empat permutasi kita dapat melihat bahwa masing-masing dari mereka meninggalkan dua (berlawanan) sisi tidak tersentuh dan secara siklikal mengubah empat lainnya.sumber
Ĕ
is276
.6e!
memberi Anda daftar semua 720 permutasi dari[0 1 2 3 4 5]
. Dan276
kebetulan indeks[2 1 4 0 3 5]
dalam daftar itu.Perl,
166158154144139135134132116 bytetermasuk +1 untuk
-p
Dengan komentar:
File input:
Jalankan dengan
Keluaran:
262223564
pembaruan 158 Menggunakan
$N, $S, $E, $W
variabel global alih-alih%t = {N=>, S=>, E=>, $W=>}
menyimpan 8 byte.Update 154 Sejak persyaratan adalah bahwa program keluaran angka, tidak mencetak baris baru
print "$h{B}\n"
menghemat 4 bytes:print $h{B}
.perbarui 144 Hemat 10 byte dengan melakukan
dari pada
pembaruan 139 Memindahkan regex untuk perintah ke akhir untuk menghilangkan variabel, menghemat 6 byte.
perbarui 135 Hemat 4 byte,
@l[0..3,0]
bukan@l[1..3],$l[0]
.perbarui 134 Hemat 1 byte dengan menggunakan penugasan
@l=split//,$$_
sebagai nilai.perbarui 132 Hemat 2 byte dengan melakukan
/^\w+/ && $&
alih - alih/^(\w+)/ && $1
.perbarui 129 Hemat 3 byte dengan menggunakan
-p
alih-alih-n
dan menetapkan $ _ untuk dicetak.Update 116 Simpan 13 byte dengan menulis ulang
split//, /^\w+/ && $&
ke dalam/^\w+/g
.sumber
Python 2, 204 byte
Kupikir sudah waktunya untuk menanggapi pertanyaanku sendiri.
Tidak terlalu pendek, tetapi bekerja.
Jalankan sebagai:
Sunting : Menghitung byte salah. Sekarang lebih lama. :(
sumber