hackertyper.net


11

บทนำ

hackertyper.netเป็นเว็บไซต์ที่จำลอง "การแฮ็ก" (ตามสื่อแสดงภาพ) โดยการส่งรหัสที่ซับซ้อนจากส่วนเข้ารหัสของเคอร์เนลลินุกซ์ลงบนหน้าจอในขณะที่คุณพิมพ์ด้วยอัตรา 3 ตัวอักษรต่อหนึ่งอินพุต

ท้าทาย

โปรแกรม / ฟังก์ชั่นของคุณควรยอมรับไฟล์เป็นอาร์กิวเมนต์บรรทัดคำสั่งมีเส้นทางไฟล์ที่กำหนดค่าตายตัวหรือยอมรับข้อความ [ที่จะอยู่ในไฟล์] เป็นบรรทัดคำสั่งหรือฟังก์ชั่นการโต้แย้งและเลียนแบบhackertyper.netโดยการแสดงผล 3 ตัวอักษรลงบนหน้าจอ (STDOUT หรือเทียบเท่า) จากไฟล์สำหรับแต่ละอันที่ได้รับผ่าน STDIN หรือเทียบเท่า

เมื่อถึง EOF โปรแกรมควรเริ่มต้นการแสดงผลตัวอักษรจากจุดเริ่มต้นของไฟล์อีกครั้ง (ตัด)

รายละเอียด

สำหรับวัตถุประสงค์ของความเรียบง่ายคุณสามารถสันนิษฐานได้ว่า STDIN ได้ถูกตั้งค่าเป็นไม่มีบัฟเฟอร์และไม่มีโหมด echo ที่ไม่รอจนกว่าผู้ใช้กดป้อนก่อนส่งผ่านอินพุตไปยังโปรแกรมของคุณและไม่แสดงอักขระที่คุณพิมพ์

ไฟล์ที่สามารถมีการขึ้นบรรทัดใหม่ในขณะที่การป้อนข้อมูลที่จะได้มีการขึ้นบรรทัดใหม่

สำหรับตัวอย่างเล็ก ๆ ที่เขียนใน C (ไม่แข็งแรงเล่นกอล์ฟ) ที่แสดงให้เห็นถึงวิธีการทำงานนี้ให้ดูนี้

ไม่จำเป็นต้องใช้ตัวอักษรสีเขียวและพื้นหลังสีดำ

ตัวอย่างอินพุตและเอาต์พุต

ไฟล์:

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

การป้อนข้อมูล:

hello world

เอาท์พุท:

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

ไฟล์:

hello

การป้อนข้อมูล:

hello world

เอาท์พุท:

hellohellohellohellohellohellohel

1
1. อนุญาตให้ใช้ฟังก์ชัน (ซึ่งใช้สองสายเป็นอาร์กิวเมนต์และส่งคืนสตริงอื่น) หรือไม่ 2. สเป็คของคุณบอกว่าจะเอาท์พุทสามตัวอักษรสำหรับทุกอินพุต แต่ตัวอย่างจะส่งออกเพียงหนึ่งตัวสำหรับทุกอินพุต
Doorknob

1
@Doorknob 1. ใช่และ 2 นั่นคือความผิดพลาดคงที่
Majora320

เราจำเป็นต้องใช้ข้อมูลไฟล์เป็นไฟล์หรือเราสามารถรับข้อมูลนั้นผ่านอาร์กิวเมนต์ของฟังก์ชั่นหรือเทียบเท่าได้หรือไม่? ถ้าเราต้องใช้ชื่อของไฟล์นั้นจะเป็นอะไร? มันจะอยู่ในสารบบเฉพาะจากสคริปต์ของเราหรือในไดเรกทอรีเดียวกับสคริปต์ของเราหรือไม่?
R. Kap


3
โบนัสไม่ดี และบวกกับคนจำนวนน้อยมากที่จะได้รับโทษและเรียกมันว่า "โบนัส" ทำให้เกิดความสับสน
CalculatorFeline

คำตอบ:


7

เยลลี่ 4 ไบต์

ẋ3ṁ@

ลองออนไลน์!

มันทำงานอย่างไร

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

