Escreva o programa mais curto possível, de modo que quando você combinar o primeiro caractere e cada enésimo caractere depois dele em um novo programa, a saída será N. Isso deve funcionar para N = 1, 2, ..., 16.
Outra maneira de dizer isso é: se você remover todos os caracteres do seu programa, exceto o primeiro e o enésimo nono depois disso, a saída do código restante deverá ser N.
Exemplo
Se o seu código foi
ABCDEFGHIJKLMNOP
N = 1 resulta em ABCDEFGHIJKLMNOP
. Executando esta deve saída 1.
N = 2 resulta em ACEGIKMO
. Executando esta deve saída 2.
N = 3 resulta em ADGJMP
. Executando esta deve saída 3.
N = 4 resulta em AEIM
. Executando esta deve saída 4.
N = 5 resulta em AFKP
. Executando esta deve saída 5.
N = 6 resulta em AGM
. Executando esta deve saída 6.
N = 7 resulta em AHO
. Executando esta deve saída 7.
N = 8 resulta em AI
. Executando esta deve saída 8.
N = 9 resulta em AJ
. Executando esta deve saída 9.
N = 10 resulta na AK
. Saída de executar este deveria 10.
N = 11 resultados em AL
. A execução disso deve gerar 11.
N = 12 resulta emAM
. Executando esta deve saída 12.
N = 13 resulta na AN
. Executando esta deve saída 13.
N = 14 resulta na AO
. Executando esta deve saída 14.
N = 15 resulta na AP
. Executando esta deve saída 15.
N = 16 resulta na A
. A execução disso deve gerar 16.
Detalhes
- Todos os caracteres são permitidos, ASCII e não ASCII. (Novas linhas e ASCII não imprimíveis também são permitidos. Observe que o retorno de carro e o avanço de linha contam como caracteres distintos.)
- Sua pontuação é o comprimento em caracteres do seu programa inalterado (15 no exemplo). A pontuação mais baixa vence.
- Uma pontuação abaixo de 16 é claramente impossível, porque pelo menos dois dos programas alterados seriam idênticos.
- A saída pode ser para um arquivo ou stdout ou qualquer outra coisa razoável. No entanto, a saída dos 16 programas diferentes deve ir para o mesmo local (por exemplo, não está bom se
AO
for para stdout, masA
para um arquivo). Não há entrada. - A saída deve ser decimal, não hexadecimal. A saída real deve conter apenas os 1 ou 2 caracteres que compõem o número de 1 a 16, nada mais. (Coisas como Matlab's
ans =
estão bem.) - Seu programa não precisa trabalhar para N = 17 ou superior.
fonte
ABCDEFGHIJKLMNO
eN = 15
, o código do resultado é justoA
.Respostas:
APL, 49
Programas alterados
Explicação
Vou começar de baixo, pois facilitaria a explicação
Há um recurso de dois idiomas do APL a ser lembrado. Primeiro, o APL não tem precedência de operador, as instruções são sempre avaliadas da direita para a esquerda. Segundo, muitas funções da APL se comportam de maneira bastante diferente, dependendo de um argumento à direita (monádico) ou dois argumentos à esquerda e à direita (diádico).
Monádico
⌊
é arredondado para baixo (função de piso), Diádico×
é obviamente multiplicação,⍝
comenta o restante da linhaIsso deve tornar isso óbvio:
9:
⌊/9×1
/
é reduzir. Basicamente, assume a função da esquerda e a matriz à direita, insira a função entre cada par de elementos da matriz e avalie. (Isso é chamado de "dobra" em alguns idiomas).Aqui, o argumento correto é um escalar, e
/
não faz nada.8:
⌊|8×× 2
Monádico
×
é a função signum e monádico|
é a função de valor absoluto. Portanto,× 2
avalia1
e|8×1
é claro8
7:
⌊11-4 ⍝
deve ser óbvio6:
⌊⍟19×51⍝2
Monádica
⍟
é log natural.Portanto,
⍟19×51
avalialn(19×51) = 6.87626...
e⌊
arredonda para6
5:
⌊⍟21×○5
Monádica
○
multiplica seu argumento por π⍟21×○5
éln(21×5π) = 5.79869...
4:
⌊7|18××4×1 ⍝2
Dyadic
|
é a função mod×4×1
avaliada1
e7|18×1
é18 mod 7 = 4
3:
⌊○⍟/119-××5 1 ⍝ 2
Valores separados por espaço são uma matriz. Observe que no APL, quando a maioria das funções escalares fornece argumentos de matriz, é um mapa implícito.
Diádico
⍟
é logEntão
××5 1
, é signum de signum em 5 e 1, o que fornece1 1
,119-1 1
é¯118 ¯118
(¯
é apenas o sinal de menos. O APL precisa distinguir entre números negativos e subtração) e⍟/¯118 ¯118
é log -118 (-118) = 12:
⌊⍟7⍟|21189×1×345× 1 ⍝⍝_2
Você pode resolver isso sozinho
1:
⌊⊃⍟○7⍟⍟1|/2111118 9⍝×-1 ×○3×4_5_× 1_ _⍝_⍝ __2
Este consiste em um uso mais complicado de
/
. Sen
é um número,F
é uma função eA
é uma matriz,nF/A
pega cada grupo den
entradas consecutivas deA
e aplicaF/
. Por exemplo,2×/1 2 3
pega cada par de entradas consecutivas (que são1 2
e2 3
) e aplica×/
- se a cada grupo para fornecer2 6
So,
1|/2111118 9
apenas retorna2111118 9
(como se aplica|/
aos escalares). Então,⍟○7⍟⍟
aplica ln, registra 7 nesses números e os multiplica por π e ln novamente. Os números que saem do outro lado estão1.46424... 0.23972...
aqui,
⊃
são usados apenas para selecionar o primeiro elemento de uma matriz.fonte
Python -
12011137 (gerador:241218) - viva os hashes!Estratégia:
Tentei iniciar cada linha com tantos hashes quanto a saída desejada
n
. Todas as outras versões pularão completamente esta linha.A principal dificuldade, no entanto, foi acrescentar o número correto de hashes para que a próxima execução chegasse exatamente ao início da próxima linha. Além disso, interferências com outras versões podem ocorrer, por exemplo, a versão 16 saltando diretamente para o
print
comando da linha 5 e assim por diante. Portanto, houve muitas tentativas e erros combinados com um script auxiliar para testes rápidos.Estatisticas:
1201113710661002 (88,1%)Código:
Script de teste:
Resultado:
Atualização: Um script de geração!
Pensei na minha solução e que deve haver um padrão para gerá-la algoritmicamente. Aqui vamos nos:
Ele cria o programa linha por linha:
i
aoprint i
comando e faça umi - 1
hash entre cada dois caracteres vizinhos.print i
(devido ao desalinhamento) ou qualquern
versão comn in range(1, 17)
lança uma exceção, adicione outro hash à linha anterior.Na verdade, ele retornou um programa mais curto do que eu encontrei manualmente esta manhã. (Portanto, atualizei minha solução acima.) Além disso, tenho certeza de que não há implementação mais curta seguindo esse padrão. Mas você nunca sabe!
Versão golfe -
241218:Observe que pode haver um gerador mais curto, por exemplo, codificando o número necessário de hashes subsequentes para cada linha. Mas este calcula-os e pode ser usado para qualquer N> 16.
fonte
p 1
vez deprint 1
.Befunge 93 - Cinco milhões setecentos e sessenta e cinco mil e setecentos e setenta e seis caracteres
Exijo ser levado a sério ...
3 razões pelas quais. 1ª razão: um script befunge é sempre 80x25, então não importa o que aconteça, tinha que haver algo que fosse reduzido nas linhas com o código. Segunda razão: por que algo tem cerca de 5,5 milhões de espaços, é porque 720 720 é o menor múltiplo comum de 1 a 16 ... Significa que não haverá quebra de linha quando estivermos pulando caracteres. 3ª razão: uau, isso é bastante absurdo.
fonte
209 caracteres (Vários idiomas)
Eu apenas tentei manter as coisas simples e evitar colocar qualquer coisa em posições com muitos fatores principais. A vantagem é a capacidade de executar em várias linguagens de script. Ele deve funcionar em qualquer idioma que não seja deliberadamente perverso e possua os seguintes recursos:
Por exemplo,
Intérprete de linha de comando do Python 2 (embora não seja de um arquivo):
MATLAB (basta substituir '#' por '%'):
NB Deve haver 17 espaços precedendo o primeiro '1'. Vocês conhecem muitos idiomas, então, por favor, ajude-me a listar mais do que poderia ser executado (:
EDIT: Adicionado unário + na posição 0 para Python para evitar que a linha seja recuada.
fonte
IndentationError
corrida na linha de comando. Mas talvez você não tenha usado a sintaxe de remarcação correta ao postar o código aqui.unexpected indent
no console do Python 2.7. Mas ele funciona no Matlab, então não se preocupe. Eu acredito que também funciona em Ruby.CJam, 89 bytes
Essa abordagem não usa nenhum tipo de comentário.
i
lança para inteiro, por isso é um noop aqui. Pode ser substituído por espaço em branco, mas as letras parecem mais legíveis para mim ...Experimente online executando o seguinte código :
Exemplo de execução
fonte
GolfScript, 61 bytes
Isso tira proveito dos comentários (
#
) e dos "super comentários" não documentados (tudo o que segue um incomparável}
é ignorado silenciosamente)._
é um noop. Pode ser substituído por espaço em branco, mas os sublinhados parecem mais legíveis para mim ...Experimente online.
Exemplo de execução
fonte