Votre travail consiste à simuler deux frappes de touche saisies par un utilisateur.
Contribution
Un tableau de chaînes ou une chaîne avec un délimiteur de votre choix (en dehors de la plage 32-126) contenant au moins une «touche».
Ce tableau ne contiendra que deux types de chaînes: les frappes au clavier passives (un seul caractère) et les commandes (le caractère entre parenthèses [ ]
).
- Frappes passives
- Codes de caractères ASCII
[32-126]
- Codes de caractères ASCII
- Commandes:
[B]
: backspace (supprime le dernier caractère ajouté s'il y en a un)[C]
: copier tout ce qui a déjà été écrit[D]
: efface tout ce qui a été écrit[P]
: coller ce qui a été copié
Sortie
La chaîne produite par les frappes.
Exemples
['H', 'e', 'l', 'l', 'o'] -> 'Hello'
['H', 'e', 'l', 'l', 'o', ' ', '[C]', '[P]'] -> 'Hello Hello '
['[D]', 'D', '[B]'] -> ''
['H', '[C]', 'i', '[P]', '[C]', '[P]'] -> 'HiHHiH'
['e', '[C]', '[B]', 'I', ' ', 'l', 'i', 'k', '[P]', ' ', 'b', '[P]', '[P]', 's', '!'] -> I like bees!
['N', '[P]'] -> 'N'
['#', '5', '0', 'K', '0', '0', '1', '[D]', '#', 'n', 'o', 't'] -> '#not'
['H', 'o', 'w', ' ', '[D]', 'H', 'e', 'y'] -> 'Hey'
['s', 'u', 'd', '[B]', 'p', '[C]', '[D]', 'I', ' ' , 'h', 'a', 'v', 'e', ' ', '[P]', 'p', 'e', 'r', '!'] -> 'I have supper!'
C'est du code-golf , donc le code le plus court en octets gagne!
[D]
où ce n'est pas le seul utilisé, donc le code ne sera pas simplementsplit('[D]')[1]
ou quelque chose.[D]
Réponses:
05AB1E ,
34333127 octetsUtilise le codage CP-1252 .
Essayez-le en ligne!
Explication
Les paires de fonctions évaluées dans le code ci-dessus sont:
Sauvegardé 4 octets en utilisant le
mod 5
truc de Lynn's CJam answerla source
Vim,
76, 64, 62, 58 frappesMerci à Loovjo pour avoir économisé 7 frappes de touche
Est-ce que quelqu'un a dit simuler des frappes? Eh bien, c’est une bonne chose que ma langue préférée pour jouer au golf consiste à simuler les frappes au clavier!
L'entrée se présente sous ce format:
C'est une réponse assez simple. Cela traduit simplement chaque "commande" en l'équivalent de frappe de vim de cette commande. Prenons-le ligne par ligne.
Cela économise une tonne d'octets. Vim a une "ligne de commande" intégrée dans laquelle vous pouvez créer des mappages, modifier les paramètres, enregistrer des fichiers, etc. Nous créons ici un mappage.
:no
est l'abréviation de:nnoremap
ce qui signifie "Lorsque nous sommes en mode normal, remplace ce côté gauche par ce côté droit". Comme nous appelons:%s/
cinq fois , cela économise beaucoup. Le\M
est un bon tour. Cela signifie que la recherche suivante sera "Very No Magic", ce qui signifie que l'expression régulière[B]
correspondra au texte littéral[B]
plutôt qu'à une plage contenant uniquement un B dans celui-ci. Étant donné que la majorité des commandes de remplacement comportent des crochets, nous complétons le premier.Ensuite, nous appelons cinq commandes de substitution. Il faut savoir pourquoi j'ai appelé
<C-v>
tant de fois. Des personnages comme<esc>
,<C-v>
,<C-r>
, etc. sont des caractères non imprimables, et doivent être tapés dans la ligne de commande avec<C-v>
.[B]: retour arrière. Celui-ci est assez simple. Il suffit de substituer chacun
[B]
avecCtrl-h
, ce qui équivaut à un retour arrière dans vim.[C]: copie tout ce qui a déjà été écrit. Ceci est traduit en
<esc>0y$A
. Ça signifie:Nous pourrions presque simplement faire
Y
à la place de0y$
ce qui signifie "tirer la ligne entière", mais cela saisit également une nouvelle ligne que nous ne voulons pas.[D]: efface tout ce qui a été écrit. C'est
<esc>"_S
. Comme précédemment,<esc>
quitte le mode insertion pour pouvoir exécuter des commandes. Certaines choses sont plus pratiques ici. Donc nous faisons[P]: coller ce qui a été copié. Celui-ci est également très simple. C'est juste
<C-r>"
ce qui veut direInsert the contents of register '"'
."
se trouve être le registre principal que «y» tire.Maintenant que nous avons traduit toutes les commandes, nous devons joindre toutes les lignes en supprimant tous les caractères de nouvelle ligne. Grâce à notre cartographie, c'est juste
Le
<bs>
est un backspace, (ASCII 0x08) et nous en avons besoin à cause du fichier[
rempli.À ce jour, nous avons traduit l'entrée en code vim et nous devons juste l'exécuter. Alors on:
la source
<C-r>
documenté?:h mode_keystroke
. Dans ce cas, ce serait:h i_ctrl-r
/g
drapeau. Je vais ajouter ces détails dans.0ii<esc>D@"
-on?CJam , 33 octets
Essayez-le en ligne!
Explication
Les
1>3b
cartes «fonction de hachage»[B]
à 291 (= 1 mod 5),[D]
à 297 (= 2 mod 5),[P]
à 333 (= 3 mod 5),[C]
à 294 (= 4 mod 5).Cette valeur (mod 5) est utilisée comme index dans une liste d'extraits de code CJam:
h
, pour les chaînes à caractère unique , l'extrait"h"
est renvoyé, ce qui pousse une chaîne à caractère unique vers la pile.[B]
, l'extrait;
est renvoyé, ce qui fait apparaître un élément.[D]
, l'extrait];
est renvoyé, ce qui efface la pile.[P]
, l'extraitL~
est retourné, ce qui ajoute une variableL
à la pile.[C]
, l'extrait]:L~
est renvoyé, ce qui stocke la pile actuelle dans la variableL
.Ces extraits sont concaténés et exécutés; la pile finale est imprimée implicitement par CJam.
L
est initialement la liste vide, donc le tampon de copie est initialement "vide".la source
Python 2,
969593 octetsla source
or"E"
à la définition dex
pour économiser un espace?x
ne vaut pas la peine. Lex=="C"
peut simplement êtreo=="[C]"
.Gelée ,
50 5148 octetsTryItOnline
Ou tous les cas de test
Comment?
Par exemple
- avec une majuscule
'B'
comme cas de test, car avant que je corrige un bug, il serait retourné"I likeees!"
la source
['e', 'e', 'e', '[B]', '[C]', '[B]', '[D]', 'I', ' ', 'l', 'i', 'k', '[P]', '[B]', ' ', 'b', '[P]', 's', '!']
.JavaScript (ES6),
84807776 octets3 octets sauvés grâce à @Neil, 1 plus grâce à @ edc65
.map
est deux octets plus long:Extrait de test
Afficher l'extrait de code
la source
reduce
version en utilisant(s,[c,z])
..map
version aussi.x=>x.reduce((s,[c,z])=>z<'C'?s.slice(0,-1):z<'D'?t=s:z<'P'?'':s+=z?t:c,t='')
1 octet de moins. Curieusement indéfini <tout caractère est fauxx=>x.reduce((s,[c,z])=>z<'C'?s.slice(0,-1):z<'D'?t=s:z<'P'?"":z?t:s+c,t="")
enregistre un caractère supplémentaire. Si z est vrai, coller, sinon ajouter un caractère à la sortie.z?s+t:s+c
1 octet de plus ques+=z?t:c
Perl,
5350 octetsInclut +1 pour
-p
Donne une entrée sur STDIN terminée par des nouvelles lignes (la dernière nouvelle ligne peut être omise, elle compte donc comme une chaîne séparée par des nouvelles lignes):
donne
keystrokes.pl
:J'ai presque attrapé la réponse, mais le démon s'est échappé à 48 octets ...
la source
Python
120 119116 octetsIdeone
Une fonction récursive avec entrée,,
s
une liste des touches.Chaque appel récursif met à jour le texte de retour
r
et, dans le cas d'un[C]
clipboard,c
jusqu'à ce qu'ils
soit vide.Les nouvelles valeurs
r
etc
sont par indexation dans trouvent un dictionnaire,{...}
et passé avec le déballage,*
. Pour les frappes passivess[0][1:2]
, une chaîne vide sera retournée et la clé''
sera utilisée à la place.la source
lambda s,r='',c=''
lieu delambda s,r,c=''
?s
), de sorte que la fonction doit fonctionner sans autre entrée.Haskell,
136 133 130127 octetsEssayez-le sur Ideone.
Explanation:
k
effectue une récursion sur une liste de commandes.b
est la mémoire tampon dans laquelle la chaîne est construite,c
enregistre la partie copiée.Edit: Pour sauvegarder quelques octets, les commandes
[B][C][D][P]
ne sont plus exactement identiques mais comparées: moins que'C'
? ->B
et ainsi de suite. Merci à @nimi pour la sauvegarde de 3 octets.la source
init b
lève une exception sib
est la liste vide.Mathematica, 100 octets
Fonction anonyme. Prend une liste de chaînes en entrée et retourne une chaîne en sortie. Ignorer les messages générés.
la source
Java 7,
207203 octetsCela peut certainement être joué davantage,
mais c’est ma première réponse. Je vais éditer après avoir trouvé quelque chose à supprimer cesremplacé parequals
-checks ..charAt
, mais peut probablement encore être joué au golf ..Non testé et code de test:
Essayez ici.
Sortie:
la source
PHP, 131 octets
17 octets sauvegardés par l'opérateur ternaire @IsmaelMiguel
la source
<?$c=[];foreach($_GET[a]as$k=>$v)$v=="[P]"?$o=array_merge($o,$c):($v=="[C]"?$c=$o:($v=="[B]"?array_pop($o):$v=="[D]"?$o=[]:$o[]=$v));echo join($o);
. (remplacé votreif()
chaîne entière par une chaîne d'opérations trenary).PHP, 108 octets
Utilise une approche basée sur les chaînes plutôt que sur les tableaux.
Utilisez comme:
edit: sauvegardé 8 octets en modifiant l'ordre des?: s en les rendant négatifs pour éviter d'avoir à utiliser autant de crochets;
la source
$s=$argv[++$i]
au lieu denull!==$s=$argv[++$i]
si vous utilisez PHP> 7, vous pouvez écrire$s=$argv[++$i]??0
pour ignorer la notification'0'
car'0'
c'est faux. Il y a tellement d'autres avis que sauter l'un d'entre eux semble être une perte de temps.SpecBAS - 216 octets
L'entrée est donnée sous forme de chaîne avec des virgules, qui sont ensuite transformées en tableau.
la source
V , 49 octets
Essayez-le en ligne!
Puisque cela contient des caractères non imprimables, voici un hexdump:
Ceci est juste une traduction directe de ma réponse vim afin que je puisse rivaliser avec Jelly. Malheureusement, je suis toujours un octet de plus, mais je travaille toujours sur le dernier. :)
De toute façon, je suis plus fier de cette réponse, alors si vous voulez une explication très détaillée, lisez plutôt celle-là.
la source
En fait, 56 octets
Essayez-le en ligne!
Explication:
la source
Java, 181
Version plus lisible:
la source
if(s.length()>1){...}else
p==1
enp<2
MATL , 46 octets
Essayez-le en ligne! Ou vérifiez tous les cas de test .
Explication
la source
TCL, 186 octets
Joliment formaté:
Je voulais juste prouver que je pouvais le faire dans TCL
la source
foreach
parlmap
;return
parset x
. C'est ce que je peux dire en un clin d'œil.Scala, 158 octets
Ungolfed:
Résout ce problème en tant que pli avec le résultat et le presse-papiers en tant qu'accumulateur. Malheureusement, scala n'a pas d'opérateur conditionnel ternaire, mais utilise plutôt
if else
une expression.la source
PHP 7.1,
9592 octetsRemarque: nécessite PHP 7.1 pour les décalages de chaîne négatifs.
Sans décalage de chaîne négatif (101 octets):
Courez comme ça:
Explication
Tweaks
la source