hackertyper.net


11

Giới thiệu

hackertyper.net là một trang web mô phỏng "hack" (như phương tiện truyền thông miêu tả nó) bằng cách xuất mã phức tạp từ phần mật mã của nhân Linux lên màn hình khi bạn nhập với tốc độ 3 ký tự cho mỗi lần nhập.

Thử thách

Chương trình / hàm của bạn phải chấp nhận tệp dưới dạng đối số dòng lệnh, có đường dẫn tệp được mã hóa cứng hoặc chấp nhận văn bản [có trong tệp] dưới dạng đối số dòng lệnh hoặc hàm và bắt chước hackertyper.net bằng cách xuất 3 ký tự lên màn hình (STDOUT hoặc tương đương) từ tệp cho mỗi ký tự nhận được thông qua STDIN hoặc tương đương.

Khi đạt được EOF, chương trình sẽ bắt đầu xuất các ký tự từ đầu tệp một lần nữa (bọc).

Thông số kỹ thuật

Với mục đích đơn giản, bạn có thể giả sử rằng STDIN đã được đặt thành không có bộ đệm và không có chế độ tiếng vang, điều đó không chờ đợi cho đến khi người dùng nhấn enter trước khi chuyển đầu vào cho chương trình của bạn và không hiển thị các ký tự bạn nhập.

Tệp có thể chứa dòng mới, trong khi đầu vào sẽ không chứa dòng mới .

Đối với một ví dụ nhỏ được viết bằng C (không được đánh gôn) thể hiện cách thức hoạt động của nó, hãy xem điều này .

Văn bản màu xanh lá cây và một nền đen là không cần thiết.

Ví dụ đầu vào và đầu ra

Tập tin:

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

Đầu vào:

hello world

Đầu ra:

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

Tập tin:

hello

Đầu vào:

hello world

Đầu ra:

hellohellohellohellohellohellohel

1
1. Các hàm có được phép không (lấy hai chuỗi làm đối số và trả về một chuỗi khác)? 2. Thông số kỹ thuật của bạn cho biết xuất ba ký tự cho mỗi đầu vào, nhưng các ví dụ chỉ xuất một ký tự cho mỗi đầu vào.
Doorknob

1
@Doorknob 1. Có, và 2. Đó là một lỗi, đã được sửa.
Majora320

Chúng ta phải lấy thông tin tệp dưới dạng tệp hay chúng ta cũng có thể nhận thông tin đó thông qua đối số chức năng hoặc tương đương? Nếu chúng ta phải, tên của tập tin đó sẽ là gì? Nó sẽ nằm trong một thư mục cụ thể cách xa (các) tập lệnh của chúng tôi hay trong cùng một tập lệnh với tập lệnh của chúng tôi?
R. Kap


3
Tiền thưởng là xấu. Và cộng với rất ít người sẽ bị phạt và gọi đó là "phần thưởng" thật khó hiểu.
Máy

Câu trả lời:


7

Thạch , 4 byte

ẋ3ṁ@

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

ẋ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.

Tôi đã luôn tự hỏi "khuôn" nghĩa là gì ...
Leaky Nun

18
@KennyLau Tôi nghĩ rằng đó là thời gian để ném bánh mì.
Alex A.

4

J , 7 byte

$~(3*#)

Có hai đối số, văn bản sẽ được lặp lại và văn bản đầu vào của người dùng.

Sử dụng

Văn bản đầu vào được định dạng nơi ,có nghĩa là tham gia và LFlà ký tự dòng mới.

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

Hãy thử trực tuyến. (thử


4

Thạch, 9 byte

⁴L×3
ẋ¢ḣ¢

Hãy thử trực tuyến!

⁴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.

2
Tôi đoán bạn là một chút "thạch" của câu trả lời của Dennis?
Dennis van Gils

Jelly là ác ..
Máy


3

JavaScript (ES6), 40 byte

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

Trong trường hợp slà chuỗi dữ liệu và tlà chuỗi người dùng. Giả sử slà không trống và lặp đi lặp lại lnhiều lần để đảm bảo rằng độ dài của nó ít nhất là lđể nó có thể trả về các lký tự đầu tiên , trong đó lcó độ dài gấp ba lần t.


3

Haskell, 25 byte

Đối số đầu tiên là những gì được "gõ", nguồn thứ hai để hiển thị

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

Hoặc không có điểm, để (có thể) dễ đọc hơn:

h a=take(3*length a).cycle

Có gì cycle?
Máy

@CatsAreFluffy cyclelấy một danh sách và lặp lại nó vô tận. Ví dụ:cycle "hi" == "hihihihi..
Michael Klein

Bạn đã xem xét $chưa?
Máy

@CatsAreFluffy Tôi không chắc chắn tôi sẽ sử dụng nó ở đâu, bạn đang nghĩ gì?
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))

Đủ đơn giản. Một hàm ẩn danh có hai đối số, đầu tiên là "tệp" ( g) và thứ hai là các ký tự được người dùng nhập vào ( f). Sau đó, điều này tạo ra một trình tạo chứa mỗi ba ký tự g, được tìm thấy bằng cách lập chỉ mục cho mỗi ivà sau đó các i+3ký tự g, itrong phạm vi 0=>(length of f)*3. Cuối cùng, nó trả về mỗi đối tượng trong trình tạo được nối thành một chuỗi lớn. Bạn gọi hàm này bằng cách gán một biến cho nó, và sau đó gọi biến được gói bên trong một print()biểu thức. Vì vậy, nếu tên của hàm là q, nó sẽ được thực thi như thế nào print(q(<byte array here>)).

Hãy thử trực tuyến! (thay thế)


2

05AB1E , 7 byte

Mã số:

3×g©×®£

Giải trình:

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.

Hãy thử trực tuyến! .



2

Ruby, 39 byte

Trong Ruby, $<đọc từ tệp được cung cấp trong các đối số dòng lệnh thay vì $stdinnếu được đưa ra. (Nếu bạn quên cung cấp một tập tin, bạn sẽ có được một sản lượng trống vì nó đọc tất cả mọi thứ ra khỏi $stdintrong $<.readvà do đó STDIN.read.sizesẽ là 0.)

$><<($<.read*s=3*STDIN.read.size)[0,s]
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.