Potentiellement très difficile, mais j'ai vu des choses incroyables sortir de ce site.
Le but est d'écrire un programme, dans n'importe quelle langue, qui fait ce que vous voulez. Le hic, c'est que le programme doit être valide après tout décalage circulaire des caractères.
Un décalage de caractère circulaire est très similaire à un décalage circulaire . Quelques exemples mes choses claires.
Pour le programme int main() { return 0; }
un décalage vers la gauche de 6 caractères donne: in() { return 0; }int ma
un décalage vers la gauche de 1 caractère donne: nt main() { return 0; }i
un décalage vers la droite de 10 caractères donne: eturn 0; }int main() { r
Cependant, ce programme n'est évidemment pas conforme aux règles.
Règles
- N'importe quel langage
- Le gagnant est déterminé par le nombre de votes positifs
- Les solutions qui font la même chose, ou des choses complètement différentes pour chaque rotation, recevront 100 votes virtuels positifs à leur score.
MISE À JOUR Je pense que cela a duré assez longtemps. Le gagnant, avec le plus de votes (votes virtuels inclus) est Mark Byers. Bien joué!
la source
Réponses:
Utilisez la bonne langue pour la tâche. Dans ce cas, c'est Befunge .
Ce langage permet naturellement des rotations car:
Ce programme Befunge imprime exactement la même sortie ("Bonjour") quel que soit le nombre de "changements de caractères circulaires" que vous utilisez:
Il fonctionne sur Befungee . Cela nécessite que le plateau soit augmenté (pas le caractère par défaut de 80 caractères). Il peut être exécuté comme ceci:
Il fonctionne en générant et en stockant dynamiquement un programme qui imprime "Bonjour", puis en écrasant le premier octet pour rediriger le contrôle dans le programme nouvellement écrit. Le programme est écrit deux fois de sorte que si un octet n'est pas écrit correctement la première fois, il sera corrigé la deuxième fois.
L'idée pourrait être étendue pour produire n'importe quel programme d'une complexité arbitraire.
la source
Brainf * ck
Choisissez le bon outil pour le travail - un adage qui n'a jamais été aussi pertinent que ce travail ici!
Le programme non décalé que vous voyez ici s'imprime simplement
SHIFT
(plus une nouvelle ligne). Des décalages circulaires atypiques produiront diverses autres sorties, bien qu'il produise toujours six caractères ASCII.la source
Commodore 64 BASIC
?
est l'abréviation dePRINT
, et:
est un séparateur d'instructions, donc:Des variations plus longues sont bien sûr possibles:
etc...
la source
Golfscript
Ce programme imprime quelques chiffres qui totalisent toujours 2, quelle que soit la façon dont le programme est décalé:
La première ligne s'imprime
1010
(10 en binaire), la deuxième ligne s'imprime02
et toutes les autres lignes s'impriment2
.Mise à jour:
Le programme peut être testé ici . Veuillez noter que j'ai ajouté des
n
s à la fin de chaque ligne uniquement pour formater la sortie; ceux-ci peuvent être supprimés et le programme fonctionne toujours.la source
Ruby, probablement l'une des solutions les plus courtes possibles:
Et un autre un peu plus long et plus intéressant:
la source
x86 16 bits binaire
Construit manuellement à l'aide de ces ( 1 2 ) tableaux, nasm et ndisasm. Cela retournera toujours sans plantage ou boucle infinie, car aucun octet ne fait de saut ou ne modifie la pile et il est rempli de NOP pour se terminer par une
ret
instruction à un octet dans tous les cas.Dans la plupart des cas, cela produira
FOO
ou une sous-chaîne de cela. SiAX
est cassé, cela appellera un int 10 aléatoire (cela a changé la vitesse de clignotement du curseur dans l'un de mes tests), mais cela ne provoque généralement pas de plantage.Pour l'essayer, mettez l'hexdump dans un fichier et utilisez
xxd -r foo.hex > foo.com
, puis exécutez dans un environnement dos (j'ai utilisé dosbox).Voici un vidage hexadécimal de ce fichier:
Et quelques décalages intéressants démontés:
+0
(pour les exemples ci-dessous, le reste du binaire est toujours valide)
+1
+2
+6
+11
+12
+18
(les autres décalages ne sont que des répétitions de ce qui précède)
+58
la source
Réponse unaire:
^ 44391 Zéros
Programme chat. Quelle que soit la rotation, c'est le même programme.
la source
PHP
Voilà, un programme PHP valide:
la source
Scala
A citations imbriquées:
C ++ / Java / C # /ScalaCommentaire:
Commande vide:
Frapper
Combinaison intégrée de commentaire, d'espaces blancs et de shell:
Sed
Commandes valides autonomes:
p
P
n
N
g
G
d
D
h
H
Une combinaison des éléments ci-dessus:
p;P;n;N;g;G;d;D;h;H;
AWK
Pour imprimer chaque ligne du fichier:
ou
N'imprimez rien:
Perl
la source
;P;n;N;g;G;d;D;h;H
valide?J
Tout d'abord, un script pour vérifier les rotations valides d'un programme
s
:Par exemple, le programme
+/1 5
(somme de 1 et 5) donne:Ensuite, un programme ennuyeux et valide:
la source
dc
Les programmes DC sont facilement valides dans n'importe quelle rotation. Par exemple:
la source
Langage machine
Que diriez-vous du code machine Z80 / Intel 8051 pour NOP .
Bien sûr, il ne fait aucune opération, mais il prend un cycle ou deux ... vous pouvez en avoir autant ou aussi peu que vous le souhaitez.
Et je ne suis pas d'accord avec la réponse de Ruby ci-dessus - je pense qu'un seul octet 00h est plus court qu'un Ruby
p
.la source
k
Évalue une chaîne vide
Renvoie un caractère point
Renvoie l'application partielle de '.' (forme dyanique) dans une liste de caractères vide.
la source
sh, bash
cc en rotation est de nouveau cc, mais il n'est pas très sympathique s'il est appelé ainsi nu.
dh debhelper n'est pas non plus très coopératif, tandis que hexdump attend juste l'entrée.
Ghostscript démarre le mode interactif, tandis que le groupe de commutateurs affiche un message d'utilisation - une solution valide ici, à mon humble avis également.
Et voici le script pour trouver des candidats pour de tels programmes:
Si trouve également des séquences plus longues, comme (arj, jar) ou (luatex, texlua) qui ne sont pas valides après chaque quart de travail, mais seulement après certains décalages, que j'ai mal lus au début, mais il y en a peu, donc c'est facile pour les filtrer à la main.
la source
arj
/jar
n'est pas valide, car il n'y a pas derja
commande (bien que j'aime cet exemple). +1 pour le script - idée vraiment sympa :)every
, soit pour signifiera random one
. L'exemple avecshift left by 6
,left by 1
etright by 10
m'a assuré dans l'interprétation, que j'ai juste besoin de trouver une possibilité de décalage unique.... in any language ...
- ma solution ne fonctionne qu'en bash (et sh, zsh, ash et quelques autres), mais toutes ces autres solutions prennent aussi des noms de programme.Exemple Trivial Python:
Peut être déplacé de trois caractères à plusieurs reprises pour révéler de plus en plus de l'alphabet.
la source
Python
Évaluez simplement quelques chiffres
la source
dc est déjà utilisé, mais le programme suivant génère toujours la même chose , quelle que soit la rotation: D
sorties
la source