Blockbox Hex itu?

11

Tulis program atau fungsi dalam bahasa pemrograman apa pun yang membutuhkan input / argumen heksadesimal 6 digit. Input / argumen dapat berupa 6 nilai atau string 6 karakter.

Program Anda harus menampilkan blok persegi panjang karakter persis 8 karakter yang hanya berisi heksadesimal yang disediakan dikombinasikan dengan spasi (+ Linefeed). Blok persegi panjang adalah kombinasi dari bentuk blok yang lebih kecil, satu untuk masing-masing dari 6 nilai yang disediakan.

Berikut ini 2 input sampel demostratif dan sampel hasil valid:

Input sampel :

"464fa6" or [4, 6, 4, 15, 10, 6]

Satu keluaran solusi yang valid :

44 66 ff
44 66 ff
   66 ff
aa     f
aaa ffff
aa  ffff
aaa     
    6 44
66666 44

Input sampel :

"35bf12"

Satu keluaran solusi yang valid :

55555 22

bbbbbbbb
b b b   
      33
fffff  3
ff  ff  
ffffff 1

Aturan:

  1. Outputnya harus berbentuk persegi panjang

  2. Outputnya bisa dari ketinggian vertikal apa pun, tetapi harus persis lebar 8 karakter

  3. "Blok dalam", disebut sebagai "bentuk blok", tidak dapat terhubung ke bentuk blok lain, bentuk blok harus dipisahkan oleh dinding ruang kosong tepat 1 karakter lebar horizontal, vertikal dan diagonal.

  4. Dinding blankspaces tidak dapat menjalankan paralel ke tepi luar, hanya 1 karakter lebar dinding-tepi dapat ada di tepi output. Seharusnya tidak ada ruang yang terhubung di mana pun di tepi persegi panjang terluar pada output.

  5. Lebar dinding ruang kosong tidak boleh melebihi 1 karakter.

  6. Bentuk blok dalam harus seragam dengan luas karakter x, di mana x adalah nilai heksadesimal yang disediakan dan bentuk harus terdiri dari karakter x di mana x adalah perwakilan karakter heksadesimal.

  7. Bentuk blok dalam bisa berupa apa saja selama semua karakter bentuk terhubung secara vertikal atau horizontal, dan tidak membatalkan aturan untuk dinding ruang kosong.

  8. 6 bentuk blok dapat ditempatkan dalam "urutan" internal apa pun di dalam persegi panjang yang dihasilkan.

  9. Rentang input yang valid: 1 ... 15 ("1" ... "f") untuk setiap bentuk. Input untuk program Anda tidak boleh berisi informasi selain 6 angka heksadesimal, dan input tidak boleh disortir dengan cara lain selain dalam sampel sebelum diberikan ke program / fungsi Anda. Beri tahu kami format input apa yang digunakan solusi Anda (input tidak dapat berisi informasi selain nilai heksadesimal).

  10. Bentuk balok bagian dalam bisa berlubang. Lubang harus dari karakter ruang kosong yang dianggap sebagai dinding ruang kosong, artinya lubang dalam bentuk blok bagian dalam yang berlubang tidak boleh lebih dari 1 karakter.

Tiga contoh bentuk berongga yang valid:

aaa
a aaa
aaa

999
9 9
999
9

ffffff
f   ff
ffffff

Salah satu contoh bentuk berongga yang tidak valid:

ffffff
f   f
f   f
fffff

Saya berasumsi bahwa semua kombinasi input tidak mungkin untuk "diselesaikan" sesuai dengan aturan di atas, karenanya saya mencantumkan 10 sampel input yang harus dapat "diselesaikan" oleh program Anda (semua diverifikasi dapat dipecahkan):

 1. 464fa6 (same as the first sample)
 2. 35bf12 (second example input seen above)
 3. 111126
 4. ff7fff
 5. 565656
 6. abcdef
 7. 1357bd
 8. 8c6a42
 9. ab7845
10. 349a67

Program Anda harus dapat menyelesaikan salah satu dari 10 input sampel dalam waktu resonable. menerjemahkan waktu resonable ke dalam 1 jam pada komputer desktop standar. Katakan seperti: 3 Ghz Dual core, memori 4GB untuk referensi.

Ini kode golf, solusi terpendek yang menang. Solusinya dapat berupa program atau fungsi yang berfungsi penuh

Plarsen
sumber
Apa arti aturan 7 tentang "menghubungkan"? Apakah ini hanya penyajian ulang aturan 5 yang membatasi (kalimat saya) melarang adanya kotak kosong 2x2?
Peter Taylor
Saya minta maaf tentang beberapa pernyataan ulang, tetapi aturan 7 lebih merupakan pernyataan ulang aturan 6 di mana dinyatakan bahwa bentuknya harus seragam. Dengan kata lain aturan 7 mengatakan bahwa bentuk tunggal tidak dapat dibagi menjadi 2 bentuk kecil yang terpisah.
Plarsen
6
Saya tidak bermaksud jahat, tetapi masalah ini sama sekali tidak menarik, menarik, atau menunjukkan karakteristik estetis yang menyenangkan. itu hanya tantangan abstrak dan saya tidak melihat mengapa ada orang yang memiliki kesabaran yang diperlukan untuk membaca semua peraturan, tidak perlu mengatakan apa-apa tentang menyelesaikannya. semoga sukses dengan yang berikutnya!
Bogdan Alexandru
1
Klarifikasi: spasi putih dapat membentuk bentuk apa pun asalkan memisahkan blok dan tidak mengandung blok 2x2 dan tidak ada dua blok spasi putih berturut-turut di tepi luar?
John Dvorak
2
Pertanyaan ini sangat rumit (atau mungkin saya pemecah masalah yang buruk) ... apakah Anda punya solusi sendiri, Plarsen? Bagaimanapun, saya pikir akan lebih menarik untuk menjatuhkan persyaratan spasi putih dan menjadikannya sebuah tantangan kode di mana skornya tergantung pada jumlah karakter dan ketinggian blok (sehingga membuatnya bermanfaat untuk mengemasnya banyak tanpa membuat itu persyaratan yang sulit).
FireFly

Jawaban:

1

Haskell, 156

Nah, ini sedikit meregangkan aturan. Saya tidak memiliki dinding ruang kosong kecuali untuk linebreak, oleh karena itu semua dinding saya memiliki panjang 1.

import Data.List
r=replicate
main=getLine>>=putStrLn.concatMap(\b->unlines$s(head$elemIndices b"0123456789abcdef")b)
s n c|n<9=[r n c,""]|True=r 8 c:s(n-8)c

output untuk 464fa6:

4444

666666

4444

ffffffff
fffffff

aaaaaaaa
aa

666666
Zaq
sumber
Sangat, sangat dekat :) tetapi aturan 4 tidak terpenuhi, membuat persegi panjang imajiner dari output Anda, Anda memiliki lebih dari 1 menyelaraskan spasi putih dalam satu baris di tepi paling kanan.
Plarsen
1

BrainF * ck - 134 (intr baris baru

>>+[++++++++++>,----------]>++++++[<+++++>-]<++[<]<++++++[>+++++<-]>++>-
>..<<.>>>..<<<.>>>>..<<<.<........>.>>>>..>>>.<<..>>.<..[<]>>.

Saya pikir ini adalah jawaban sederhana

Input diambil melalui 6 karakter heksadesimal ke stdin, diikuti oleh baris baru untuk dikirimkan.

EDIT: Ini gagal karena aturan 6, yang saya tidak sadari sampai sekarang: /

Tyzoid
sumber