Falling Terminal Hacking

13

¿Alguien aquí es un fanático de Bethesda? ¿Tal vez prefieres Obsidian Entertainment? Bueno, si eres cualquiera de esas cosas, la siguiente imagen debería ser relativamente familiar para ti.

La terminal de lluvia radiactiva.

Me he tomado la libertad de preparar un desafío ASCII-Art bastante único, así que aquí está la primera pista de lo que voy a hacer que hagas:

  _____________________________________________________
 /                                                     \ 
|     _____________________________________________     |
|    |                                             |    |
|    | 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                 |    |
|    |_____________________________________________|    |
|                                                       |
\_______________________________________________________/ 
       \_______________________________________/        

Esta es una plantilla muy básica (en blanco) para el diseño del terminal RobCo Fallout en ASCII puro, su trabajo será:

  • Primero, genere esta plantilla.
  • Luego, se le da una lista de cadenas ly un número 0 <= n <= 4para llenarlo.

Las dos partes dinámicas de un terminal de piratería son:

El número de intentos

  • El número de intentos que le quedan (indicado por cuadros delimitados por espacios).
    • A los efectos de este desafío, utilizará en Xlugar de .

Las contraseñas

  • Las contraseñas, definidas por l, se intercalan con símbolos ASCII imprimibles al azar.
  • Las contraseñas, como puede ver en el ejemplo, pueden ajustar varias filas ( NAMES).
  • Todas las contraseñas en la pantalla del terminal deben tener la misma posibilidad de estar en cualquier lugar.
  • Se puede esperar que todas las contraseñas tengan la misma longitud, aunque esto no importa.
  • La lista de símbolos utilizables para contraseñas independientes son: !"#$%&'()*+/:;<=>?@[\]^_{|}.
  • Todas las contraseñas ldeben tener la misma longitud.
  • LAS CONTRASEÑAS DEBEN TENER EL POTENCIAL DE ENVOLTARSE ENTRE AMBAS COLUMNAS.
    • Esto también se aplica a las filas, pero solo a una dirección de byte superior (0x18-> 0x01 no es válido).
  • El espacio de visualización para las contraseñas en cada lado es de 15 de ancho (con un espacio en cada lado).
    • Puede suponer que las palabras no lserán más largas que esto.
  • Las contraseñas son solo alfabéticas, es decir, solo letras.

Ejemplo:

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.
|    |_____________________________________________|    |
|                                                       |
\_______________________________________________________/ 
       \_______________________________________/        

Si n = 2en el mismo ejemplo:

  _____________________________________________________
 /                                                     \ 
|     _____________________________________________     |
|    |                                             |    |
|    | 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.
|    |_____________________________________________|    |
|                                                       |
\_______________________________________________________/ 
       \_______________________________________/        

Estos ejemplos fueron diseñados manualmente, por lo que la distribución no es aleatoria, lo siento.


Este es el , el conteo de bytes más bajo será el ganador aceptado. Lo recompensaré después de 3 días si no se han enviado respuestas para un total de 250 REP.

Urna de pulpo mágico
fuente
¡Rápido! ¡Nadie responde por 3 días! (bromeando) Este es mi nuevo desafío ascii-art favorito.
nmjcman101
2
@ nmjcman101 ¿Cuál fue tu último favorito?
Urna mágica del pulpo
¿Qué significa el NAMESen el segundo punto de viñeta? " Se puede esperar que todas las contraseñas tengan la misma longitud, aunque esto no importa " o " Todas las contraseñas en l deben tener la misma longitud ". Puede que solo sea yo siendo ciego (¡otra vez!) Pero no veo RACESen ninguno de los resultados, ¿deberíamos tomar esto para significar que debería existir la posibilidad de que no se use una contraseña? ¿Es Math.random(y equivalentes) suficientemente aleatorio para los propósitos de este desafío?
Shaggy
2
¿Tiene que haber espaciadores no alfanuméricos entre dos contraseñas o está bien si se generan uno al lado del otro (sin superposición)?
HyperNeutrino
55
¿Las contraseñas deben tener la posibilidad de ajustar de 0x18 a 0x01?
Jonathan Allan

Respuestas:

6

JavaScript (ES8), 575 568 564 bytes

Guardado 3 bytes gracias a @Shaggy

Toma entrada en la sintaxis de curry (r)(a) , donde r es el número de intentos restantes y a es la matriz de contraseñas.

