Os presentes foram abertos. As tortinhas foram comidas. A Guerra nas Estrelas foi assistida. A temporada de Natal está começando a terminar. Até agora você já pode ter puxado alguns biscoitos de Natal . Se você tiver sorte, em vez dos brinquedos de plástico inúteis, você pode ter ganho uma Calculadora Misteriosa com a qual pode surpreender seus amigos e parentes .
Esse truque consiste em 6 cartas, cada uma com uma grade de números 4x8 impressa. Cada cartão contém um subconjunto diferente dos números inteiros [1,63]
. O mágico solicitará que você escolha um número de um cartão e mantenha esse número em segredo. O mágico perguntará então quais cartões têm esse número. Com esse conhecimento, o mágico poderá magicamente determinar e divulgar o número original adivinhado.
Envie o conjunto completo de 6 cartões da Calculadora Misteriosa exatamente da seguinte maneira:
1 3 5 7 9 11 13 15
17 19 21 23 25 27 29 31
33 35 37 39 41 43 45 47
49 51 53 55 57 59 61 63
- - - - - - - - - - -
2 3 6 7 10 11 14 15
18 19 22 23 26 27 30 31
34 35 38 39 42 43 46 47
50 51 54 55 58 59 62 63
- - - - - - - - - - -
4 5 6 7 12 13 14 15
20 21 22 23 28 29 30 31
36 37 38 39 44 45 46 47
52 53 54 55 60 61 62 63
- - - - - - - - - - -
8 9 10 11 12 13 14 15
24 25 26 27 28 29 30 31
40 41 42 43 44 45 46 47
56 57 58 59 60 61 62 63
- - - - - - - - - - -
16 17 18 19 20 21 22 23
24 25 26 27 28 29 30 31
48 49 50 51 52 53 54 55
56 57 58 59 60 61 62 63
- - - - - - - - - - -
32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47
48 49 50 51 52 53 54 55
56 57 58 59 60 61 62 63
A saída pode ou não conter uma nova linha final à direita. Não deve haver espaço em branco à direita. Cada cartão é separado por 11 -
perfurações.
- md5sum com nova linha final:
7aa2d9339b810ec62a2b90c5e11d6f4a
- md5sum sem nova linha final:
e9abe4e32dca3e8fbfdaa4886fc5efd2
Para aqueles que têm mais orientação do Windows, também permitirei CRLF
finais de linhas de estilo. Nesse caso, os md5s são:
- md5sum com nova linha final:
e4f16ff9752eee2cedb5f97c7b5aec6d
- md5sum sem nova linha final:
78c560eed3b83513e3080117ab5dc5fa
fonte
Respostas:
Python 2 ,
99969391 bytesSai com um erro, que é permitido por padrão .
Experimente online! ou verifique o hash MD5 .
Como funciona
Após inicializar k como 1 , inserimos um loop infinito que executa o seguinte código.
tuple(n for n in range(64)if k&n)
cria uma tupla de todos os números inteiros não negativos abaixo de 64 que possuem o j- ésimo conjunto de bits, onde j é a contagem de iterações do loop, ou seja, 2 j = k .('%2d '*7+'%2d\n')*4
primeiro cria a string de formato'%2d %2d %2d %2d %2d %2d %2d \n'
e depois a repete quatro vezes. Este é um modelo para cada cartão, que preenche cada número inteiro na tupla com dois caracteres (espaços precedentes), separa cada grupo de 8 números inteiros por espaços e os próprios grupos por linhas de alimentação.Agora, a
print
declaração do Python 2 é uma fera curiosa. Ele pega várias expressões, separadas por vírgulas, e as imprime uma a uma. Ele avalia a primeira expressão, imprime, avalia as próximas expressões, imprime, etc., até que não haja mais expressões. A menos que a última expressão seja seguida por uma vírgula, ela anexa um avanço de linha. Além disso, ele anexa um espaço a todas as expressões, a menos que sejam impressas no início de uma linha.Em cada iteração, primeiro imprimimos o resultado da aplicação da string de formato à tupla. Estamos no início de uma linha, portanto, nenhum espaço é precedido.
Então, (tentamos) imprimir o resultado de
11/(k<32)*' -'
. Se k <32 , essa expressão é avaliada como' - - - - - - - - - - -'
. Mais uma vez, estamos no início de uma linha, portanto, nenhum espaço é precedido. Não há vírgula após esta expressão, portanto,print
acrescenta um avanço de linha. No entanto, na sexta iteração, k = 2 5 = 32 , portanto, tentar avaliar11/(k<32)*' -'
gera um ZeroDivisionError não capturado . Isso interrompe o ciclo e termina o programa imediatamente.fonte
C (gcc), 105 bytes
fonte
Python 2, 132 bytes
A divisão de seqüências é irritante no Python.
Experimente online .
fonte
Geléia ,
2726 bytesExperimente online! ou verifique o hash MD5 .
Como funciona
fonte
G
recurso está seriamente sobrecarregado para esse desafio. Eu precisava de cerca de 10 bytes para fazer o mesmo.Pip ,
494844 bytes43 bytes de código, +1 para
-S
sinalizador.Experimente online!
Explicação
fonte
Ruby, 90 bytes
Ungolfed
Bastante direto. A única coisa que pode exigir explicações adicionais é quando seguir um número com uma nova linha em vez de um espaço. Isso acontece quando
j+1%16==0
nas quatro primeiras cartas ej+1%8
== 0 nas duas últimas. Portanto, a expressão15>>i/64/4
ou equivalente15>>i/256
é AND comj
para determinar se é necessário espaço ou nova linha.fonte
JavaScript (ES6), 150 bytes
fonte
Perl 6 ,
194 11686 bytesTente
Tente
Tente
(verifique as seções Debug para obter os resultados do MD5)
As duas últimas foram inspiradas / transcritas nas implementações Ruby e C
fonte
05AB1E , 71 bytes
Experimente online!
Essa abordagem, não tente. Provavelmente, isso será excluído por vergonha, para ser sincero. A manipulação de matrizes não é o meu forte, então tentei que a força bruta gerasse todas as 6 seqüências e as bombeie desleixadamente.
fonte
Lote, 249 bytes
Produz um CRLF à direita.
fonte
JavaScript (ES6),
103102 bytesMD5: 7AA2D9339B810EC62A2B90C5E11D6F4A
Teste
Mostrar snippet de código
fonte
utilitários bash / Unix,
125124 bytesEditar: Removido um ^ desnecessário da expressão regular no final; a regex sempre corresponderá no início da linha de qualquer maneira.
fonte
PHP, 102 bytes
imprime uma nova linha à esquerda, mas não à direita, e um espaço à esquerda em cada linha. Corra com
-nr
ou experimente online .Para PHP <5.6, substitua
2**$c
por(1<<$c)
. PHP 5.5 poderia usar em&~1<<$c?:
vez de%2**$c||
.Para PHP <5.5, substitua
"\n"[$n++%8]
por($n++%8?"":"\n")
.Traços são um caractere desativado devido ao espaço inicial; acrescente um espaço ao primeiro
str_pad
parâmetro (insira um espaço antes da segunda linha de código) para corrigir.A remoção do espaço à esquerda requer alguns ajustes e três bytes adicionais:
printf("%c%2d",$n++%8?32:10,++$b%64);
e em23
vez de25
.Transformar a nova linha principal em uma linha final custaria outros três bytes:
PHP, 109 bytes
corresponde a todas as especificações e funciona com todas as versões do PHP.
fonte
Python 2 , 89 bytes
Experimente online!
Explicação:
fonte
05AB1E , 29 bytes
Porto de @Emigna resposta 05AB1E 's aqui , depois que eu adicionei código adicional para imprimi-lo de acordo com os requisitos deste desafio.
Experimente online ou verifique md5sum .
Explicação:
fonte
JavaScript, 234 bytes.
Vou escrever uma explicação mais tarde.
Se
console.log
necessário, a contagem de bytes seria 247 bytes.fonte