Blockbox to Hex?

11

Napisz program lub funkcję w dowolnym języku programowania, który przyjmuje 6-cyfrowy szesnastkowy zapis / argument. Wejście / argument może mieć 6 wartości lub ciąg 6 znaków.

Twój program powinien wypisać prostokątny blok znaków o szerokości dokładnie 8 znaków, zawierający tylko dostarczone znaki szesnastkowe w połączeniu ze spacjami (+ podawanie wiersza). Blok prostokątny jest kombinacją mniejszych kształtów bloków, po jednym dla każdej z 6 podanych wartości.

Poniżej znajdują się 2 przykładowe dane wejściowe i przykładowe prawidłowe dane wyjściowe:

Przykładowe dane wejściowe :

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

Jedno prawidłowe wyjście rozwiązania :

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

Przykładowe dane wejściowe :

"35bf12"

Jedno prawidłowe wyjście rozwiązania :

55555 22

bbbbbbbb
b b b   
      33
fffff  3
ff  ff  
ffffff 1

Zasady:

  1. Wyjście musi mieć kształt prostokątny

  2. Dane wyjściowe mogą mieć dowolną wysokość, ale muszą mieć dokładnie 8 znaków

  3. „Bloki wewnętrzne”, zwane „kształtami bloków”, nie mogą łączyć się z żadnym innym kształtem bloków, kształty bloków muszą być oddzielone ścianą pustych miejsc o szerokości dokładnie 1 znaku w poziomie, w pionie i po przekątnej.

  4. Ściana pustych przestrzeni nie może przebiegać równolegle do zewnętrznych krawędzi, tylko krawędzie ścienne o szerokości 1 znaku mogą występować na krawędziach wyjściowych. Nigdzie na skraju prostokąta wyjścia nie powinny znajdować się żadne połączone spacje.

  5. Szerokość ściany pustych miejsc nie powinna w żadnym momencie przekraczać 1 znaku.

  6. Wewnętrzne kształty bloków powinny być jednolite z obszarem x znaków, gdzie x jest podaną wartością szesnastkową, a kształt powinien składać się z postaci x, gdzie x jest reprezentatywnym znakiem szesnastkowym.

  7. Wewnętrzne kształty bloków mogą mieć dowolną formę, o ile wszystkie znaki kształtu łączą się pionowo lub poziomo i nie zmieniają reguł dotyczących ściany pustych miejsc.

  8. 6 kształtów bloków można umieścić w dowolnym wewnętrznym „porządku” wewnątrz wyprowadzonego prostokąta.

  9. Prawidłowy zakres wejściowy: 1 ... 15 („1” ... „f”) dla każdego kształtu. Dane wejściowe do programu nie powinny zawierać żadnych innych informacji niż 6 liczb szesnastkowych, a dane wejściowe nie powinny być sortowane w żaden inny sposób niż w próbkach przed dostarczeniem ich do programu / funkcji. Powiedz nam, jakiego formatu wejściowego używa Twoje rozwiązanie (dane wejściowe nie mogą zawierać żadnych innych informacji niż wartości szesnastkowe).

  10. Kształt wewnętrznego bloku może być pusty. Otwór powinien składać się ze znaków spacji, które liczą się jako ściana pustych miejsc, co oznacza, że ​​otwór w kształcie pustego wewnętrznego bloku nie może mieć więcej niż 1 znak szerokości.

Trzy przykłady prawidłowych pustych kształtów:

aaa
a aaa
aaa

999
9 9
999
9

ffffff
f   ff
ffffff

Jeden przykład nieprawidłowego pustego kształtu:

ffffff
f   f
f   f
fffff

Zakładam, że wszystkie kombinacje danych wejściowych nie są w stanie „rozwiązać” zgodnie z powyższymi regułami, dlatego wymieniam 10 przykładowych danych wejściowych, które Twój program powinien być w stanie „rozwiązać” (wszystko jest możliwe do zweryfikowania):

 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

Twój program powinien być w stanie rozwiązać dowolne z 10 próbek wejściowych w czasie rezonansowym. przetłumacz czas rezonansowy na 1 godzinę na standardowym komputerze stacjonarnym. Powiedzmy: 3 Ghz Dual core, 4 GB pamięci dla odniesienia.

To jest golf golfowy, wygrywa najkrótsze rozwiązanie. Rozwiązaniem może być w pełni działający program lub funkcja

Plarsen
źródło
Co oznacza reguła 7 dotycząca „łączenia”? Czy to tylko powtórzenie ograniczenia reguły 5, które (moje sformułowanie) zabrania istnienia pustego kwadratu 2x2?
Peter Taylor,
Przykro mi z powodu niektórych przekształceń, ale reguła 7 jest bardziej przekształceniem reguły 6, w której stwierdzono, że kształty powinny być jednolite. Innymi słowy reguła 7 mówi, że jednego kształtu nie można podzielić na 2 oddzielne mniejsze kształty.
Plarsen,
6
Nie zamierzam być wredny, ale ten problem nie jest intrygujący, interesujący ani nie wykazuje żadnych estetycznych cech. to tylko abstrakcyjne wyzwanie i nie rozumiem, dlaczego ktokolwiek miałby niezbędną cierpliwość, aby nawet przeczytać wszystkie zasady, nie trzeba wspominać o ich rozwiązaniu. powodzenia z następnym!
Bogdan Alexandru
1
Wyjaśnienie: biała spacja może tworzyć dowolny kształt, pod warunkiem że oddziela bloki i nie zawiera bloku 2x2 ani dwóch kolejnych bloków białych spacji na zewnętrznej krawędzi?
John Dvorak,
2
To pytanie jest naprawdę trudne (a może jestem kiepskim rozwiązaniem problemu) ... czy sam masz rozwiązanie, Plarsen? W każdym razie myślę, że bardziej interesujące byłoby upuszczenie wymagań dotyczących białych znaków i uczynienie z niego wyzwania kodowego, w którym wynik zależy zarówno od liczby znaków, jak i wysokości bloku (dzięki czemu korzystne jest spakowanie go dużo bez robienia to trudne wymaganie).
FireFly,

Odpowiedzi:

1

Haskell, 156

Cóż, to trochę rozciąga zasady. Nie mam żadnych pustych ścian poza przełamaniami linii, dlatego wszystkie moje ściany mają długość 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

wyjście dla 464fa6:

4444

666666

4444

ffffffff
fffffff

aaaaaaaa
aa

666666
Zaq
źródło
Bardzo, bardzo blisko :) ale reguła 4 nie jest spełniona, tworząc fikcyjny prostokąt twoich wyników, masz więcej niż 1 wyrównanie białych znaków w rzędzie na skrajnej prawej krawędzi.
Plarsen
1

BrainF * ck - 134 (nowa linia intr

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

Myślę, że to jest najprostsza odpowiedź

Dane wejściowe pobrane za pomocą 6 znaków szesnastkowych na standardowe wejście, a następnie nowy wiersz do przesłania.

EDYCJA: Nie udaje się to z powodu reguły 6, której do tej pory nie zdawałem sobie w pełni sprawy: /

Tyzoid
źródło