Le but est d'écrire un programme qui code un autre programme (entrée) avec le moins de caractères possible.
Notation
- Le score est égal au nombre différent de caractères requis pour la sortie.
- Un score plus bas est meilleur.
Règles
- Pas de langues cibles avec un ensemble limité de commandes. (Pas de Brainf ** k, d'espaces blancs, etc.)
Edit : Je veux dire au moins 26 caractères significatifs,A
ne change pas la façon dont un programme brainf ** k fonctionne, donc vous ne pouvez pas compter ce caractère. Il en va de même pour les espaces. - La langue cible doit exister au moment où cette question est écrite.
- Vous devez inclure une petite explication sur la façon dont vous archivez votre score.
- Le programme d'entrée est valide.
- Le programme codé doit être un programme valide dans la même langue que l'entrée.
- Le programme encodé doit faire le même travail que le programme d'origine.
- Votre encodeur doit fonctionner pour chaque programme valide dans cette langue.
- Inclure un exemple d'entrée et de sortie.
Remarques
- L'encodeur peut être écrit dans n'importe quelle langue, pas seulement dans la langue qu'il cible.
- Ce n'est pas du golf de code , les programmes lisibles sont encouragés.
- Le grand objectif est de voir combien de caractères différents sont nécessaires pour écrire quoi que ce soit dans cette langue. J'ai refusé BF etc parce qu'il n'y aurait pas de défi.
- Cela a été inspiré par Imprimer une chaîne avec le moins de caractères distincts possible , vous pouvez le prendre comme métagolf pour cette question.
Exemple
En Java, vous pouvez utiliser à la \uXXXX
place d'autres caractères. Une entrée valide code ainsi chaque caractère de l'entrée. Cela aurait un score de 18. ( \ 0-9a-f
)
Code en Tcl, code un programme 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
la source
la source
gets
lit pas une seule ligne d'entrée seulement? Et vous avez manqué leu
dans votre encodeur (mais d'un autre côté vous n'avez pas besoin d'espace et donc le score reste le même).Réponses:
GolfScript / GolfScript, score 4
L'encodeur lui-même est un programme GolfScript qui prend le code original sur STDIN et le transforme en une séquence de caractères
',+~
. Cette sortie elle-même est un code GolfScript valide qui effectue les mêmes opérations que la version d'origine.La méthode de base consiste en un encodage du code sous forme de chaîne (à l'aide de caractères
',+
, voir ci-dessous), puis d'évaluer cette chaîne à l'aide de la commande eval~
.Si l'on concatène une chaîne avec un tableau de nombres dans GolfScript, les nombres sont convertis en points de code et le résultat est une chaîne elle-même. Ainsi, l'encodage de chaîne construit simplement une liste de nombres (à partir des points de code du code d'entrée), puis concatène tous ceux avec une chaîne vide.
Exemple:
Le code d'entrée
est traduit en (note: sauts de ligne et commentaires ajoutés pour plus de lisibilité)
la source
Python -> Python, 8 caractères distincts
Cela utilise le formatage modulo pour reconstruire la chaîne d'entrée. Par exemple, les
print 1
résultats de ce programme:En théorie, vous pouvez encoder n'importe quel programme comme celui-ci, mais le programme résultant aura toujours plus de 2 n caractères, où n est le nombre de caractères en entrée, sans compter les
%
symboles.la source
2**n+3*n-1 + 6
caractères, y compris tous les caractères d'entrée (si vous supposez que chaque caractère est un octet NUL). Cela provient de OEIS A132074 , plus 6 pourexec''
. Si vous supposez que les caractères doivent être ASCII imprimables, alors la limite inférieure est plus élevée. repl.it/EHENCJam -> CJam, score: 3
CJam est plus récent que la question, il n'est donc pas admissible à gagner.
Il utilise
')~
.')
est le caractère)
, et chaque)
incrément supplémentaire l' incrémente d' une unité.~
peut évaluer un caractère ou une chaîne. Le programme complet est évalué après avoir concaténé tous les caractères en évaluant+
. Et un entier de la valeur de caractère et une opération de nombre à caractère est évalué pour chaque caractère inférieur à)
.Exemples
se traduit par:
et
se traduit par:
la source
APL (score: 10)
Caractères utilisés dans l'encodage:
⍎⎕AV[(⍴⍬)]
Le programme APL à coder doit se limiter au jeu de caractères APL et ne pas utiliser d'Unicode supplémentaire.
Encodage pour le programme
42
(qui génère la réponse à la vie, l'univers et tout):Comment ça marche:
⍬
est la liste vide,⍬⍬⍬⍬
est donc une liste de quatre listes vides,⍴⍬⍬⍬⍬
est la longueur de la liste de quatre listes vides, qui est de quatre. Dyadic⍴
est remodelé, donc les instructions de longueur de liste doivent être placées entre parenthèses, donnant l'encodage final du caractère numéro quatre comme(⍴⍬⍬⍬⍬)
.Ces nombres sont ensuite recherchés dans
⎕AV
lequel se trouve le jeu de caractères et⍎
exécute la chaîne résultante.(À première vue, il semble que le score pourrait être porté à 9 en utilisant
⎕UCS
au lieu de⎕AV
et en enregistrant[]
, mais cela ne fonctionne pas, car il(⍴⍬)(⍴⍬)
s'agit d'une liste de listes de scalaires, c'est-à-dire[[1], [1]]
au lieu de ce[1, 1]
qui serait requis, et en contournant cela. nécessiterait de séparer les valeurs codées par des virgules, ramenant le score à 10.)la source
RProgN , 7 caractères distincts, sans concurrence
RProgN est plus récent que cette question.
' do.Lc
Convertissez le programme en
'oooo...' L c 'ooooo...' L c 'oo...' L c . . . do
, où chaque 'oo ...' représente le code de caractère en o, entouré d'apostrifies pour en faire une chaîne. L c les transforme alors en une constante numérique. Une fois toutes les chaînes placées sur la pile, une chaîne de. Est égale au nombre de caractères dans la chaîne codée moins un reconstruit la chaîne codée et l'exécute.Encodeur, également écrit en RProgN.
Essayez-le en ligne!
la source
Rubis -> Rubis, 8
Échantillon:
Implémente la solution Ruby donnée dans le problème lié et remplace les E / S par eval.
la source