Supposons qu'un défi de codegolf ne compte pas les espaces dans la longueur de votre programme. Trichez ce système en encodant votre script en espace blanc et jouez un script qui décode et exécute l'espace blanc intégré.
Exemple
Ma solution à JBernardo de Meta Golf Challenge est le code Sage pour coder (ou Python) dans les espaces, et le golf du décodeur.
s = ' '
for c in '<lots of whitespace>'.split(s):
s+=chr(len(c))
exec s
L'encodage consiste à prendre un script, à ajouter une nouvelle ligne et, pour chaque caractère c
du script, des ord(c)
onglets de sortie suivis d'un espace. L'ajout d'une nouvelle ligne est nécessaire car j'utilise Python et je démarre le script s
avec un espace.
Notation
Une solution complète contient une description de l'encodage que vous utilisez (si c'est compliqué, fournissez un script) et un script de «décodage et exécution». Votre score est le nombre de caractères non blancs dans le script de décodage et d'exécution.
Les espaces (la langue) sont interdits
De plus, toute langue qui possède un ensemble complet d'opérateurs qui n'utilisent que des espaces blancs n'est pas autorisée: j'accepte le score non nul le plus bas.
la source
.n/{,}%+~
cela fonctionnerait également.CPAN, 16
Le CPAN a tout pour plaire. Ou du moins, juste le bon module.
la source
Perl, 29
À l'intérieur, il
s///
y a un onglet puis un espace. L'encodage est un encodage ultra-basique avec des espaces, précédé de tabulations.Essayez celui-ci sur la ligne de commande:
Edit: eh bien, lol, je ne peux pas trouver une bonne façon de copier-coller le mix tab / espace. Croyez-moi, cela fonctionne à la maison :)Mise à jour: là, là, encodé avectr
la source
\t
et nous pensons que cela fonctionne avec les espaces blancs ...\t
interpréter par le shell et faire en sorte que la putain de chose fonctionne de façon démontrable. Faire cela en quelques heures.Javascript
Remplacez-le
\t
par un onglet pour obtenir le nombre de caractères publiés.Standard (64 caractères)
Fonction flèche (49 caractères)
Programme d'encodeur pour les deux
la source
(s)=>...
dans la fonction flèches=>...
pour enregistrer deux octets" t " [ 1 ]
pour signifier "t")eval("".replace(/ +/g,s=>' []+!()'[s.length]))
Yabasic (88 caractères)
Utilisez le même programme d'encodeur que pour ma solution C, mais ne supprimez pas le premier caractère. Votre code d'origine doit être sous la forme d'un sous-programme
a()
, par exemple:la source
C (99 caractères)
Testé uniquement avec (et ne fonctionne peut-être qu'avec) GCC.
Programme d'encodeur correspondant (supprimez manuellement le premier caractère de sa sortie):
la source
D (101 caractères)
même encodage que dans la question (pas besoin de la nouvelle ligne)
la source
Bash (builtins uniquement, 44 caractères)
Script d'encodeur correspondant:
la source
man
un peu de mal pour comprendre ça.K5, 12 octets
Exécutez (
.
) la chaîne formée à partir des valeurs ascii (`c$
) données par la différence entre chaque paire (-':
) des indices où (&
) l'entrée est un onglet (9=" "
).L'entrée est une chaîne de caractères tabulés et non tabulés, et les valeurs des caractères sont codées en nombre de non tabulés (espaces ou sauts de ligne) entre chaque tabulation. Un exemple d'encodeur:
Effectuez une jointure en cours commençant par un espace sur (
" ",/
) x espaces (x#" "
) joints à un onglet (,"\t"
) où X est chacun de ({...}'
) un moins les valeurs de caractères de la chaîne d'entrée (-1+
).En action:
la source
Rubis, 43
Très simple, l'encodage met x espaces par ligne, où x est la valeur ascii du caractère, le décodage est inversé.
Le script suivant est juste un convertisseur unaire en ASCII et fonctionne même lorsque les choses autres que les espaces sont libres:
Remplacez simplement la chaîne vide par le programme qui vous plaît.
La chose dans un format plus réutilisable:
la source