r=>a=>[...C=`!"#[]^$%&'*+;<{}=`].reduce((s,c)=>(x=s.split(c)).join(x.pop()),`  "%%__
 /;;# \\ 
[ "} $Welcome to ROBCO Industries (TM) Termlink'!Password Required#}'!Attempts Remaining:${" X".repeat(r).padEnd(9)};[$^1=^D<2=^E<3=^F<4*0<5*1<6*2<7*3<8*4<9*5<A*6<B*7<C*8='+"[|
|;;#'|
\\"{_/ 
}'\\&%/= ]]]]] | }' {%%%<='+ ^#}}}+|
[|*=0x1'   "{{{%___$+;#}} !^0x0]ZZZ[|}#;}"&{![+ `).replace(/Z/g,(c,i)=>a.join``[(i%58>>5?y++:x++)%L],x=(R=n=>Math.random()*n|0)(L=360),y=x+180,[...Array(L-(n=a.sort(_=>R(3)-1).length)*a[0].length)].map(_=>a[R(n)]+=(C+`>?@()/:\\_|`)[R(27)]))

Marcador de sintaxis desactivado a propósito. No tiene idea de qué hacer con eso.

Manifestación

Arnauld
fuente
¿Podría guardar algo usando ES8 para completar los intentos de esta manera Attempts Remaining:${" X".repeat(r).padEnd(8)}:?
Shaggy
1
@Shaggy Eso ahorra 3 bytes. ¡Gracias!
Arnauld
Welcome to ROBCO Industries (TM) Termlink'!Password Required#}'!Attempts Remaining:oof ... Debería haber parafraseado para guardar bytes de langs que no son de golf.
Urna mágica de pulpo
4

SOGL V0.12 , 225 bytes

R“EC"+w╗─║Z⁰2BΥø‘▓"▲╔⁸‘'²∙+"⅟Δλ≤LK⅟ΗΠ.JN║«⁸⅟‘▓+╬⁷"№D↓tι▲‛Q─Ρδν∙υ4Ρψ▲¦‽↑√Ε┐Ζ5↔‛⅟≤š▼¦⁾○ΔΡ%³‘ū91 tž85ž.ΖX Ο'⁹7žø]Xe@*c{leκψI1ž}_:@øŗ⁄c∑⁄≠}l{"T-)⅞↑°Χpjζ⅓īa0ε+Μ‛⁶ρ\=↔⅟¹‘ψ}¹K@Gŗ'¹nο²²Z+8«m«ο+I{@∑"0x0”Κ}¹6«n_'⁷1ž'⁵16«┐∙ž'⁸4 19∙ž89╬5

Pruébalo aquí!
Espera la entrada de la matriz en la pila y la entrada del número y una entrada, por lo que →"se agrega en el programa en línea para facilitar su uso.

dzaima
fuente
4

Perl 5 , 588 560 + 1 (-a) = 589 561 bytes

Corte 28 bytes con las sugerencias que Dom señaló

$,=$/;$_=" X"x pop@F;say"  "."_"x53," /".$"x53 ."\\",$q="|     ".'_'x45 ."     |",$e=($b="|    |").$"x45 .$b,"$b Welcome to ROBCO Industries (TM) Termlink   $b
$b Password Required".$"x27 .$b,"$b Attempts Remaining:$_".$"x(25-length).$b,$e;map{$s.=(grep/[^\w,.`-]|_/,map{chr}33..125)[rand 27]}1..360;($t=substr$s,$r=rand 360-($l=length),$l,$_)=~/[a-z]/i&&(substr$s,$r,$l,$t)&&push@F,$_ while$_=pop@F;@o=$s=~/.{15}/g;printf"$b 0x0%X %s | 0x%02X %s $b\n",$_,$o[$_-1],$_+12,$o[$_+11]for 1..12;say$b.'_'x45 .$b,$q=~y/_/ /r,$q=" \\"."_"x54 ."/",$"x6 .$q=~s/_{15}//r

Pruébalo en línea!

Previamente:

