Eu tenho cem cofres, cada um dentro do outro. Cada cofre possui uma senha, consistindo em um único número.
95 43 81 89 56 89 57 67 7 45 34 34 78 88 14 40 81 23 26 78 46 8 96 11 28 3 74 6 23 89 54 37 6 99 45 1 45 87 80 12 92 20 49 72 9 92 15 76 13 3 5 32 96 87 38 87 31 10 34 8 57 73 59 33 72 95 80 84 11 4 11 11 37 71 77 91 49 21 52 48 43 11 77 52 64 3 9 21 38 65 69 84 96 78 7 71 80 78 3 97
É muito difícil memorizar todas essas senhas e não é seguro mantê-las em um pedaço de papel. A única solução em que consigo pensar é usar um programa com exatamente cem caracteres. A senha do n
th vault será encontrada tratando os primeiros n
caracteres do código como um programa.
Portanto, o primeiro caractere do programa, se executado como um programa por si só, deve ser gerado 95
. Os dois primeiros caracteres devem ser gerados por eles mesmos 43
. O programa inteiro deve gerar 97
.
Eu admito que isso é realmente difícil. Então, faça o seu melhor. Tente fazer seu programa funcionar para o máximo de cofres possível , e eu memorizarei as senhas para o resto.
Regras
- Se houver um empate, o vencedor é o primeiro envio.
- Falhas padrão proibidas. Isso inclui a leitura de outros arquivos ou da Internet.
- Você tem algumas opções para o código:
- Um programa completo que imprime o número correto
- Uma função que a devolve ou imprime
- Uma expressão que avalia para ele (por exemplo, em C,
4+3
avalia para7
)
- Você pode assumir um ambiente REPL
- Você pode usar técnicas diferentes para cada valor de
n
. Por exemplo, você pode usar idiomas diferentes para cada umn
, ou às vezes usar um programa completo e outras vezes uma função.
Nota: Este cenário é completamente fictício. Se você tiver um problema semelhante, não publique suas senhas online.
The only solution I can think of is to use a program with exactly one hundred characters.
Isso significa que todo programa precisa ter exatamente 100 caracteres?Respostas:
> <> (Peixe), 95
Começando após o
'
coloca todos os caracteres na pilha e no final da linha, ele envolve; fecha a string com o mesmo'
; gera o topo da pilha como um número (n
) e termina a execução (;
).Os caracteres 13 e 10 foram alterados para o espaço para não estragar o layout do código (como peixe é uma linguagem 2D).
Alguns ASCII não imprimíveis desaparecem na resposta. Programa correto aqui.
Obrigado por Martin Büttner e Sp3000 pelas melhorias de 2 e 5 bytes.
Despejo hexagonal:
fonte
'
para análise de cadeia, única"
, e há várias"
s no programa que teriam de ser substituídos./fish.py <(head -c 99 raw.php)
whereraw.php
é o nome que de alguma forma acabou no arquivo de origem que eu baixei. Arrumado! Não posso dizer que eu entendo ainda ...CJam, 40
Acabei de usar uma abordagem gananciosa (na maioria das vezes) para imprimir o próximo número possível (pontos de intercalação marcam o término correto do programa):
Os seguintes números são impressos corretamente:
Teste aqui.
fonte
CJam, 56
Aqui está uma abordagem um pouco mais elaborada. Imprime os últimos 56 números corretamente:
Provavelmente, o SE engoliu alguns caracteres, então aqui está uma pasta . Você pode tentar o código aqui .
Ele faz uso do fato de que o desafio solicita os programas em caracteres, então estou usando caracteres Unicode para codificar os últimos 56 caracteres em uma função, que deixa o elemento correto na pilha, incrementando uma variável em cada chamada. e selecionando o elemento correspondente. O restante do código chama a função repetidamente.
O primeiro programa correto é aquele que termina no segundo
F
no código. Eu brinquei com o comprimento dos caracteres a serem codificados por um tempo até encontrar o equilíbrio certo para fazer o máximo uso possível. Um ou mais dois podem ser possíveis com essa abordagem.fonte
Pyth,
9293O código acima obviamente ficará bagunçado porque o SE remove os caracteres de controle; portanto, encontre o código real aqui
A lógica é simples, a string é a representação de caracteres de cada número, exceto os três primeiros que são usados pela lógica de conversão e algumas aspas e novas linhas que substitui por caracteres fictícios.
Vou tentar aumentar a pontuação aqui.
Experimente online aqui
fonte
(vintage) C - 88
Não há necessidade de todas essas línguas tolas de golfe dedicadas. Melhor voltar aos bons velhos tempos, antes que os comedores de quiche e seu absurdo "programa = algoritmo + dados" arruinassem toda a diversão.
O código é uma função C, armazenada como uma sequência.
Retorna o valor binário como um número inteiro.
Execute-o no DosBox com o Borland Turbo C 2.0.
Não há caracteres de controle na cadeia, portanto, uma cópia e colagem deve funcionar.
Compile com
tiny
o modelo de memória ou então ...Se você desmontar o início da string, verá algo como:
Desde a
si
é usado como endereço de função, ele aponta diretamente para o código, seguido pelas senhas.Todos os valores são alterados em 35 para evitar caracteres de controle de escape e aspas duplas.
O código tem 11 bytes de comprimento e, portanto, funciona com até 12 caracteres.
Infelizmente, o 11º valor (34) é muito baixo para produzir uma senha válida com um valor de turno aumentado (
ret
opcode é 195, portanto, você precisaria de um turno de 161, e o turno máximo para evitar uma rolagem é 255-99 = 156) .11 caracteres produzirão um valor errado e o seu PC virtual sofrerá comportamentos indefinidos graves (e geralmente letais) com 10 caracteres ou menos.
fonte
Matlab
3739Você pode usar parte (sem ponto e vírgula) dessa idéia com qualquer linguagem de programação que desejar, que imprima os resultados diretamente no console. Isso produzirá pelo menos 39 vezes as respostas certas. (Eu não verifiquei aqueles em que apenas meio número poderia dar uma resposta correta, mas encontrei dois até agora.)
fonte
code="43+13+11-33+54;81;78;8+20;74+15-83;01+79-59-12+6-2;;87+0-53+39;72;;11+00+66-56+22;52;3*7+48;78-7+7+0"; key="95 43 81 89 56 89 57 67 7 45 34 34 78 88 14 40 81 23 26 78 46 8 96 11 28 3 74 6 23 89 54 37 6 99 45 1 45 87 80 12 92 20 49 72 9 92 15 76 13 3 5 32 96 87 38 87 31 10 34 8 57 73 59 33 72 95 80 84 11 4 11 11 37 71 77 91 49 21 52 48 43 11 77 52 64 3 9 21 38 65 69 84 96 78 7 71 80 78 3 97".split(" "); res=0; for(q=0; q<100; ++q) try{ if(eval(code.substr(0,q+1))==key[q]) console.log(++res,q+1,key[q]) } catch(e) {}
- mostra apenas 28 correspondências‌​
depois00+
012345679+-*;
Fora da competição: Javascript, 173
Aqui está uma "solução", que não segue as regras no sentido de que contém um programa muito mais longo do que o necessário, mas com um comprimento base de 152 caracteres será exibido
95
e, para cada caractere numérico subsequente adicionado a ele, até 22 , ele exibirá uma senha adicional:Infelizmente, ele só funciona com até 22 caracteres (pelo menos no nó REPL, qualquer coisa acima que pareça desconsiderar), o que acredito ser uma limitação da representação numérica no idioma. Se não fosse por essa limitação, use a string de senha completa de
(elevando o comprimento total para 329 caracteres) permitiria que essa lógica produzisse todas as senhas.
O código não é particularmente inteligente, apenas remove alguns caracteres em comparação com as soluções mais triviais, usando:
Principalmente, eu só estava interessado em escrever um programa Javascript válido com duração variável, pois o idioma não é muito adequado para o golfe em geral.
Eu sou novo no codegolf, peço desculpas se postar essas soluções claramente inválidas é desaprovado.
fonte
Python 2, 39
Escrevi um script que tenta muitas combinações de expressões e as testa contra as combinações seguras. O melhor que eu consegui foi 39 partidas. Fiquei surpreso com quantas combinações resultaram na pontuação de 39. Incluí uma amostra na minha resposta.
Tentei incluir os
^&|
operadores lógicos , mas as regras de precedência ficaram complicadas.fonte
DEBUG.COM, 93
Uso:
e o resultado aparece em
AL
fonte