hackertyper.net


11

Вступ

hackertyper.net - це веб-сайт, який імітує "злому" (як представлені у ЗМІ), виводячи на екран складний код із криптовалюти ядра Linux під час введення тексту зі швидкістю 3 символи на один введений текст.

Виклик

Ваша програма / функція повинна або приймати файл як аргумент командного рядка, мати жорсткий код файлу, або приймати текст [який був би у файлі] як аргумент командного рядка або функції та імітувати hackertyper.net шляхом виведення 3 символів на екран (STDOUT або еквівалент) з файлу для кожного, отриманого через STDIN або еквівалент.

Після досягнення EOF програма повинна знову почати виводити символи з початку файлу (обгортання).

Технічні характеристики

Для простоти ви можете припустити, що STDIN вже встановлений без буфера та режиму ехо, тобто не чекає, поки користувач натисне, перш ніж передати вхід у вашу програму та не відобразити введені вами символи.

Файл може містити нові рядки, тоді як вхідні дані не будуть містити нові рядки .

Невеликий приклад, написаний на C (не для гольфу), який демонструє, як це працює, дивіться у цьому .

Зелений текст та чорний фон не потрібні.

Приклад введення та виведення

Файл:

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

Вхід:

hello world

Вихід:

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

Файл:

hello

Вхід:

hello world

Вихід:

hellohellohellohellohellohellohel

1
1. Чи дозволені функції (які беруть два рядки як аргумент і повертають інший рядок)? 2. Ваша специфікація каже вивести три символи на кожен вхід, але приклади виводять лише один для кожного вводу.
Дверна ручка

1
@Doorknob 1. Так, і 2. Це була помилка, виправлена.
Majora320

Чи потрібно брати інформацію про файл як файл, чи ми можемо також отримати цю інформацію через аргумент функції або еквівалент? Якщо нам доведеться, яким буде ім'я цього файлу? Чи буде він у певному каталозі, поданому від наших (-ів) сценаріїв, або в тому ж, що і наш (-ий) сценарій (-и)?
Р. Кап


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 Я думаю, це означає, що пора викидати хліб.
Олексій А.

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
Я думаю, ти трохи "желе" відповіді Денніса?
Денніс ван Гілс

Желе - це зло ..
КалькуляторFeline


3

JavaScript (ES6), 40 байт

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

Де sрядок даних і tрядок користувача. Передбачається, що він sне порожній і повторює його lраз, щоб переконатися, що його довжина принаймні, lщоб він міг повернути перші lсимволи, де lвтричі перевищує довжину t.


3

Haskell, 25 байт

Перший аргумент - це те, що "набрано", другий - джерело для відображення

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

Або без точки зору, для (можливо) кращої читабельності:

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

Що cycle?
CalculatorFeline

@CatsAreFluffy cycleбере список і повторює його нескінченно. Напр.cycle "hi" == "hihihihi..
Майкл Клейн

Ви розглядали $?
CalculatorFeline

@CatsAreFluffy Я не впевнений, де б я його використав, що ти думав?
Майкл Клейн

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()виразу. Отже, якби ім'я функції було q, воно виконується як би print(q(<byte array here>)).

Спробуйте в Інтернеті! (repl.it)




2

Рубін, 39 байт

У Ruby $<читає з наданого файлу в командному рядку аргументи замість того, $stdinякщо він вказаний. (Якщо ви забули поставити файл, ви отримаєте чистий вихід , тому що він читає все з $stdinв $<.readі , таким чином , STDIN.read.sizeбуде 0.)

$><<($<.read*s=3*STDIN.read.size)[0,s]
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.