$,=$/;$_=" X"x pop@F;say"  "."_"x53," /".($"x53)."\\",$q="|     ".('_'x45)."     |",$e=($b="|    |").($"x45).$b,"$b Welcome to ROBCO Industries (TM) Termlink   $b
$b Password Required".($"x27).$b,"$b Attempts Remaining:$_".($"x(25-length)).$b,$e;$s=join'',map{(split//,'!"#$%&\'()*+/:;<=>?@[]^_{|}\\')[int rand 27]}1..360;while($_=pop@F){if(($t=substr$s,$r=rand 360-($l=length),$l,$_)=~/[a-z]/i){substr$s,$r,$l,$t;push@F,$_}}@o=$s=~/.{15}/g;printf"$b 0x0%X %s | 0x%02X %s $b\n",$_,$o[$_-1],$_+12,$o[$_+11]for 1..12;say$b.('_'x45).$b,$q=~y/_/ /r,$q=" \\".("_"x54)."/",($"x6).$q=~s/_{15}//r

Pruébalo en línea!

La entrada está en una línea, separada por espacios: primero las cadenas, luego el número

¿Cómo?

$,=$/;          # delimiter between fields is newline
$_=" X"x pop@F; # set number of attempts left
say             # output the header
"  "."_"x53,
" /".($"x53)."\\",
$q="|     ".('_'x45)."     |",
$e=($b="|    |").($"x45).$b,
"$b Welcome to ROBCO Industries (TM) Termlink   $b
$b Password Required".($"x27).$b,
"$b Attempts Remaining:$_".($"x(25-length)).$b,
$e;
$s=join'',map{(split//,'!"#$%&\'()*+/:;<=>?@[]^_{|}\\')[int rand 27]}1..360; # create random string long enough for entire screen
while($_=pop@F){  # for each given string
if(($t=substr$s,$r=rand 360-($l=length),$l,$_) # attempt to insert it
=~/[a-z]/i)                                    # but check if it overlaps another string
{substr$s,$r,$l,$t;                            # if it does, take it out
push@F,$_}}                                    # and put it back in line
@o=$s=~/.{15}/g;                               # split "memory dump" into chunks
printf"$b 0x0%X %s | 0x%02X %s $b\n",$_,$o[$_-1],$_+12,$o[$_+11]for 1..12; #output the grid
say                                            # output the footer
$b.('_'x45).$b,$q=~y/_/ /r,
$q=" \\".("_"x54)."/",
($"x6).$q=~s/_{15}//r
Xcali
fuente
Buena respuesta a un problema complejo! Debería poder guardar casi 30 bytes quitando los corchetes alrededor del operador de repetición, puede agregar un espacio para .que no se use como punto decimal. ¡También para obtener la puntuación puede usar algo como (grep/[^\w,.`-]|_/,map{chr}33..125)y no necesita llamar inta un índice de matriz! Cambiar el whilebucle a postfix y usarlo en &&lugar de también ifdebería ahorrar algunos. Cuando estás construyendo $s, si tienes $s.=dentro del mapa en lugar de usar joingotas unas pocas más. ¡Espero que ayude!
Dom Hastings
4

Python 3 , 585 bytes

from random import*
def f(l,n,r=range):
	u,c='_ ';a=[choice('!"#$%&\'()*+/:;<=>?@[\\]^_{|}')for i in c*360];L=len(l[0]);i={*r(360-len(l[0]))};p=lambda x:'0x%02X'%x+c+''.join(a[15*x:][:15])
	for q in l:s=choice([*i]);a[s:s+L]=q;i-={*r(s+~L,s+-~-~L)}
	return'''  %s
 /%s\\
|# %s #|
?%s?
? Welcome to ROBCO Industries (TM) Termlink   ?
? Password Required   ######?
? Attempts Remaining:%-25s?
?%s?
%%s?%s?
|%s|
\%s/
#   \%s/'''.replace('?','|#|').replace('#',c*4)%(u*53,c*53,u*45,c*45,' X'*n,c*45,u*45,c*55,u*55,u*39)%('|    | %s | %s |    |\n'*12)%sum([(p(x),p(x+12))for x in r(12)],())

Pruébalo en línea!

-70 bytes gracias a Jonathan Allan
-9 bytes gracias a mí (¡finalmente!)
-72 bytes gracias a notjagan

Hiperneutrino
fuente
Y 15 más.
notjagan
¡16 más eliminados! (tiene que haber una mejor manera de hacerlo que un montón de comentarios)
notjagan
Otros 6 bytes apagados revertiendo a la mitad uno de mis otros cambios (realmente debería dejar de comentar).
notjagan
@notjagan No me importan los comentarios :) ¡Gracias!
HyperNeutrino
2

JavaScript (ES8), 639 bytes

(w,n,r=i=>Math.random()*i|0,s=b=>{for(i=b[k];i;i--)[b[i-1],b[j]]=[b[j=r(i)],b[i-1]]},a=Array(360-w[k="length"]*--w[0][k]),m=[...a].map((j,i)=>~(j=d.slice(0,w[k]).indexOf(i))?w[j]:`!"#$%&'()*+/:;<=>?@[\\]^_{|}`[r(27)],s(w),s(d=[...a.keys()])).join``.match(/.{15}/g).map((v,i)=>"0x"+(i+1).toString(16).padStart(2,0)+" "+v))=>`  _53
 / 53\\
| 5_45 5|
${["","Welcome to ROBCO Industries (TM) Termlink","Password Required","Attempts Remaining:"+" X".repeat(n),"",...m.slice(0,12).map((x,i)=>x+" | "+m[i+12])].map(x=>"| 4| "+x.padEnd(43)+" | 4|").join`
`}
| 4|_45| 4|
| 55|
\\_55/
 7\\_39/`.replace(/[_ ]([1-9]+)/g,(m,n)=>m[0].repeat(n))

Las etiquetas hexadecimales están en minúsculas; si se necesitara mayúscula, serían 14 bytes adicionales para.toUpperCase() .

Fragmento de prueba

Se ve mejor en CodePen .

Justin Mariner
fuente
Puede guardar un byte al cursar los 2 parámetros y mover sus variables al primero repeat.
Shaggy