Escreva um programa ou função que não aceite nenhuma entrada, mas imprima ou retorne uma representação textual constante de um retângulo feito dos 12 pentominós distintos :
O retângulo pode ter qualquer dimensão e estar em qualquer orientação, mas todos os 12 pentominós devem ser usados exatamente uma vez, para ter a área 60. Cada pentominó diferente deve ser composto por um caractere ASCII imprimível diferente (você não precisa usar o letras de cima).
Por exemplo, se você optar por gerar esta solução de retângulo pentomino 20 × 3:
A saída do seu programa pode ser algo como isto:
00.@@@ccccF111//=---
0...@@c))FFF1//8===-
00.ttttt)))F1/8888=-
Como alternativa, você pode achar mais fácil jogar golfe nesta solução 6 × 10:
000111
203331
203431
22 444
2 46
57 666
57769!
58779!
58899!
5889!!
Qualquer solução de retângulo serve, seu programa só precisa imprimir uma. (Uma nova linha à direita na saída está correta.)
Este ótimo site tem muitas soluções para várias dimensões de retângulo e provavelmente vale a pena procurá-las para garantir que sua solução seja a mais curta possível. Isso é código-golfe, a resposta mais curta em bytes vence.
fonte
Respostas:
Pitão, 37 bytes
Demonstração
Usa uma abordagem muito direta: use bytes hexadecimais como números. Converta para um número hexadecimal, base 256 codifica isso. Isso dá a seqüência mágica acima. Para decodificar, use a função de decodificador 256 base do Pyth, converta em hexadecimal, divida em 4 pedaços e entre em novas linhas.
fonte
CJam (44 bytes)
Dado no formato xxd porque contém caracteres de controle (incluindo uma guia bruta, que é muito ruim com o MarkDown):
que decodifica para algo ao longo das linhas de
Demonstração on-line levemente não-destruída, que não contém caracteres de controle e funciona muito bem com as funções da biblioteca de decodificação do URI do navegador.
O princípio básico é que, como nenhuma peça abrange mais de 5 linhas, podemos codificar um deslocamento de uma função linear do número da linha de maneira compacta (na base 5, de fato, embora eu não tenha tentado determinar se esse sempre seria o caso )
fonte
Bash + utilitários comuns do Linux, 50
Para recriar isso a partir da base64 codificada:
Como existem 12 pentominós, suas cores são facilmente codificadas em hexagonais.
Resultado:
fonte
J, 49 bytes
Você pode escolher as letras de forma que os incrementos máximos entre as letras adjacentes verticalmente sejam 2. Usamos esse fato para codificar incrementos verticais na base3. Depois disso, criamos as somas em execução e adicionamos um deslocamento para obter os códigos ASCII das letras.
Definitivamente jogável. (Ainda não encontrei uma maneira de inserir números base36 de precisão estendidos, mas a base36 simples deve economizar apenas 3 bytes.)
Resultado:
Experimente online aqui.
fonte
3#i.5
qual é0 0 0 1 1 1 ... 4 4 4
), ele pode funcionar, mas provavelmente não será mais curto (pelo menos do jeito que tentei).Microscript II , 66 bytes
Vamos começar com a resposta simples.
Hooray impressão implícita.
fonte
Rubi
Rev 3, 55 bytes
Como um desenvolvimento adicional da idéia da Randomra, considere a tabela de saída e diferença abaixo. A tabela de diferenças pode ser compactada como antes e expandida multiplicando por 65 = binário 1000001 e aplicando uma máscara 11001100110011. No entanto, Ruby não funciona previsivelmente com caracteres de 8 bits (tende a interpretá-los como Unicode).
Surpreendentemente, a última coluna é inteiramente uniforme. Por isso, na compactação, podemos executar uma mudança de direitos nos dados. Isso garante que todos os códigos sejam ASCII de 7 bits. Na expansão, simplesmente multiplicamos por 65 * 2 = 130 em vez de 65.
A primeira coluna também é totalmente uniforme. Portanto, podemos adicionar 1 a cada elemento (32 a cada byte) sempre que necessário, para evitar qualquer caractere de controle. O 1 indesejado é removido usando a máscara 10001100110011 = 9011 em vez de 11001100110011.
Embora eu use 15 bytes para a tabela, eu realmente só uso 6 bits de cada byte, que é um total de 90 bits. De fato, existem apenas 36 valores possíveis para cada byte, ou seja, 2,22E23 de possibilidades no total. Isso caberia em 77 bits de entropia.
Rev 2, 58 bytes, usando a abordagem incremental de Randomra
Finalmente, algo mais curto que a solução ingênua. A abordagem incremental de Randomra, com o método bytepacking de Rev 1.
Rev 1, 72 bytes, versão em golfe da rev 0
Algumas mudanças foram feitas na linha de base para acomodar uma reordenação do código por razões de golfe, mas ainda assim chegou mais do que a solução ingênua.
As compensações são codificadas em cada caractere da sequência mágica na base 4 no formato
BAC
, ou seja, com os 1s representando o símbolo da direita, os 16's representando o símbolo do meio e o símbolo da esquerda na posição 4. Para extraí-los, o código ascii é multiplicado por 65 (binário 1000001) para fornecer eBACBAC
, em seguida, é adicionado com 819 (binário 1100110011) para fornecer.A.B.C
.Alguns dos códigos ascii têm o conjunto de 7 bits, ou seja, são 64 mais altos que o valor necessário, para evitar caracteres de controle. Como esse bit é removido pela máscara 819, isso é inconseqüente, exceto quando o valor de
C
é 3, o que causa uma transição. Isso deve ser corrigido em um único local (em vez deg
precisarmos usá-loc
).Rev 0, versão ungolfed
Resultado
Explicação
Da solução a seguir, subtraio a linha de base, fornecendo o deslocamento que armazeno como dados. A linha de base é regenerada como um número hexadecimal no código por
i/2*273
(273 decimal = 111 hex.)fonte
3
na tabela inteira (logo abaixo da parte inferior), então acho que aumentando a linha de base em pouco mais de 0,5 a cada linha, pode ser realmente possível usar a base 3. Sinta-se à vontade para tentar isso. (Por razões de golfe, parece que vou ter que mudar um pouco a linha de base, o que me dá um pouco mais de 3 e, infelizmente, parece que vai demorar 1 byte a mais que a ingênua solução em Ruby.)Foo, 66 bytes
fonte