Alguém aqui é um fã obstinado da Bethesda? Talvez você prefira a Obsidian Entertainment? Bem, se você é uma dessas coisas, a imagem a seguir deve ser relativamente familiar para você.
Tomei a liberdade de preparar um desafio ASCII-Art bastante singular, então aqui está a primeira pista sobre o que vou fazer com que você faça:
_____________________________________________________
/ \
| _____________________________________________ |
| | | |
| | Welcome to ROBCO Industries (TM) Termlink | |
| | Password Required | |
| | Attempts Remaining: | |
| | | |
| | 0x01 | 0x0D | |
| | 0x02 | 0x0E | |
| | 0x03 | 0x0F | |
| | 0x04 | 0x10 | |
| | 0x05 | 0x11 | |
| | 0x06 | 0x12 | |
| | 0x07 | 0x13 | |
| | 0x08 | 0x14 | |
| | 0x09 | 0x15 | |
| | 0x0A | 0x16 | |
| | 0x0B | 0x17 | |
| | 0x0C | 0x18 | |
| |_____________________________________________| |
| |
\_______________________________________________________/
\_______________________________________/
Este é um modelo (em branco) muito básico para o design do terminal RobCo Fallout em ASCII puro, seu trabalho será:
- Primeiro, gere este modelo.
- Então, dada uma lista de strings
l
e um número0 <= n <= 4
para preenchê-lo!
As duas partes dinâmicas de um terminal de hacking de precipitação são:
O número de tentativas
- O número de tentativas restantes (indicadas por caixas delimitadas por espaço.
- Para o objetivo deste desafio, você usará em
X
vez de■
.
- Para o objetivo deste desafio, você usará em
As senhas
- As senhas, definidas por
l
, são intercaladas com símbolos ASCII imprimíveis aleatórios. - As senhas, como você pode ver pelo exemplo, podem quebrar várias linhas (
NAMES
). - Todas as senhas na tela do terminal devem ter a mesma chance de estar em qualquer lugar.
- Pode-se esperar que todas as senhas tenham o mesmo comprimento, embora isso não importe.
- A lista de símbolos utilizáveis para separar senhas são:
!"#$%&'()*+/:;<=>?@[\]^_{|}
. - Todas as senhas em
l
devem ter o mesmo comprimento. - AS SENHAS DEVEM TER POTENCIAL DE ENVOLVER ENTRE AMBAS AS COLUNAS.
- Isso também vale para linhas, mas apenas para um endereço de bytes mais alto (0x18-> 0x01 é inválido).
- O espaço de exibição de senhas em ambos os lados tem 15 de largura (com um espaço em ambos os lados).
- Você pode assumir que nenhuma palavra
l
será maior que isso.
- Você pode assumir que nenhuma palavra
- As senhas são apenas alfabéticas, significando apenas letras.
Exemplo:
l = ["SMART","ENACT","SWORE","PITYS","SMELL","CARTS","RACES"]
, n = 4
_____________________________________________________
/ \
| _____________________________________________ |
| | | |
| | Welcome to ROBCO Industries (TM) Termlink | |
| | Password Required | |
| | Attempts Remaining: X X X X | | # N = 4 drives these X's.
| | | |
| | 0x01 $?_/%$ENACT||"} | 0x0D TYS"_'$\#|^%&{} | |
| | 0x02 }:!*@{/_<"[]#>; | 0x0E #{!"^&\]'|}_[$% | |
| | 0x03 $%&'()*+/:;<\_' | 0x0F }|[(%SMELL/_$@( | |
| | 0x04 ^SMART(!@$*'^_@ | 0x10 []_#!"{|}'%$\&^ | |
| | 0x05 (*@#%}*(!%)^(_! | 0x11 %$}[!\#'^&_]{|" | |
| | 0x06 $%&'()*+/:;<_@) | 0x12 \SWORE|%'_!}\^" | |
| | 0x07 "/')=*%!&>#<:$+ | 0x13 ^{['&$|!_]%\"#} | |
| | 0x08 ;'*$&"(<%!#)RAC | 0x14 ']!|^#[$"_\}&{% | |
| | 0x09 ES:($&';%#+"<*/ | 0x15 @)($!CARTS*!@$_ | |
| | 0x0A ;'*$&"(<%!#)/+: | 0x16 !#%${"'}&[]^|_\ | |
| | 0x0B |'_!}$\%["#^{&] | 0x17 ]"_#$&}^%[{|\'! | |
| | 0x0C #{!"^&\]'|}_[PI | 0x18 _![&#{$%\^'|}"] | | # Notice how PITYS wrapped.
| |_____________________________________________| |
| |
\_______________________________________________________/
\_______________________________________/
Se n = 2
no mesmo exemplo:
_____________________________________________________
/ \
| _____________________________________________ |
| | | |
| | Welcome to ROBCO Industries (TM) Termlink | |
| | Password Required | |
| | Attempts Remaining: X X | | # N = 2 drives these X's.
| | | |
| | 0x01 $?_/%$ENACT||"} | 0x0D TYS"_'$\#|^%&{} | |
| | 0x02 }:!*@{/_<"[]#>; | 0x0E #{!"^&\]'|}_[$% | |
| | 0x03 $%&'()*+/:;<\_' | 0x0F }|[(%SMELL/_$@( | |
| | 0x04 ^SMART(!@$*'^_@ | 0x10 []_#!"{|}'%$\&^ | |
| | 0x05 (*@#%}*(!%)^(_! | 0x11 %$}[!\#'^&_]{|" | |
| | 0x06 $%&'()*+/:;<_@) | 0x12 \SWORE|%'_!}\^" | |
| | 0x07 "/')=*%!&>#<:$+ | 0x13 ^{['&$|!_]%\"#} | |
| | 0x08 ;'*$&"(<%!#)RAC | 0x14 ']!|^#[$"_\}&{% | |
| | 0x09 ES:($&';%#+"<*/ | 0x15 @)($!CARTS*!@$_ | |
| | 0x0A ;'*$&"(<%!#)/+: | 0x16 !#%${"'}&[]^|_\ | |
| | 0x0B |'_!}$\%["#^{&] | 0x17 ]"_#$&}^%[{|\'! | |
| | 0x0C #{!"^&\]'|}_[PI | 0x18 _![&#{$%\^'|}"] | | # Notice how PITYS wrapped.
| |_____________________________________________| |
| |
\_______________________________________________________/
\_______________________________________/
Esses exemplos foram criados manualmente, então a distribuição não é aleatória, desculpe.
Este é o código-golfe , o menor número de bytes será o vencedor aceito. Recompensarei isso após 3 dias, se nenhuma resposta tiver sido enviada para um total de 250 REP.
fonte
NAMES
no 2º marcador? " Pode-se esperar que todas as senhas tenham o mesmo comprimento, embora isso não importe. " Ou " Todas as senhas em l devem ter o mesmo comprimento. "? Pode ser que eu esteja cego (de novo!), Mas não vejoRACES
em nenhum resultado - devemos considerar isso como uma possibilidade de uma senha não estar sendo usada? ÉMath.random
(e equivalentes) suficientemente aleatório para os objetivos deste desafio?Respostas:
JavaScript (ES8),
575568564 bytesGuardado 3 bytes graças a @Shaggy
Recebe entrada na sintaxe de curry
(r)(a)
, onde r é o número de tentativas restantes e a é a matriz de senhas.Marcador de sintaxe desativado de propósito. Não tem idéia do que fazer com isso.
Demo
Mostrar snippet de código
fonte
Attempts Remaining:${" X".repeat(r).padEnd(8)}
:?Welcome to ROBCO Industries (TM) Termlink'!Password Required#}'!Attempts Remaining:
oof ... Eu deveria ter parafraseado para salvar bytes de langs sem golfe.SOGL V0.12 , 225 bytes
Experimente aqui!
Espera a entrada da matriz na pilha e o número de entrada como uma entrada, portanto,
→"
é adicionado ao programa on-line para facilitar o uso.fonte
Perl 5 ,
588560 + 1 (-a) =589561 bytesCorte 28 bytes com as sugestões apontadas por Dom
Experimente online!
Anteriormente:
Experimente online!
A entrada está em uma linha, espaço separado: primeiro as seqüências de caracteres, depois o número
Quão?
fonte
.
não seja usado como ponto decimal. Também para obter a pontuação, você pode usar algo como(grep/[^\w,.`-]|_/,map{chr}33..125)
e não precisa chamarint
um índice de matriz! Alterar owhile
loop para postfix e usar em&&
vez deif
deve salvar alguns também. Quando você está construindo$s
, se você tiver$s.=
dentro do mapa, em vez de usarjoin
gotas mais algumas. Espero que ajude!Python 3 , 585 bytes
Experimente online!
-70 bytes graças a Jonathan Allan
-9 bytes graças a mim mesmo (finalmente!)
-72 bytes graças a notjagan
fonte
JavaScript (ES8), 639 bytes
Os rótulos hexagonais estão em minúsculas; se maiúsculas fosse necessária, seriam 14 bytes adicionais para
.toUpperCase()
.Snippet de teste
Melhor visualizado no CodePen .
fonte
repeat
.