Atualização: O vencedor foi decidido, mas o desafio não acabou!
Por fim, quase três meses após o início da pergunta, alguém permaneceu o último respondedor por mais de uma semana! Parabéns jimmy23013 por sua resposta P1eq!
Ainda há no entanto 8 caracteres à esquerda: 48KSaclw
. Se alguém é realmente ambicioso, pode continuar tentando com eles: D
Muito obrigado a todos que participaram, especialmente àqueles que mantiveram o concurso por tanto tempo com várias respostas, principalmente o KennyTM com 25 respostas incríveis !!
Além disso, obrigado a todos que mantiveram a lista de respostas atualizada, foi uma grande ajuda :) (especialmente desde que estive longe do SE por alguns meses: P).
Pergunta original:
Em 2005, o American Film Institute produziu AFI's 100 Years ... 100 Movie Quotes , uma lista das melhores citações do cinema americano. Aqui estão listados exatamente como devem ser usados neste desafio:
(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
(Sinta-se à vontade para marcar aspas como usadas.)
Existem 95 caracteres ASCII imprimíveis (códigos hexadecimais 20 a 7E), que são bem próximos de 100:
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
Nesse desafio, os usuários se revezam na criação de programas que imprimem uma das citações do filme usando uma nova linguagem de programação e um subconjunto menor de ASCII imprimível a cada vez.
Como isso funciona
Eu já enviei a primeira resposta e a rotulei como 95 desde que me foi permitido usar todos os 95 caracteres ASCII imprimíveis no meu programa. É um programa Python que imprime a 100ª citação "I'm the king of the world!" - Jack Dawson
, para stdout.
A segunda pessoa a responder precisa escolher uma nova cotação, uma nova linguagem de programação e um dos 95 caracteres ASCII imprimíveis para excluir do código. Eles devem escrever um programa sem usar esse caractere que imprime a cotação escolhida no stdout. Eles devem marcar sua resposta como 94, pois possuem 94 caracteres ASCII imprimíveis para trabalhar (pense nisso como uma contagem regressiva).
A terceira pessoa a responder deve escolher uma citação e idioma que não tenham sido usados em nenhuma resposta anterior (apenas 95 e 94 neste caso) e um novo personagem a ser abandonado. Eles não devem usar esse caractere ou qualquer caractere anteriormente proibido em seu código. Eles marcam sua resposta como 93.
Esse processo de atendimento continua assim até que todos os caracteres ASCII imprimíveis sejam proibidos e alguém dê a resposta "1", ou muito mais provavelmente, ninguém pode descobrir como responder novamente.
Regras (leia com atenção)
É importante entender que apenas uma pessoa pode responder de cada vez e cada resposta depende da resposta anterior. Nunca deve haver duas respostas com o mesmo número, citação ou linguagem de programação.
É provável que haja respostas conflitantes enviadas ao mesmo tempo, e tudo bem. Se isso acontecer, a pessoa que tecnicamente respondeu mais tarde deve excluir rapidamente (como 10 min ou menos) sua publicação ou editá-la para que se torne a próxima resposta. Caso contrário, não edite o código, a menos que seja realmente necessário . A edição de postagens para corrigir apenas a formatação é incentivada.
Regras Específicas
- Um usuário que acabou de responder deve esperar pelo menos uma hora antes de responder novamente.
- Um usuário não pode responder duas vezes seguidas.
- O número da cotação que você escolher não deve exceder 5 abaixo do número da sua resposta. Por exemplo, a resposta 90 pode escolher qualquer cotação não utilizada do número 85 a 100. Isso deixa as cotações melhores para as respostas mais difíceis. Além desta regra, a numeração da cotação é irrelevante.
- Os programas podem conter apenas guias, novas linhas e o caractere ASCII imprimível que não são proibidos até o momento. (Guias e novas linhas nunca são proibidas.)
- Não há limite de duração do programa, mas pode não haver mais de 64 guias ou 64 novas linhas no seu programa.
- Os idiomas são considerados distintos se forem comumente referidos por nomes diferentes. Versões diferentes de linguagens de programação não são consideradas distintas. (Linguagens de marcação como HTML contam, mas são preferidas as linguagens de programação.) Sua linguagem deve ter existido antes do início deste concurso.
- Se seu idioma não possui stdout, use algum mecanismo de saída de texto semelhante.
- Seu programa não deve receber informações ou ter efeitos colaterais inesperados, como a criação de arquivos.
Verifique se o seu programa é válido. Ele deve ser capaz de executar como um programa completo como está, não apenas em um ambiente REPL .
Observe que a "cotação" que você deve exibir inclui as aspas e a pessoa que a disse (mas não o número da cotação). Seu programa deve produzir apenas sua cotação exatamente como aparece na lista acima (uma nova linha inicial / final é boa).
Formatação
Por favor, formate suas respostas assim, {stuff in curly braces}
precisa ser substituído:
#{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}
As <code>
tags podem ser substituídas por backticks ( `
), desde que não ocorra backtick dentro deles.
Pontuação
O objetivo comum desse desafio é manter as respostas por tanto tempo quanto possível.
O vencedor oficial é o usuário que responde por último, depois de uma semana sem respostas adicionais. Eu aceitarei a última resposta deles.
Lista de respostas (mais recentes primeiro)
4
Unário progressivoa
Bueuec
UdageS
1L_a105w
BinaryfuckK
Subskinl
23
n
P1eqt
Addleq9
Código da máquina x86r
BSMD
ShaFuck 0.2u
VillmarkO
Código da máquina PDP-11f
ProgFki
NUMPADH
Tri2
ferNANDoP
Pontudom
SubleqG
FlogScript?
Nqubl%
Glypho!
3varq
ETAj
BrainSpace 1.0V
Insônia`
asdf6
Lazy KC
! Py! Lote 1.5T
FuckfuckF
PoGoR
Golunarb
Código da máquina 6502 + Monitor do sistema Apple IIY
HeadsecksI
BRBU
BraincrashZ
Em êxtaseM
FazendaA
EnemaL
AJUSTAR$
BeatnikN
Rebmug
DupdogB
GammaplexJ
Fuck45
A0A0W
gs2:
l33th
TonocoE
Malbolgek
D1ffe7e45e1
malQ
CaneCoded
Relva#
URSL|
Burlesquex
Emmental~
Applesoft BASIC^
Adiante7
Código da máquina 80386 + DOS_
Argh!v
Rexx}
Alpha Betao
Super Stack!e
Pythz
Plain TeX>
WASD]
Shell POSIX&
Gibberish/
GolfScript*
montagem x86_640
AppleScriptX
Peixe-morto ~,
Colher-
oOo CODE=
J@
Mathematica.
Perl+
DNA #<
Pi)
Postscript[
abcs
dc{
HTML(
Unário;
Ook!'
CJamPHP
"
Brainfuck\
Marbelous3
C ++y
Rubip
Javascript- Pitão
(Sinta-se à vontade para editar se estiver incorreto ou desatualizado)
Esta pergunta funciona melhor quando você classifica por "mais antigo".
NOTA: Como minha última pergunta , este é um teste de um novo tipo de desafio em que cada resposta depende da última e aumenta em dificuldade. Venha para o chat ou meta para discutir uma questão ou a ideia em geral.
fonte
Respostas:
8. P1eq (não usa
n
)Ele exige que a plataforma de 64 bits não Windows funcione corretamente, assim como a resposta do Addleq. Ele usou o mesmo truque para o -1.
Possui 64 novas linhas e 57 guias.
É lento e terminou em cerca de 18 minutos no meu computador.
A saída é citação 8:
Proibido anteriormente :
Remanescente:
4
8
K
S
a
c
l
w
P1eq é exatamente como Subleq e Addleq, com a instrução B = A + 1 e pula se B não for alterado.
Explicação:
Este programa incrementa * 444 e * 484 juntos e redefine * 444 quando se torna um determinado valor. Quando * 484 for igual aos dados, * 444 será o restante dos dados dividido por algum valor.
Apenas 6 células de memória no código são endereçáveis diretamente com 4 e 8. Devo reutilizar algumas delas. Isso também fez algumas operações não na ordem que eu queria, como o uso de variáveis não inicializadas. Mas posso simplesmente descartar o que for retornado na primeira vez do loop e inicializar depois disso.
Algumas outras línguas acharam interessantes, mas não são mais utilizáveis:
.
)*
)A
mas sensível a maiúsculas e minúsculas, infelizmente) eu encontrei na Wikipedia japonesa.Agora eu tenho 3 idiomas restantes.
Para quem quiser escrever mais respostas, aqui estão algumas instruções para procurar:
Para ser exato, eu tinha:
fonte
90. Brainfuck, não usa
"
Saída é citação 90:
Proibido anteriormente:
py3\
Alguém tinha que fazer isso antes que qualquer um
.+-
fosse proibido.Experimente aqui: http://ideone.com/dlu8VE
fonte
"
? Isso é meio cruel para todas as pessoas atrás de você.51. Malbolge (não usa
E
)(As novas linhas são apenas para esclarecimento e não fazem parte da fonte.)
A saída é citação 49:
Proibido anteriormente :
"#&'()*+,-./0137;<=>@[\]^_ deopQksvxXyz{|}~
Caracteres restantes:
!
$
%
:
?
`
2
456
89
ABCD
FGHIJKLMNOP
RSTUVW
YZ
abc
fghij
lmn
qr
tu
w
Você pode executá-lo com o intérprete de referência Malbolge .
fonte
10. Código de Máquina x86, não usa
9
Quando percebi que os caracteres restantes incluíam os códigos de operação para 'Dec BX' e 'Push BX', concluí que um programa x86 ainda era possível.
Link para o código e o arquivo .com
O código parece uma versão muito mais longa disso:
O código, compactado com
bzip2
e codificado em base 64, é este:A saída é citação 18:
Proibido anteriormente :
Caracteres restantes:
4
8
K
S
a
c
l
n
t
w
É o código de modificação automática que cria o código de modificação automática, eis como ele funciona:
O texto é codificado primeiro digitando execuções de '4' terminadas por '8', que são mapeadas para instruções que são efetivamente NOPs para este programa. Em seguida, o BX é decrementado ('K') até ter o valor de onde o código de impressão terminará na pilha. Isso é pressionado 8 vezes ('S') e, em seguida, Pop All, 'a', é executado para configurar SI e DI para mais tarde. O BX é então repetidamente decrementado e pressionado para inserir os valores arbitrários do programa de impressão na pilha (o byte baixo), junto com um byte de lixo (o byte alto). Em seguida, uma longa sequência de decrementos leva BX ao valor 0xAAAD, que é as duas instruções de 1 byte 'Load Word' e 'Store Byte'. Cada par dessas instruções removerá um byte de lixo do código de impressão. Essas instruções são enviadas 28 vezes (o tamanho do programa de impressão), e o restante do arquivo é preenchido com mais instruções de decremento para atuar como NOPs. Esses NOPs serão executados até que a região da memória usada pela pilha seja atingida, que foi substituída pelo código de condensação. O código de condensação é executado, removendo os bytes de lixo no código da pilha (apontado por SI e DI, que foram configurados anteriormente). Finalmente, quando o código de condensação é concluído, o programa de impressão foi armazenado com sucesso na memória na próxima instrução a ser executada.
Código de montagem para gerar o código da máquina (FASM)
fonte
IMUL
de um determinado tipo), por isso pode ser chamado de um "idioma" diferente. Eu nem tentei verificar se o x86 ainda é possível nesta fase - aparentemente é!61. código de máquina 80386 + DOS, não usa
7
A saída é citação 64:
Proibido anteriormente:
"'&()*+-,./\03;<=>@X_[sovy pez]{}
Criar um arquivo executável que use apenas ASCII imprimível não é uma tarefa fácil. Felizmente, muitos caracteres não foram proibidos por respostas anteriores, então eu só precisava de alguns patches aqui e ali.
Para executar este programa, copie-o para um arquivo com extensão
.com
e execute-o (as quebras de linha usam o formato DOS0d 0a
; há umTAB
caractere no código). É uma pena que os sistemas Windows modernos de 64 bits não suportem código de 16 bits; é necessário um sistema Windows de 32 bits ou DOSBox para executar o código.Eu usei o
debug.com
depurador do DOS para desenvolver o código. Para "montar" o "código fonte", redirecione-o para o depurador. No DOSBox:Código fonte:
Algumas notas:
0x41
,0x23
e0x24
. Eu escolhi máscaras que não eram proibidas.0xcd
e0xc3
. Eles também são mascarados com XOR, portanto, o código deve se modificar.k
é muito importante aqui: codifica aIMUL
instrução de multiplicação. Eu o uso para adquirir valores constantes: por exemplo, a constante0x216b
, quando multiplicada por0x45
, fornece a constante útil0x01d7
, que é um ponteiro (com um deslocamento, como descrito acima) para o código que precisa ser corrigido. De maneira semelhante, a máscara de correção é0x2132*0x36=0x8c
(não se importe com o truncamento).and ax, 2142; and ax, 4221
.ax
não seja alterado.Editar: não usar mais o
_
personagem (tempo ruim no post) - não pode usarpop di
, portanto, use odi
registro muito menos agora.fonte
@
já foi proibido em 78, escolha outro símbolo, por favor.85. HTML5 (usa no
{
)A saída é citada 91.
Proibido anteriormente :
py3\" ';(
fonte
12. ShaFuck 0.2 (não usa
D
)O código-fonte tem exatamente 4.784.128 bytes, contendo todos os caracteres permitidos, exceto
D
. Parece que:aqui (a × 1017) significa o caractere "a" repetido 1017 vezes. O arquivo compactado bzip2 codificado em base64 (247 bytes) é:
A soma SHA1 do arquivo original deve ser 1250ecf73c61ef93a31c4f7dfaa0a7631ada50bf.
A saída é citação 9:
Proibido anteriormente :
Caracteres restantes:
4
8
9
K
S
a
c
l
n
r
t
w
ShaFuck é uma variante do Brainfuck. Ele pega cada pedaço de 1024 bytes, calcula o resumo do SHA-1 e usa a saída de 20 bytes como um programa Brainfuck. Conforme explicado na postagem do blog vinculada ao wiki, há uma "vulnerabilidade" na v0.2 que a saída SHA-1 do formulário:
é aceito. Isso permite uma conversão direta de um comando brainfuck para um pedaço de 2048 bytes. O codificador usa
a
-z
como o conjunto de caracteres, o que não é adequado para nós. Então, precisamos escrever um "mineiro". Agora, existem 13 caracteres válidos disponíveis. Assumindo que a saída SHA-1 é aleatória, se queremos corrigir os 3 primeiros bytes, isso corresponde a 3 × log₁₃ (256) ~ 6,5 caracteres de entrada. Portanto, precisamos iterar todas as seqüências de 7 caracteres feitas com esses 13 alfabetos:Poderíamos rapidamente obter esses equivalentes:
Então, finalmente, temos este codificador direto:
fonte
SUFFIX = 'a' * (1024 - 7)
- no caso de1024 - 7
nem sempre ser1017
? :-)(1024 - 7)
é mais legível.87. Ook !, não usa
;
A saída é citação 84:
Proibido anteriormente:
py3\" '
fonte
76. oOo CODE , não usa
-
A saída é citação 78:
Proibido anteriormente :
py3\" ';({s[)<+.@=
Não publicarei outro equivalente / derivado de BF. Promessa.
EDIT: Eu atualizei o código para ser mais legível. (risos) Não afeta nenhum personagem proibido.
Eu usei essa ferramenta para gerar meu BF puro. Eu o converti para oOo CODE:
E então usei esse script Python para obter a versão "legível" do puro oOo CODE e um texto de entrada:
fonte
9. Addleq (não usa
t
)Usa
sqasm.cpp
na página esolang para montar. Requer plataforma não-Windows de 64 bits para funcionar corretamente.Existem exatamente 64 guias e 64 novas linhas (sem novas linhas à direita). Ufa.
A saída é citação 22:
Proibido anteriormente :
Remanescente:
4
8
K
S
a
c
l
n
w
"Addleq" um OISC é semelhante ao "Subleq", mas usa adição em vez de subtração.
Construindo "-1"
A saída no Addleq funciona escrevendo no endereço de memória -1. Como todos os números ímpares são proibidos, não podemos construir um -1 por meios normais. No entanto, podemos induzir o montador a criar um -1:
Aqui
sscanf(s, "%d", &ret)
se comporta comoret = strtol(s, NULL, 10);
(C11 §7.21.6.2 / 12) e, quando a entradastrtol
exceder , retornará LONG_MAX (C11 §7.22.1.4 / 8). Assim, sesizeof(long) > sizeof(int)
deveríamos obterret == -1
. No entanto, em plataformas como,sizeof(long) == sizeof(int)
por exemplo , plataformas de 32 bits ou Windows, obteríamos 0x7fffffff tornando a solução acima inválida.Salvando guias com o assembler
No addleq de baixo nível, cada instrução tem três números. Como temos apenas um orçamento de 128 espaços em branco, precisamos imprimir a sequência inteira com instruções 129/3 = 43. Isso é completamente insuficiente, pois a cotação mais curta (escolhida aqui) tem 32 caracteres.
No entanto, o assembler suporta alguma notação abreviada:
A regra nº 2 foi projetada para "subleq" para zerar rapidamente um endereço. Mas, para "addleq", permite dobrar um valor sem nenhuma guia.
Isso nos permite encaixar mal o programa inteiro em 129 números.
Criando números
A cotação é escolhida porque é curta e possui muitos caracteres duplicados. Os números que precisamos criar são:
Poderíamos usar números no endereço 4, 8, 44, 48, 84, 88, .... A regra 1 do montador já colocou "9" em * 8 e "45" em * 44, portanto, apenas os usaremos. (é bom que sejam números ímpares). Além disso, tentaremos ajustar "-1", "8" e "44" nesses endereços movendo os cálculos. O resultado é a primeira metade do código:
A última linha
Depois que todos os números forem construídos, podemos imprimir cada caractere. O programa final, no entanto, possui mais de 67 linhas, duas a mais. Portanto, devemos combinar as três últimas linhas:
Como a linha possui mais de 2 números, precisamos fornecer manualmente o terceiro parâmetro das instruções. Isso significa que trocamos cada nova linha por 2 guias. Felizmente, antes da combinação, usamos 60 guias, então o resultado final mal passou nos requisitos.
fonte
4
e8
houvesse0
e7
.89. PHP, não usa
A saída é citação 94:
Proibido anteriormente :
py3\"
fonte
'
agora !!!81. PI , não usa
<
A saída é citação 81:
Proibido anteriormente:
py3\" ';({s[)
O que ? Pi sem
3
?Meu intérprete aqui (desculpe pela interface rudimentar da interface do usuário, com base nesta resposta ): http://migl.io/projects/pi/index.php
fonte
79. Perl 5, não usa
.
A saída é citação 95:
Proibido anteriormente:
py3\" ';({s[)<+
Como uma linguagem TMTOWTDI, o Perl oferece muitas maneiras de contornar as restrições. O método usado aqui é construir a instrução
print "that quote"
como uma string e avaliá-la.Embora
'
e"
seja banido, o Perl também permite expressar seqüências usandoq«…»
eqq«…»
respectivamente. E embora;
seja proibido, como todas as declarações não são falsas, poderíamos usarand
para encadear declarações. Desde as letras maiúsculasP
,Y
,S
ainda são permitidas, poderíamos colocarp
,y
,s
na seqüência final, utilizando alc
função (em minúsculas), enquantochr
pode ser usado para colocar os símbolos"
e.
fonte
$foo=0
é falso, é claro.) De qualquer forma, muito legal; +1.54. CaneCode (usa no
Q
)(Novas linhas e espaços não são necessários.)
A saída é citação 71:
Proibido anteriormente :
"#&'()*+,-./037;<=>@[\]^_ deopsvxXyz{|}~
CaneCode é apenas mais um derivado de BF, com o mapeamento:
Apenas uma observação: os caracteres restantes são:
!
$
%
:
?
`
12
456
89
ABCDEFGHIJKLMNOP
RSTUVW
YZ
abc
fghijklmn
qr
tu
w
fonte
6. Subskin (não usa
K
)A linha 9 no programa a seguir é substituída por algo testável. Ele tem duas novas linhas à direita e exatamente 64 novas no total.
Para satisfazer os critérios, a linha 9 deve ser substituída pelo número grande a seguir. Eu acho que isso deve ser válido como as variantes Unary.
a
. Assim, o último dígito é uma
onde k = 0, e há 159321460184447640588063043795531819638245990121854536131792918542864566418397339281153516086677425424423723475531974684547855358001230183547851703274577276601612622258171727288003902331619018508731805969660163575803761844794365403871421372122820829226554024584224464882571689865777 deles.8
.Observe que o número construído está na base 16 (mas os números na descrição acima estão na base 10). Se meu cálculo estiver correto, deve ser o mesmo que o número original no programa mod 8 * (16 ^ 234-1) / 15. Qualquer número grande o suficiente e que atenda a esse critério deve funcionar, mas não sei como construir um menor com apenas
4
8
a
c
.A saída é citação 1:
com uma nova linha à esquerda e à direita.
Proibido anteriormente:
Caracteres restantes:
4
8
S
a
c
w
.Explicação
Subskin é um OISC em que a instrução deve subtrair e pule a próxima instrução se o resultado for negativo. Os três primeiros campos da memória são mapeados para o ponteiro, saída e entrada da instrução. O ponteiro de instruções pode ser usado como "ir", e a leitura pode gerar alguns números que não estão disponíveis usando os únicos caracteres úteis.
No começo, tentei comprimir o código nos dígitos em alguma base. Mas não consegui jogar em 64 linhas. Então mudei para a abordagem de módulo que removeu um nível de loop.
É basicamente apenas o maior algoritmo divisor comum. A / B é extraído em cada etapa. Em seguida, defina A = B e B = A mod B e continue.
Mais precisamente, quando A> B incrementa os dados atuais, caso contrário, troca os números e move o ponteiro. Depois disso, o número menor é subtraído do número maior.
Finalmente, o código de auto-extração substitui algo no loop e o quebra, e continua com o código extraído. O código extraído é bastante direto.
Código
Geração
Suponha que A e B após o progresso da extração sejam n e m. É fácil reverter esse progresso e obter A e B (antes que os dados úteis comecem) em termos de n e m. E A = an + bm, B = cn + dm. Defina A como um número arbitrário que seja grande o suficiente e possa tornar n e m ambos positivos (e usa apenas os caracteres disponíveis). n e m podem ser calculados usando inversão modular. Então B é determinado por n e m.
Mas não é fácil fazer B também consistir apenas desses caracteres. Eu usei uma etapa extra que deve extrair apenas alguns dados de lixo inofensivo. Portanto, o novo B seria kA + B, onde k é um número inteiro positivo. É fácil ver que tal ak existe. Mas não tenho certeza se é possível encontrar um que seja curto o suficiente para ser testável. E usei o pequeno teorema de Fermat para encontrar um que funcione em teoria.
Eu tenho apenas um idioma # 2 restante.
fonte
78. Mathematica, não usa
@
A saída é citação 76:
Proibido anteriormente:
py3\" ';({s[)<+.
Gerado da seguinte forma:
O programa é então:
com valores inseridos para
n2
,ndiff
,d2
eddiff
e todos os espaços removidos.Minha idéia original era usar
ToString
,FromDigits
,IntegerDigits
,Partition
eFromCharacterCode
. No entanto, ambosFromDigits
eIntegerDigits
tem ums
neles que eu não tinha notado.fonte
72. montagem x86_64 (nasm), não usa
*
Usa 61 guias e 36 novas linhas.
A saída é citação 68:
Proibido anteriormente:
py3\" ';({s[)<+.@=-,X0
Isso usa uma
write
chamada de sistema com o número0x2000001
, que provavelmente só funciona no OS X. Montagem, vinculação e execução:fonte
71. GolfScript, não usa
/
A saída é citação 69:
Proibido anteriormente:
py3\" ';({s[)<+.@=-,X0*
Agradeço a Peter Taylor, que me explicou algumas peculiaridades do GolfScript por construir a string. Primeiro, posso obter uma string vazia sem usar aspas, atribuindo o conteúdo STDIN (vazio) a uma variável (
?
neste caso). Então, estou construindo uma matriz aninhada de números que, tirada no mod 256, são os pontos de código desejados. Ao adicionar múltiplos de 256, posso evitar duplicatas e números contendo0
e3
. Por fim, empurro a corda vazia com?
a diferença simétrica do conjunto. Isso nivela a matriz e a coage em uma string, onde o GolfScript se importa apenas com o restante do mod 256.Teste aqui.
fonte
91. Marbelous , não usa
\
A saída é citação 96:
Proibido anteriormente :
py3
fonte
95. Python
A saída é citação 100:
Nenhuma proibida.
fonte
73. AppleScript, não usa
0
(Todos os "espaços" são "guias", conforme permitido pelo OP. Existem 25 guias e 8 novas linhas.)
A saída é citação 70:
Proibido anteriormente :
py3\" ';({s[)<+.@=-,X
Aqui, construímos primeiro a variável
c
que é uma lista de códigos ASCII da cotação. No AppleScript,number & number
produz a lista de 2 elementos{number, number}
elist & number
anexa o número à lista, para evitar o uso de{
ou,
. Além disso,&
tem prioridade mais baixa que*
e/
, portanto, podemos criar a lista inteira em uma linha, evitando a(
criação de variáveis (que desperdiçam 3 guias).Depois disso, convertemos a lista de números
c
na stringd
. Novamente usamos&
aqui, poisstring & string
é concatenação. O AppleScript não faz distinção entre maiúsculas e minúsculas, portanto, poderíamos usardiSPlaY
para contornar ospys
caracteres.fonte
set
e falhei. Eu tinha resposta para a citação # 62, mas não posso usá-la agora; P57. Burlesco (não usa
|
)Novas linhas são apenas para esclarecimento, mas as guias são necessárias. Existem 4 abas.
A saída é citação 87:
Proibido anteriormente :
"'&()*+-,./\037;<=>@_[sovy pezxX]^{}~
Burlesco é semelhante ao GolfScript, mas geralmente cada comando tem 2 caracteres. A construção é assim:
Burlesque suporta inteiro de precisão arbitrária e também permite a conversão para a base 36. Portanto, primeiro codificamos todos os caracteres minúsculos na base 36:
Infelizmente, esse número contém 0, 3 e 7 em excesso e todos os símbolos aritméticos (
+-*/
) são proibidos ... Normalmente, podemos usar o módulo, mas Burlesque usa a sequência em.%
que o ponto também está indisponível. Felizmente, o operador xor é estranhamente$$
, então podemos tentar construir isso xorando dois números livres de 0, 3, 7. Essa é a razão do grande número 41224222….Finalmente, insira os símbolos restantes, como
,
,, etc volta para a string. A má notícia é que a função "chr" usa a sequência
L[
que é novamente proibida! A boa notícia é que existem várias maneiras de construir uma string existente (por exemplo,??
cria a string da versão"Burlesque - 1.7.3"
que contém um "espaço") e, em seguida, extrai (!!
) um caractere dela.Os operadores de incremento e decremento também usar os caracteres proibidos
.+
,.-
, no entanto, existem alternativas?i
,?d
que têm o mesmo efeito. Assim, poderíamos gerar todo o espectro ASCII a partir disso.fonte
34. código da máquina 6502 + monitor do sistema Apple II (não usa
b
)(Usa 1 guia)
A saída é citação 41:
Proibido anteriormente :
"#$&'()*+,-./01357:;<=>@[\]^_ ABdeEghIJLMNopQksUvWxXyYzZ{|}~
Caracteres restantes:
!
%
?
`
2
4
6
89
CD
FGH
K
OP
RST
V
a
c
f
ij
lmn
qr
tu
w
Execute na Apple // e (ou emulador). Verifique se o caractere da guia é copiado como uma guia e não como espaços.
Essa é uma combinação das idéias do código de máquina 80386 + resposta do DOS e minha resposta anterior do Applesoft BASIC .
Para aqueles que não estão familiarizados, o Monitor do Sistema nos computadores Apple II é um interpretador / depurador de nível muito baixo que permite modificar a memória e executar o código (se você estiver executando um interpretador BASIC, poderá entrar no Monitor do Sistema fazendo isso
CALL -151
). A maneira usual de inserir código de máquina no System Monitor seria<addr>: <hex_byte> <hex_byte> ...
e o código em execução é feito por<addr>G
(G para "Ir"). A inserção de código da maneira usual usa caracteres proibidos; no entanto, o buffer de entrada para inserir uma linha de texto inicia na memória 0x200. Portanto, o one-liner diz ao System Monitor para ir para 0x262 e depois incorporar o código conforme ASCII a seguir.Apesar de não ser uma linguagem esotérica, as restrições sobre códigos opcionais utilizáveis tornam o código mais parecido com um derivado do cérebro. Tudo o que está disponível: lendo a memória (mas não escrevendo), aumentando e diminuindo a memória, subtraindo do acumulador e ramificando-se em não 0. Somente algumas instruções foram corrigidas: uma chamada para a rotina Monitor que gera um caractere e o retorno para finalizar o programa.
Desmontagem. Observe que todos os caracteres introduzidos recebem seu conjunto de bits alto:
fonte
14. Código de máquina PDP-11, não usa
O
A saída é citação 28:
Proibido anteriormente :
Caracteres restantes:
4
8
9
D
K
S
a
c
l
n
r
t
u
w
Alguns detalhes técnicos:
Para verificar esse código, usei o simulador Ersatz-11 . Para executar o código, escreva-o em um arquivo
test.pdp
, execute o simulador e digite:O resultado:
Código fonte (todos os números estão em notação octal):
É mais fácil explicar como isso funciona do começo ao fim. A parte de saída é assim (cada iteração gera 2 bytes):
Este código contém muitos bytes proibidos, tanto no código como na mensagem de saída. Para corrigir isso, o código é embaralhado: cada palavra (16 bits) é representada como uma soma de 3 números:
Código de correção (sem embaralhamento):
Este código em si contém bytes proibidos, mas é muito mais curto (9 palavras). O programa que decodifica esse código usa apenas bytes permitidos (está no comentário "corrigir o programa" na fonte), por isso possui um conjunto muito limitado de operações (basicamente, apenas "adiciona"), portanto, aplicar muitos bytes também muito código.
O uso desse remendador não é simples. Para corrigir grandes quantidades de dados com código simples, eu precisava de instruções como
add r5, (r3)+
eadd r5, -(r3)
- e os únicos registros que poderiam ser usados assim eramr3
er5
. Infelizmente, nenhum comando permitido pode ser usado para inicializar esses registros, então tive que corrigir as instruções que fizeram isso:Isso exigiu o patch de apenas 2 palavras.
Eu procurei por algum tempo uma maneira de fazer o patch; a única maneira de inventar foi usar o infame modo "indireto":
Para executar essas duas instruções, é necessário um pouco de preparação:
patch1
) na memóriaPara gerar todas essas constantes, usei as seguintes instruções:
Eles usam palavras nos endereços 060562 e 060564 como variáveis temporárias; um arranjo correto dessas duas instruções pode gerar qualquer valor em 10 a 20 etapas.
Instruções usadas neste código (excluindo as que foram corrigidas):
fonte
7. 23 , não usa
l
Com o avanço de linha à direita (que deve estar presente), existem exatamente 64 feeds de linha nesse código.
Executá-lo imprime a segunda citação:
Obrigado a @ jimmy23013 por me indicar esse desafio.
Verificação
Uma vez que este código acima funciona no interpretador on-line , não usa espaços ( pura 23 ), sem x s ( 23.ixsy ) e sem vírgulas ( 23.dezsy ), eu supor que é válido 23.easy (sem documentos), que só tem linha comprimento em consideração.
O código (lido para trás) é equivalente ao código 23.dezsy a seguir:
17,62
instrui o intérprete a imprimir o 62 números inteiros a seguir como caracteres.O intérprete parece exigir mais um caractere em cada linha do que deveria. Suponho que isso seja responsável por novas linhas no estilo do Windows. Para fazer o código funcionar de acordo com as especificações (ou em um navegador que introduz retornos de carro), remova um
K
de cada linha.Para testar o código, cole-o na área Origem , pressione Enterpara inserir o avanço de linha à direita, digite
23
na área Console (para alternar da notação 23.dezsy padrão para a detecção automática) e clique em Run Interpreter!.fonte
66 - Pyth, não usa
e
A saída é citação 62:
Usa os caracteres
12456789:CDGJPRSTdhjkmtx
.Proibido anteriormente:
z" &'()*+,-./03;<=>@X[\]psy{
É baseado em uma série de substituições de expressões regulares -
:
em pyth, cada uma substituindo `, o caractere backtick, por uma sequência de dois caracteres contendo um novo caractere seguido por um backtick.As substituições são todas aplicadas a uma sequência original de apenas `(J).
As duas cadeias de letras são geradas usando a função de alteração de base,,
j
em um número e uma base para gerar uma entrada de lista de números, que são codificados em ASCII em uma cadeia de 2 caracteres pelaS
função recém-definida .Explicação:
fonte
z
66 no seu gráfico. Isso interrompe a cadeia, pois a próxima entrada está na segunda página.60. Quarto (não usa
^
)(Existem 54 novas linhas e 51 guias.)
A saída é citação 56:
Proibido anteriormente :
"'&()*+-,./\037;<=>@X_[sovy pez]{}
fonte
59. Applesoft BASIC, não usa
~
(Usa 11 novas linhas)
A saída é citação 55:
"La-dee-da, la-dee-da." - Annie Hall
Proibido anteriormente:
"'&()*+-,./\037;<=>@X_[sovy pez]^{}
É executado em um Apple // e (ou emulador).
Breve explicação: Após limpar a tela, o "CALL 2111" salta para o código de máquina 6502 incorporado nas linhas 4-15, que grava cada caractere diretamente na página de texto.
Detalhes:
Desmontagem:
O código da máquina certamente poderia ser otimizado, mas algumas peculiaridades se devem a restrições de codificação, por exemplo:
fonte
41. AJUSTAR (não usa
L
)(Não deve haver novas linhas à direita)
A saída é citação 50:
Proibido anteriormente :
"#$&'()*+,-./01357:;<=>@[\]^_ BdeEghJNopQksvWxXyz{|}~
Caracteres restantes:
!
%
?
`
2
46
89
A
CD
FGHI
K
M
OP
RSTUV
YZ
abc
f
ij
lmn
qr
tu
w
ADJUST é uma linguagem 2D com 1 registro e 2 pilhas. O ponteiro do código começa no canto inferior esquerdo e depois caminha na direção nordeste. As instruções são baseadas na fatoração principal do código de caractere atual, por exemplo
Z
= 90 = 5 × 3 × 3 × 2, portanto, o caractereZ
executará a ação "5" uma vez, "3" duas vezes e "2" uma vez. Isso nos permite ter várias maneiras de executar uma função e evitar os caracteres proibidos.A ideia básica do programa é:
Na etapa 1, usaremos essas letras para fornecer os 2 e 5:
F
(7 × 5 × 2)R
(41 × 2)t
(29 × 2 × 2)8
(7 × 2 × 2 × 2)Existem 7, 29, 41, mas isso não afetará o resultado final. Na etapa 2, usaremos
K
(5 × 5 × 3) para fornecer um "3". Observe que um par de "5" não funciona.Na etapa 3, escolhemos
A
(13 × 5). Na etapa 4, usaremosn
(11 × 5 × 2) para controlar o tamanho da pilha eK
ajustar a direção.Geralmente, se a etapa 1 não contiver nenhuma
R
, usamosKAnK
para imprimir o caractere e subir 4 linhas. Caso contrário, usamosKKA
para imprimir e descer duas linhas. Ocasionalmente, há também umaKnnK
necessário subir 4 linhas à força, pois o ponto de partida deve estar no canto inferior esquerdo.Se alguém estiver interessado, aqui está um ambiente de trabalho para produzir o código acima. Não há gerador automatizado.
fonte
23. Glypho , não usa
%
A saída é citação 30:
Proibido anteriormente :
!"#$&'()*+,-./013567:;<=>@[\]^_` AbBCdeEFghIjJkLMNopqQRsTUvVWxXyYzZ{|}~
Caracteres restantes:
?
2
4
89
D
GH
K
OP
S
a
c
f
i
lmn
r
tu
w
Observe que isso funciona com o intérprete Java , mas que não concorda com a página esolangs na codificação de
[
e+
. No entanto, o design do Glypho é tal que o conjunto completo de instruções está disponível desde que você tenha quatro caracteres distintos, e tudo, exceto os loops, estará disponível se você tiver três, portanto, esse é um detalhe menor.Eu já havia escolhido uma citação de que gostei de um filme que realmente vi, mas aparentemente negligenciei uma regra. :(
fonte