Vous venez de recevoir un nouveau téléphone récemment, mais vous n'aimez pas vraiment la façon dont il vibre, vous avez décidé de créer vos propres modèles de vibration. Donc, vous avez écrit un programme où vous avez utilisé les mots - clés long
, short
et pause
de faire vibrer votre téléphone en fonction de ces mots - clés.
Tâche
Créer un petit programme qui accepte une chaîne de long
, short
et pause
et émet une autre chaîne représentant le son phonétique d'un téléphone vibrant;Rrrr - Rr
long
les sons sont les Rrrr
short
sons Rr
(le boîtier compte)
pause
est un tiret -
tous les sons sont délimités par un tiret avec les espaces environnants' - '
Cas de test
entrée: long long short long short
sortie:Rrrr - Rrrr - Rr - Rrrr - Rr
entrée: long long long short short short
sortie:Rrrr - Rrrr - Rrrr - Rr - Rr - Rr
entrée: short short short pause short short short
sortie:Rr - Rr - Rr - - - Rr - Rr - Rr
entrée: long short short long long pause short short
sortie:Rrrr - Rr - Rr - Rrrr - Rrrr - - - Rr - Rr
Il s'agit d'une question de code-golf donc les réponses seront notées en octets, avec le moins d'octets gagnants.
-
? C'est le cas dans votre exemple, mais n'est spécifié nulle part.Réponses:
Pyke ,
2220 octetsEssayez-le ici!
Le nœud de cette réponse est la transformation de
["long", "short", "pause"]
en[4, 2, 0]
. Il obtient le point de code de la première lettre de chaque mot et leAND
s avec 6. Par hasard, il se transforme en valeurs que nous recherchons. (J'ai cherché parmi pas mal d'autres solutions plus longues avant de trouver celle-ci). Une fois cela fait, nous pouvons transformer davantage cette liste d'entiers en["RRRR", "RR", ""]
multipliant notre entier par"R"
lequel se transforme ensuite en["RRRR", "RR", "-"]
et enfin le titre en le mettant pour obtenir["Rrrr", "Rr", "-"]
. Nous rejoignons ensuite la liste résultante par" - "
la source
j" - "m|*\M.&Chd6\-c
:-)\xef
et\xa6
are.o
et.&
respectivement. C'est un changement rétrocompatible où si le bit haut est défini, il l'exécute comme les anciennes commandes de 2 octets. Je l'écris de cette façon pour le rendre plus facile pour le lecteur et parce que Pyke n'utilise plus techniquement une page de code et je ne veux pas avoir à insérer des octets aléatoires qui ne fonctionnent pasJavaScript,
7063 octets2 octets économisés grâce à Luke
Essayez-le en ligne!
la source
[]
s extérieurs !Haskell ,
716659 octetsEssayez-le en ligne!
Ah
=<<
oui , c'est concatMap.Profite du fait que
"long"
et les"short"
deux ont la lettreo
.la source
f=
les fonctions sans point soient autorisées sans affectation(>>=(\case 'o'->"Rr";'n'->"rr";'p'->"-";' '->" - ";_->""))
JavaScript (ES6),
6559 octetsla source
05AB1E ,
33272521 octetsEssayez-le en ligne!
Explication
Enregistré 3 octets en utilisant l'
AND 6
astuce de la réponse pyke de muddyfishla source
Python 2 ,
766964 octetsEssayez-le en ligne!
Suppléants:
Python 2 ,
7669 octetsEssayez-le en ligne!
Python 2 , 69 octets
Essayez-le en ligne!
la source
Mathematica, 81 octets
Essayez-le en ligne!
la source
Rétine ,
3129 octets1 octet enregistré grâce à Dom Hastings
1 octet enregistré grâce à Neil
Essayez-le en ligne!
Il s'agit d'une approche différente de la réponse de @ DomHastings .
la source
Perl 5 , 39 octets
Code de 37 octets + 2 pour
-pa
.Essayez-le en ligne!
la source
R , 77 octets
Prend l'entrée via STDIN, vérifie si l'entrée correspond
long
,short
oupause
et échange les correspondances pourRrrr
,Rr
ou-
respectivement.Il est ensuite imprimé avec
-
des espaces remplis comme séparateur, correspondant à la sortie souhaitée.la source
scan(,'') %in% c('long','short','pause')
a %in% b
vérifie si les entrées dans lea
sont présentes dansb
, tandis quematch(a, b)
renvoie les indices réels des correspondances. Puisque nous pouvons supposer que l'entrée est valide, l'utilisation%in%
retournerait simplement un vecteur deTRUE
s.[
, il est interprété comme[which(bool) == TRUE]
ce qui, dans votre exemple, serait[c(1,2,3)]
, ce qui à son tour donne la sortie correcte.sep=' - '
vous pouvez utilisers=' - '
pour 2 octets de moinsRöda ,
735747464044 octetsEssayez-le en ligne!
+4 octets en raison du changement de règle (doit utiliser à la
Rrrr
place de toute variante à 4 lettres).Code précédent:
la source
Mmm
etMm
est 1 octet plus court.C (gcc) ,
937776 octets-2 octets grâce à Scepheo!
-1 octet grâce à Cyoce!
Prend un caractère ** terminé par NULL ou équivalent comme entrée.
Essayez-le en ligne!
Explications:
la source
a++,*a
en*++a
pour économiser deux octets, et profiter de la définition vague de "son" à utiliser*a
au lieu d'"Rrrr"
enregistrer quatre autres octets.R , 72 octets
Prend l'entrée de stdin, imprime sur stdout.
Essayez-le en ligne!
la source
Lot, 88 octets
Prend entrée sur STDIN. Malheureusement, la surcharge de la boucle coûte 26 octets, ce n'est donc que des remplacements ennuyeux.
la source
@
sMmmm
etMm
avec,Rrrr
etRr
ce serait bien de mettre à jour votre réponse c:Rétine , 31 octets
-1 octet grâce à @ fergusq !
Essayez-le en ligne!
la source
PHP, 113 octets
Essayez-le en ligne!
Première tentative de code golf, donc probablement beaucoup d'optimisations disponibles!
la source
Vim (52 octets)
:s/long/Rrrr/ge|s/short/Rr/ge|s/pause/-/ge|s/ / - /g
entrerPeut probablement être raccourci ...
la source
e
drapeau à la fins/[^ -]/r/
, capitaliser le premier R après chaque espace, couper quatre-r à deux-r) est sorti plus longtemps.Excel, 100 octets
Par exemple, l'entrée est
SPACE
une chaîne séparée, tout comme la sortie.La question elle-même ne mentionne pas d'
SPACE
exigence, permettant une solution légèrement plus courte de 97 octets :la source
AutoIt , 145 octets
(AutoIt est vraiment un mauvais choix pour le golf de code, j'ai fait de mon mieux pour le rendre aussi petit que possible)
la source
Alice , 37 octets
Essayez-le en ligne!
Explication
Ce programme effectue les substitutions suivantes:
l
,h
→R
o
,n
,g
→r
p
→-
la source
Sed, 50 octets
Prend des entrées de
stdin
, imprime versstdout
Modifier - enregistré 2 octets
Sed, 40 octets
Copie de l'idée de la réponse de Nitrodon
Modifier: enregistré encore 2 octets
la source
Python 2 , 69 octets
Essayez-le en ligne!
Port de ma réponse Pyke
la source
Paradoc (v0.2.10), 21 octets (CP-1252)
Essayez-le en ligne!
Prend une chaîne sur la pile et entraîne une chaîne sur la pile. Préparez-vous
i
à devenir un programme complet qui lit à partir de STDIN.Utilise
&6
comme la réponse de Pyke et tout le monde, mais joint les jetons ensemble légèrement différemment, en ajoutant un"-"
jeton après chaque bruit, en supprimant le dernier, puis en joignant ces jetons par des espaces. Semble enregistrer un octet au lieu de rejoindre par" - "
.Explication:
v0.2.11 prendra en charge le rasage de deux octets supplémentaires en remplaçant
\°
parx
et"-"
par'-
.la source
SOGL V0.12 , 28 octets
Essayez-le ici!
fait amusant: s'il était autorisé à délimiter avec
-
ou-
ce serait un octet plus courtla source
Rubis , 67 octets
Il s'agit de la solution JavaScript de Johan Karlsson portée sur Ruby.Si vous aimez cette réponse, vous devriez voter pour la réponse de Johan.
L'idée clé est de comparer les chaînes de mots
'short'
, etc. à un seul caractère afin de distinguer les mots.Ou, par ordre alphabétique:
Essayez-le en ligne!
la source
Rubis , 78 octets
Les parties importantes que de l'entrée sont
p
,o
,g
et l' espace ... ignorer le reste.short
deviento
long
devientog
pause
devientp
Essayez-le en ligne!
la source
V , 32 octets
Essayez-le en ligne!
la source
Python 3, 66 bytes
Try it online!
la source