hackertyper.net

11

Introducción

hackertyper.net es un sitio web que simula el "pirateo" (como lo retratan los medios de comunicación) al generar un código complicado de la sección de cifrado del kernel de Linux en la pantalla a medida que escribe a una velocidad de 3 caracteres por cada entrada.

Desafío

Su programa / función debe aceptar un archivo como argumento de línea de comando, tener la ruta del archivo codificada o aceptar el texto [que estaría en el archivo] como argumento de línea de comando o función, e imitar hackertyper.net mediante la salida de 3 caracteres en la pantalla (STDOUT o equivalente) del archivo para cada uno recibido a través de STDIN o equivalente.

Una vez que se alcanza EOF, el programa debe comenzar a generar caracteres desde el principio del archivo nuevamente (ajuste).

Especificaciones

Para fines de simplicidad, puede suponer que STDIN ya se ha configurado en modo sin búfer y sin eco, que no está esperando hasta que el usuario presione Entrar antes de pasar la entrada a su programa y no mostrar los caracteres que escribe.

El archivo puede contener nuevas líneas, mientras que la entrada no contendrá nuevas líneas .

Para ver un pequeño ejemplo escrito en C (no golfizado) que demuestra cómo funciona esto, vea esto .

No se requiere texto verde y un fondo negro.

Ejemplo de entrada y salida

El archivo:

#include <stdio.h>
int main() { }

Entrada:

hello world

Salida:

#include <stdio.h>
int main() { }

El archivo:

hello

Entrada:

hello world

Salida:

hellohellohellohellohellohellohel
Majora320
fuente
1
1. ¿Se permiten funciones (que toman dos cadenas como argumento y devuelven otra cadena)? 2. Su especificación dice que muestre tres caracteres para cada entrada, pero los ejemplos solo generan uno para cada entrada.
Pomo de la puerta
1
@Doorknob 1. Sí, y 2. Eso fue un error, corregido.
Majora320
Hacer que tenemos que tomar la información del archivo en un archivo, o también podemos recibir esa información a través de un argumento de la función o equivalente? Si tenemos que hacerlo, ¿cuál será el nombre de ese archivo? ¿Estará en un directorio específico lejos de nuestro script (s), o en el mismo directorio que nuestro script (s)?
R. Kap
1
Relacionado.
Martin Ender
3
Las bonificaciones sean malas. Y además, muy pocas personas recibirán la penalidad, y llamarlo "bono" es confuso.
CalculatorFeline

Respuestas:

7

Jalea , 4 bytes

ẋ3ṁ@

Pruébalo en línea!

Cómo funciona

ẋ3ṁ@    Main link. Arguments: s (input string), t (file string)

ẋ3      Repeat s three times.
  ṁ@    Mold; reshape t like the previous result.
        This repeats the elements of t over and over until the length matches that
        of s repeated thrice.
Dennis
fuente
Siempre me he preguntado qué significa "molde" ...
Leaky Nun
18
@KennyLau Creo que significa que es hora de tirar el pan.
Alex A.
4

J , 7 bytes

$~(3*#)

Toma dos argumentos, el texto que se repetirá y el texto de entrada del usuario.

Uso

El texto de entrada está formateado donde ,significa unirse y LFes el carácter de nueva línea.

   f =: $~(3*#)
   ('#include <stdio.h>', LF, 'int main() { }') f 'hello world'
#include <stdio.h>
int main() { }
   'hello' f 'hello world'
hellohellohellohellohellohellohel

Pruébalo en línea. (tryj.tk)

millas
fuente
4

Jalea, 9 bytes

⁴L×3
ẋ¢ḣ¢

Pruébalo en línea!

⁴L×3     Define nilad as ¢:

 L       length of
⁴        second argument
  ×3     tripled


ẋ¢ḣ¢     Main chain:

         the first argument (implicit)
ẋ        repeated
 ¢       ¢ many times
  ḣ¢     then get the first ¢ characters of it.
Monja permeable
fuente
2
¿Supongo que eres un poco "gelatina" de la respuesta de Dennis?
Dennis van Gils
Jelly is evil ..
CalculatorFeline
3

JavaScript (ES6), 40 bytes

(s,t)=>s.repeat(l=t.length*3).slice(0,l)

¿Dónde sestá la cadena de datos y tes la cadena de usuario? Asume sque no está vacío y lo repite lveces para asegurarse de que su longitud sea al menos lpara que pueda devolver los primeros lcaracteres, donde les tres veces la longitud de t.

Neil
fuente
3

Haskell, 25 bytes

El primer argumento es lo que está "escrito", el segundo la fuente para mostrar

(.cycle).take.(3*).length

O sin puntos, para (posiblemente) una mejor legibilidad:

h a=take(3*length a).cycle
Michael Klein
fuente
¿Qué es cycle?
CalculatorFeline
@CatsAreFluffy cycletoma una lista y la repite infinitamente. Por ejemplocycle "hi" == "hihihihi..
Michael Klein el
¿Lo has considerado $?
CalculatorFeline
@CatsAreFluffy No estoy seguro de dónde lo usaría, ¿en qué estabas pensando?
Michael Klein
3

Python 3.5, 77 65 63 bytes:

lambda g,f:''.join((g*len(f))[i:i+3]for i in range(0,len(f)*3,3))

Suficientemente simple. Una función anónima que toma dos argumentos, el primero es el "archivo" ( g) y el segundo los caracteres escritos por el usuario ( f). A continuación, esto crea un generador que contiene cada tres personajes g, que se encuentran por la indexación de cada iy luego i+3caracteres en gdonde ise encuentra en el rango de 0=>(length of f)*3. Finalmente, devuelve cada objeto en el generador unido en una gran cadena. Llama a esta función asignándole una variable y luego llamando a la variable envuelta dentro de una print()expresión. Entonces, si el nombre de la función era q, se ejecutaría como print(q(<byte array here>)).

Pruébalo en línea! (repl.it)

R. Kap
fuente
2

05AB1E , 7 bytes

Código:

3×g©×®£

Explicación:

3×        # Multiply the input string three times.
  g       # Take the length.
   ©      # Copy that to the register.
    ×     # Multiply by the second input.
     ®    # Retrieve the length from the register.
      £   # Only keep [0:length * 3] from the new string.

Pruébalo en línea! .

Adnan
fuente
2

Jolf, 10 bytes

]*iγl*I30γ

Pruébalo aquí!

Explicación

]*iγl*I30γ
 *i        repeat string 1
    l*I3    the length of the other string * 3
   γ        γ = (^)
]       0γ  (^).slice(0, γ)
Conor O'Brien
fuente
2

Ruby, 39 bytes

En Ruby, $<lee del archivo suministrado en los argumentos de la línea de comando en lugar de $stdinsi se proporciona uno. (Si olvida proporcionar un archivo, obtendrá un resultado en blanco porque lee todo de $stdinadentro $<.ready, por STDIN.read.sizelo tanto , será 0.)

$><<($<.read*s=3*STDIN.read.size)[0,s]
Tinta de valor
fuente