hackertyper.net

11

pengantar

hackertyper.net adalah situs web yang mensimulasikan "peretasan" (sebagaimana media menggambarkannya) dengan mengeluarkan kode rumit dari bagian crypto dari kernel Linux ke layar saat Anda mengetik dengan laju 3 karakter per satu yang dimasukkan.

Tantangan

Program / fungsi Anda harus menerima file sebagai argumen command-line, memiliki path file yang dikodekan, atau menerima teks [yang akan ada di file] sebagai argumen command-line atau fungsi, dan meniru hackertyper.net dengan mengeluarkan 3 karakter ke layar (STDOUT atau setara) dari file untuk masing-masing yang diterima melalui STDIN atau setara.

Setelah EOF tercapai, program harus mulai mengeluarkan karakter dari awal file (bungkus).

Spesifikasi

Untuk tujuan kesederhanaan, Anda dapat mengasumsikan bahwa STDIN telah diatur ke tidak ada buffer dan tidak ada mode gema, yang tidak menunggu sampai pengguna menekan masuk sebelum mengirimkan input ke program Anda dan tidak menampilkan karakter yang Anda ketik.

File dapat berisi baris baru, sedangkan input tidak akan mengandung baris baru .

Untuk contoh kecil yang ditulis dalam C (bukan golf) yang menunjukkan cara kerjanya, lihat ini .

Teks hijau dan latar belakang hitam tidak diperlukan.

Contoh input dan output

Berkas:

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

Memasukkan:

hello world

Keluaran:

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

Berkas:

hello

Memasukkan:

hello world

Keluaran:

hellohellohellohellohellohellohel
Majora320
sumber
1
1. Apakah fungsi diizinkan (yang menggunakan dua string sebagai argumen dan mengembalikan string lain)? 2. Spec Anda mengatakan untuk menghasilkan tiga karakter untuk setiap input, tetapi contoh-contoh hanya menghasilkan satu karakter untuk setiap input.
Gagang Pintu
1
@ Doorknob 1. Ya, dan 2. Itu kesalahan, diperbaiki.
Majora320
Apakah kita harus mengambil informasi file sebagai file, atau bisakah kita juga menerima informasi itu melalui argumen fungsi atau yang setara? Jika harus, apa nama file itu? Apakah akan berada di direktori tertentu yang jauh dari skrip kami, atau di direktori yang sama dengan skrip kami?
R. Kap
1
Terkait
Martin Ender
3
Bonus buruk. Dan ditambah sangat sedikit orang yang akan mendapat penalti, dan menyebutnya "bonus" membingungkan.
CalculatorFeline

Jawaban:

7

Jelly , 4 byte

ẋ3ṁ@

Cobalah online!

Bagaimana itu bekerja

ẋ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
sumber
Saya selalu bertanya-tanya apa arti "cetakan" ...
Leaky Nun
18
@ KennyLau, saya pikir ini berarti sudah waktunya untuk membuang roti.
Alex A.
4

J , 7 byte

$~(3*#)

Membawa dua argumen, teks yang akan diulang dan teks input pengguna.

Pemakaian

Teks input diformat di mana ,berarti bergabung dan LFmerupakan karakter baris baru.

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

Cobalah online. (tryj.tk)

mil
sumber
4

Jelly, 9 byte

⁴L×3
ẋ¢ḣ¢

Cobalah 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.
Biarawati Bocor
sumber
2
Saya kira Anda sedikit "jeli" dari jawaban Dennis?
Dennis van Gils
Jelly itu jahat ..
CalculatorFeline
3

JavaScript (ES6), 40 byte

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

Di mana sstring data dan tstring pengguna. Diasumsikan stidak kosong dan diulang lberkali - kali untuk memastikan bahwa panjangnya setidaknya lagar dapat mengembalikan lkarakter pertama , di mana lpanjangnya tiga kali lipat t.

Neil
sumber
3

Haskell, 25 byte

Argumen pertama adalah apa yang "diketik", yang kedua sumber untuk ditampilkan

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

Atau non-pointfree, untuk (mungkin) keterbacaan yang lebih baik:

h a=take(3*length a).cycle
Michael Klein
sumber
Apa cycle?
CalculatorFeline
@CatsAreFluffy cyclemengambil daftar dan mengulanginya tanpa batas. Misalnyacycle "hi" == "hihihihi..
Michael Klein
Sudahkah Anda mempertimbangkan $?
CalculatorFeline
@CatsAreFluffy Saya tidak yakin di mana saya akan menggunakannya, apa yang Anda pikirkan?
Michael Klein
3

Python 3.5, 77 65 63 byte:

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

Cukup sederhana. Fungsi anonim yang mengambil dua argumen, yang pertama adalah "file" ( g), dan yang kedua adalah karakter yang diketik oleh pengguna ( f). Kemudian ini menciptakan generator yang berisi setiap tiga karakter di g, yang ditemukan dengan pengindeksan untuk setiap idan kemudian i+3karakter di g, di mana iberada dalam kisaran 0=>(length of f)*3. Akhirnya, mengembalikan setiap objek dalam generator bergabung menjadi satu string besar. Anda memanggil fungsi ini dengan menetapkan variabel ke dalamnya, dan kemudian memanggil variabel yang dibungkus di dalam print()ekspresi. Jadi jika nama fungsi itu q, itu akan dieksekusi seperti print(q(<byte array here>)).

Cobalah online! (repl.it)

R. Kap
sumber
2

05AB1E , 7 byte

Kode:

3×g©×®£

Penjelasan:

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.

Cobalah online! .

Adnan
sumber
2

Jolf, 10 byte

]*iγl*I30γ

Coba di sini!

Penjelasan

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

Ruby, 39 byte

Di Ruby, $<membaca dari file yang disediakan dalam argumen baris perintah alih-alih $stdinjika diberikan. (Jika Anda lupa untuk memasok file, Anda mendapatkan output kosong karena membaca semuanya dari $stdindalam $<.readdan dengan demikian STDIN.read.sizeakan menjadi 0.)

$><<($<.read*s=3*STDIN.read.size)[0,s]
Nilai Tinta
sumber