Teka-teki sisi depan atas adalah teka-teki di mana Anda harus membuat bentuk 3-D dari blok (biasanya kubik) yang diberikan tiga tampilan ortogonal: tampilan atas, tampilan depan, dan tampilan samping.
Misalnya, diberi tampilan atas, depan, dan samping sebagai berikut:
Top: Front: Side:
. . . . . . . . . . . .
. x x . . x x . . x x .
. x x . . x x . . x x .
. . . . . . . . . . . .
In this problem, the side view is taken from the right.
Kubus 2x2x2 (dengan volume 8) akan memuaskan solusi ini, tetapi itu bisa dilakukan dalam volume 4, jika kita memiliki struktur lapisan berikut:
. . . . . . . .
. x . . . . x .
. . x . . x . .
. . . . . . . .
Ada juga beberapa pengaturan yang tidak dapat diselesaikan. Ambil, misalnya:
Top: Front: Side:
. . . . . . . . . . . .
. . . . . . x . . . . .
. x . . . . . . . x . .
. . . . . . . . . . . .
Jika tampilan atas mengatakan blok kedua dari kiri, tidak ada cara yang bisa cocok dengan tampilan depan yang mengatakan blok harus ketiga dari kiri. Jadi pengaturan ini tidak mungkin.
Tugas Anda adalah membangun sebuah program yang, mengingat teka-teki sisi-atas 4x4 sewenang-wenang, mencoba menyelesaikannya dalam jumlah paling sedikit kubus, atau menyatakannya tidak dapat dipecahkan.
Program Anda akan mengambil sebagai input serangkaian 48 bit, mewakili tampilan atas, depan, dan samping. Mereka mungkin dalam format apa pun yang Anda inginkan (string 6-byte, string 0 dan 1, angka hex 12-digit, dll.), Tetapi urutan bit harus dipetakan seperti itu:
Top: 0x00 Front: 0x10 Side: 0x20
0 1 2 3 0 1 2 3 0 1 2 3
4 5 6 7 4 5 6 7 4 5 6 7
8 9 a b 8 9 a b 8 9 a b
c d e f c d e f c d e f
Dengan kata lain, bitnya berada dalam urutan kiri-ke-kanan, atas-ke-bawah, di atas, lalu depan, lalu samping.
Program Anda kemudian akan menampilkan serangkaian 64 bit yang mengindikasikan kubus dalam kisi 4x4x4 yang diisi, atau menunjukkan bahwa kisi tersebut tidak dapat dipecahkan.
Program Anda akan dinilai dengan menjalankan baterai 1.000.000 kasus uji.
Data pengujian akan dihasilkan dengan mengambil hash MD5 dari bilangan bulat "000000" hingga "999999" sebagai string, mengekstraksi 48 bit pertama (12 heksit) dari masing-masing hash ini, dan menggunakannya sebagai input untuk front-front- teka-teki sisi. Sebagai contoh, berikut adalah beberapa input tes dan puzzle yang mereka hasilkan:
Puzzle seed: 000000 hash: 670b14728ad9
Top: Front: Side:
. x x . . . . x x . . .
x x x x . x . x x . x .
. . . . . x x x x x . x
x . x x . . x . x . . x
Puzzle seed: 000001 hash: 04fc711301f3
Top: Front: Side:
. . . . . x x x . . . .
. x . . . . . x . . . x
x x x x . . . x x x x x
x x . . . . x x . . x x
Puzzle seed: 000157 hash: fe88e8f9b499
Top: Front: Side:
x x x x x x x . x . x x
x x x . x . . . . x . .
x . . . x x x x x . . x
x . . . x . . x x . . x
Dua yang pertama tidak dapat dipecahkan, sedangkan yang terakhir memiliki solusi dengan lapisan berikut, dari depan ke belakang:
x . . . . . . . x x x . x x x .
. . . . x . . . . . . . . . . .
x . . . . . . . . . . . x x x x
x . . . . . . . . . . . x . . x
There are a total of 16 blocks here, but it can probably be done in less.
Skor program Anda akan ditentukan oleh kriteria berikut, dalam urutan prioritas menurun:
- Jumlah tertinggi kasus yang diselesaikan.
- Jumlah blok terendah yang diperlukan untuk menyelesaikan kasus-kasus tersebut.
- Kode terpendek dalam byte.
Anda harus menyerahkan dan menghitung skor sendiri, yang mengharuskan program Anda dapat menjalankan semua 1.000.000 kasus uji.