hackertyper.net

11

Einführung

hackertyper.net ist eine Website, die "Hacking" simuliert (wie es die Medien darstellen), indem sie komplizierten Code aus dem Krypto-Bereich des Linux-Kernels auf dem Bildschirm ausgibt, während Sie mit einer Rate von 3 Zeichen pro eingegebenem Zeichen eingeben.

Herausforderung

Ihr Programm / Ihre Funktion sollte entweder eine Datei als Befehlszeilenargument akzeptieren, den Dateipfad fest codieren lassen oder den Text [der sich in der Datei befinden würde] als Befehlszeilen- oder Funktionsargument akzeptieren und hackertyper.net imitieren durch Ausgabe von 3 Zeichen auf dem Bildschirm (STDOUT oder gleichwertig) aus der Datei für jedes über STDIN oder gleichwertig empfangene Zeichen.

Sobald EOF erreicht ist, sollte das Programm wieder am Anfang der Datei Zeichen ausgeben (Wrap).

Technische Daten

Der Einfachheit halber können Sie davon ausgehen, dass STDIN bereits auf keinen Puffer und keinen Echomodus eingestellt ist. Dies wartet nicht darauf, dass der Benutzer die Eingabetaste drückt, bevor die Eingabe an Ihr Programm übergeben wird und die von Ihnen eingegebenen Zeichen nicht angezeigt werden.

Die Datei kann Zeilenumbrüche enthalten, während die Eingabe keine Zeilenumbrüche enthält .

Ein kleines Beispiel in C (nicht mit Golf), das zeigt, wie dies funktioniert, finden Sie hier .

Grüner Text und ein schwarzer Hintergrund sind nicht erforderlich.

Beispiel für Ein- und Ausgabe

Die Datei:

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

Eingang:

hello world

Ausgabe:

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

Die Datei:

hello

Eingang:

hello world

Ausgabe:

hellohellohellohellohellohellohel
Majora320
quelle
1
1. Sind Funktionen zulässig (die zwei Zeichenfolgen als Argument verwenden und eine weitere Zeichenfolge zurückgeben)? 2. Ihre Spezifikation besagt, dass für jede Eingabe drei Zeichen ausgegeben werden sollen, in den Beispielen wird jedoch nur eines für jede Eingabe ausgegeben.
Türknauf
1
@ Doorknob 1. Ja und 2. Das war ein Fehler, behoben.
Majora320
Haben wir haben die Dateiinformationen in eine Datei zu übernehmen, oder können wir erhalten diese Informationen auch über ein Funktionsargument oder gleichwertig? Wenn wir müssen, wie lautet der Name dieser Datei? Befindet es sich in einem bestimmten Verzeichnis außerhalb unserer Skripte oder in demselben Verzeichnis wie unsere Skripte?
R. Kap
1
Verbunden.
Martin Ender
3
Boni sind schlecht. Und außerdem erhalten nur sehr wenige Menschen die Strafe, und es ist verwirrend, sie als "Bonus" zu bezeichnen.
CalculatorFeline

Antworten:

7

Gelee , 4 Bytes

ẋ3ṁ@

Probieren Sie es online aus!

Wie es funktioniert

ẋ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
quelle
Ich habe mich immer gefragt, was "Schimmel" bedeutet ...
Leaky Nun
18
@KennyLau Ich denke, es bedeutet, dass es Zeit ist, das Brot wegzuwerfen.
Alex A.
4

J , 7 Bytes

$~(3*#)

Nimmt zwei Argumente an, den zu wiederholenden Text und den Eingabetext des Benutzers.

Verwendung

Der Eingabetext ist so formatiert, ,dass er verbunden werden soll, und LFist das Zeilenumbruchzeichen.

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

Probieren Sie es online aus. (tryj.tk)

Meilen
quelle
4

Gelee, 9 Bytes

⁴L×3
ẋ¢ḣ¢

Probieren Sie es online aus!

⁴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.
Undichte Nonne
quelle
2
Ich denke du bist ein bisschen "Gelee" von Dennis 'Antwort?
Dennis van Gils
Gelee ist böse ..
CalculatorFeline
3

JavaScript (ES6), 40 Byte

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

Wo sist die Datenzeichenfolge und tist die Benutzerzeichenfolge. Angenommen, es sist nicht leer und wird lmehrmals wiederholt, um sicherzustellen, dass seine Länge mindestens lso ist, dass die ersten lZeichen zurückgegeben werden können, wobei ldie dreifache Länge von ist t.

Neil
quelle
3

Haskell, 25 Bytes

Das erste Argument ist, was "getippt" ist, das zweite die Quelle, die angezeigt werden soll

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

Oder nicht punktfrei, um (möglicherweise) besser lesbar zu sein:

h a=take(3*length a).cycle
Michael Klein
quelle
Was ist cycle?
CalculatorFeline
@CatsAreFluffy cyclenimmt eine Liste und wiederholt sie unendlich. ZBcycle "hi" == "hihihihi..
Michael Klein
Hast du darüber nachgedacht $?
CalculatorFeline
@CatsAreFluffy Ich bin mir nicht sicher, wo ich es verwenden würde, was hast du dir gedacht?
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))

Einfach genug. Eine anonyme Funktion, die zwei Argumente akzeptiert, wobei das erste die "Datei" ( g) und das zweite die vom Benutzer ( f) eingegebenen Zeichen sind . Dies erzeugt dann einen Generator, der alle drei Zeichen enthält g, die durch Indizieren für jedes iund dann i+3Zeichen in gefunden werden g, wo iim Bereich von liegt 0=>(length of f)*3. Schließlich wird jedes Objekt im Generator zurückgegeben, das zu einer großen Zeichenfolge verbunden ist. Sie rufen diese Funktion auf, indem Sie ihr eine Variable zuweisen und dann die in einen print()Ausdruck eingeschlossene Variable aufrufen . Wenn also der Name der Funktion qwäre, würde sie wie folgt ausgeführt print(q(<byte array here>)).

Probieren Sie es online aus! (repl.it)

R. Kap
quelle
2

05AB1E , 7 Bytes

Code:

3×g©×®£

Erläuterung:

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.

Probieren Sie es online aus! .

Adnan
quelle
2

Jolf, 10 Bytes

]*iγl*I30γ

Probieren Sie es hier aus!

Erläuterung

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

Ruby, 39 Bytes

$<Liest in Ruby aus der angegebenen Datei in den Befehlszeilenargumenten, anstatt $stdineines anzugeben. (Wenn Sie vergessen, eine Datei anzugeben, erhalten Sie eine leere Ausgabe, da sie alles aus $stdinin liest $<.readund somit STDIN.read.size0 ist.)

$><<($<.read*s=3*STDIN.read.size)[0,s]
Wert Tinte
quelle