Considérons un bloc de texte carré, N caractères de large par N de haut, pour un entier impair N supérieur à 1.
À titre d'exemple, soit N = 5 et le texte soit:
MLKJI
NWVUH
OXYTG
PQRSF
ABCDE
Notez que c'est l'alphabet (en plus de Z) en spirale dans le sens antihoraire à partir du coin inférieur gauche. C'est un peu comme un tapis enroulé.
"Dérouler" le texte d'un quart de tour dans le sens des aiguilles d'une montre est donc FGHI
au même niveau que les ABCDE
résultats dans:
PONM
QXWL
RYVK
STUJ
ABCDEFGHI
Ce déroulement peut être effectué 7 fois de plus jusqu'à ce que le texte soit sur une seule ligne:
SRQP
TYXO
UVWN
ABCDEFGHIJKLM
UTS
VYR
WXQ
ABCDEFGHIJKLMNOP
WVU
XYT
ABCDEFGHIJKLMNOPQRS
XW
YV
ABCDEFGHIJKLMNOPQRSTU
YX
ABCDEFGHIJKLMNOPQRSTUVW
Y
ABCDEFGHIJKLMNOPQRSTUVWX
ABCDEFGHIJKLMNOPQRSTUVWXY
Défi
Le défi consiste à écrire un programme qui est un bloc de texte N × N qui génère le nombre de fois qu'il s'est "déroulé" d'un quart de tour lorsqu'il est réorganisé dans les modèles de déroulement et exécuté.
Il y a vraiment deux concours ici: (j'espère que ce ne sera pas trop compliqué)
- Pour ce faire, avec le plus petit N. (jusqu'à une limite de N = 3)
- Faites-le avec le plus grand N. (pas de limite)
Il n'y aura pas de réponse acceptée, mais le gagnant dans chacune de ces catégories recevra au moins 50 représentants de primes de ma part. En cas d'égalité, les réponses les plus anciennes l'emportent.
Exemple
Si votre bloc de code est
MyP
rog
ram
l'exécuter tel quel devrait produire 0.
Fonctionnement
rM
oy
ramgP
devrait produire 1.
Fonctionnement
or
ramgPyM
devrait sortir 2.
Fonctionnement
o
ramgPyMr
devrait produire 3.
Enfin, l'exécution ramgPyMro
devrait produire 4.
Détails
- La sortie doit être imprimée sur stdout (ou l'alternative la plus proche) par elle-même. Il n'y a aucune entrée.
- Vous ne pouvez utiliser que de l' ASCII imprimable (codes hexadécimaux 20 à 7E, y compris l'espace) dans votre code.
- Des espaces remplissent l'espace vide dans les dispositions de déroulement. (Sauf si vous vous déroulez vers la gauche.)
- Seuls les arrangements de complètement carré à complètement plat doivent avoir une sortie valide. Aucun autre arrangement ne sera exécuté.
- Vous ne pouvez pas lire votre propre source.
- Vous pouvez utiliser des commentaires.
- N = 1 est exclu car dans de nombreuses langues, le programme
0
fonctionnerait. Si vous le souhaitez, vous pouvez dérouler vers la gauche plutôt que vers la droite. Donc par exemple
MyP rog ram
devient
Pg yo Mrram
etc. Aucun espace supplémentaire n'est ajouté lors du roulement de cette façon. Les lignes se terminent
(Connexes: écrire un programme rectangulaire qui génère le nombre de fois qu'il a été tourné )