ผมเคยสงสัยว่าสิ่งที่ "แม่พิมพ์" หมายถึง ...
รั่วนูน

18
@ KennyLau ฉันคิดว่ามันถึงเวลาที่จะทิ้งขนมปังแล้ว
Alex A.

4

J , 7 ไบต์

$~(3*#)

รับอาร์กิวเมนต์สองตัวข้อความที่จะทำซ้ำและข้อความอินพุตของผู้ใช้

การใช้

ข้อความอินพุตถูกจัดรูปแบบโดยที่,หมายถึงการเข้าร่วมและLFเป็นอักขระขึ้นบรรทัดใหม่

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

ลองออนไลน์ (tryj.tk)


4

เยลลี่ขนาด 9 ไบต์

⁴L×3
ẋ¢ḣ¢

ลองออนไลน์!

⁴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
ฉันเดาว่าคำตอบของเดนนิส "jelly" เล็กน้อย?
Dennis van Gils

เยลลี่เป็นสิ่งชั่วร้าย ..
เครื่องคิดเลข


3

JavaScript (ES6), 40 ไบต์

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

sสตริงข้อมูลอยู่ที่ไหนและtเป็นสตริงผู้ใช้ ถือว่าsเป็นว่างและทำซ้ำมันlครั้งเพื่อให้มั่นใจว่าความยาวของมันเป็นอย่างน้อยlเพื่อที่จะสามารถกลับมาเป็นครั้งแรกที่lตัวละครที่เป็นสามครั้งความยาวของlt


3

Haskell, 25 ไบต์

อาร์กิวเมนต์แรกคือสิ่งที่ "พิมพ์" แหล่งที่สองที่จะแสดง

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

หรือไม่ฟรีสำหรับการอ่านที่ดีกว่า:

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

อะไรนะcycle?
CalculatorFeline

@CatsAreFluffy cycleรับรายการและทำซ้ำแบบไม่สิ้นสุด ตัวอย่างcycle "hi" == "hihihihi..
Michael Klein

คุณเคยคิด$ไหม
CalculatorFeline

@CatsAreFluffy ฉันไม่แน่ใจว่าจะใช้ที่ไหนคุณคิดอะไรอยู่
Michael Klein

3

Python 3.5, 77 65 63 ไบต์:

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

เรียบง่ายพอสมควร ฟังก์ชั่นที่ไม่ระบุชื่อซึ่งใช้เวลาในการขัดแย้งสองประการอันแรกคือ "ไฟล์" ( g) และที่สองเป็นตัวอักษรที่พิมพ์โดยผู้ใช้ ( f) แล้วนี้จะสร้างเครื่องกำเนิดไฟฟ้าที่มีทุกสามตัวละครในgซึ่งจะพบได้โดยการจัดทำดัชนีสำหรับทุกiแล้วi+3ตัวละครในgที่อยู่ในช่วงของi 0=>(length of f)*3ในที่สุดมันจะคืนค่าแต่ละวัตถุในเครื่องกำเนิดไฟฟ้าที่รวมกันเป็นหนึ่งสตริงใหญ่ คุณเรียกใช้ฟังก์ชันนี้โดยการกำหนดตัวแปรให้กับมันแล้วเรียกตัวแปรที่อยู่ในprint()นิพจน์ ดังนั้นถ้าชื่อฟังก์ชั่นก็คือมันจะถูกดำเนินการเช่นqprint(q(<byte array here>))

ลองออนไลน์! (repl.it)


2

05AB1E , 7 ไบต์

รหัส:

3×g©×®£

คำอธิบาย:

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.

ลองออนไลน์! .



2

Ruby, 39 ไบต์

ใน Ruby $<อ่านจากไฟล์ที่ให้ในอาร์กิวเมนต์บรรทัดคำสั่งแทน$stdinหากมีการระบุไว้ (ถ้าคุณลืมที่จะส่งไฟล์คุณจะได้ผลลัพธ์ที่ว่างเปล่าเพราะมันจะอ่านทุกอย่างจาก$stdinใน$<.readและSTDIN.read.sizeจะเป็น 0)

$><<($<.read*s=3*STDIN.read.size)[0,s]
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.