O objetivo é escrever um programa que codifique outro programa (entrada) com o menor número possível de caracteres.
Pontuação
- A pontuação é igual ao número diferente de caracteres necessários para a saída.
- Menor pontuação é melhor.
Regras
- Não há idiomas de destino com um conjunto limitado de comandos. (Não Brainf ** k, espaço em branco etc)
Editar : quero dizer, pelo menos 26 caracteres significativos,A
não muda a maneira como um programa brainf ** k opera, portanto você não pode contar esse caracter. O mesmo se aplica ao espaço em branco. - O idioma de destino deve existir no momento em que esta pergunta foi escrita.
- Você precisa incluir uma pequena explicação sobre como arquivar sua pontuação.
- O programa de entrada é válido.
- O programa codificado deve ser um programa válido no mesmo idioma da entrada.
- O programa codificado deve fazer o mesmo trabalho que o programa original.
- Seu codificador deve funcionar para todos os programas válidos nesse idioma.
- Inclua alguma entrada e saída de amostra.
Notas
- O codificador pode ser escrito em qualquer idioma, não apenas no idioma de destino.
- Isso não é código-golfe ; programas legíveis são incentivados.
- O grande objetivo é ver quantos caracteres diferentes são necessários para escrever algo nesse idioma. Eu desaprovei o BF, etc, porque não haveria desafio.
- Isso foi inspirado em Imprimir uma sequência com o menor número possível de caracteres distintos ; você pode considerá-la como metagolfe para essa pergunta.
Exemplo
Em Java, você pode usar \uXXXX
outros caracteres. Uma entrada válida codifica todos os caracteres da entrada dessa maneira. Isso teria uma pontuação de 18. ( \ 0-9a-f
)
Código em Tcl, codifica um programa Java:
set res {}
foreach char [split [read stdin] {}] {
append res [format \\u%04x [scan $char %c]]
}
puts $res
atomic-code-golf
generation
metagolf
Johannes Kuhn
fonte
fonte
gets
lê apenas uma única linha de entrada? E você perdeu ou
codificador (mas, por outro lado, não precisa de espaço e, portanto, a pontuação permanece a mesma).Respostas:
GolfScript / GolfScript, pontuação 4
O próprio codificador é um programa GolfScript que pega o código original no STDIN e o transforma em uma sequência de caracteres
',+~
. Esta saída em si é um código GolfScript válido que executa as mesmas operações que a versão original.O método básico consiste em uma codificação do código como uma sequência (usando chars
',+
, veja abaixo) e, em seguida, avalie essa sequência usando o comando eval~
.Se alguém concatena qualquer string junto com uma matriz de números no GolfScript, os números são convertidos em pontos de código e o resultado é uma string em si. Assim, a codificação de string simplesmente cria uma lista de números (a partir dos pontos de código do código de entrada) e concatena todos aqueles com uma string vazia.
Exemplo:
O código de entrada
é traduzido para (nota: quebras de linha e comentários adicionados para facilitar a leitura)
fonte
Python -> Python, 8 caracteres distintos
Isso usa a formatação de módulo para reconstruir a sequência de entrada. Por exemplo,
print 1
resultados neste programa:Em teoria, você pode codificar qualquer programa como este, mas o programa resultante sempre terá mais de 2 n caracteres, onde n é o número de caracteres na entrada, sem incluir
%
símbolos.fonte
2**n+3*n-1 + 6
caracteres, incluindo todos os caracteres de entrada (se você assumir que cada caractere é um byte NUL). Isso é obtido no OEIS A132074 , mais 6 paraexec''
. Se você supõe que os caracteres devam ser ASCII imprimíveis, o limite inferior é maior. repl.it/EHENCJam -> CJam, pontuação: 3
CJam é mais recente que a pergunta, portanto não é elegível para ganhar.
Ele usa
')~
.')
é o personagem)
, e cada)
acréscimo extra em um.~
pode avaliar um caractere ou uma string. O programa completo é avaliado após concatenar todos os caracteres, avaliando+
. E um número inteiro do valor do caractere e uma operação de número para caractere são avaliados para cada caractere menor que)
.Exemplos
é traduzido para:
e
é traduzido para:
fonte
APL (pontuação: 10)
Caracteres usados na codificação:
⍎⎕AV[(⍴⍬)]
O programa APL a codificar deve se restringir ao conjunto de caracteres APL e não usar nenhum Unicode extra.
Codificação para o programa
42
(que fornece a resposta para a Vida, o Universo e Tudo):Como funciona:
⍬
é a lista vazia,⍬⍬⍬⍬
é , portanto, uma lista de quatro listas vazias,⍴⍬⍬⍬⍬
é o comprimento da lista de quatro listas vazias, que são quatro. Dyadic⍴
é remodelada, portanto, as instruções do comprimento da lista devem estar entre parênteses, fornecendo a codificação final do caractere número quatro como(⍴⍬⍬⍬⍬)
.Esses números são pesquisados em
⎕AV
que é o conjunto de caracteres e⍎
executa a sequência resultante.(À primeira vista, parece que a pontuação pode ser aumentada para 9 usando em
⎕UCS
vez de⎕AV
e salvando[]
, mas isso não funciona, porque(⍴⍬)(⍴⍬)
é uma lista de listas de escalares, ou seja, em[[1], [1]]
vez da[1, 1]
que seria necessária e trabalhando em torno disso exigiria intercalar os valores codificados com vírgulas, elevando a pontuação de volta para 10.)fonte
RProgN , 7 caracteres distintos, não competidor
RProgN é mais recente que esta pergunta.
' do.Lc
Converta o programa em
'oooo...' L c 'ooooo...' L c 'oo...' L c . . . do
, onde cada 'oo ...' representa o código de caractere em o's, cercado por apóstrofos para criar uma string com eles. L c os transforma em uma constante numérica. Depois que todas as seqüências de caracteres são colocadas na pilha, uma cadeia de .s é igual à quantidade de caracteres na cadeia codificada menos um reconstrói a cadeia codificada e a executa.Codificador, também escrito em RProgN.
Experimente online!
fonte
Rubi -> Rubi, 8
Amostra:
Implementa a solução Ruby fornecida no problema vinculado e substitui a E / S por eval.
fonte