O Hexbox'ı engelle?


11

6 basamaklı onaltılık giriş / bağımsız değişken alan herhangi bir programlama dilinde bir program veya işlev yazın. Girdi / bağımsız değişken 6 değer veya 6 karakterli bir dize olabilir.

Programınız, yalnızca boşluklarla birleştirilmiş onaltılık karakterleri (+ Satır Besleme) içeren tam olarak 8 karakter genişliğinde dikdörtgen bir karakter bloğu çıkarmalıdır. Dikdörtgen blok, verilen 6 değerin her biri için bir tane olan daha küçük blok şekillerinin bir kombinasyonudur.

Aşağıda 2 adet örneksel örnek girişi ve geçerli örnek çıkışı verilmiştir:

Örnek giriş :

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

Geçerli bir çözüm çıktısı :

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

Örnek giriş :

"35bf12"

Geçerli bir çözüm çıktısı :

55555 22

bbbbbbbb
b b b   
      33
fffff  3
ff  ff  
ffffff 1

Kurallar:

  1. Çıktı dikdörtgen şeklinde olmalıdır

  2. Çıktı herhangi bir dikey yükseklikte olabilir, ancak tam olarak 8 karakter genişliğinde olmalıdır

  3. "Blok şekilleri" olarak adlandırılan "iç bloklar", başka herhangi bir blok şekline bağlanamaz, blok şekilleri yatay, dikey ve çapraz olarak tam 1 karakter boşluklu bir duvarla ayrılmalıdır.

  4. Boşlukların duvarı dış kenarlara paralel çalışamaz, çıkış kenarlarında sadece 1 karakter genişliğinde duvar kenarları bulunabilir. Çıktının en dıştaki dikdörtgen kenarında herhangi bir bağlantılı boşluk olmamalıdır.

  5. Boşluk duvarının genişliği Hiçbir noktada 1 karakteri geçmemelidir.

  6. İç blok şekilleri, x karakterlerinin alanı ile aynı olmalıdır, burada x, sağlanan onaltılık değerdir ve şekil, x'in onaltılık karakter temsilcisi olduğu x karakterinden oluşmalıdır.

  7. İç blok şekilleri, tüm şekil karakterleri dikey veya yatay olarak bağlandığı ve boşlukların duvarı kurallarını değerlemediği sürece herhangi bir biçimde olabilir.

  8. 6 blok şekli, çıkarılan dikdörtgenin içindeki herhangi bir dahili "sıraya" yerleştirilebilir.

  9. Geçerli giriş aralığı: Her şekil için 1 ... 15 ("1" ... "f"). Programınıza giriş 6 onaltılık sayıdan başka bir bilgi içermemelidir ve giriş programınıza / fonksiyonunuza verilmeden önce örneklerden başka bir şekilde sıralanmamalıdır. Çözümünüzün hangi girdi biçimini kullandığını bize bildirin (girdi onaltılık değerlerden başka bilgi içeremez).

  10. Bir iç blok şekli içi boş olabilir. Delik, boşlukların duvarı olarak sayılan boşluk karakterlerinden oluşmalıdır, yani içi boş bir iç blok şeklindeki delik 1 karakterden fazla olamaz.

Geçerli içi boş şekillerin üç örneği:

aaa
a aaa
aaa

999
9 9
999
9

ffffff
f   ff
ffffff

Geçersiz bir içi boş şekil örneği:

ffffff
f   f
f   f
fffff

Tüm giriş kombinasyonlarının yukarıdaki kurallara göre "çözülmesinin" mümkün olmadığını varsayıyorum, bunun için programınızın "çözmesi" gereken 10 örnek girişi listeliyorum (hepsi doğrulanabilir çözümlenebilir):

 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ınız 10 örnek girişten herhangi birini resonable zamanda çözebilmelidir. Standart bir masaüstü bilgisayarda resonable süresini 1 saat içinde çevirir. Şöyle deyin: 3 Ghz Çift çekirdekli, referans için 4GB bellek.

Bu kod golf, en kısa çözüm kazanır. Çözüm tamamen çalışan bir program veya bir işlev olabilir


Kural 7 "bağlanmak" hakkında ne anlama geliyor? Bu sadece (ifadem) 2x2 boş bir karenin varlığını yasaklayan kural 5 kısıtlamasının yeniden ifadesi mi?
Peter Taylor

Bazı yeniden düzenlemeler için özür dilerim, ancak kural 7 daha çok kural 6'nın yeniden şekillendirilmesidir, burada şekiller tek biçimli olmalıdır. Başka bir deyişle, kural 7, tek bir şeklin 2 ayrı daha küçük şekle bölünemeyeceğini söylüyor.
Plarsen

6
Kastettiğim bir niyetim yok, ama bu sorun hiçbir şekilde ilgi çekici, ilginç veya estetik açıdan hoş bir özellik göstermiyor. bu sadece soyut bir meydan okuma ve neden herkesin tüm kuralları okumak için bile gerekli sabrın olduğunu anlamıyorum, çözmeyle ilgili bir şey söylemeye gerek yok. olsa bir sonraki ile iyi şanslar!
Bogdan Alexandru

1
Açıklama: boşluk, blokları ayırdığı ve dış kenarında 2x2 blok ve ardışık iki boşluk bloğu içermediği sürece herhangi bir şekil oluşturabilir mi?
John Dvorak

2
Bu soru gerçekten zor (ya da belki kötü bir problem çözücüyüm) ... kendin bir çözümün var mı Plarsen? Her neyse, beyaz alan gereksinimlerini düşürmenin ve puanın hem karakter sayısına hem de bloğun yüksekliğine bağlı olduğu bir kod meydan okuması yapmak daha ilginç olacağını düşünüyorum (böylece yapmadan çok paketlemenizi faydalı kılıyor zor bir gereksinim).
FireFly

Yanıtlar:


1

Haskell, 156

Bu, kuralları biraz uzatıyor. Çizgiler dışında boşluk alanı yok, bu yüzden tüm duvarlarımın uzunluğu 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

464fa6 için çıkış:

4444

666666

4444

ffffffff
fffffff

aaaaaaaa
aa

666666

Çok, çok yakın :) ancak kural 4 karşılanmadı, çıktınızın hayali bir dikdörtgeni oluşturduğunuzda, en sağ kenardaki bir satırda 1'den fazla hizalama boşlukunuz var.
Plarsen

1

BrainF * ck - 134 (yeni satır girişi

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

Bence bu basit bir cevap

Girdiyi stdin'e 6 onaltılık karakterle ve ardından gönderilecek bir satırsonu üzerinden alır.

EDIT: Bu, şimdiye kadar tam olarak fark etmediğim kural 6 nedeniyle başarısız: /

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.