Bir üst-ön-bulmaca, üç dikey görünüm verilen (genellikle kübik) blokların 3-B şeklini inşa etmeniz gereken bir bilmecedir: üstten görünüm, önden görünüm ve yandan görünüm.
Örneğin, üst, ön ve yan görünüm aşağıdaki gibi verilir:
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.
2x2x2'lik bir küp (hacim 8 ile) bu çözümü karşılar, ancak aşağıdaki katman yapısına sahipsek 4. hacimde yapılabilir:
. . . . . . . .
. x . . . . x .
. . x . . x . .
. . . . . . . .
Çözülemeyen bazı düzenlemeler de vardır. Örneğin, şunu ele alalım:
Top: Front: Side:
. . . . . . . . . . . .
. . . . . . x . . . . .
. x . . . . . . . x . .
. . . . . . . . . . . .
Üst görünüm bloğun soldan ikinci olduğunu söylüyorsa, bloğun soldan üçüncü olması gerektiğini söyleyen ön görünümle eşleşebilecek bir yol yoktur. Yani bu düzenleme imkansız.
Senin görevin, keyfi bir 4x4 ön-ön bulmaca verilen, en az sayıda küp içinde çözmeye çalışan veya çözülemez ilan eden bir program inşa etmektir.
Programınız, üst, ön ve yan görünümleri temsil eden 48 bitlik bir dizi girdi olarak alacaktır. İstediğiniz formatta olabilirler (6 baytlık bir dize, 0'lı ve 1'li bir dize, 12 basamaklı onaltılık bir sayı vb.), Ancak bitlerin sırası şu şekilde eşleşmelidir:
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
Başka bir deyişle, bitler soldan sağa, yukarıdan aşağıya doğru sırada, üstte, sonra önden, sonra yan görünümde gider.
Programınız daha sonra 4x4x4 ızgarasında doldurulmuş küpleri veya ızgaranın çözülemez olduğunu belirten 64 bitlik bir dizi çıkarır.
Programınız 1.000.000 test vakasıyla çalıştırılarak puanlanacaktır.
Test verileri, "000000" ile "999999" arasındaki tamsayıların MD5 karmalarını dize olarak alarak, bu karmaların her birinin ilk 48 bitini (12 hex) çıkararak ve bunları ön-ön- yan bulmaca. Örnek olarak, bazı test girişleri ve ürettikleri bulmacalar:
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
İlk ikisi çözülemezken, son ikisi önden arkaya aşağıdaki katmanlarla bir çözüme sahiptir:
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.
Programınızın puanı, azalan öncelik sırasına göre aşağıdaki ölçütlere göre belirlenir:
- En çok çözülen dava sayısı.
- Bu durumları çözmek için gereken en düşük blok sayısı.
- Bayt cinsinden en kısa kod.
Skoru kendiniz göndermeli ve hesaplamalısınız, bu da programınızın 1.000.000 test vakasının tümünü geçmesini gerektirir.