Une chaîne peut être décalée d'un nombre n
en récupérant la valeur en octets c
de chaque caractère de la chaîne, en calculant (c + n) mod 256
et en reconvertissant le résultat en caractère.
Par exemple, un décalage "ABC123"
de 1 entraîne un "BCD234"
décalage de 10 "KLM;<="
po et un décalage de 255 po "@AB012"
.
La tâche
Choisissez autant de numéros n
avec 0 < n < 256
que vous osez et d' écrire un programme ou une fonction qui prend une chaîne en entrée et
- renvoie la chaîne inchangée lorsque le code source est inchangé, mais
- retourne la chaîne décalée par
n
quand le code source est décalé parn
.
Règles
- Le score de votre soumission est le nombre de personnes soutenues
n
, un score plus élevé étant meilleur. Le score maximum est donc de 255. - Votre soumission doit prendre en charge au moins un quart de travail, le score minimal est donc 1.
- En cas d'égalité, le programme le plus court l'emporte.
- Tous les programmes décalés doivent être dans la même langue.
string
code-challenge
source-layout
Laikoni
la source
la source
\r
?Réponses:
Brainfuck, score: 31 (2208 octets)
Programme encodé en base64:
Fonctionne pour les équipes 0, 4, 8, 12, 32, 36, 40, 44, 64, 68, 72, 76, 96, 100, 104, 108, 128, 132, 136, 140, 160, 164, 168, 172 , 192, 196, 200, 204, 224, 228, 232 et 236.
Pour chaque valeur comprise entre 0 et 255, il existe exactement l'un de ces décalages qui envoie ce caractère à une instruction brainfuck valide.
Le programme repose sur des cellules 8 bits avec habillage sur les débordements. Cela pourrait probablement être un peu joué au golf, car le changement consiste simplement en une répétition
+
ou-
(selon la valeur la plus courte).Le code Python utilisé pour générer ceci:
la source
+[>,.<]
- dire ?),[+.,]
, où+
est la quantité de+
s ou de-
slHaskell, score 255 (27 026 octets)
Le programme fonctionne mais le mettre dans mon presse-papiers semble le détruire. Voici donc le code qui sort mon programme.
Vérification
Donc, si la copie d'éléments dans un presse-papiers est brisée, comment puis-je vérifier que cela fonctionne?
Vous pouvez l'utiliser ici . Vous pouvez ajuster
N
et la chaîne (actuellementBig ol' egg
) pour voir que cela fonctionne vous-même.Ceci testera tous les N sur une seule entrée successivement, mais a tendance à expirer.
Explication
Cela abuse de la notation commentée de Haskell. En alphabète alphabétisé Haskell, toute ligne qui ne commence pas par
>
est un commentaire. Donc, pour que notre code fonctionne, nous faisons 255 copies du programme à chaque passagen
, puis nous déplaçons chaque copie individuellement-n
.la source
C, note: 1 (73 octets)
Essayez-le en ligne!
Décalé de 1:
Essayez-le en ligne!
la source
05AB1E , score: 3 (24 octets)
Essayez-le en ligne!
Explication
Décalé une fois:
Essayez-le en ligne!
Explication
Déplacé deux fois:
Essayez-le en ligne!
Explication
Déplacé trois fois:
Essayez-le en ligne!
Explication
la source
Javascript, score:
14 (94346 octets)En termes simples, différentes sections ont été commentées lors de la rotation, le difficile étant de trouver des noms de variables utilisables et des sections de commentaires qui ne cassent pas la syntaxe Javascript.
Sans rotation:
Tourné de 5:
Tourné de 10:
Rotation de 14: les choses sont finalement devenues intéressantes ici, il faut abuser du système de type Javascript.
Rotation de 199:
Pour trouver les solutions, je construit un petit outil pour me montrer différents extraits lorsque la rotation est effectuée de manière variable. J'ai ensuite trouvé certains motifs que je pourrais utiliser comme blocs de construction utiles.
L'essentiel est que
a/**/=>a
s'agit toujours d'une définition de fonction valide, ce qui vous permet d'intégrer une fonction inversée avec rotation dans la section de commentaire. À partir de là, il peut être répété plusieurs fois, si cela est fait correctement.Étant donné que la plupart des sections de commentaires sont imbriquées, il peut être possible de trouver un autre résultat, mais son travail devient de plus en plus difficile à chaque nouvelle réponse en raison de collisions et de caractères de contrôle.
Remplacer toutes les utilisations de
charCodeAt(0)
parcharCodeAt``
réduirait de 4 octets la totalité de la solution, mais il reste trop de travail à faire à partir de zéro.la source
charCodeAt()
pour économiser 2 octets?PHP avec
-d output_buffering=on -d short_open_tag=on
, score: 255 (25 731 octets)Semblable à la solution Haskell, copier et coller ces sauts, alors j’ai généré ceci en utilisant ce script Perl .
Vérification pour décalé 1, 16, 32 et 255 fois.
Explication
L' utilisation de PHP
<?
délimiteur fait ce assez facile, mais je devais éviter toutes les chaînes qui pourraient finir comme<?
ailleurs dans le code, ce moyen essentiellement03
,14
,25
,36
,47
,58
et69
. Travailler autour de ceux-ci était assez facile en utilisant l'arithmétique. Il pourrait également être possible de réduire le nombre d'octets dans le programme d'origine.la source
Crane-Flak , Score 3 (252 octets)
Essayez-le en ligne!
(Cela ne fonctionne pas vraiment dans Brain-Hack parce que seulement les mods Crane-Flak par 256)
Décalé de 1
Essayez-le en ligne!
Décalé de 2
Essayez-le en ligne!
Décalé de 3
Essayez-le en ligne!
Explication
Le code principal au travail ici est
où
n
est un nombre arbitraire. Cela déplace tous les éléments hors pile en ajoutantn
à chaque élément (le modulo 256 est implicite à la sortie), puis les déplace tous vers l'arrière.Cependant, pour le premier programme (c'est-à-dire décalé de 0), nous n'avons pas besoin de faire cela, car le décalage est le programme cat. Nous commençons donc avec ce code:
et décaler par 1
Ceci est déséquilibré, nous devons donc le réparer. Il y a un certain nombre de façons de le faire par ma méthode de choix (pour des raisons qui deviendront évidentes):
En changeant cela de 2, nous obtenons
Comme il
()
est plus facile de traiter que d’{}
utiliser le}
s pour mener à bien le programme souhaité. Cela signifie que le)
peut être équilibré avec des moyens assez évidents. Avec quelques manipulations, nous pouvons transformer cela en:En reculant, nous obtenons
Le passage à 3 est si complexe que je ne le comprends plus vraiment. J'ai utilisé la même technique et je l'ai manipulée jusqu'à ce que je puisse enfin les faire fonctionner tous les 4 en même temps. La technique est à peu près la même, il y a juste beaucoup plus de violon.
la source
Python 3, Score 1, 76 octets
Décalage 0: pas de changement
Décalage 1:
Commencé à travailler au poste 2, mais "" devient $$ et vous ne pouvez pas commencer une ligne avec cela.
Lorsque vous enregistrez dans un fichier, assurez-vous qu'il ne se termine pas par une nouvelle ligne. (vim -b fichier.py + set noeol)
la source
Gelée , score
12815 octetsDécalage 0:
Essayez-le en ligne!
Décalage 2:
Essayez 2 en ligne!
Shift 3:
Essayez 3 en ligne!
la source