hackertyper.net

11

introduction

hackertyper.net est un site Web qui simule le "piratage" (tel que les médias le dépeignent) en sortant à l'écran du code compliqué de la section crypto du noyau Linux lorsque vous tapez à un taux de 3 caractères par entrée.

Défi

Votre programme / fonction doit soit accepter un fichier comme argument de ligne de commande, soit coder en dur le chemin du fichier, soit accepter le texte [qui serait dans le fichier] comme argument de ligne de commande ou de fonction, et imiter hackertyper.net en affichant 3 caractères sur l'écran (STDOUT ou équivalent) à partir du fichier pour chacun reçu via STDIN ou équivalent.

Une fois EOF atteint, le programme devrait recommencer la sortie des caractères depuis le début du fichier (retour à la ligne).

Spécifications

Pour des raisons de simplicité, vous pouvez supposer que STDIN a déjà été défini sur aucun tampon et aucun mode d'écho, ce qui n'attend pas que l'utilisateur appuie sur Entrée avant de passer l'entrée à votre programme et de ne pas afficher les caractères que vous tapez.

Le fichier peut contenir des retours à la ligne, tandis que l'entrée ne contiendra pas de retours à la ligne .

Pour un petit exemple écrit en C (non joué) qui montre comment cela fonctionne, voir ceci .

Un texte vert et un fond noir ne sont pas requis.

Exemple d'entrée et de sortie

Le fichier:

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

Contribution:

hello world

Production:

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

Le fichier:

hello

Contribution:

hello world

Production:

hellohellohellohellohellohellohel
Majora320
la source
1
1. Les fonctions sont-elles autorisées (qui prennent deux chaînes en argument et renvoient une autre chaîne)? 2. Votre spécification indique de sortir trois caractères pour chaque entrée, mais les exemples n'en produisent qu'un pour chaque entrée.
Poignée de porte
1
@ Doorknob 1. Oui, et 2. C'était une erreur, corrigée.
Majora320
Avons-nous devons prendre les informations du fichier en tant fichier, ou pouvons - nous recevoir aussi que par un argument de fonction ou équivalent? Si nous devons le faire, quel sera le nom de ce fichier? Sera-ce dans un répertoire spécifique loin de nos scripts, ou dans le même que nos scripts?
R. Kap
1
En relation.
Martin Ender
3
Les bonus sont mauvais. Et en plus, très peu de gens recevront la pénalité, et l'appeler "bonus" est déroutant.
CalculatorFeline

Réponses:

7

Gelée , 4 octets

ẋ3ṁ@

Essayez-le en ligne!

Comment ça fonctionne

ẋ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
la source
Je me suis toujours demandé ce que "moule" signifie ...
Leaky Nun
18
@KennyLau Je pense que cela signifie qu'il est temps de jeter le pain.
Alex A.
4

J , 7 octets

$~(3*#)

Prend deux arguments, le texte à répéter et le texte d'entrée de l'utilisateur.

Usage

Le texte d'entrée est formaté à l'endroit où ,se joindre et LFcorrespond au caractère de nouvelle ligne.

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

Essayez-le en ligne. (tryj.tk)

miles
la source
4

Gelée, 9 octets

⁴L×3
ẋ¢ḣ¢

Essayez-le en ligne!

⁴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
la source
2
Je suppose que tu es un peu "gelée" de la réponse de Dennis?
Dennis van Gils
Jelly is evil ..
CalculatorFeline
3

JavaScript (ES6), 40 octets

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

sest la chaîne de données et tla chaîne utilisateur. Suppose qu'il sn'est pas vide et le répète plusieurs lfois pour s'assurer que sa longueur est au moins lafin qu'il puisse renvoyer les premiers lcaractères, lsoit trois fois la longueur de t.

Neil
la source
3

Haskell, 25 octets

Le premier argument est ce qui est "tapé", le second la source à afficher

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

Ou sans point, pour (éventuellement) une meilleure lisibilité:

h a=take(3*length a).cycle
Michael Klein
la source
Quoi cycle?
CalculatorFeline
@CatsAreFluffy cycleprend une liste et la répète à l'infini. Par exemplecycle "hi" == "hihihihi..
Michael Klein
Avez-vous réfléchi $?
CalculatorFeline
@CatsAreFluffy Je ne sais pas où je l'utiliserais, à quoi pensiez-vous?
Michael Klein
3

Python 3.5, 77 65 63 octets:

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

Assez simple. Une fonction anonyme qui accepte deux arguments, le premier étant le "fichier" ( g), et le second les caractères saisis par l'utilisateur ( f). Ensuite, cela crée un générateur contenant tous les trois caractères dans g, qui sont trouvés en indexant pour chaque i, puis les i+3caractères dans g, où iest dans la plage de 0=>(length of f)*3. Enfin, il renvoie chaque objet du générateur joint en une seule grande chaîne. Vous appelez cette fonction en lui affectant une variable, puis en appelant la variable enveloppée dans une print()expression. Donc, si le nom de la fonction était q, elle serait exécutée comme print(q(<byte array here>)).

Essayez-le en ligne! (repl.it)

R. Kap
la source
2

05AB1E , 7 octets

Code:

3×g©×®£

Explication:

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.

Essayez-le en ligne! .

Adnan
la source
2

Jolf, 10 octets

]*iγl*I30γ

Essayez-le ici!

Explication

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

Rubis, 39 octets

Dans Ruby, $<lit à partir du fichier fourni dans les arguments de ligne de commande au lieu de $stdinsi un est donné. (Si vous oubliez de fournir un fichier, vous obtenez une sortie vide car il lit tout $stdindans $<.readet STDIN.read.sizesera donc 0.)

$><<($<.read*s=3*STDIN.read.size)[0,s]
Encre de valeur
la source