Este é um 3x3
quebra-cabeça ASCII:
_____ _____ _____
| _| |_ |
| (_ _ _) |
|_ _|_( )_|_ _|
| (_) |_ _| (_) |
| _ _) (_ _ |
|_( )_|_ _|_( )_|
| _| (_) |_ |
| (_ _) |
|_____|_____|_____|
Este também é um 3x3
quebra-cabeça ASCII:
_____ _____ _____
| |_ _| |
| _ _) (_ _ |
|_( )_|_ _|_( )_|
| _| (_) |_ |
| (_ _ _) |
|_ _|_( )_|_ _|
| (_) |_ _| (_) |
| _) (_ |
|_____|_____|_____|
Cada linha em um quebra-cabeça ASCII (excluindo as caixas de arestas, ou seja, as peças literalmente nas arestas) consiste no seguinte padrão:
_ _ _
_( )_ _ _ _( )_ _ _ _( )_
|_ _| (_) |_ _| (_) |_ _|
_) (_ _ _) (_ _ _) (_
|_ _|_( )_|_ _|_( )_|_ _| ...
(_) (_) (_)
Dados 2 números inteiros H
e W
onde H
está a altura (quantidade vertical) e W
a largura (quantidade horizontal) H
e W
são >1
emitidos um possível HxW
quebra-cabeça ASCII.
Exemplos
Caso de teste 1
Entrada: 2, 4
Saída:
_____ _____ _____ _____
| |_ _| |_ |
| _ _) (_ _ _) |
|_( )_|_ _|_( )_|_ _|
| _| (_) |_ _| (_) |
| (_ _) (_ |
|_____|_____|_____|_____|
Caso de teste 2
Entrada: 4, 4
Saída:
_____ _____ _____ _____
| |_ _| |_ |
| _ _) (_ _ _) |
|_( )_|_ _|_( )_|_ _|
| _| (_) |_ _| (_) |
| (_ _ _) (_ _ |
|_ _|_( )_|_ _|_( )_|
| (_) |_ _| (_) |_ |
| _ _) (_ _ _) |
|_( )_|_ _|_( )_|_ _|
| _| (_) |_ _| (_) |
| (_ _) (_ |
|_____|_____|_____|_____|
Caso de teste 3
Entrada: 3, 5
Saída:
_____ _____ _____ _____ _____
| |_ _| |_ _| |
| _ _) (_ _ _) (_ _ |
|_( )_|_ _|_( )_|_ _|_( )_|
| _| (_) |_ _| (_) |_ |
| (_ _ _) (_ _ _) |
|_ _|_( )_|_ _|_( )_|_ _|
| (_) |_ _| (_) |_ _| (_) |
| _) (_ _) (_ |
|_____|_____|_____|_____|_____|
Caso de teste 4
Entrada: 2, 2
Saída:
_____ _____
| _| |
| (_ _ |
|_ _|_( )_|
| (_) |_ |
| _) |
|_____|_____|
Esclarecimentos
- A altura e a largura de cada peça do quebra-cabeça não devem ser redimensionadas para cima ou para baixo.
- Com
H
eW
sendo maior que uma, as menores dimensões possíveis são2x2
(consulte a IO 4). - Você pode ter um programa completo ou uma função.
- A entrada será de 2 linhas com
H
a 1ª eW
a 2ª se você estiver usando uma função, poderá tê-las nos parâmetros. - Saída para stdout (ou algo semelhante).
- Este é o código-golfe, pelo que a resposta mais curta em bytes vence.
Respostas:
JavaScript (ES6) 272
277 271Editar correção de bug
Editar 2 salvos 6 bytes thx @ L.Serné
Edite 3 correções de erros novamente
Menos golfe
Teste
fonte
for(t=z(' _____',0,0)+z('|_ _| ',2,--h)+z(b=' _) (_ _ ')+z(c='|_ _|_( )_',0);--h;a='|_ _| (_) ')
1. Isso salva 4 vírgulas, assim você termina com . apenas 273 caracteres EDIT: O trecho de teste ainda está grampeada ...t=...
dentro do for, ele falha para h == 2. É exatamente o bug que corrigi hoje.undefined
resultado foi declaradaa
na última parte dofor
loop. Mudei um pouco o código e acabei com isso. Você deve poder integrar isso ao eval para outro salvamento de 2B.(w,h,z=(s,q=3,i=h)=>'| '.slice(0,q)+s.repeat(w).substr(i%2*6+q,w*6-2*q+1)+' |\n'.slice(~q),a='|_ _| (_) ')=>{for(t=z(' _____',0,0)+z('|_ _| ',2,--h)+z(b=' _) (_ _ ')+z(c='|_ _|_( )_',0);--h;)t+=z(a,2)+z(b)+z(c,0);return t+z(a,2)+z(' _) (_ ')+z('|_____',1)}
(276 B).Python, 513 bytes
Talvez seja mais um exercício de ofuscação do que de golfe, este funciona decidindo para qual caractere cada
(x,y)
coordenada vai, em vez de construir cada padrão por sequência. Ungolfed pareceOs padrões se parecem
podemos ver isso como uma tabela de pesquisa de números inteiros com colunas obtidas no mod 6 e linhas mod 3
Essa estratégia de combinar diferentes padrões realmente não funcionou para mim aqui, porque expressá-los é bastante complicado (embora eu ache que poderia ter jogado mais) e porque os casos extremos ocupam muitos caracteres para corrigir. Estou colocando isso de qualquer maneira, porque demorei um minuto e pode ser do seu interesse.
fonte
Mathematica, 384 bytes
Função sem nome, tendo como argumento um par ordenado de números inteiros e retornando uma sequência contendo novas linhas apropriadas. Com espaços e novas linhas adicionados:
fonte
Lote,
562528 bytesResistente ao golfe, como a repetição costumava custar muitos bytes para eliminar, por exemplo, passo manualmente o número da linha mod 3, porque é muito caro calcular. Edit: Além disso, eu inadvertidamente jogava golfe extra
|
a cada terceira linha, o que está incorreto. Corrigir isso realmente me salvou 2 bytes (4 bytes na minha versão original). Explicação:a
contém vários bits de quebra-cabeças. A:t
função os troca por cada conjunto de três linhas e extrai as substrings necessárias que a:c
função repete em pares, mas excluir a primeira coluna sew
for ímpar. Os casos da borda esquerda e direita são tratados antes da saída da linha.A outra aresta é a primeira linha na qual os!
s são alterados para espaços em vez de|
s (o código evita|
s porque são difíceis de manipular no Lote).fonte
Befunge,
263243 bytesExperimente online!
A maneira como isso funciona é iterando sobre as coordenadas x, y da área que queremos produzir e mapeando esses valores x , y para coordenadas u , v no padrão de quebra-cabeça (armazenado nas três primeiras linhas do campo de jogo). Esse mapeamento é realizado com as seguintes fórmulas básicas:
A coordenada u repete-se a cada 12 colunas, mas também precisa ser deslocada em 6 a cada 3 linhas. A coordenada v se repete a cada 3 linhas, mas adicionamos
y==0
ao valor para que a primeira linha possa ser renderizada como um caso especial. No entanto, para manipular as arestas, precisamos introduzir um valor booleano adicional, e , que é verdadeiro para vários locais de arestas e que ajusta as fórmulas da seguinte maneira:Portanto, se estivermos em uma aresta, adicionamos 4 à coordenada v para usar o padrão de aresta mais simples nas linhas 5 a 7. E agora também precisamos modificar a coordenada u por 6 em vez de 12, pois esse padrão de aresta repete a cada 6 colunas.
Quanto ao valor e em si, isso requer uma fórmula bastante complexa, pois os locais das bordas abrangem uma área um tanto irregular da borda do quebra-cabeça.
Sem entrar em muitos detalhes, o detalhamento básico é que o elr corresponde aos locais da borda ao longo das bordas esquerda e direita, enquanto o etb corresponde aos locais ao longo das bordas superior e inferior.
fonte
JavaScript (ES6), 285 bytes
Esta é uma porta da minha resposta em lote, apenas para ver se ela concorre com a resposta da @ edc65. A corda irritantemente longa contém peças de quebra-cabeças. As seis primeiras peças representam duas linhas de uma coluna do interior do quebra-cabeças. A sétima peça é usada para a penúltima linha do quebra-cabeças, no lugar da quarta peça. A oitava peça é usada na segunda linha do quebra-cabeças, no lugar da quinta peça, e também faz o dobro do trabalho como a borda esquerda do quebra-cabeças. A nona peça é a última linha do quebra-cabeças.
fonte