Você foi contratado por seu conhecimento técnico como ajudante de um agente secreto para garantir que o mocinho possa fazer seu trabalho e o mundo possa ser salvo.
Esta é sua última missão antes de se aposentar com um salário alto e a gratidão de todo o mundo. Mas antes que você tenha que desarmar a grande bomba excessivamente maciça do Evil Genius (parece que o gênio do mal é um espertinho que gosta de siglas recursivas). De qualquer forma, você e seu amigo estão no âmago da base secreta do Evil Genius, prontos para desarmar a BOMBA que poderia destruir o continente. Na sua missão anterior, você conseguiu obter o código de desarmamento que, para sua surpresa, é apenas "PASSWORD_01". Você conecta o teclado à BOMB, mas quando está pronto para partir, os capangas do Evil Genius entram com uma enxurrada de balas. Infelizmente, um desses marcadores afeta o teclado. "Termine o trabalho enquanto eu distraio esses idiotas!" diz seu amigo e então começa a disparar sua arma.
ESPECIFICAÇÕES
- Escreva um programa que produza da maneira que desejar a sequência
PASSWORD_01
(maiúscula). Como seu teclado foi atingido por um marcador, você só pode usar estas teclas:
1 2 3 4 5
Q W E R T
A S D F G
< > Z X C
Ctrl Shift Tab Space
Usando a Shifttecla, seu teclado permite que você use estes caracteres:
! " · $ %
Você não possui outro hardware além do teclado e da tela (um mouse por exemplo), nem um arquivo com a senha gravada no seu computador.
Você não tem uma conexão com a Internet.
Você pode supor que o editor de shell / fonte do intérprete foi aberto antes da entrada dos marcadores. Infelizmente, você não escreveu nada antes de pressionar o teclado.
Você não tem um teclado virtual. De fato, o BOMB possui um detector TOO_FUNNY que o fará explodir se você tentar usar as brechas padrão .
Como seu amigo está esperando que você termine em breve para escapar da Base Secreta, você terá que escrever o menor código possível (por isso é código-fonte restrito e código-golfe !).
Boa sorte, porque a contagem regressiva já começou!
MODO DE AJUDA: Também uma KEY(apenas uma tecla que você deseja do teclado, mas não a tecla Shift + ou qualquer outra combinação) também sobreviveu milagrosamente. Por exemplo: Você pode usar =, ou 0ou /... Essa chave extra não pode conter nenhuma das letras PASSWORD_01
(portanto, você não pode adicionar Pou O). Nomeie essa chave na sua resposta. Você tem uma penalização de 10 caracteres pelo uso dessa chave, independentemente de quantas vezes você usa a chave.
fonte
stewardesses
?Respostas:
CJam - 24 + 10 ( () = 34
Nenhuma chave adicional - 39
Experimente em http://cjam.aditsu.net/
fonte
bash, vim e dc (343)
Estou sentado em um prompt do bash que foi configurado pelo Evil Genius e, é claro, ele
VISUAL=vim
no ambiente padrão. O uso da ligação bash padrão paraedit-and-execute-command
(C-x C-e
) bash chama$VISUAL
e executará seu conteúdo de buffer em exit (ZZ
). Digite a seguinte sequência (Nota: kbd-mode são comandos emitidos no modo normal e nas seqüências de controle):agato <<< 45 C-c4C-aaa
Agora o buffer do vim contém
cat<<<49a
. Continuando ...45 C-c3C-aaa
55 C-c13C-aaa
Agora o buffer do vim contém
cat<<<49a48a95a68a
. Continuando ...51 C-c31C-aaa
55 C-c25C-aaa> s
Agora o buffer vim contém
cat<<<49a48a95a68a82a79a87a83a83a65a80a>s
Saia do modo de inserção, salve e saia
C-cZZ
O
s
arquivo agora contém umdc
script que gera a string desejada na pilha, agora precisamos adicionar comandos de impressão.C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ
Repita o comando acima 9 vezes.
C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ
C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ
C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ
C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ
C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ
C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ
C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ
C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ
C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ
C-xC-eagato <<< f >> s
Execute o script dc:
C-xC-eadc sC-cZZ
Resultado:
Conteúdo do
s
arquivo:fonte
vim
roteiro por causa doCtrl
personagem; bom pensamento para emparelhá-lodc
! Além disso, excelente solução :)<Leader>k
encadernação como estamap <Leader>k i<kbd></kbd>^[F>a
, por isso não foi tão ruim quanto parece :-).Ruby, 57 + 10 (
*
) = 67Esta resposta usa
*
e%
para criar os valores ASCII dos caracteres ausentes (e 0 como Fixnum) e os empurra para$*
(ARGV
). Essa matriz é usada em combinação com uma string de formato para gerar a senha correta, impressa com$><<
($>
é stdout).Ruby, 62 + 10 (
.
) = 72, sem quebra de linhaAproximadamente o mesmo princípio da versão acima, exceto que aqui a matriz é criada a partir de uma matriz vazia literal (
%w%%
)..
É necessário um pouco de brincadeira para obter a precedência de operador desejada.fonte
Espaço em branco (148 + 10 = 158)
Enter chave precisa ser usada aqui.
A explicação da minha notação:
S
,+
,0
São espaços.T
,1
são guias.L
é uma nova linha.//
inicia o comentário.Cada linha é um comando no idioma de espaço em branco.
Demo
fonte
L
significa novo caractere de linha. Verifique a demonstração para o código real. O que eu postei é uma versão legível.Python (
2200395 + 10)Eu precisava do
+
personagem (custando +10), que pode ser obtido no teclado numérico (ou em determinados layouts de teclas).Sim, a bomba provavelmente disparou enquanto eu estava digitando isso.
A abordagem básica é construir conjuntos de caracteres cada vez maiores usando
exec
e"%c"%(number)
. Existem quatroexec
s aninhados um dentro do outro. Gradualmente, meu conjunto de dígitos avança depara que na iteração final seja possível expressar qualquer caractere (para que a versão mais interna possa realmente executar qualquer programa).
Cerca de 50% do programa são apenas caracteres de aspas (
"%c"%34
é uma aspas dupla), porque a natureza aninhada dasexec
instruções exige caracteres de aspas "escapantes" agressivamente.fonte
exec '%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c'%(112,114,51+54,55+55,1+115,32,4+35,25+55,11+54,31+52,31+52,32+55,24+55,31+51,13+55,41+54,3+45,4+45,4+35)
Insônia
39353129Esse idioma aparece quando eu estava procurando um idioma que codifique suas instruções com um único caractere ASCII. O idioma realmente opera no código ASCII decimal do caractere, por isso ainda é bastante flexível com metade do teclado destruído.
Desça até 29 caracteres, o que é possível após reduzir o uso de memória e aumentar o espaço de pesquisa:
Decidi executar meu programa aprimorado no conjunto completo de caracteres permitidos e reduzir a solução para 31 caracteres:
Eu usei um programa para procurar esta solução. É uma entre muitas soluções retornadas pelo meu programa, todas com o mesmo tamanho.
Versão antiga construída à mão. Lembro-me de ficar acordado até de manhã para fazer isso.
Aqui está o intérprete Insomnia para teste.
fonte
Vim + PHP em alguns gerenciadores de janelas
65 teclas em 44 toques, com uma penalidade de 10 pontos pelo uso =.
Um colapso:
aEACE<Alt+Tab>
: Entre no modo de acréscimo e insira “EACE”. Saída.z=5<Alt+Tab>
: Execute a correção ortográfica. Selecione 5, "PAZ". Saída. ( Escparece funcionar como Enteraqui!)$xxxxaASSWRD<Alt+Tab>
: Vá para o final da linha. Exclua 4 caracteres e adicioneASSWRD
, resultando emPASSWRD
. Voltar ao modo normal. (Não,4x
não vai funcionar.)z=1<Alt+Tab>
:PASSWORD
É provavelmente vai ser a primeira correção para isso. Selecione.$a$aA<Alt+Tab>
: Vá para o final da linha e adicione a$aA
. Voltar ao modo normal.==
: Formate bem esta linha do PHP, alterando o camelCase$aA
para$a_a
. Isso também move o cursor de volta ao início da linha.wxx
: Avance uma palavra; o cursor está agora antes$
. Exclua dois caracteres - o$
e oa
- para criarPASSWORD_a
.$r1
: Vá para o final da linha e substitua o caractere atual (ou sejaa
) por1
resultando emPASSWORD_1
.^X
: Decrementa o número inteiro sob o cursor, resultando emPASSWORD_0
.a1
: Finalmente, acrescente1
, paraPASSWORD_01
!fonte
==
comando, ele apenas alterna o modo de recuo grande na minha configuração vi (debian 7, v7.3.547)Python 2, 75889 bytes
Nenhum personagem extra!
Infelizmente, o código é super longo. Então, aqui está o código para gerar o programa:
Experimente online
(para executar o código, altere o externo
print
para umexec
. Ou gere o programa, cole e execute. Ou copie do pastebin vinculado abaixo.)Explicação:
O objetivo é executar:
Para evitar o uso de
()+
caracteres, precisamos usar várias operações de formato de cadeia encadeadas. Isso significa que cada etapa adicionada efetivamente dobra o número de%
caracteres necessários para cada etapa anterior:Porém, isso não é suficiente, porque alguns dos números necessários não podem ser criados e nem podemos criar
print
. Portanto, adicionamos um nível de abstração comexec
forprint
ing e um nível para os pontos de código ASCII que não podemos criar para formatar. A seguir, é essencialmente minha resposta, mas com cada cadeia de caracteres%
reduzida a uma única (observe que%s%s%s%s%s
não é uma representação precisa, falhando em levar em conta o literal%
necessário antes de cada uma):O primeiro passo: ultraperiférico
exec
:1>>1
:0
, Utilizado para a0
emPASSWORD_01
2531>>5
:79
, usado pelo exec interno para criarO
321>>2
:80
, usado pelo exec interno para criarP
1521>>4
:95
, usado pelo exec interno para criar_
211>>1
:105
, usado pelo exec interno para criari
221>>1
:110
, usado pelo exec interno para criarn
Segundo passo: Prepare o interior
exec
Após o exposto, o interior
exec
é mais ou menos assim:Só que você não entenderia isso. Ainda com as simplificações, você obteria o seguinte:
Os literais
%
precisam ser incluídos. Então, basicamente, eu tive que adicionar um monte deles antes de cada um%s
para terminar com os literais%
restantes após toda a formatação.2**11
deles. Vezes cinco.O restante das
exec
operações de formato de cadeia externa são%112%34%34%34%34
. O112
é parap
e os outros são aspas. Depois de aplicá-las, o resultado é algo como isto:Mas, na realidade, tem muito mais
%
. É isso:O passo final é simplesmente executar isso, após o qual você obtém a saída necessária.
Código completo aqui: http://pastebin.com/rSFs6DiH
fonte
bash + vim (56)
Tomando emprestado o Ctrl-XCtrl-Etruque do bash da solução de Thor, aqui está como eu faria isso no bash + vim:
C-XC-E inicia o editor padrão (geralmente vim)
a inicia o modo de inserção
.space ASSW
C-Vx4f inserções
O
RD
C-Vx5f inserções
_
1
C-3é equivalente a escape(não apenas no vim, mas em qualquer lugar do terminal)
C-Xsubtrai 1 do
1
que acabei de digitara insira o modo novamente
1 C-3
o conteúdo do buffer é agora
. ASSWORD_01
<< linha não indentada (no-op, pois a linha não é recuada) e mova o cursor para a 1ª coluna
a
C-X iniciar a conclusão da palavra
C-V completo com o comando ex
C-V Mais 9 vezes seleciona a entrada
Print
C-3 de volta ao modo normal
XXXxx exclui
rint
< < voltar à coluna 1
sexcluir
.
, iniciar o modo de inserçãoe c C-X C-Vex comando conclusão mais uma vez, entrada
echo
já selecionada por causa do queec
eu acabei de digitarspace C-3 conteúdo do buffer agora
echo PASSWORD_01
Z Z salvar buffer, fechar vim, bash executa o conteúdo do arquivo, ou seja,
echo PASSWORD_01
A propósito: C-3tem muitos irmãos úteis: C-Jis Enter, C-Iis Tab, C-His Backspace, C-2is C-@(ou seja, um byte nulo). E para os usuários do emacs, é bom saber que Escapeseguido por outra chave é equivalente a Alt+ essa chave. Portanto, mesmo sem Escapee Altvocê ainda pode digitar Meta-x assim:C-3x
fonte
Perl, (31 + 10/41 + 10/64 + 10)
( ^chave usada, 3 maneiras)
print
vez dedie
Os scripts usam o operador XOR de string bit a bit do Perl
^
, que executa um XOR nos bits de caractere das duas strings. Isso permite recriar os caracteres ausentes para PASSWORD_01 e criar os caracteres para o comando do sistema.Eu criei as três variantes, dependendo de quão branda as regras sejam. Suponho que, como as variantes 2 e 3 realmente produzam as palavras no Ideone, as soluções são válidas. Tirei a pequena história que tinha aqui, pois achei que ninguém iria lê-la, mas você pode ler nas edições se estiver curioso!
fonte
Código oOo (300)
Fácil. (Os feeds de linha são opcionais e estão aqui apenas para tornar o código "mais legível") Gerador de código usado:
O mesmo código em uma codificação menos boba:
fonte
ferNANDo, 179 + 10 = 189 bytes
Experimente online!
Enterusava. Eu usaria
0
e1
para tornar o código mais legível, mas não posso usá-lo0
.fonte
JS-adiante, 103 bytes
A cadeia será retornada na pilha como uma matriz de caracteres.
Experimente online - Versão comentada
Explicação:
Encontrei pela primeira vez a lista de palavras permitidas . Essencialmente, as únicas coisas que eu poderia usar que seriam úteis são:
12345
Constantes numéricas<<
Deslocar para a esquerda>>
Shift rights>f
Empurre a pilha para flutuarf>d
Pop duplo da pilha flutuantefsqrt
Raiz quadrada na pilha de flutuadorAssim, eu poderia usar constantes numéricas, deslocamento de bits e calcular uma raiz quadrada usando o seguinte (
>>
substituidrop
, deslocando0
para remover o0
):Felizmente, encontrei possíveis mudanças de bits para todas as constantes necessárias para criar que eram mais curtas do que usar raízes quadradas. Na maioria das vezes, procurei simplesmente imprimindo cada número ao quadrado, ou uma potência maior de dois, se algum deles contivesse um dígito
6-0
. Então, percebi que poderia usar a perda de precisãof>d
para encontrar mais possibilidades. (Eu poderia adicionar ao número, mas ainda assim obter a mesma raiz quadrada inteira.) Um pouco depois, comecei a usar a troca de bits para encontrar algumas e depois todas as constantes. Quanto maior a>>
troca de bits, mais eu poderia adicionar ao "número mágico" e ainda assim obter o mesmo resultado. Então eu encontrei os menores turnos de bits que eu poderia usar para obter os resultados necessários. Às vezes<<
, até os números podiam usar , as probabilidades tinham que usar>>
.Código comentado (
\
inicia um comentário):gForth não possui as palavras
<<
ou>>
. Em vez disso, temlshift
ershift
, que eu não poderia usar .fonte
Decimal ,
190180 + 10 = 190 bytesExperimente online! Decimal é uma linguagem esotérica que usa apenas decimais e a letra
D
. No entanto, eu precisava da penalidade de +10 porque quase todo comando usa0
.Felizmente, todos os comandos necessários para imprimir
PASSWORD_01
não exigem números acima6
:12...D
- empurre um personagem2
- pop um valor41D
- pop top dois valores de pilha, multiplicar e empurrar resultado301
- imprime DSI (índice de pilha padrão)Pressionando repetidamente os valores dos caracteres que usam apenas os dígitos 1 a 5 e, em seguida, adicionando-os, eu posso criar os valores dos caracteres para cada letra
PASSWORD_01
.Ungolfed e comentou:
fonte
Espaço em branco , pontuação: 111 (101 bytes + 10 para Enter)
Letras
S
(espaço),T
(tabulação) eN
(nova linha) adicionadas apenas como destaque.[..._some_action]
adicionado apenas como explicação.Experimente online (apenas com espaços brutos, guias e novas linhas).
Explicação em pseudo-código:
Essa solução é mais curta que a resposta existente no Whitespace ( @ n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̷̨̰́̀ĥ̷̳ pediu para publicá-la como uma resposta separada quando eu sugeri como golfe), utilizando esta dica minha do Whitespace .
A constante
80
foi gerada com este programa Java , que eu criei e usei para algumas respostas anteriores do Whitespace.fonte
Stax , 91 + 10 bytes
Experimente online!
Usa ]para fazer singletons.
Explicação
Vamos ver como
"P"
é gerado e como o"ASSW"
é anexado sem usar o habitual+
.O resto está apenas repetindo o mesmo truque.
"a"EEE$"$"a$Re]R
troca os dígitos de"a"
ou[97]
para criar[79]
ou"O"
e anexa à string."$""RD"R appends "RD"
."$""a"EEEd$"$""5"Re]R
usa"a"
novamente para obter"9"
e descartar o"7"
, em seguida, combina o"9"
com um literal"5"
para formar[95]
or"_"
e o anexa à string."$"1 !$R
obtém um zero pela lógica não de 1 e o anexa à string."$""1"R
acrescenta a final"1"
e terminamos.Saída implícita.
fonte
brainfuck , 400 + 10 (
+
) = 410 bytesExperimente online!
fonte
Código de máquina .COM 8086 do MS-DOS (72 bytes)
O tempo é precioso, portanto, não há tempo para discutir com compiladores ou intérpretes! Simplesmente abra o seu editor de texto de sua escolha e digite o seguinte (substitua
\t
por TAB):Como um hexdump:
Salve como um arquivo .COM e execute-o para salvar o dia.
O código assume certos valores iniciais para registros , portanto, pode não funcionar para todos os tipos de DOS. Só espero que alguém arrisque ser demitido por não comprar a IBM.
Representação um pouco mais compreensível:
fonte
Befunge-98, 43 +10 = 53 bytes
Experimente online!
A penalidade de 10 bytes é pelo uso da
,
chave (não sei por que isso não pôde ser realizado com Shift+ <, mas essa parece ser a regra). E embora a origem tenha tecnicamente 40 caracteres, os três·
caracteres contribuem com mais três bytes devido à codificação UTF-8.fonte
05AB1E ,
8786 bytesExperimente online!
Talvez o código 05AB1E mais longo de todos os tempos?Infelizmente, o idioma não suporta coisas como
"Q"<
"decrementar Q para obter P"Minha chave extra é o V.
Obrigado a @Kevin Cruijssen por -1 byte.
Código:
Para comparação: a maneira mais curta de imprimir "PASSWORD_01" tem 6 bytes
Experimente online!
fonte
TR
vez de1<1
para a01
parte da saída.Emacs, 26 bytes (possivelmente + 10 = 36 ou - 2 = 24)
A chave extra necessária nesta resposta é Esc. Isso está na metade do teclado que ainda está intacta, mas não é mencionada na pergunta por algum motivo, portanto, pode ou não dar uma penalidade à pontuação. ( Esce Altsão equivalentes no Emacs; tambémAlt está na metade intacta do teclado, mas não é mencionado na pergunta, mas deve ser mantido em vez de ser tocado para que eu não possa usá-lo como minha chave extra. Isso economizaria dois bytes , porém, porque possui uma codificação mais curta que a.)Esc
O próprio programa (as vírgulas delimitam os limites entre os bytes no formato on-the-wire que o Emacs usa para aceitar sua entrada):
Codificação disso como bytes brutos, para provar a contagem de bytes:
(Nota: alguns dos detalhes podem variar de acordo com a configuração do Emacs; esta resposta exige que o quoted-char-radix seja definido como 16 e que o Emacs use o dicionário de verificação ortográfica padrão no meu sistema de inglês britânico. Ambos parecem como definições de configuração razoáveis, mas é possível que sua cópia do Emacs seja configurada de maneira diferente.Um dicionário diferente provavelmente ainda forneceria um programa de 26 bytes, mas erros de ortografia ligeiramente diferentes podem precisar ser usados para que as correções desejadas possam ser aceitas por chaves não controladas por marcadores.)
Explicação
Não tenho certeza se deve ter alguma influência nas guerras dos editores, mas o Emacs parece vencer o vim pelo menos no caso desta pergunta. O Emacs é bastante adequado para golfe de editor medido em bytes, porque depende muito de acordes que usam várias teclas pressionadas, mas apenas um byte (portanto, um programa Emacs costuma ser mais lento do que o programa Vim equivalente, mas mais curto no disco). Além disso, a maioria dos comandos mais importantes do Emacs estão no canto inferior esquerdo do teclado, para estar perto Ctrl, muito útil com uma pergunta como esta.
"Você pode assumir que o editor de shell / fonte do intérprete foi aberto antes que os marcadores chegassem. Infelizmente, você não escreveu nada antes do teclado ser pressionado.", Então estou assumindo que temos um arquivo vazio aberto no Emacs e precisa digitar a senha nele. (Precisamos salvar o arquivo posteriormente e provavelmente sair do Emacs, mas os bytes para isso não estão sendo contados nas respostas de outras pessoas, por isso também não os estou contando aqui. É totalmente viável usando o lado esquerdo do teclado, porém, Ctrl- X, Ctrl- S, Ctrl- X, Ctrl- C.)
Assumindo um comando (ou bloco de comandos semelhantes) de cada vez:
WS
no documento.WS
não é uma palavra real, mas encontra muitas palavras semelhantes de duas letras.WS
paraPS
. (Quando o verificador ortográfico é chamado usando Alt- $, como aconteceu aqui ( Esce Alté equivalente ao Emacs), ele verifica apenas uma palavra, sendo desativado depois de fazer isso.)A
, dandoPSA
.PAS
.SRWD
, doaçãoPASSRWD
.PASSRWD
emPASSWORD
. Observe que não podemos adivinhar a palavra que queremos na primeira tentativa, como faria comPASSWRD
, porque a tecla para aceitar a palavra real mais próxima é a 0que não podemos pressionar. Como resultado, o erro de ortografia um pouco mais extremoPASSRWD
é usado para empurrar a palavra que queremos para a posição 5, onde podemos aceitá-la._
. O documento agora lêPASSWORD_
(ou será quando começarmos a digitar o próximo comando; antes disso, o sublinhado não aparecerá se digitarmos outro dígito hexadecimal).10
.PASSWORD_10
.PASSWORD_01
, como a pergunta pede.Se for permitido o uso Alt, provavelmente podemos codificar o comando "invocar verificação ortográfica" como o byte único, em
a4
vez de explicá-lo como1b
24
; aparece duas vezes, o que leva a dois bytes de economia. (A maioria dos terminais modernos usa1b
24
como codificação para Alt- $para evitar conflitos com o UTF-8, mas aa4
codificação também é encontrada de tempos em tempos, às vezes disponível como opção de configuração.)Possíveis economias de bytes provavelmente envolvem erros de ortografia nos jogadores para corrigir.
PSASWRD
seria um byte mais curto para digitar, mas, infelizmente, o corretor ortográfico não parece capaz de entenderPASSWORD
isso, entãoPASSRWD
é a melhor abordagem que encontrei até agora. A abordagem baseada em registros para ganhar10
também é ridiculamente difícil, mas não há muitas maneiras de criar números do nada no Emacs, e0
é um personagem doloroso para se controlar. (Pelo menos, houve algumas coincidências incrivelmente úteis: o cursor acabou por terminar na posição10
, que contém a0
, exatamente quando necessário; e o fato de o Emacs aceitar ag
operação de registro redundante para inserir o conteúdo de um registro no documento , além do mais intuitivoi
.)fonte