hackertyper.net

11

Wprowadzenie

hackertyper.net to strona internetowa, która symuluje „hackowanie” (tak jak to pokazują media) poprzez wyświetlanie na ekranie skomplikowanego kodu z sekcji kryptograficznej jądra Linuxa podczas pisania z szybkością 3 znaków na jeden wprowadzony tekst.

Wyzwanie

Twój program / funkcja powinna albo zaakceptować plik jako argument wiersza polecenia, mieć zakodowaną ścieżkę pliku, albo zaakceptować tekst [, który byłby w pliku] jako argument wiersza polecenia lub funkcji i naśladować hackertyper.net poprzez wyprowadzenie 3 znaków na ekran (STDOUT lub równoważny) z pliku dla każdego odebranego przez STDIN lub równoważny.

Po osiągnięciu EOF program powinien ponownie zacząć wypisywać znaki od początku pliku (zawinąć).

Okular

Dla uproszczenia można założyć, że STDIN został już ustawiony na tryb bez bufora i bez echa, który nie czeka, aż użytkownik naciśnie klawisz Enter, zanim przekaże dane wejściowe do programu i nie wyświetli wpisanych znaków.

Plik może zawierać nowe linie, a dane wejściowe nie będą zawierać nowych linii .

Za niewielką przykład napisany w C (nie grałem), który pokazuje, jak to działa, zobacz to .

Zielony tekst i czarne tło nie są wymagane.

Przykładowe wejście i wyjście

Plik:

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

Wejście:

hello world

Wynik:

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

Plik:

hello

Wejście:

hello world

Wynik:

hellohellohellohellohellohellohel
Majora320
źródło
1
1. Czy dozwolone są funkcje (które przyjmują dwa ciągi jako argument i zwracają kolejny ciąg)? 2. Twoja specyfikacja mówi, aby wypisywać trzy znaki dla każdego wejścia, ale przykłady dają tylko jeden znak dla każdego wejścia.
Klamka
1
@Doorknob 1. Tak i 2. To był błąd, naprawiony.
Majora320
Czy możemy mieć do podjęcia informacji o pliku w postaci pliku, lub możemy również otrzymać te informacje poprzez argument funkcji lub równoważne? Jeśli będziemy musieli, jaka będzie nazwa tego pliku? Czy będzie w określonym katalogu z dala od naszego skryptu (ów), czy w tym samym, co nasz skrypt (y)?
R. Kap
1
Związane z.
Martin Ender
3
Bonusy są złe. Dodatkowo bardzo niewiele osób otrzyma karę, a nazywanie tego „premią” jest mylące.
CalculatorFeline

Odpowiedzi:

7

Galaretka , 4 bajty

ẋ3ṁ@

Wypróbuj online!

Jak to działa

ẋ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
źródło
Zawsze zastanawiałem się, co znaczy „pleśń” ...
Leaky Nun
18
@KennyLau Myślę, że to oznacza, że ​​nadszedł czas, aby wyrzucić chleb.
Alex A.
4

J , 7 bajtów

$~(3*#)

Bierze dwa argumenty, tekst do powtórzenia i tekst wejściowy użytkownika.

Stosowanie

Tekst wejściowy jest sformatowany w miejscu, w którym ,oznacza się połączyć, i LFjest znakiem nowego wiersza.

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

Wypróbuj online. (tryj.tk)

mile
źródło
4

Galaretka, 9 bajtów

⁴L×3
ẋ¢ḣ¢

Wypróbuj online!

⁴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.
Leaky Nun
źródło
2
Myślę, że jesteś trochę „galaretką” odpowiedzi Dennisa?
Dennis van Gils,
Galaretka jest zła ..
CalculatorFeline
3

JavaScript (ES6), 40 bajtów

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

Gdzie sjest ciąg danych i tciąg użytkownika. Zakłada, że sjest niepusty i powtarza go lrazy, aby upewnić się, że jego długość jest co najmniej ltaka, że ​​może zwrócić pierwsze lznaki, gdzie ljest trzy razy większa niż t.

Neil
źródło
3

Haskell, 25 bajtów

Pierwszy argument to „wpisany”, drugi to źródło do wyświetlenia

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

Lub bez punktów, dla (ewentualnie) lepszej czytelności:

h a=take(3*length a).cycle
Michael Klein
źródło
Co jest cycle?
CalculatorFeline
@CatsAreFluffy cyclebierze listę i powtarza ją w nieskończoność. Np.cycle "hi" == "hihihihi..
Michael Klein
Czy rozważałeś $?
CalculatorFeline
@CatsAreFluffy Nie jestem pewien, gdzie bym go użył, co myślałeś?
Michael Klein,
3

Python 3.5, 77 65 63 bajtów:

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

Wystarczająco proste. Anonimowa funkcja, która przyjmuje dwa argumenty, pierwszy to „plik” ( g), a drugi to znaki wpisane przez użytkownika ( f). Następnie tworzy generator zawierający co trzy znaki w g, które można znaleźć poprzez indeksowanie dla każdego, ia następnie i+3znaków w g, gdzie ijest w zakresie 0=>(length of f)*3. Na koniec zwraca każdy obiekt w generatorze połączony w jeden duży ciąg. Wywołujesz tę funkcję, przypisując do niej zmienną, a następnie wywołując zmienną zawiniętą w print()wyrażenie. Więc jeśli nazwa funkcji qbyłaby, byłaby wykonana jak print(q(<byte array here>)).

Wypróbuj online! (repl.it)

R. Kap
źródło
2

05AB1E , 7 bajtów

Kod:

3×g©×®£

Wyjaśnienie:

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.

Wypróbuj online! .

Adnan
źródło
2

Jolf, 10 bajtów

]*iγl*I30γ

Wypróbuj tutaj!

Wyjaśnienie

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

Rubin, 39 bajtów

W Ruby $<czyta z dostarczonego pliku w argumentach wiersza poleceń zamiast, $stdinjeśli podano jeden. (Jeśli zapomnij dostarczyć plik, pojawi się pusta wyjście ponieważ czyta wszystko z $stdinw $<.reada zatem STDIN.read.sizebędzie 0.)

$><<($<.read*s=3*STDIN.read.size)[0,s]
Wartość tuszu
źródło