Blockbox que Hex?

11

Escreva um programa ou uma função em qualquer linguagem de programação que utilize uma entrada / argumento hexadecimal de 6 dígitos. A entrada / argumento pode ter 6 valores ou uma cadeia de 6 caracteres.

Seu programa deve gerar um bloco retangular de exatamente 8 caracteres de largura, contendo apenas os hexadecimais fornecidos combinados com espaços (+ Alimentação de linha). O bloco retangular é uma combinação de formas de bloco menores, uma para cada um dos 6 valores fornecidos.

A seguir, duas entradas de amostra demonstrativas e saídas válidas de amostra:

Entrada de amostra :

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

Uma saída de solução válida :

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

Entrada de amostra :

"35bf12"

Uma saída de solução válida :

55555 22

bbbbbbbb
b b b   
      33
fffff  3
ff  ff  
ffffff 1

Regras:

  1. A saída deve ser uma forma retangular

  2. A saída pode ter qualquer altura vertical, mas deve ter exatamente 8 caracteres de largura

  3. Os "blocos internos", referidos como "formas de bloco", não podem se conectar a nenhuma outra forma de bloco; as formas de bloco devem ser separadas por uma parede de espaços em branco com exatamente 1 caractere de largura na horizontal, na vertical e na diagonal.

  4. A parede dos espaços em branco não pode ser paralela às bordas externas, apenas bordas de parede com 1 caractere de largura podem existir nas bordas de saída. Não deve haver espaços vinculados em nenhum lugar na borda do retângulo mais externo na saída.

  5. A largura da parede dos espaços em branco não deve, em nenhum momento, exceder 1 caractere.

  6. As formas do bloco interno devem ser uniformes com a área de x caracteres, onde x é o valor hexadecimal fornecido e a forma deve consistir no caractere x em que x é o representante hexadecimal do caractere.

  7. As formas do bloco interno podem ter qualquer forma, desde que todos os caracteres da forma se conectem vertical ou horizontalmente e não valiam as regras para a parede dos espaços em branco.

  8. As 6 formas de bloco podem ser colocadas em qualquer "ordem" interna dentro do retângulo de saída.

  9. Faixa de entrada válida: 1 ... 15 ("1" ... "f") para cada forma. A entrada para o seu programa não deve conter outras informações além dos 6 números hexadecimais e a entrada não deve ser classificada de nenhuma outra maneira que não as amostras antes de ser fornecida ao seu programa / função. Diga-nos qual formato de entrada sua solução usa (a entrada não pode conter outras informações além dos valores hexadecimais).

  10. Uma forma de bloco interno pode ser oca. O furo deve ter caracteres de espaço em branco, que conta como parede de espaços em branco, o que significa que o furo em forma de bloco interno oco não pode ter mais de 1 caractere de largura.

Três exemplos de formas ocas válidas:

aaa
a aaa
aaa

999
9 9
999
9

ffffff
f   ff
ffffff

Um exemplo de uma forma oca inválida:

ffffff
f   f
f   f
fffff

Suponho que todas as combinações de entradas não sejam possíveis de "resolver" de acordo com as regras acima; portanto, listo 10 entradas de amostra que seu programa deve ser capaz de "resolver" (tudo é verificável):

 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

Seu programa deve ser capaz de resolver qualquer uma das 10 entradas de amostra em tempo razoável. traduza o tempo de ressonância para 1 hora em um computador desktop padrão. Diga como: 3 Ghz Dual core, 4 GB de memória para uma referência.

Este é o código de golfe, a solução mais curta vence. A solução pode ser um programa totalmente funcional ou uma função

Plarsen
fonte
O que a regra 7 significa sobre "conectar"? Isso é apenas uma reafirmação da restrição da regra 5 que (meu fraseado) proíbe a existência de um quadrado em branco 2x2?
Peter Taylor
Sinto muito por algumas reformulações, mas a regra 7 é mais uma reformulação da regra 6, onde se afirma que as formas devem ser uniformes. Em outras palavras, a regra 7 diz que uma única forma não pode ser dividida em duas formas menores separadas.
Plarsen
6
Não tenho intenção de ser mesquinho, mas esse problema não é de forma alguma intrigante, interessante ou mostra qualquer característica esteticamente agradável. é apenas um desafio abstrato e não vejo por que alguém teria a paciência necessária para ler todas as regras, nem é preciso dizer nada sobre resolvê-lo. boa sorte com o seu próximo embora!
Bogdan Alexandru
1
Esclarecimento: o espaço em branco pode ter qualquer forma, desde que separe os blocos e não contém bloco 2x2 e não há dois blocos consecutivos em branco na aresta
John Dvorak
2
Essa pergunta é realmente complicada (ou talvez eu não consiga resolver os problemas) ... você mesmo tem uma solução, Plarsen? De qualquer forma, acho que teria sido mais interessante descartar os requisitos de espaço em branco e torná-lo um desafio de código, em que a pontuação depende da contagem de caracteres e da altura do bloco (tornando-o benéfico empacotá-lo muito sem fazer é um requisito difícil).
FireFly

Respostas:

1

Haskell, 156

Bem, este estende um pouco as regras. Não tenho paredes em branco, exceto as quebras de linha; portanto, todas as minhas paredes têm o comprimento 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

saída para 464fa6:

4444

666666

4444

ffffffff
fffffff

aaaaaaaa
aa

666666
Zaq
fonte
Muito, muito perto :) mas a regra 4 não é cumprida, criando um retângulo imaginário de sua saída, você tem mais de um espaço em branco alinhado em uma linha na extremidade direita.
Plarsen
1

BrainF * ck - 134 (nova linha intr

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

Eu acho que essa é a resposta simplista

Entrada obtida por meio de 6 caracteres hexadecimais para stdin, seguida por uma nova linha para envio.

EDIT: Isso falha devido à regra 6, que eu não percebi completamente até agora: /

Tyzoid
fonte