Tantangan ini terinspirasi oleh puzzle yang saya mainkan, yang terdiri dari potongan busa seperti ini:
yang harus dirakit menjadi kubus 3D, seperti ini:
Potongan-potongan puzzle dapat dilihat sebagai kotak 5 * 5 kotak, yang kotak 3 * 3 tengahnya selalu solid, sedangkan 16 kotak di tepi bisa padat atau kosong.
Sepotong akan dijelaskan menggunakan string 16 karakter ( 0
s dan 1
s), mewakili konfigurasi ujungnya ( 0
= kosong, 1
= padat), dalam urutan searah jarum jam, mulai dari sudut kiri atas.
Misalnya, string:
0101001000101101
mewakili bagian ini:
# #
####
####
####
# #
Untuk menyatukan potongan-potongan itu untuk membentuk kubus, setiap bagian dapat diputar ke segala arah. Sebagai contoh, ini adalah rotasi sah dari bagian yang ditunjukkan di atas:
# # # # # ## #
#### #### #### ####
#### #### #### ####
#### #### #### ####
# # # # ## # #
# # # # # ## #
#### #### #### ####
#### #### #### ####
#### #### #### ####
# # # # # # ##
Tantangan
Tulis program atau fungsi yang mengambil 6 potongan puzzle dan cetak atau kembalikan representasi 2D dari kubus yang diselesaikan.
Memasukkan
Input akan berupa string 6 baris, di mana setiap baris terdiri dari 16 0
atau 1
karakter, mewakili tepi sepotong (dalam format yang dijelaskan di atas).
Dapat diasumsikan bahwa ada solusi untuk input.
Baris baru tambahan adalah opsional.
Keluaran
Hasilnya akan menjadi representasi ASCII dari kubus yang diselesaikan, dibuka dalam 2D, seperti ini (diagram menggunakan notasi Rubik's Cube untuk nama samping):
+---+
|BA |
|CK |
| |
+---+---+---+---+
|LE |DO |RI |UP |
|FT |WN |GHT| |
| | | | |
+---+---+---+---+
|FR |
|ONT|
| |
+---+
Untuk menghindari kemungkinan menghadirkan solusi dalam berbagai cara, karya yang ditempatkan BAWAH akan selalu menjadi karya pertama yang ada dalam input, dalam rotasi yang sama seperti yang ditentukan di sana.
Setiap bagian akan direpresentasikan secara grafis sebagai matriks 5 * 5, menggunakan spasi untuk menunjukkan kotak kosong. Untuk kotak padat, Anda dapat menggunakan karakter non-spasi apa pun yang Anda inginkan, asalkan:
- setiap potongan puzzle akan memiliki kotak yang solid diwakili menggunakan karakter yang sama
- setiap dua buah yang berdekatan menggunakan karakter yang berbeda
Padding ruang di sebelah kanan dan baris baru tambahan adalah opsional.
Uji Kasus
1.
Memasukkan:
0010010101010101
0010001011011010
0101001001010010
0010110100101101
0010110110101101
0010001011010101
Keluaran:
@ @
@@@
@@@@@
@@@
** **@#@** *# #
***#####***#####
*****###*****###
***#####***#####
* @#@#** ** # #
@@@@
@@@@
@@@@
@ @
2.
Memasukkan:
0001110110101101
1010010111011101
0101010101010010
1010001000100011
1010001001010001
0110010100100010
Keluaran:
@
@@@@
@@@@
@@@@
** **@@## * *# #
****#####****###
****###*****####
****#####***####
** *#@#@# * # #
@@@@
@@@@
@@@@
@ @
3.
Memasukkan:
0101001011011010
0010001000100010
0101001011010010
0101010101011010
0101101001011101
1010001001011101
Keluaran:
@ @@
@@@@@
@@@
@@@@@
* * @#@#* * #
*****###*****###
***#####***#####
*****###*****###
* ##@##* * #
@@@@
@@@@
@@@@
@@ @@
Ini codegolf, jadi program terpendek dalam byte menang.
Jawaban:
Haskell,
1007Seribu Satu Bytes,923900830 byteSaya kebetulan telah membuat pemecah happycube, sekarang saya hanya perlu bermain golf. Mengambil penalti sepuluh byte untuk menggunakan elemen blok mewah:
Itu seteguk. Pemakaian:
Beberapa contoh memiliki lebih dari satu solusi, itu sebabnya beberapa output terlihat berbeda. Tidak Disatukan:
sumber