Seu amigo está tentando arrombar um cofre que possui um sistema de travamento peculiar: requer um certo número de batidas suaves em um determinado local. Seu amigo descobriu o número (que está no intervalo de 1 a 99999) e possui um gadget que produz as batidas necessárias. No entanto, o gadget é um intérprete de Brainfuck! Portanto, seu amigo precisa alimentar um programa Brainfuck, que, obviamente, deve ser o mais curto possível (a E / S do gadget é lenta).
Sua tarefa é ajudá-lo! Escreva um programa ou uma sub-rotina, em qualquer idioma, que aceite como número de entrada N
e emita um programa Brainfuck, que não recebe entrada e gera uma sequência de caracteres ASCII imprimíveis (excluindo os códigos de caracteres de espaço no intervalo 33 ... 126) de comprimento N
.
Exemplo: para entrada 10
, a saída pode ser
+++++++++++++++++++++++++++++++++..........
(mas tenho certeza de que pode ser reduzido!)
Sua pontuação será a soma dos comprimentos de suas saídas para os seguintes valores de N
(são números aleatórios):
55
68
15
28
841
838
522
846
4898
9004
9363
3810
13230
67175
37231
44701
Ah, e você estará transmitindo seu código (o programa gerador) para seu amigo pelo Twitter. Portanto, tenha 140 caracteres ou menos!
PS A linguagem Brainfuck tem muitas variantes. Vamos supor que a fita seja infinita nas duas direções (ou "circular e grande o suficiente"), e as células tenham capacidade int de 32 bits (finita e capaz de armazenar números até 99999). Além disso, sem quebra: quando uma célula transborda, a máquina se autodestrói!
Respostas:
Python 2, pontuação: 1021
Acabei de perceber que este concurso é bastante antigo, mas ainda assim, como achei uma solução melhor do que as postadas, também a publiquei.
Aqui está um script python de 102 bytes que faz o trabalho:
A idéia é usar a codificação da base 5 para N (melhor base, pelo menos para as entradas atuais, que não parecem muito "aleatórias", a propósito, parece que foram escolhidas arbitrariamente pelo OP) e escrever um algoritmo genérico de Brainfuck para decodificar um número de tamanho arbitrário (o número é codificado com cada dígito aumentado em um para detectar o final da conversão). Eu escolhi imprimir o caractere 35
#
, o caractere 36$
é equivalente.Você pode executar o seguinte script bash para obter a pontuação:
Com um programa mais avançado que substitui a codificação pela multiplicação por números pequenos e escolhe a melhor base para codificar cada número, eu posso alcançar 958 caracteres Brainfuck, mas o Python é muito detalhado (e eu sou um jogador muito ruim / preguiçoso) para para obter o conversor em 144 bytes!
fonte
BrainF ***, pontuação: 193,313
Não tem menos de 140 caracteres (é 147, tão perto !!), então isso não pode vencer, mas eu achei legal.
Imprime 43 sinais de adição e depois
N
pontos. Não é o ideal.Se alguém puder ajudar a diminuir isso, eu adoraria.
fonte
J, pontuação total = 1481
(Para minha entrada e explicação anteriores, verifique o histórico de revisões.)
Essa função gera loops BF aninhados com base nos dígitos base10 do número de entrada. Verificar todas as bases razoáveis e escolher o menor código BF melhoraria a pontuação com uma pequena quantia.
Programas BF para o conjunto de testes:
Pontuação de computação no conjunto de testes:
fonte
Pyth, 1702
Reconstrua números usando fatores de N + x.
fonte
2
essas saídas++
. agora que não imprime nada em BF.CJam,
5274108 bytes, total =130412441210Um script de teste (lento no intérprete online):
fonte
Befunge-98, N + 41, total = 193281
Eu sei que é ruim, mas eu estava com vontade de escrever um pouco sobre Befunge hoje. A melhor parte do Befunge é que os programas são ainda menos compreensíveis do que os idiomas de golfe reais, especialmente quando reutilizam o código: D
Usa um algoritmo semelhante à resposta CJam de Martin Büttner :
fonte
CJam, 40 + N, Total: 193265
Apenas para começar, aqui está a solução de linha de base. Ele gera o seguinte código:
de onde
_
estão asN
cópias+
.Execute o gerador aqui.
fonte
Befunge-93 - 24 + N, total = 193009
Isso usa um prefixo de
+++[>++++[>++++<-]<-]>>
para definir o primeiro índice de fita como '0' com 24 caracteres. O programa Befunge é muito básico e gera resultados junto com N '.' personagens.fonte