99 é uma linguagem de programação que inventei no início desta semana para o meu desafio. Escreva um intérprete para 99 . (Inventado, mas nunca necessário para implementar, graças a meia dúzia de vocês.;)) A especificação completa do idioma está nesse desafio, então não estou me preocupando em repassar tudo aqui.
Em 99, você pode imprimir caracteres ASCII individuais para stdout, mas devido às restrições do idioma, nem sempre é claro como imprimir um caractere específico da maneira mais concisa possível.
Para cada um dos 128 caracteres ASCII, escreva um programa 99 que não aceite nenhuma entrada e produz esse único caractere. Você pode codificar uma ou todas essas respostas manualmente ou pode escrever outro programa (em qualquer idioma que desejar) para gerá-las para você.
A soma dos caracteres em cada um dos seus 128 99 programas é a sua pontuação. A pontuação mais baixa vence. As novas linhas contam como um caractere.
Lembre-se, em 99 , apenas variáveis de tamanho par, como 9999
caracteres ASCII de saída (variáveis de tamanho ímpar, números inteiros de saída). Seu valor é dividido por 9 e, em seguida, utilizado o mod 128, portanto, os valores não precisam estar em um determinado intervalo para mapear para caracteres ASCII. Por exemplo, os valores internos 297, 1449 e -855 correspondem ao caractere, !
porque quando são divididos por 9 e tomados pelo mod 128, todos se tornam 33, que é o código de caractere !
.
Se você precisar de um intérprete para 99 , sugiro a resposta Python do Mac .
Eu sei que disse que meu próximo desafio seria mais interativo, mas ainda estou trabalhando nas coisas para esse.
fonte
Uma variedade de técnicas, 42109
Para os números, em vez de calcular o caractere ASCII grande, apenas calculei o valor do número. Você disse apenas ser capaz de produzir o personagem, então isso ainda deve funcionar.EDIT: Mudou os números para usar os caracteres ASCII, então desconsidere isso. Deixei o código numérico original no código Java, mas comentei caso alguém quisesse usá-lo.
Alguns deles eu fiz manualmente, a maioria acabei de escrever um programa para digitar.
Elas são compostas de 1 a 4 linhas cada, portanto, são bastante amigáveis apenas copiar e colar em um programa. Note-se que eles não funcionam em sucessão devido ao meu código gerado não preservar estados variáveis.
A técnica mais comum usada aqui foi a mesma da abordagem do orlp:
Minha versão difere usando alguns casos personalizados e compondo grande parte da matemática em apenas uma linha. Casos personalizados são exatamente onde o personagem pode ser representado com apenas um monte de 9 e nenhuma matemática ou meu código de geração podem ser encurtados.
Programas
Coloquei a saída no Pastebin para aqueles que não desejam executar o programa:
http://pastebin.com/Cs6WZUfb
Código Java que usei:
fonte
999
no final precisam ser corrigidos.99 999\n99
(para reatribuir999
para99
que seja impresso como um personagem).Subtração repetida, 65280
Uma solução trivial para comparar. Continue subtraindo 9 de 99 e depois a saída. Exemplo para o caractere ASCII 10:
Existem 128 programas. O primeiro programa tem dois caracteres (99), cada um depois com 8 caracteres (99 99 9 \ n) a mais que o anterior.
Programa Python que gera programas separados por linhas vazias e pontuação de computação:
fonte