Mise à jour: le vainqueur a été décidé, mais le défi n'est pas terminé!
Enfin, près de 3 mois après le début de la question, quelqu'un est resté le dernier à répondre pendant plus d'une semaine! Félicitations à jimmy23013 pour sa réponse à P1eq!
Il y a cependant encore 8 caractères à gauche: 48KSaclw
. Si quelqu'un est vraiment ambitieux, il peut continuer d'essayer avec ceux-ci: D
Merci beaucoup à tous ceux qui ont participé, en particulier ceux d'entre vous qui ont maintenu le concours aussi longtemps avec de multiples réponses, notamment KennyTM avec un énorme 25 réponses!
Aussi, merci à tous ceux qui ont gardé la liste de réponses à jour, c'était une aide précieuse :) (surtout depuis mon absence de SE depuis quelques mois: P).
Question originale:
En 2005, l' American Film Institute a produit 100 ans ... 100 citations de films de l'AFI , une liste des meilleures citations du cinéma américain. Ici, ils sont listés exactement comme ils devraient être utilisés dans ce défi:
(answer 6) 1. "Frankly, my dear, I don't give a damn." - Rhett Butler
(answer 7) 2. "I'm gonna make him an offer he can't refuse." - Vito Corleone
(answer 5) 3. "You don't understand! I coulda had class. I coulda been a contender. I could've been somebody, instead of a bum, which is what I am." - Terry Malloy
(answer 3) 4. "Toto, I've a feeling we're not in Kansas anymore." - Dorothy Gale
5. "Here's looking at you, kid." - Rick Blaine
(answer 2) 6. "Go ahead, make my day." - Harry Callahan
(answer 11) 7. "All right, Mr. DeMille, I'm ready for my close-up." - Norma Desmond
(answer 8) 8. "May the Force be with you." - Han Solo
(answer 12) 9. "Fasten your seatbelts. It's going to be a bumpy night." - Margo Channing
(answer 13) 10. "You talking to me?" - Travis Bickle
(answer 16) 11. "What we've got here is failure to communicate." - Captain
(answer 15) 12. "I love the smell of napalm in the morning." - Lt. Col. Bill Kilgore
(answer 4) 13. "Love means never having to say you're sorry." - Jennifer Cavilleri Barrett
14. "The stuff that dreams are made of." - Sam Spade
(answer 18) 15. "E.T. phone home." - E.T.
(answer 20) 16. "They call me Mister Tibbs!" - Virgil Tibbs
17. "Rosebud." - Charles Foster Kane
(answer 10) 18. "Made it, Ma! Top of the world!" - Arthur "Cody" Jarrett
(answer 17) 19. "I'm as mad as hell, and I'm not going to take this anymore!" - Howard Beale
(answer 25) 20. "Louis, I think this is the beginning of a beautiful friendship." - Rick Blaine
(answer 26) 21. "A census taker once tried to test me. I ate his liver with some fava beans and a nice Chianti." - Hannibal Lecter
(answer 9) 22. "Bond. James Bond." - James Bond
(answer 22) 23. "There's no place like home." - Dorothy Gale
(answer 29) 24. "I am big! It's the pictures that got small." - Norma Desmond
25. "Show me the money!" - Rod Tidwell
(answer 31) 26. "Why don't you come up sometime and see me?" - Lady Lou
(answer 27) 27. "I'm walking here! I'm walking here!" - "Ratso" Rizzo
(answer 14) 28. "Play it, Sam. Play 'As Time Goes By.'" - Ilsa Lund
(answer 28) 29. "You can't handle the truth!" - Col. Nathan R. Jessup
(answer 23) 30. "I want to be alone." - Grusinskaya
(answer 30) 31. "After all, tomorrow is another day!" - Scarlett O'Hara
(answer 1) 32. "Round up the usual suspects." - Capt. Louis Renault
(answer 24) 33. "I'll have what she's having." - Customer
(answer 36) 34. "You know how to whistle, don't you, Steve? You just put your lips together and blow." - Marie "Slim" Browning
(answer 19) 35. "You're gonna need a bigger boat." - Martin Brody
(answer 39) 36. "Badges? We ain't got no badges! We don't need no badges! I don't have to show you any stinking badges!" - "Gold Hat"
(answer 40) 37. "I'll be back." - The Terminator
(answer 33) 38. "Today, I consider myself the luckiest man on the face of the earth." - Lou Gehrig
(answer 37) 39. "If you build it, he will come." - Shoeless Joe Jackson
(answer 43) 40. "My mama always said life was like a box of chocolates. You never know what you're gonna get." - Forrest Gump
(answer 34) 41. "We rob banks." - Clyde Barrow
(answer 38) 42. "Plastics." - Mr. Maguire
43. "We'll always have Paris." - Rick Blaine
(answer 49) 44. "I see dead people." - Cole Sear
(answer 21) 45. "Stella! Hey, Stella!" - Stanley Kowalski
(answer 32) 46. "Oh, Jerry, don't let's ask for the moon. We have the stars." - Charlotte Vale
(answer 35) 47. "Shane. Shane. Come back!" - Joey Starrett
(answer 42) 48. "Well, nobody's perfect." - Osgood Fielding III
(answer 51) 49. "It's alive! It's alive!" - Henry Frankenstein
(answer 41) 50. "Houston, we have a problem." - Jim Lovell
(answer 45) 51. "You've got to ask yourself one question: 'Do I feel lucky?' Well, do ya, punk?" - Harry Callahan
(answer 55) 52. "You had me at "hello."" - Dorothy Boyd
(answer 46) 53. "One morning I shot an elephant in my pajamas. How he got in my pajamas, I don't know." - Capt. Geoffrey T. Spaulding
(answer 44) 54. "There's no crying in baseball!" - Jimmy Dugan
(answer 59) 55. "La-dee-da, la-dee-da." - Annie Hall
(answer 60) 56. "A boy's best friend is his mother." - Norman Bates
(answer 47) 57. "Greed, for lack of a better word, is good." - Gordon Gekko
(answer 56) 58. "Keep your friends close, but your enemies closer." - Michael Corleone
(answer 48) 59. "As God is my witness, I'll never be hungry again." - Scarlett O'Hara
(answer 50) 60. "Well, here's another nice mess you've gotten me into!" - Oliver
(answer 65) 61. "Say "hello" to my little friend!" - Tony Montana
(answer 66) 62. "What a dump." - Rosa Moline
(answer 52) 63. "Mrs. Robinson, you're trying to seduce me. Aren't you?" - Benjamin Braddock
(answer 61) 64. "Gentlemen, you can't fight in here! This is the War Room!" - President Merkin Muffley
(answer 68) 65. "Elementary, my dear Watson." - Sherlock Holmes
(answer 64) 66. "Take your stinking paws off me, you damned dirty ape." - George Taylor
(answer 53) 67. "Of all the gin joints in all the towns in all the world, she walks into mine." - Rick Blaine
(answer 72) 68. "Here's Johnny!" - Jack Torrance
(answer 71) 69. "They're here!" - Carol Anne Freeling
(answer 73) 70. "Is it safe?" - Dr. Christian Szell
(answer 54) 71. "Wait a minute, wait a minute. You ain't heard nothin' yet!" - Jakie Rabinowitz/Jack Robin
(answer 77) 72. "No wire hangers, ever!" - Joan Crawford
(answer 67) 73. "Mother of mercy, is this the end of Rico?" - Cesare Enrico "Rico" Bandello
(answer 70) 74. "Forget it, Jake, it's Chinatown." - Lawrence Walsh
(answer 74) 75. "I have always depended on the kindness of strangers." - Blanche DuBois
(answer 78) 76. "Hasta la vista, baby." - The Terminator
(answer 75) 77. "Soylent Green is people!" - Det. Robert Thorn
(answer 76) 78. "Open the pod bay doors, HAL." - Dave Bowman
(answer 80) 79. Striker: "Surely you can't be serious." Rumack: "I am serious...and don't call me Shirley." - Ted Striker and Dr. Rumack
(answer 84) 80. "Yo, Adrian!" - Rocky Balboa
(answer 81) 81. "Hello, gorgeous." - Fanny Brice
(answer 83) 82. "Toga! Toga!" - John "Bluto" Blutarsky
(answer 63) 83. "Listen to them. Children of the night. What music they make." - Count Dracula
(answer 87) 84. "Oh, no, it wasn't the airplanes. It was Beauty killed the Beast." - Carl Denham
(answer 88) 85. "My precious." - Gollum
(answer 86) 86. "Attica! Attica!" - Sonny Wortzik
(answer 57) 87. "Sawyer, you're going out a youngster, but you've got to come back a star!" - Julian Marsh
(answer 82) 88. "Listen to me, mister. You're my knight in shining armor. Don't you forget it. You're going to get back on that horse, and I'm going to be right behind you, holding on tight, and away we're gonna go, go, go!" - Ethel Thayer
(answer 58) 89. "Tell 'em to go out there with all they got and win just one for the Gipper." - Knute Rockne
(answer 90) 90. "A martini. Shaken, not stirred." - James Bond
(answer 85) 91. "Who's on first." - Dexter
(answer 62) 92. "Cinderella story. Outta nowhere. A former greenskeeper, now, about to become the Masters champion. It looks like a mirac...It's in the hole! It's in the hole! It's in the hole!" - Carl Spackler
(answer 69) 93. "Life is a banquet, and most poor suckers are starving to death!" - Mame Dennis
(answer 89) 94. "I feel the need - the need for speed!" - Lt. Pete "Maverick" Mitchell and Lt. Nick "Goose" Bradshaw
(answer 79) 95. "Carpe diem. Seize the day, boys. Make your lives extraordinary." - John Keating
(answer 91) 96. "Snap out of it!" - Loretta Castorini
(answer 92) 97. "My mother thanks you. My father thanks you. My sister thanks you. And I thank you." - George M. Cohan
(answer 93) 98. "Nobody puts Baby in a corner." - Johnny Castle
(answer 94) 99. "I'll get you, my pretty, and your little dog, too!" - Wicked Witch of the West
(answer 95) 100. "I'm the king of the world!" - Jack Dawson
(N'hésitez pas à marquer les guillemets comme ils sont utilisés.)
Il y a 95 caractères ASCII imprimables (codes hexadécimaux 20 à 7E), ce qui est plutôt près de 100:
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
Dans ce défi, les utilisateurs écrivent à tour de rôle des programmes qui impriment l’une des citations de films en utilisant un nouveau langage de programmation et un sous-ensemble plus petit d’ASCII imprimable à chaque fois.
Comment ça marche
J'ai déjà soumis la première réponse et je l'ai étiquetée 95 depuis que j'ai été autorisé à utiliser les 95 caractères ASCII imprimables de mon programme. C'est un programme Python qui affiche la 100ème citation "I'm the king of the world!" - Jack Dawson
, sur la sortie standard.
La deuxième personne à qui répondre doit choisir un nouveau devis, un nouveau langage de programmation et l’un des 95 caractères imprimables ASCII à exclure de son code. Ils doivent écrire un programme sans utiliser ce caractère qui imprime la citation choisie sur stdout. Ils doivent marquer 94 comme réponse car ils doivent travailler avec 94 caractères ASCII imprimables (pensez à cela comme un compte à rebours).
La troisième personne à qui répondre doit choisir une citation et une langue qui n’a été utilisée dans aucune réponse précédente (seulement 95 et 94 dans ce cas), ainsi qu’un nouveau caractère à renoncer. Ils ne doivent pas utiliser ce caractère ni aucun caractère précédemment interdit dans leur code. Ils marquent leur réponse comme 93.
Ce processus de réponse se poursuit ainsi jusqu'à ce que tous les caractères imprimables ASCII soient interdits et que quelqu'un donne la réponse "1", ou bien plus vraisemblablement, personne ne peut trouver comment répondre à nouveau.
Règles (veuillez lire attentivement)
Il est important de comprendre qu’une seule personne à la fois peut répondre et que chaque réponse dépend de celle qui la précède. Il ne devrait jamais y avoir deux réponses avec le même numéro, citation ou langage de programmation.
Il y aura forcément des réponses contradictoires soumises en même temps, et ce n'est pas grave. Si cela se produit, la personne qui a répondu techniquement plus tard devrait rapidement (comme 10 min ou moins) supprimer son message ou le modifier pour qu'il devienne la réponse suivante. Sinon, ne modifiez pas le code sauf si cela est vraiment nécessaire . La modification de publications pour corriger uniquement le formatage est encouragée.
Règles spécifiques
- Un utilisateur qui vient de répondre doit attendre au moins une heure avant de répondre à nouveau.
- Un utilisateur ne peut pas répondre deux fois de suite.
- Le numéro de devis que vous choisissez ne doit pas être supérieur à 5 sous le numéro de votre réponse. Par exemple, la réponse 90 peut choisir n'importe quelle citation non utilisée du nombre 85 à 100. Cela laisse les meilleures citations pour les réponses les plus difficiles. Autre que cette règle, la numérotation des citations est sans importance.
- Les programmes ne peuvent contenir que des onglets, des nouvelles lignes et le caractère imprimable ASCII qui n’est pas interdit jusqu’à présent. (Les onglets et les nouvelles lignes ne sont jamais interdits.)
- Il n'y a pas de limite de longueur de programme, mais votre programme ne peut contenir plus de 64 onglets ou 64 nouvelles lignes.
- Les langues sont considérées comme distinctes si elles sont communément désignées par des noms différents. Les différentes versions des langages de programmation ne sont pas considérées comme distinctes. (Les langages de balisage tels que HTML comptent, mais les langages de programmation complets sont préférables.) Votre langue doit avoir existé avant le début de ce concours.
- Si votre langue n’a pas stdout, utilisez un mécanisme de sortie de texte similaire.
- Votre programme ne doit pas prendre d’entrée ou avoir des effets secondaires inattendus comme la création de fichiers.
Assurez-vous que votre programme est valide. Il devrait pouvoir fonctionner comme un programme complet tel quel, et pas seulement dans un environnement REPL .
Notez que la "citation" que vous devez produire inclut les guillemets et la personne qui l’a dit (mais pas le numéro de la citation). Votre programme doit uniquement produire votre devis exactement tel qu'il apparaît dans la liste ci-dessus (un retour à la ligne début / fin convient parfaitement).
Mise en page
Veuillez formater vos réponses comme ceci, {stuff in curly braces}
vous devez les remplacer:
#{answer number}. {language}, uses no <code>{the forbidden character you just chose}</code>
{program}
Output is quote {quote number}:
{program output, should be identical to quote}
[Previously forbidden:]({url of previous answer (hit "share" just below it)}) <code>{the previous answerer's forbidden character followed by his previously forbidden list}</code>
{anything else you wish to say}
Les <code>
balises peuvent être remplacées par des backticks ( `
) tant qu'elles ne contiennent pas de backtick.
Notation
L'objectif commun de ce défi est de garder les réponses aussi longtemps que possible.
Le gagnant officiel est l'utilisateur qui répond en dernier, après une semaine sans réponses supplémentaires. Je vais accepter leur dernière réponse.
Liste de réponses (le plus récent en premier)
4
Unaire Progressifa
Bueuec
UdageS
1L_a105w
BinaryfuckK
Sous-peaul
23
n
P1eqt
Addleq9
Code machine x86r
BSMD
ShaFuck 0,2u
VillmarkO
Code machine PDP-11f
ProgFki
NUMPADH
Tri2
ferNANDoP
Pointum
SubleqG
FlogScript?
Nqubl%
Glypho!
3varq
ETAj
BrainSpace 1.0V
Insomnie`
asdf6
Lazy KC
! Py! Lot 1.5T
BaiserF
PoGoR
Golunarb
6502 code machine + Moniteur système Apple IIY
HeadsecksI
BRBU
Casse cérébraleZ
En extaseM
FermeA
LavementL
RÉGLER$
BeatnikN
Rebmug
DupdogB
GammaplexJ
Fuck45
A0A0W
gs2:
l33th
TonocoE
Malbolgek
D1ffe7e45e1
malQ
CaneCoded
Herbe#
URSL|
Burlesquex
Emmental~
Applesoft BASIC^
4ème7
80386 code machine + DOS_
Argh!v
Rexx}
Alpha Betao
Super pile!e
Pythz
TeX Plain>
WASD]
Shell POSIX&
Charabia/
GolfScript*
assemblage x86_640
AppleScriptX
Poissons morts ~,
Cuillère-
oOo CODE=
J@
Mathematica.
Perl+
ADN #<
Pi)
Postscript[
abcs
dc{
HTML(
Unaire;
Ook!'
CJamPHP
"
Brainfuck\
Marbelous3
C ++y
Rubisp
JavaScript- Python
(N'hésitez pas à éditer si incorrect ou obsolète)
Cette question fonctionne mieux lorsque vous triez par "plus ancien".
REMARQUE: Comme ma dernière question , il s'agit d'un test d'un nouveau type de défi dans lequel chaque réponse dépend du dernier et augmente en difficulté. Venez discuter ou méta pour discuter de la question ou de l’idée en général.
la source
Réponses:
8. P1eq (utilise non
n
)Il nécessite une plate-forme 64 bits non-Windows pour fonctionner correctement, tout comme la réponse Addleq. Il a utilisé le même truc pour le -1.
Il a 64 nouvelles lignes et 57 onglets.
Il est lent et a pris environ 18 minutes sur mon ordinateur.
La sortie est citation 8:
Auparavant interdit :
Restant:
4
8
K
S
a
c
l
w
P1eq est comme Subleq et Addleq, avec l'instruction B = A + 1 et saute si B n'est pas modifié.
Explication:
Ce programme incrémente * 444 et * 484 ensemble et réinitialise * 444 lorsqu'il devient une certaine valeur. Lorsque * 484 est égal aux données, * 444 sera le reste des données divisé par une certaine valeur.
Seules 6 cellules de mémoire dans le code sont adressables directement avec 4 et 8. Je dois en réutiliser certaines. Cela a également rendu certaines opérations pas dans l'ordre que je voulais, telles que l'utilisation de variables non initialisées. Mais je peux simplement ignorer tout ce qui est retourné dans la première fois de la boucle et l'initialiser ensuite.
Quelques autres langues trouvées intéressantes mais non utilisables:
.
)*
)A
mais sensible à la casse, malheureusement) je l'ai trouvé dans Wikipedia japonais.Maintenant, il me reste 3 langues.
Pour ceux qui veulent écrire plus de réponses, voici quelques indications à rechercher:
Pour être exact, j'ai eu:
la source
90. Brainfuck, utilise pas
"
La sortie est citation 90:
Auparavant interdit:
py3\
Quelqu'un devait le faire avant que tout
.+-
soit interdit.Essayez-le ici: http://ideone.com/dlu8VE
la source
"
? C'est un peu méchant pour tout le monde après vous.51. Malbolge (utilise no
E
)(Les nouvelles lignes sont juste pour la clarification et ne font pas partie de la source.)
La sortie est citation 49:
Auparavant interdit :
"#&'()*+,-./0137;<=>@[\]^_ deopQksvxXyz{|}~
Caractères restants:
!
$
%
:
?
`
2
456
89
ABCD
FGHIJKLMNOP
RSTUVW
YZ
abc
fghij
lmn
qr
tu
w
Vous pouvez l'exécuter avec l' interpréteur de référence Malbolge .
la source
10. Code machine x86, n'utilise pas
9
Quand j'ai réalisé que les caractères restants incluaient les opcodes pour 'Dec BX' et 'Push BX', j'ai conclu qu'un programme x86 était encore possible.
Lien pour le code et le fichier .com
Le code ressemble à une version beaucoup plus longue de ceci:
Le code, compressé avec
bzip2
et codé en base 64, est le suivant:La sortie est citation 18:
Auparavant interdit :
Caractères restants:
4
8
K
S
a
c
l
n
t
w
C'est un code auto-modificateur qui crée un code auto-modifiable, voici comment cela fonctionne:
Le texte est d'abord codé en entrant des séquences de '4' terminées par '8', qui mappent des instructions qui sont en réalité des instructions NOP pour ce programme. Ensuite, BX est décrémenté ('K') jusqu'à ce qu'il ait la valeur où le code d'impression finira sur la pile. Ceci est poussé 8 fois ('S'), puis Pop All, 'a' est exécuté pour configurer SI et DI pour plus tard. BX est ensuite décrémenté et poussé à plusieurs reprises pour entrer les valeurs arbitraires du programme d'impression sur la pile (l'octet de poids faible), avec un octet de mémoire (octet de poids fort). Ensuite, une longue séquence de décrémentations donne à BX la valeur 0xAAAD, qui correspond aux deux instructions de 1 octet "Load Word" et "Store Byte". Chaque paire de ces instructions supprimera un octet vide du code d'impression. Ces instructions sont poussées 28 fois (la taille du programme d’impression), et le reste du fichier est rempli d'instructions de décrémentation supplémentaires pour agir en tant que NOP. Ces NOP seront exécutés jusqu'à l'atteinte de la zone de mémoire utilisée par la pile, qui a été écrasée par le code condensé. Le code condensé est exécuté en supprimant les octets parasites du code de la pile (indiqués par SI et DI, qui ont été définis précédemment). Enfin, lorsque le code condensé est terminé, le programme d’impression a été enregistré avec succès lors de la prochaine instruction à exécuter.
Code d'assemblage pour générer le code machine (FASM)
la source
IMUL
d'un certain type), donc on peut l'appeler un "langage" différent. Je n'ai même pas essayé de vérifier si x86 était encore possible à ce stade - apparemment, c'est le cas!61. 80386 code machine + DOS, n'utilise pas
7
La sortie est citation 64:
Auparavant interdit:
"'&()*+-,./\03;<=>@X_[sovy pez]{}
Créer un fichier exécutable utilisant uniquement du code ASCII imprimable n’est pas une tâche facile. Heureusement, peu de caractères étaient interdits par les réponses précédentes, je n'avais donc besoin que de quelques correctifs ici et là.
Pour exécuter ce programme, copiez-le dans un fichier avec une extension
.com
et exécutez-le (les sauts de ligne utilisent le format DOS0d 0a
;TAB
le code contient un caractère). Il est dommage que les systèmes Windows 64 bits modernes ne prennent pas en charge le code 16 bits. il faut un système Windows 32 bits ou DOSBox pour exécuter le code.J'ai utilisé le
debug.com
débogueur DOS pour développer le code. Pour "assembler" le "code source", redirigez-le dans le débogueur. Sur la DOSBox:Code source:
Quelques notes:
0x41
,0x23
et0x24
. J'ai choisi des masques qui n'étaient pas interdits.0xcd
et0xc3
. Ils sont également masqués XOR, le code doit donc se modifier lui-même.k
est très important ici: il code l'IMUL
instruction de multiplication. Je l'utilise pour acquérir des valeurs constantes: par exemple, la constante0x216b
, multipliée par0x45
, donne la constante utile0x01d7
, qui est un pointeur (avec un décalage, comme décrit ci-dessus) vers le code à patcher. De la même manière, le masque de correction est0x2132*0x36=0x8c
(ne vous en faites pas la troncature).and ax, 2142; and ax, 4221
.ax
ne change pas.Edit: ne plus utiliser le
_
caractère (mauvaise synchronisation dans post) - ne peut pas utiliserpop di
, donc utiliser ledi
registre beaucoup moins maintenant.la source
@
est déjà interdit en 78, choisissez un autre symbole s'il vous plaît.85. HTML5 (utilise non
{
)La sortie est la citation 91.
Auparavant interdit :
py3\" ';(
la source
12. ShaFuck 0.2 (utilise non
D
)Le code source comporte exactement 4 784 128 octets, contenant tous les caractères autorisés, à l'exception de
D
. On dirait:Ici (a × 1017) signifie le caractère "a" répété 1017 fois. Le fichier compressé bzip2 codé en base64 (247 octets) est le suivant:
La somme SHA1 du fichier d'origine doit être 1250ecf73c61ef93a31c4f7dfaa0a7631ada50bf.
La sortie est citation 9:
Auparavant interdit :
Caractères restants:
4
8
9
K
S
a
c
l
n
r
t
w
ShaFuck est une variante de Brainfuck. Il faut chaque morceau de 1024 octets, calcule le résumé SHA-1, puis utilise la sortie de 20 octets en tant que programme Brainfuck. Comme expliqué dans l' article de blog lié au wiki, il existe une "vulnérabilité" dans la version 0.2 que la sortie SHA-1 du formulaire:
est accepté. Cela permet une conversion directe d'une commande brainfuck en un bloc de 2 048 octets. Le codeur utilise
a
-z
comme jeu de caractères, ce qui ne nous convient pas. Nous avons donc besoin d'écrire nous-mêmes un "mineur". Maintenant, il y a 13 caractères valides disponibles. En supposant que la sortie SHA-1 soit aléatoire, si nous voulons corriger les 3 premiers octets, cela correspond à 3 × log₁₃ (256) ~ 6,5 caractères d'entrée. Par conséquent, nous devons itérer toutes les chaînes de 7 caractères composées de ces 13 alphabets:Nous pourrions rapidement alors obtenir ces équivalents:
Nous avons donc finalement ce codeur simple:
la source
SUFFIX = 'a' * (1024 - 7)
- juste au cas où1024 - 7
n'est pas toujours1017
? :-)(1024 - 7)
est plus lisible.87. Ook !, n'utilise pas
;
La sortie est citation 84:
Auparavant interdit:
py3\" '
la source
76. oOo CODE , n'utilise pas
-
La sortie est citation 78:
Auparavant interdit :
py3\" ';({s[)<+.@=
Je ne posterai pas un autre équivalent / dérivé de BF. Promettre.
EDIT: J'ai mis à jour le code pour qu'il soit plus lisible. (lol) N'affecte pas les personnages interdits.
J'ai utilisé cet outil pour générer mon BF pur. Je l'ai ensuite converti en oOo CODE:
Et puis utilisé ce script Python pour obtenir la version "lisible" de pure oOo CODE et un texte d’entrée:
la source
9. Addleq (utilise non
t
)Utilise
sqasm.cpp
dans la page esolang à assembler. Requiert une plate-forme 64 bits non Windows pour fonctionner correctement.Il y a exactement 64 onglets et 64 nouvelles lignes (pas de nouvelles lignes). Ouf.
La sortie est citation 22:
Auparavant interdit :
Restant:
4
8
K
S
a
c
l
n
w
"Addleq" un OISC est similaire à "Subleq", mais utilise l'addition au lieu de la soustraction.
Construire "-1"
La sortie dans Addleq fonctionne en écrivant dans l'adresse mémoire -1. Puisque tous les nombres impairs sont interdits, nous ne pouvons pas construire un -1 par des moyens normaux. Cependant, nous pouvons tromper l’assembleur en créant un -1:
Ici
sscanf(s, "%d", &ret)
se comporte commeret = strtol(s, NULL, 10);
(C11 §7.21.6.2 / 12), et lorsque l'entrée déborde,strtol
LONG_MAX renvoie (C11 §7.22.1.4 / 8). Donc, sisizeof(long) > sizeof(int)
, nous devrions avoirret == -1
. Cependant, sur la plate-forme quisizeof(long) == sizeof(int)
par exemple les plates-formes 32 bits ou Windows, 0x7fffffff serait rendu invalide.Sauvegarde des onglets avec l'assembleur
Dans addleq de bas niveau, chaque instruction est longue de 3 nombres. Comme nous ne disposons que de 128 espaces blancs, nous devons imprimer la chaîne entière avec 129/3 = 43 instructions. Ceci est totalement insuffisant car la citation la plus courte (choisie ici) comporte 32 caractères.
Néanmoins, l'assembleur supporte une notation abrégée:
La règle n ° 2 a été conçue pour que "subleq" puisse rapidement mettre à zéro une adresse. Mais pour "addleq" cela nous permet de doubler une valeur sans tabulation.
Celles-ci nous permettent à peine d’intégrer tout le programme en 129 numéros.
Créer des nombres
La citation est choisie car elle est courte et comporte beaucoup de caractères dupliqués. Les nombres que nous devons créer sont:
Nous pourrions utiliser des nombres aux adresses 4, 8, 44, 48, 84, 88, .... La règle n ° 1 de l'assembleur a déjà placé "9" à * 8 et "45" à * 44, nous allons donc les utiliser (c'est bien ce sont des nombres impairs). De plus, nous allons essayer d’adapter "-1", "8" et "44" à ces adresses en déplaçant les calculs. Le résultat est la première moitié du code:
La dernière ligne
Une fois tous les nombres construits, nous pouvons imprimer chaque caractère. Le programme final, cependant, compte plus de 67 lignes, deux de trop. Par conséquent, nous devons combiner les 3 dernières lignes ensemble:
Comme la ligne a plus de 2 chiffres, nous devons fournir manuellement le 3ème paramètre des instructions. Cela signifie que nous échangeons chaque nouvelle ligne contre 2 onglets. Heureusement, avant la combinaison, nous utilisions 60 onglets. Le résultat final a donc à peine dépassé les exigences.
la source
4
et8
il y avait0
et7
.89. PHP, n'utilise pas
La sortie est citation 94:
Auparavant interdit :
py3\"
la source
'
maintenant !!!81. PI , n'utilise pas
<
La sortie est citation 81:
Auparavant interdit:
py3\" ';({s[)
Quoi ? Pi sans
3
?Mon interprète ici (désolé pour l'interface utilisateur rudimentaire, basée sur cette réponse ): http://migl.io/projects/pi/index.php
la source
79. Perl 5, n'utilise pas
.
La sortie est citation 95:
Auparavant interdit:
py3\" ';({s[)<+
En tant que langue TMTOWTDI, Perl offre de nombreux moyens de contourner les restrictions. La méthode utilisée ici est de construire l'instruction
print "that quote"
tant que chaîne et à l'évaluer.Bien que
'
et"
soient interdits, Perl permet en outre d’exprimer des chaînes en utilisantq«…»
etqq«…»
respectivement. Et bien que ce;
soit interdit, comme toutes les déclarations ne sont pas fausses, nous pourrions utiliserand
pour enchaîner les déclarations. Étant donné que les lettres majusculesP
,Y
,S
sont encore autorisés, nous pourrions mettrep
,y
,s
dans la chaîne finale à l' aide de lalc
fonction (minuscule), alors quechr
peut être utilisé pour mettre les symboles"
et.
la source
$foo=0
est faux, bien sûr.) En tout cas, très gentil; +154. CaneCode (utilise pas
Q
)(Les nouvelles lignes et les nouveaux espaces ne sont pas nécessaires.)
La sortie est citation 71:
Auparavant interdit :
"#&'()*+,-./037;<=>@[\]^_ deopsvxXyz{|}~
CaneCode est juste un autre dérivé de BF, avec le mapping:
Juste une note: Les caractères restants sont:
!
$
%
:
?
`
12
456
89
ABCDEFGHIJKLMNOP
RSTUVW
YZ
abc
fghijklmn
qr
tu
w
la source
6. Sous-peau (utilise pas
K
)La ligne 9 du programme suivant est remplacée par quelque chose de testable. Il a 2 nouvelles lignes de fuite, et exactement 64 nouvelles lignes au total.
Pour que cela réponde aux critères, la ligne 9 doit être remplacée par le grand chiffre suivant. Je pense que cela devrait être valable, tout comme ces variantes unaires.
a
. Ainsi , le dernier chiffre est una
k = 0, et il y a 159321460184447640588063043795531819638245990121854536131792918542864566418397339281153516086677425424423723475531974684547855358001230183547851703274577276601612622258171727288003902331619018508731805969660163575803761844794365403871421372122820829226554024584224464882571689865777 d'entre eux.8
.Notez que le nombre construit est en base 16 (mais les chiffres dans la description ci-dessus sont en base 10). Si mon calcul est correct, il devrait être identique au numéro d'origine dans le programme mod 8 * (16 ^ 234-1) / 15. Un nombre suffisant et satisfaisant à ce critère devrait fonctionner, mais je ne sais pas comment en construire un plus court avec seulement
4
8
a
c
.La sortie est citation 1:
avec un début et une fin de ligne.
Auparavant interdit:
Caractères restants:
4
8
S
a
c
w
.Explication
Subskin est un OISC dans lequel l'instruction est à soustraire et ignore l'instruction suivante si le résultat est négatif. Les 3 premiers champs de la mémoire sont mappés sur le pointeur, la sortie et l'entrée de l'instruction. Le pointeur d'instruction peut être utilisé comme "goto", et sa lecture peut générer des nombres qui ne seraient autrement pas disponibles en utilisant les seuls caractères utilisables.
Au début, j'ai essayé de compresser le code dans les chiffres d'une base. Mais je ne pouvais pas jouer en 64 lignes. Je suis donc passé à l'approche du module qui supprime un niveau de boucle.
C'est fondamentalement juste le plus grand algorithme de diviseur commun. A / B est extrait à chaque étape. Puis définissez A = B et B = A mod B et continuez.
Plus précisément, quand A> B incrémente les données actuelles, sinon les nombres sont échangés et le pointeur déplacé. Après cela, le plus petit nombre est soustrait du plus grand nombre.
Enfin, le code d'auto-extraction remplace quelque chose dans la boucle et le rompt, et continue jusqu'au code extrait. Le code extrait est assez simple.
Code
Génération
Supposons que, après la progression de l'extraction, A et B soient n et m. Il est facile d’inverser cette progression et d’obtenir A et B (avant le début des données utiles) en termes de n et m. Et A = an + bm, B = cn + dm. Définissez A sur un nombre quelconque, suffisamment grand pour rendre n et m positifs (et n’utilise que les caractères disponibles). n et m peuvent être calculés par inversion modulaire. Alors B est déterminé par n et m.
Mais il n'est pas facile de faire en sorte que B ne soit composé que de ces caractères. J'ai utilisé une étape supplémentaire qui ne devrait extraire que des données indésirables inoffensives. Donc, le nouveau B serait kA + B où k est un entier positif. Il est facile de voir qu'un tel ak existe. Mais je ne suis pas sûr qu'il soit possible d'en trouver un qui soit suffisamment court pour pouvoir être testé. Et j'ai utilisé le petit théorème de Fermat pour en trouver un qui fonctionne en théorie.
Il ne me reste qu'une langue n ° 2.
la source
78. Mathematica, utilise pas
@
La sortie est citation 76:
Auparavant interdit:
py3\" ';({s[)<+.
Généré comme suit:
Le programme est alors:
avec des valeurs insérées pour
n2
,ndiff
,d2
etddiff
et toutes les parties enlevées.Mon idée originale était d'utiliser
ToString
,FromDigits
,IntegerDigits
,Partition
etFromCharacterCode
. Cependant les deuxFromDigits
etIntegerDigits
a uns
en eux que je n'avais pas remarqué.la source
72. assemblage x86_64 (nasm), n'utilise pas
*
Utilise 61 onglets et 36 nouvelles lignes.
La sortie est citation 68:
Auparavant interdit:
py3\" ';({s[)<+.@=-,X0
Ceci utilise un
write
appel système avec le numéro0x2000001
, qui ne fonctionne probablement que sur OS X. Assemblage, liaison et exécution:la source
71. GolfScript, utilise pas
/
La sortie est citation 69:
Auparavant interdit:
py3\" ';({s[)<+.@=-,X0*
Merci à Peter Taylor de me faire part de certaines bizarreries de GolfScript pour la construction de la chaîne. Premièrement, je peux obtenir une chaîne vide sans utiliser de guillemets, en affectant le contenu (vide) STDIN à une variable (
?
dans ce cas). Ensuite, je construis un tableau imbriqué de nombres qui, pris mod 256, sont les points de code souhaités. En ajoutant des multiples de 256, je peux éviter les doublons et les nombres contenant0
et3
. Enfin, je pousse la chaîne vide avec?
et prends la différence de jeu symétrique. Cela aplatit le tableau et le convertit en une chaîne, où GolfScript ne se soucie que du reste du mod 256.Testez-le ici.
la source
91. Marbelous , n'utilise pas
\
La sortie est citation 96:
Auparavant interdit :
py3
la source
95. Python
La sortie est citation 100:
Aucune interdite.
la source
73. AppleScript, n'utilise pas
0
(Tous les "espaces" sont des "onglets", comme le permet l'OP. Il y a 25 onglets et 8 nouvelles lignes.)
La sortie est citation 70:
Auparavant interdit :
py3\" ';({s[)<+.@=-,X
Ici, nous construisons d’abord la variable
c
qui est une liste de codes ASCII de la citation. Dans AppleScript,number & number
produit la liste à 2 éléments{number, number}
etlist & number
ajoute le numéro à la liste afin d'éviter l'utilisation de{
ou,
. De plus,&
a une priorité inférieure à*
et/
, nous pouvons donc créer la liste entière sur une ligne, en évitant la(
ou les variables (ce qui gaspille 3 onglets).Ensuite, nous convertissons la liste de nombres
c
en chaîned
. Encore une fois, nous utilisons&
ici, depuis sastring & string
concaténation. AppleScript ne fait pas la distinction entre les majuscules et les minuscules, nous pourrions donc utiliser cettediSPlaY
solution de contournement despys
caractères.la source
set
et j'échouais. J'avais la réponse pour la citation n ° 62, mais je ne peux plus l'utiliser maintenant; P57. Burlesque (utilise non
|
)Les nouvelles lignes sont uniquement à des fins de clarification, mais les onglets sont nécessaires. Il y a 4 onglets.
La sortie est citation 87:
Auparavant interdit :
"'&()*+-,./\037;<=>@_[sovy pezxX]^{}~
Burlesque est similaire à GolfScript, mais chaque commande est généralement composée de 2 caractères. La construction est comme ça:
Burlesque supporte les entiers de précision arbitraire et permet également la conversion en base 36. Nous allons donc d'abord encoder tous les caractères minuscules en base 36:
Malheureusement, ce nombre contient trop de 0, 3 et 7, et tous les symboles arithmétiques (
+-*/
) sont interdits ... Habituellement, nous pourrions utiliser le module, mais Burlesque utilise la séquence dans.%
laquelle le point est également indisponible. Heureusement, l'opérateur xor est étrangement$$
, nous pourrions donc essayer de le construire en xor-ing deux nombres libres de 0, 3, 7. C'est la raison du nombre énorme 41224222….Enfin , nous insérons les autres symboles comme
,
,, etc de nouveau dans la chaîne. La mauvaise nouvelle est que la fonction "chr" utilise la séquence
L[
qui est à nouveau interdite! La bonne nouvelle est qu’il existe différentes façons de construire une chaîne existante (par exemple,??
crée la chaîne de version"Burlesque - 1.7.3"
contenant un "espace"), puis d’extraire (!!
) un caractère de celle-ci.Les opérateurs d'incrémentation et de décrémentation utilisent aussi les caractères interdits
.+
,.-
néanmoins il existe des alternatives?i
,?d
qui ont le même effet. Ainsi, nous pourrions générer l’ensemble du spectre ASCII à partir de cela.la source
34. Code machine 6502 + Moniteur système Apple II (utilise non
b
)(Utilise 1 onglet)
La sortie est citation 41:
Auparavant interdit :
"#$&'()*+,-./01357:;<=>@[\]^_ ABdeEghIJLMNopQksUvWxXyYzZ{|}~
Caractères restants:
!
%
?
`
2
4
6
89
CD
FGH
K
OP
RST
V
a
c
f
ij
lmn
qr
tu
w
Exécuter sur Apple // e (ou émulateur). Assurez-vous que le caractère de tabulation est copié sous la forme d'une tabulation et non d'espaces.
Ceci est une combinaison des idées du code machine 80386 + réponse DOS et de ma réponse antérieure Applesoft BASIC .
Pour ceux qui ne sont pas familiers, le Moniteur système sur les ordinateurs Apple II est un interpréteur / débogueur de très bas niveau qui vous permet de modifier la mémoire et d'exécuter du code (si vous exécutez un interpréteur BASIC, vous pouvez y accéder en procédant de la sorte
CALL -151
). La méthode habituelle pour entrer le code machine dans le Moniteur système serait<addr>: <hex_byte> <hex_byte> ...
, et le code courant est exécuté par<addr>G
(G pour "Go"). La saisie du code de la manière habituelle utilise des caractères interdits; cependant, le tampon d'entrée pour entrer une ligne de texte commence à la mémoire 0x200. Ainsi, one-liner indique au Moniteur système de passer à 0x262, puis au code incorporé suivant le code ASCII.Bien que n'étant pas un langage ésotérique, les restrictions sur les opcodes utilisables font que le code ressemble plus à un dérivé de brainfuck. Tout ce qui est disponible: lecture de la mémoire (mais pas en écriture), incrémentation et décrémentation de la mémoire, soustraction de l'accumulateur, et branchement sur non 0. Seules quelques instructions ont été modifiées: un appel à la routine Monitor produisant un caractère et le retour pour terminer le programme.
Démontage. Notez que tous les caractères saisis ont leur bit de poids fort:
la source
14. Code machine PDP-11, n'utilise pas
O
La sortie est citation 28:
Auparavant interdit :
Caractères restants:
4
8
9
D
K
S
a
c
l
n
r
t
u
w
Quelques détails techniques:
Pour vérifier ce code, j'ai utilisé le simulateur Ersatz-11 . Pour exécuter le code, écrivez le code dans un fichier
test.pdp
, exécutez le simulateur et entrez:Le résultat:
Code source (tous les nombres sont en notation octale):
Il est plus facile d'expliquer comment cela fonctionne du début à la fin. La partie sortie est comme ceci (chaque itération génère 2 octets):
Ce code contient de nombreux octets interdits, à la fois dans le code et dans le message de sortie. Pour résoudre ce problème, le code est brouillé: chaque mot (16 bits) est représenté par une somme de 3 chiffres:
Code de correction (déchiffrement):
Ce code lui-même contient des octets interdits, mais il est beaucoup plus court (9 mots). Le patcher qui décrypte ce code utilise uniquement les octets autorisés (il se trouve sous le commentaire "patcher le patcher" dans le code source), de sorte qu'il dispose d'un ensemble d'opérations très limité (en gros, juste "add") beaucoup de code.
L'utilisation de ce patcher n'est pas simple. Pour patcher de grandes quantités de données avec un code simple, j'avais besoin d'instructions telles que
add r5, (r3)+
etadd r5, -(r3)
- et les seuls registres pouvant être utilisés comme ceci étaientr3
etr5
. Malheureusement, aucune commande autorisée ne peut être utilisée pour initialiser ces registres. J'ai donc dû corriger les instructions qui faisaient cela:Cela nécessitait de corriger deux mots seulement.
Je cherche depuis un certain temps un moyen de réparer le patch; la seule façon dont je suis venu avec utilisait le fameux mode "indirect":
Pour exécuter ces deux instructions, un peu de préparation est nécessaire:
patch1
) en mémoirePour générer toutes ces constantes, j'ai utilisé les instructions suivantes:
Ils utilisent les mots aux adresses 060562 et 060564 en tant que variables temporaires; un bon agencement de ces deux instructions peut générer une valeur quelconque en 10 à 20 étapes.
Instructions utilisées dans ce code (à l'exclusion de celles qui ont été corrigées):
la source
7. 23 , utilise non
l
Avec le retour à la ligne (qui doit être présent), il y a exactement 64 sauts de ligne dans ce code.
L'exécuter imprime la deuxième citation:
Merci à @ jimmy23013 de m'avoir signalé ce défi.
Vérification
Puisque ce code ci-dessus fonctionne dans l' interpréteur en ligne , n'utilise aucun espace ( pur 23 ), aucun x s ( 23.ixsy ) et aucune virgule ( 23.dezsy ), je suppose qu'il est valide 23.easy (non documenté), qui prend simplement la ligne longueur en compte.
Le code (lu en arrière) est équivalent au code 23.dezsy suivant:
17,62
ordonne à l'interprète d'imprimer les 62 nombres entiers suivants en tant que caractères.L'interprète semble avoir besoin d'un caractère de plus sur chaque ligne qu'il ne le devrait. J'imagine que c'est pour tenir compte des nouvelles lignes de style Windows. Pour que le code fonctionne conformément aux spécifications (ou dans un navigateur introduisant des retours chariot), supprimez-en un
K
de chaque ligne.Pour tester le code, collez-le dans la zone Source , appuyez sur Enterpour insérer le saut de ligne final, tapez-le
23
dans la zone Console (pour passer de la notation par défaut 23.dezsy à la détection automatique) et cliquez sur Run Interpreter!.la source
66 - Pyth, n'utilise pas
e
La sortie est citation 62:
Utilise les personnages
12456789:CDGJPRSTdhjkmtx
.Auparavant interdit:
z" &'()*+,-./03;<=>@X[\]psy{
Il est basé sur une série de substitutions de regex -
:
en pyth, chaque caractère remplaçant `, le caractère backtick, par une chaîne de deux caractères contenant un nouveau caractère suivi d'un backtick.Les substitutions sont toutes appliquées à une chaîne originale de juste `(J).
Les chaînes de deux lettres sont générées à l'aide de la fonction de changement de base
j
, sur un nombre et sur une base, pour générer une entrée de liste de nombres, qui sont ensuite codés en ASCII en une chaîne de 2 caractères par laS
fonction nouvellement définie .Explication:
la source
z
66 dans votre graphique. Cela rompt la chaîne car la prochaine entrée est sur la deuxième page.60. Forth (utilise no
^
)(Il y a 54 nouvelles lignes et 51 onglets.)
La sortie est citation 56:
Auparavant interdit :
"'&()*+-,./\037;<=>@X_[sovy pez]{}
la source
59. Applesoft BASIC, n'utilise pas
~
(Utilise 11 nouvelles lignes)
La sortie est citation 55:
"La-dee-da, la-dee-da." - Annie Hall
Auparavant interdit:
"'&()*+-,./\037;<=>@X_[sovy pez]^{}
Fonctionne sur un Apple // e (ou un émulateur).
Explication brève: après avoir effacé l'écran, "CALL 2111" passe au code machine 6502 intégré, lignes 4 à 15, qui écrit chaque caractère directement sur la page de texte.
Détails:
Démontage:
Le code machine pourrait certainement être optimisé, mais certains problèmes sont dus à des restrictions d'encodage, par exemple:
la source
41. AJUSTER (utilise non
L
)(Il ne doit y avoir aucune traînée de nouvelles lignes)
La sortie est citation 50:
Auparavant interdit :
"#$&'()*+,-./01357:;<=>@[\]^_ BdeEghJNopQksvWxXyz{|}~
Caractères restants:
!
%
?
`
2
46
89
A
CD
FGHI
K
M
OP
RSTUV
YZ
abc
f
ij
lmn
qr
tu
w
ADJUST est un langage 2D avec 1 registre et 2 piles. Le pointeur de code commence à partir du coin inférieur gauche, puis se dirige vers le nord-est. Les instructions sont basées sur la factorisation principale du code de caractère actuel, par exemple
Z
= 90 = 5 × 3 × 3 × 2, de sorte que le personnageZ
exécute l'action "5" une fois, "3" deux fois, puis "2" une fois. Cela nous permet d’avoir plusieurs façons d’exécuter une fonction et d’éviter les caractères interdits.L'idée de base du programme est la suivante:
À l'étape 1, nous utiliserons ces lettres pour fournir les 2 et 5:
F
(7 × 5 × 2)R
(41 × 2)t
(29 × 2 × 2)8
(7 × 2 × 2 × 2)Il y en a 7, 29, 41 mais cela n’affectera pas le résultat final. À l'étape 2, nous utiliserons
K
(5 × 5 × 3) pour fournir un «3». Notez qu'une paire de "5" est no-op.À l'étape 3, nous choisissons
A
(13 × 5). À l'étape 4, nous utiliseronsn
(11 × 5 × 2) pour contrôler la taille de la pile etK
ajuster la direction.Généralement, si l'étape 1 n'en contient pas
R
, nousKAnK
imprimons le caractère et nous progressons de 4 lignes. Sinon, nousKKA
imprimons et descendons de 2 lignes. De temps en temps, il est égalementKnnK
nécessaire de monter avec force 4 lignes, car le point de départ doit se situer dans le coin inférieur gauche.Si quelqu'un est intéressé, voici un environnement de travail pour produire le code ci-dessus. Il n'y a pas de générateur automatisé.
la source
23. Glypho , n'utilise pas
%
La sortie est citation 30:
Auparavant interdit :
!"#$&'()*+,-./013567:;<=>@[\]^_` AbBCdeEFghIjJkLMNopqQRsTUvVWxXyYzZ{|}~
Caractères restants:
?
2
4
89
D
GH
K
OP
S
a
c
f
i
lmn
r
tu
w
Notez que cela fonctionne avec l' interpréteur Java , mais que cela ne correspond pas à la page esolangs sur le codage de
[
et+
. Cependant, la conception de Glypho est telle que le jeu d'instructions complet est disponible tant que vous avez quatre caractères distincts, et que tout, à l'exception des boucles, est disponible si vous en avez trois, il s'agit donc d'un détail mineur.J'avais déjà choisi une citation qui me plaisait dans un film que j'ai vu, mais apparemment, j'ai négligé une règle. :(
la source