Écrivez deux programmes en forme de triangle (c.-à-d. Pyramide).
Le premier doit être un triangle de texte pointant vers le haut avec une largeur de base minimale de trois caractères. Il aurait donc une structure comme
X
XXX
ou
X
XXX
XXXXX
ou
X
XXX
XXXXX
XXXXXXX
ou plus. Chacun des caractères X
doit être remplacé par les caractères de votre code réel, qui peuvent être tout sauf des terminateurs de ligne (les caractères X
peuvent donc être des espaces). Tous les éléments X
doivent être remplacés et les espaces et les nouvelles lignes qui aident à former la forme triangulaire doivent rester tels quels.
Le deuxième programme doit avoir la même taille et la même forme que le premier, sauf que le triangle pointe vers le bas.
Donc, si votre premier programme ressemble
X
XXX
XXXXX
alors votre deuxième programme ressemblerait
yyyyy
yyy
y
où chacun y
est un caractère que vous devez remplir avec votre code réel (probablement différent de votre X
code). Ici aussi, les espaces et les nouvelles lignes doivent rester les mêmes.
Votre tâche consiste à écrire ces programmes de telle sorte qu'ils émettent chacun (vers la sortie standard ou l'alternative la plus proche) le titre d'une chanson des Beatles distincte , sans aucune entrée. Cet article Wikipedia servira de liste de chansons officielle pour les Beatles. La sortie doit être l'un des titres exactement comme indiqué, par exemple I Want You (She's So Heavy)
.
C'est assez facile, cependant, même avec l'exigence du programme triangle étrange. Nous allons donc former un autre programme parmi les deux premiers qui doit sortir encore un autre titre de chanson.
En combinant trois copies de chacun des deux programmes triangulaires, nous pouvons créer un troisième programme en forme d'hexagone.
Si la largeur de base de votre premier programme était de trois, cela ressemblerait à ceci:
XyyyX
XXXyXXX
yyyXyyy
yXXXy
Si la largeur de base était de cinq, cela ressemblerait à ceci:
XyyyyyX
XXXyyyXXX
XXXXXyXXXXX
yyyyyXyyyyy
yyyXXXyyy
yXXXXXy
Ce programme (lorsqu'il est exécuté avec les espaces et les nouvelles lignes comme les autres) doit produire un autre titre de chanson des Beatles, tout comme les deux premiers programmes. Également:
- Vos trois programmes doivent produire différents titres de chanson.
- Seuls les titres de chansons de huit caractères ou plus sont autorisés.
- Vous ne pouvez en choisir qu'un
Revolution
,Revolution 1
etRevolution 9
parce que les titres sont tellement similaires. - Vous devez choisir vos trois chansons préférées des Beatles. (Eh bien, essayez .)
Notez que des programmes réels sont requis. Les fonctions ne sont pas autorisées. La lecture de votre propre code source dans n'importe quel programme n'est pas non plus autorisée.
Exemple
Si votre premier programme était
A
AAA
AAAAA
il pourrait sortir Across the Universe
.
Ensuite, votre deuxième programme
bbbbb
bbb
b
pourrait sortir Revolution
.
Puis combiné dans le programme hexagonal
AbbbbbA
AAAbbbAAA
AAAAAbAAAAA
bbbbbAbbbbb
bbbAAAbbb
bAAAAAb
la sortie pourrait être Get Back
.
Notation
La soumission avec la plus petite largeur de base de triangle gagne. Dans le cas probable d'égalité, la soumission avec la plus grande longueur additionnée de ses trois titres de chanson gagne.
la source
Réponses:
GolfScript, largeur = 9 caractères, titres = 33 caractères
Hexagone
Imprime Let It Be . (9 caractères)
Essayez-le en ligne.
Comment ça marche
Le jeton
"Let It Be"
sur la première ligne pousse la chaîne Let It Be sur la pile.La deuxième ligne commence par
}
un "super commentaire" non documenté qui abandonne immédiatement l'exécution.Avant de quitter, GolfScript imprime le contenu de la pile.
Triangle X
Imprime Twist and Shout . (15 caractères)
Essayez-le en ligne.
Comment ça marche
Les deux premières lignes poussent la chaîne
"\n }"
, que la commande;
rejette de la pile.Les lignes restantes contiennent les jetons
"Twi"
,"st an"
et"d Shout"
, qui poussent la chaîne Twist and Shout en trois morceaux.Avant de quitter, GolfScript imprime le contenu de la pile.
Triangle Y
Imprime hier . (9 caractères)
Essayez-le en ligne.
Comment ça marche
Les jetons
Let
,It
etBe
sur la première ligne ne sont pas définies, de sorte qu'ils ne font rien.Les trois lignes suivantes contiennent les jetons
"Yeste"
,"rda"
et"y"
, qui poussent la chaîne Hier en trois morceaux.Le
}
sur la dernière ligne ne fait rien; le programme aurait fini de toute façon.Une fois de plus, GolfScript imprime le contenu de la pile avant de quitter.
la source
Befunge -93, largeur = 13
15, titres = 3124caractèresUne coupure de courant hier soir m'a empêché de mettre à jour cela quand je l'ai compris, mais j'ai réussi à réduire la largeur du triangle et à augmenter la longueur des chansons!
Programme de pointage: "Dig a Pony", 10 caractères:
Explication
J'ai vraiment profité du tour de passe-passe de Befunge et j'ai choisi "Dig a Pony" spécifiquement parce qu'il avait un espace en 6ème position. Cela permet au flux du programme de se déplacer dans le nom du morceau. Essayez-le dans l' interpréteur en ligne pour voir comment cela fonctionne.
Programme de pointage vers le bas: "If I Fell", 9 caractères:
(La période est étrangère et uniquement incluse pour que les autres lignes apparaissent.)
Explication
Les seules lignes pertinentes ici sont les deux premières. J'ai utilisé l'astuce de bouclage (le pointeur d'instruction est envoyé immédiatement à gauche) pour presser un caractère de plus. La deuxième ligne imprime le nom du morceau.
Combiné: "Drive My Car", 12 caractères:
Voici la même chose, mais avec des lignes ajoutées pour montrer l'hexagone et les triangles.
Explication
C'est là que les troisième et quatrième lignes du triangle pointant vers le bas entrent en jeu. Il y a plusieurs redirections au bord des deux triangles qui servent à déplacer le pointeur d'instruction à travers ces deux lignes et à pousser "Drive My Car" sur la pile. Ensuite, il est imprimé en utilisant le
>:#,_@
bit dans le triangle pointant vers le haut. Soit dit en passant, les triangles pointant vers la gauche et vers la droite sont utilisés.Il pourrait y avoir un moyen d'utiliser plus d'espace vide, mais je pense que mon temps est mieux consacré à d'autres questions. : P
la source
Python 2, largeur = 51
Ouais, eh bien ... Python.
Les commentaires Python commencent par
#
, donc la majorité des lignes ne sont que des commentaires. Pour le triangle orienté vers le haut, la seule chose qui s'exécute estqui imprime
Sgt. Pepper's Lonely Hearts Club Band
.Pour le triangle orienté vers le bas, nous exécutons
qui imprime
Yellow Submarine
, puisque la fonctionid
est véridique.Cependant, lorsque nous combinons les programmes, tout ce qui se passe est les deux lignes ci-dessus dans l'ordre. Depuis la fin des premiers jeux de lignes
id=0
, ce qui est désormais faux, le résultat final est que nous plaquons un(Reprise)
à la fin, obtenantSgt. Pepper's Lonely Hearts Club Band (Reprise)
comme sortie (Calvin a dit que c'était correct ).la source
Bonhomme de neige 1.0.2 , largeur = 13
Finalement! Un défi où Snowman peut prospérer! : D: D
Les barres obliques sont principalement à des fins esthétiques, et la majorité d'entre elles peuvent être remplacées par des espaces (mais cela donnerait un aspect beaucoup plus ennuyeux). Quelques barres obliques sont nécessaires, pour les commentaires.
Programme A (sortie:)
Birthday
:Celui-ci est assez simple. Le premier caractère (
}
) configure nos variables actives, puis il y a un tas de commentaires / pas d'opérations. Il stocke ensuite la chaîne"Sun King\n "
et la rejette immédiatement (via*
, en la stockant dans un permavar que nous n'utilisons jamais). Ensuite, il stocke"Birthday\n"
.]]
est un no-op ici, car il[[ foo ]]
s'agit d'un commentaire de bloc dans Snowman, mais puisqu'il n'y a pas de correspondance[[
avant cela]]
(dans le programme A lui-même), il ne fait tout simplement rien.8AaL
Saisit ensuite les 8 premiers caractères de la chaîne, l'sP
imprime et[[
commente le reste du programme (car encore une fois, il n'y a pas de correspondance]]
.Programme B (sortie:)
Get Back
:Celui-ci est également assez simple.
?}
est équivalent à}
(?
définit simplement toutes les variables sur inactives, ce qui est un no-op ici mais encore une fois, important plus tard). Ensuite, il stocke la chaîne"Get Back"
, fait un tas de no-ops (//
jusqu'à la fin de la ligne est toujours un commentaire) et imprime viasP
.Programme complet
La sortie est, vous l'aurez deviné,
Sun King
1 .Regardons cette ligne par ligne:
Ligne 1
Cela définit nos variables actives, tout comme les programmes précédents (nous pouvons voir maintenant que le
?
est nécessaire afin de ne pas simplement les activer puis les désactiver}}
). Le reste de la ligne est commenté.Lignes 2-4
Commentaires...
Ligne 5
Ici, nous stockons la chaîne
"Sun King//"
, puis commençons un commentaire de bloc. Cela saute essentiellement tout jusqu'au prochain]]
.Ligne 6
Toujours dans le commentaire de bloc ...
Ligne 7
Ici, nous séparons le commentaire de bloc pendant une courte période de temps, pour exécuter le code
8AaLsP
. Ceci est en fait réutilisé à partir du programme A. Comme j'ai choisi toutes les chansons de 8 lettres, je peux simplement utiliser le même code pour le programme combiné.Ensuite, cela devient un peu délicat. La prochaine fois que nous sortirons du commentaire de bloc, nous
8AaLsP
reverrons. Cette fois, cependant, toutes les variables ne sont pas définies (nous avons appelésp
, print, en mode consommation, ce qui supprime les variables). Puisqueaal
requiert deux arguments, et cette fois il n'en a qu'un (8
), il fait une erreur et laisse les variables inchangées.De même,
sp
rencontre le8
, se rend compte que c'est le mauvais type à imprimer et laisse les variables telles quelles.Lignes 8-13
Toujours coincé dans ce commentaire de bloc ...
Ligne 14
Enfin, nous essayons d'appeler à nouveau la même séquence print-first-8-chars, et elle échoue à nouveau, produisant deux autres erreurs. (
8
Cela signifie que les variables sont maintenant8 8
, ce qui est le nombre correct de variables pour l'aal
instant, mais toujours pas les bons types.)1: ainsi que quatre erreurs d'exécution
SnowmanException
sur STDERR, mais selon la méta, cela n'a pas d'importance .la source
The slashes are mostly for aesthetic purposes, and the majority of them can be replaced with spaces (but that would make it look a whole lot more boring)
Mais cela rend un peu plus difficile de comprendre ce qui se passe ...> <> , largeur = 11
Les langages 2D passent un bon moment avec ce défi.
Flèche vers le haut
Le déroulement du programme commence en haut à gauche et se déplace vers la droite. Le
/
reflet monte, et puisque> <> est toroïdal, nous réapparaissons par le bas. Nous en frappons ensuite un autre/
et réfléchissons à nouveau, et poussons les caractèresklawstaC
un par un vers la pile en""
mode chaîne . Enfin, nous réfléchissons vers le haut et frappons une>l?!;o
boucle, ce qui est la façon idiomatique d'imprimer la pile entière dans> <>.Cela imprime
Catswalk
.Flèche vers le bas
Fondamentalement, la même chose, en poussant les personnages dès le départ et en utilisant des miroirs et des flèches pour diriger le flux du programme. Cela imprime
Birthday
.Combiné
Les parties pertinentes sont au-dessus (j'ai coupé beaucoup de lignes au milieu). En utilisant la
/
flèche vers le haut, nous réfléchissons vers le haut et nous enroulons autour, mais comme nous avons maintenant la flèche vers le bas en dessous, une partie de ce code est exécutée à la place. Nous poussons ensuite les caractères appropriés dans la pile et réutilisons la boucle de sortie à partir de la flèche vers le bas.Cela imprime
Hey Jude
.la source
Python 2, taille 21
Ce programme nécessite un terminal compatible ANSI (DOS ANSI.SYS pour être spécifique), car j'utilise
\x1b[2J
pour effacer la console ET déplacer le curseur en haut à gauche. Pour le rendre compatible avec d'autres terminaux ANSI, imprimez\x1b[1J\x1b[H
(cela peut toujours tenir dans un hexagone de taille 21). Je n'ai pas pu tester cette partie, car je n'ai pas de terminal qui imprime les codes d'échappement ANSI.Je pense que le programme a l'air plutôt cool, similaire au symbole radioactif (bien que l'ombrage ASCII implique que les couleurs sont à l'envers) ou à l'icône de l'arme de tireur d'élite de Metroid Prime: Hunters.
Il a fait en forme de la taille 17, mais je l' avais oublié
id=0
dans la flèche. Je ne pense pas que je puisse le réduire, car cela doit être sur une seule ligne ...En outre, le crédit revient à Sp3000 pour l'idée à utiliser
id
.Flèche vers le haut:
Flèche vers le bas:
"Hey Jude" est l'une de mes chansons préférées des Beatles, mais je n'en connais vraiment pas beaucoup. Je n'ai jamais entendu les deux autres chansons que j'utilise. Ce n'est pas un genre que j'écoute souvent.
la source
\x1b[2J
fonctionne uniquement avec ANSI.SYS; il ne devrait rien faire dans d'autres terminaux. Attend également\x1b[;H
un entier après le point-virgule. Pour rendre la ligne et la colonne par défaut à 1, utilisez\x1b[H
. 2.\x1b[1J\x1b[H
et\x1b[H\x1b[J
devrait fonctionner sur tous les terminaux ANSI. 3. Sur les terminaux Linux, vous pouvez simplement utiliser\x1bc
pour réinitialiser le terminal. 4.\x1b
peut être remplacé par un octet ESC littéral, au cas où cela aiderait à améliorer votre score.C (gcc) , largeur de base = 17
Haut, "Hey Jude"
Essayez-le en ligne!
En bas, "Matchbox"
Essayez-le en ligne!
Hexagone, "Michelle"
Essayez-le en ligne!
la source
gawk, longueur de base 15
Je viens de découvrir que cela ne fonctionne pas avec mawk : /
Ce n'est pas trop compliqué, mais ayant grandi dans les années 70, avec les Beatles toujours omniprésents à l'antenne, j'ai dû répondre à cela. D'abord, je pensais que awk n'était pas adapté, mais ensuite il m'est venu.
Étant donné que ces scripts contiennent des blocs BEGIN et / ou END, il faut leur dire qu'il n'y aura pas d'entrée pour exécuter le bloc END. Ceci peut être réalisé soit en appuyant sur Ctrl-D après les avoir démarrés, soit en les démarrant comme ceci:
ce qui je pense est plus pratique.
echo | awk -f script.awk
fonctionnera également, mais si j'avais utilisé une ligne vide en entrée, j'aurais fait cela complètement différent.Pointant vers le haut, imprime pour personne (lien Youtube)
Le code essentiel sans commentaires est le suivant. Comme il
n
n'est pas défini, il affiche "For No One" s'il est appelé par lui-même.Pointant vers le bas, imprime Blackbird
Le code essentiel est le suivant. Si a
n
été défini avant, il n'imprime rien. J'ai appliqué la sortie sympa avec une nouvelle ligne après chaque nom de piste, car j'avais la place pour le faire et ça a l'air plus agréable dans la console.n
est défini dans le processus; ce qui est nécessaire pour l'Hexagone.Hexagone, imprime Je suis tellement fatigué
Le code essentiel. Maintenant, enfin, ce mystérieux
n
est utilisé. Parce quen
est défini dans la première ligne, le triangle pointant vers le haut imprime la sortie alternative et le triangle pointant vers le bas imprime le vide.la source