A linguagem de programação esotérica evil possui uma operação interessante sobre valores de bytes que chama de "tecelagem". É essencialmente uma permutação dos oito bits do byte (não importa de que extremidade começamos a contar, pois o padrão é simétrico):
- O bit 0 é movido para o bit 2
- O bit 1 é movido para o bit 0
- O bit 2 é movido para o bit 4
- O bit 3 é movido para o bit 1
- O bit 4 é movido para o bit 6
- O bit 5 é movido para o bit 3
- O bit 6 é movido para o bit 7
- O bit 7 é movido para o bit 5
Por conveniência, aqui estão duas outras representações da permutação. Como um ciclo:
(02467531)
E como uma lista de pares do mapeamento:
[[0,2], [1,0], [2,4], [3,1], [4,6], [5,3], [6,7], [7,5]]
Sua tarefa é visualizar esta permutação, usando os personagens de desenho de caixa ─
, │
, ┌
, ┐
, └
, ┘
, ┼
(Unicode pontos de código: U + 2500, U + 2502, U + 250C, U + 2510, U + 2514, U + 2518, U + 253C). Essa visualização deve satisfazer as seguintes restrições:
A primeira e a última linha são exatamente:
0 1 2 3 4 5 6 7
Entre eles, você pode usar quantas linhas desejar, com até 15 caracteres cada, para ajustar os caracteres de desenho da caixa (você precisará de pelo menos 4 linhas). As linhas devem começar verticalmente abaixo de um dos dígitos na primeira linha e terminar verticalmente acima do dígito correspondente na última linha. As oito linhas devem estar conectadas e só podem atravessar via ┼
(que é sempre uma travessia, nunca duas linhas de viragem que estão tocando). Os caminhos exatos das linhas são com você (e encontrar um layout particularmente jogável é o cerne deste desafio). Uma saída válida seria:
0 1 2 3 4 5 6 7
│ │ └─┼┐│ │ └┐│
└─┼─┐ ││└─┼─┐││
┌─┘ │ ││ │ │││
│ ┌─┼─┘│ │ │││
│ │ │ ┌┼──┘ │││
│ │ │ │└┐ ┌─┼┼┘
│ │ │ │ │ │ │└┐
0 1 2 3 4 5 6 7
No entanto, qualquer outro layout que conecte corretamente os dígitos corretos também é bom. Por favor, mostre a sua saída escolhida na sua resposta.
Você pode escrever um programa ou função e não aceita nenhuma entrada. Envie o diagrama para STDOUT (ou alternativa mais próxima) ou como um valor de retorno da função na forma de uma string ou uma lista de strings (cada uma representando uma linha).
Aplicam-se as regras de código-golfe padrão , para que o código mais curto (em bytes) vença.
fonte
01234567
como uma entrada e, em seguida, conectar que para01234567
? Para que você mesmo descubra os links? Seria uma tarefa significativamente mais desafiadora, especialmente para o golfe.Respostas:
Na verdade, 69 bytes
Experimente online! (o alinhamento está um pouco confuso no intérprete on-line)
Na verdade, há uma enorme vantagem aqui - todos os caracteres de desenho da caixa estão no CP437, portanto, são apenas um byte cada. Embora cada caractere necessário possa, teoricamente, ser codificado em 4 bits (já que existem apenas 9 caracteres únicos), os 31 bytes salvos pela compactação da string serão perdidos devido aos recursos de processamento de string muito ruins da Actually. Isso também significa que qualquer configuração 8x4 resultaria na mesma pontuação. Como 8x4 parece ser a configuração mais curta possível (verticalmente), isso é ideal.
Obrigado a Martin por 3 bytes!
Obrigado a TimmyD por mais 4 bytes!
Explicação:
fonte
PowerShell v2 +,
172153148145142131123 bytes (81 caracteres)Joguei a tecelagem ainda mais, eliminando a necessidade de várias variáveis usando blocos de código em linha. Provavelmente isso está dentro de alguns bytes do ideal.
Começamos definindo
$a
igual ao intervalo0..7
que foi unido aos espaços. Isso ocorre porque o padrão$ofs
(Separador de campo de saída) de uma matriz é um espaço, portanto, quando a matriz é estritamente""+
(com um operador como este, o PowerShell tentará converter implicitamente o objeto da mão direita como o objeto da esquerda), o resultado é o intervalo separado por espaço.Isso é encapsulado em parênteses, o que adiciona o resultado ao pipeline. Em seguida, configuramos uma variável auxiliar
$b
, seguida por quatro linhas de saída com a variável apropriada no lugar (dividida com novas linhas literais) e usando blocos de código em linha para seções repetidas, seguidos$a
novamente. As quatro linhas e$a
também são colocadas no pipeline, e a saída está implícita no final.fonte
Javascript ES6,
168167 bytesEdit: Opa, aconteceu que eu estava usando o
|
caractere de pipe em vez de U + 2502│
em parte da função, contagem de bytes atualizada.Retorna uma string.
Saída:
Extra: Usando o método do @ TimmyD, tenho outra solução de 167 bytes:
fonte
JavaScript (ES6),
137134 bytesComo campainha, reconheci imediatamente isso como as duas primeiras linhas do Plain Hunt Major (observe que a imagem vinculada usa 1-8 em vez de 0-7).
fonte
Pitão -
11910410081 bytesExtremamente simples. (Na verdade, são bytes desta vez).
Experimente online aqui .
Eu também roubei a saída de @ TimmyD:
fonte
Lote do MS-DOS, 136 bytes
Usando a saída de @ TimmyD. Isso também pode funcionar no Lote do Windows, mas minha página de código é o CP850, não o CP437.
fonte
MATLAB / oitava,
112109 bytesSaída:
Meu código é baseado nos resultados de @Dendrobium e @Neil .
fonte
/// , 112 bytes (100 caracteres)
Obrigado @MartinEnder por -3 bytes!
Obrigado @MartinEnder por -9 bytes!
Obrigado @MartinEnder (OP) por apontar a exclusão de 15 caracteres
Usa a saída de
@ TimmyD's@ Marcofonte
Python3, 209 bytes
Retorna uma string.
Agradecemos ao @Mego por economizar 2 bytes!
Os créditos do corpo do personagem vão para @TimmyD!
fonte
a,
peça, o que também removerá a necessidade de ser chamada com um parâmetro.Sprects , 99 bytes (87 caracteres)
Usa a saída de @ Marco (substitua cada caractere 16 por uma nova linha (regex:
(.{15}).
->\1\n
)).fonte
Bash + GNU sed, 140 bytes
Saída:
Usando a saída do @ TimmyD : 142 bytes
Saída:
fonte
Tcl , 205 bytes
Experimente online!
saídas
fonte
SOGL V0.12 , 64 bytes
Experimente aqui!
Padrão roubado do PowerShell
fonte