Sie haben vor kurzem ein neues Telefon bekommen, aber Sie mögen die Art und Weise, wie es vibriert, nicht ganz. Sie haben beschlossen, Ihre eigenen Vibrationsmuster zu erstellen. Sie haben also ein Programm geschrieben, in dem Sie die Schlüsselwörter verwendet long
haben short
und pause
das Ihr Telefon gemäß diesen Schlüsselwörtern vibrieren lässt.
Aufgabe
Erstellen Sie ein kleines Programm , das eine Reihe von akzeptiert long
, short
und , pause
und gibt eine andere Zeichenfolge , die den phonetischen Klang eines Telefons darstellt schwing;Rrrr - Rr
long
geräusche sind Rrrr
short
geräusche sind Rr
(gehäuse zählt)
pause
ist ein strich -
alle geräusche werden durch striche mit umgebenden räumen abgegrenzt' - '
Testfälle
Eingabe: long long short long short
Ausgabe:Rrrr - Rrrr - Rr - Rrrr - Rr
Eingabe: long long long short short short
Ausgabe:Rrrr - Rrrr - Rrrr - Rr - Rr - Rr
Eingabe: short short short pause short short short
Ausgabe:Rr - Rr - Rr - - - Rr - Rr - Rr
Eingabe: long short short long long pause short short
Ausgabe:Rrrr - Rr - Rr - Rrrr - Rrrr - - - Rr - Rr
Dies ist eine Code-Golf- Frage, daher werden die Antworten in Bytes gewertet, wobei die wenigsten Bytes gewinnen.
-
? Dies ist in Ihrem Beispiel der Fall, wird jedoch nirgends angegeben.Antworten:
Pyke ,
2220 BytesProbieren Sie es hier aus!
Der Kern dieser Antwort ist die Umwandlung von
["long", "short", "pause"]
in[4, 2, 0]
. Es wird der Codepunkt des ersten Buchstabens jedes Wortes ermittelt undAND
mit 6 bewertet. Durch glücklichen Zufall verwandelt es sich in die Werte, nach denen wir suchen. (Ich habe einige andere längere Lösungen durchgesehen, bevor ich diese gefunden habe). Sobald dies erledigt ist, können wir diese Liste von Ints weiter transformieren,["RRRR", "RR", ""]
indem wir unser int mit multiplizieren,"R"
was sich dann in ein Titelgehäuse verwandelt["RRRR", "RR", "-"]
, um es zu erhalten["Rrrr", "Rr", "-"]
. Wir schließen uns dann der resultierenden Liste an, indem wir" - "
quelle
j" - "m|*\M.&Chd6\-c
:-)\xef
und\xa6
sind.o
und.&
jeweils. Es ist eine abwärtskompatible Änderung, bei der das High-Bit wie die alten 2-Byte-Befehle ausgeführt wird, wenn es gesetzt ist. Ich schreibe es auf diese Weise, um es dem Leser zu erleichtern und weil Pyke technisch keine Codepage mehr verwendet und ich keine zufälligen Bytes einfügen möchte, die nicht funktionierenJavaScript,
7063 Bytes2 Bytes gespart dank Luke
Probieren Sie es online!
quelle
[]
s!Haskell ,
716659 BytesProbieren Sie es online!
Ach
=<<
ja , ist concatMap.Nutzt die Tatsache aus, dass
"long"
und"short"
beide den Brief habeno
.quelle
f=
punktfreie Funktionen ohne Zuordnung zulässig sind(>>=(\case 'o'->"Rr";'n'->"rr";'p'->"-";' '->" - ";_->""))
JavaScript (ES6),
6559 Bytesquelle
05AB1E ,
33272521 BytesProbieren Sie es online!
Erläuterung
Mit dem
AND 6
Trick aus der Pyke-Antwort von muddyfish 3 Bytes gespeichertquelle
Python 2 ,
766964 BytesProbieren Sie es online!
Alternativen:
Python 2 ,
7669 BytesProbieren Sie es online!
Python 2 , 69 Bytes
Probieren Sie es online!
quelle
Mathematica, 81 Bytes
Probieren Sie es online!
quelle
Retina ,
3129 Bytes1 Byte gespeichert dank Dom Hastings
1 Byte gespeichert dank Neil
Probieren Sie es online!
Dies ist ein anderer Ansatz als die Antwort von @ DomHastings .
quelle
Perl 5 , 39 Bytes
37 Byte Code + 2 für
-pa
.Probieren Sie es online!
quelle
R , 77 Bytes
Übernimmt die Eingabe über STDIN, prüft, ob die Eingabe übereinstimmt
long
,short
oderpause
und Swaps die Spiele fürRrrr
,Rr
oder aus-
sind.Dies wird dann
-
mit Leerzeichen als Trennzeichen gedruckt , die der gewünschten Ausgabe entsprechen.quelle
scan(,'') %in% c('long','short','pause')
a %in% b
prüft, ob Einträge ina
vorhanden sindb
, währendmatch(a, b)
die tatsächlichen Indizes der Übereinstimmungen zurückgegeben werden. Da wir davon ausgehen können, dass die Eingabe gültig ist,%in%
würde using nur einen Vektor vonTRUE
s zurückgeben.[
so interpretiert wird, wie[which(bool) == TRUE]
dies in Ihrem Beispiel der Fall wäre[c(1,2,3)]
, was wiederum zu der richtigen Ausgabe führt.sep=' - '
können Sies=' - '
für 2 Bytes weniger verwendenRöda ,
735747464044 BytesProbieren Sie es online!
+4 Byte aufgrund einer Regeländerung (muss
Rrrr
anstelle einer 4-Buchstaben-Variante verwendet werden).Vorheriger Code:
quelle
Mmm
undMm
ist 1 Byte kürzer.C (GCC) ,
937776 Byte-2 Bytes dank Scepheo!
-1 Byte danke an Cyoce!
Nimmt ein mit NULL abgeschlossenes ** Zeichen oder ein Äquivalent als Eingabe.
Probieren Sie es online!
Erklärungen:
quelle
a++,*a
in*++a
zwei Bytes zu speichern und nutzen die vage „Sound“ Definition zu verwenden ,*a
anstatt"Rrrr"
weitere vier Bytes zu speichern.R , 72 Bytes
Nimmt die Eingabe von stdin und druckt auf stdout.
Probieren Sie es online!
quelle
Stapel, 88 Bytes
Übernimmt die Eingabe für STDIN. Leider kostet der Schleifen-Overhead 26 Bytes, sodass dies nur ein langweiliger Ersatz ist.
quelle
@
s zu entfernenMmmm
undMm
mitRrrr
undRr
, es wäre schön, Ihre Antwort zu aktualisieren. C:Retina , 31 Bytes
-1 Byte danke an @ fergusq !
Probieren Sie es online!
quelle
PHP, 113 bytes
Try it online!
First attempt at code golf, so probably a lot of optimisations available!
quelle
Vim (52 bytes)
:s/long/Rrrr/ge|s/short/Rr/ge|s/pause/-/ge|s/ / - /g
enterCan probably be made shorter...
quelle
e
flag at the ends/[^ -]/r/
, capitalize the first R after every space, trim four-r to two-r) came out longer.Excel, 100 bytes
Per examples, Input is
SPACE
separated string, as is output.Die Frage selbst erwähnt keine
SPACE
Anforderung, was eine etwas kürzere 97-Byte- Lösung ermöglicht:quelle
AutoIt , 145 Bytes
(AutoIt ist wirklich eine schlechte Wahl für Codegolf. Ich habe mein Bestes gegeben, um es so klein wie möglich zu machen.)
quelle
Alice , 37 Bytes
Probieren Sie es online!
Explanation
Dieses Programm nimmt die folgenden Ersetzungen vor:
l
,h
→R
o
,n
,g
→r
p
→-
quelle
Sed, 50 Bytes
Nimmt Eingaben von
stdin
aufstdout
Bearbeiten - 2 Bytes gespeichert
Sed, 40 Bytes
Idee aus Nitrodons Antwort kopieren
Bearbeiten: Weitere 2 Bytes gespeichert
quelle
Python 2 , 69 Bytes
Probieren Sie es online!
Port meiner Pyke Antwort
quelle
Paradoc (v0.2.10), 21 Byte (CP-1252)
Probieren Sie es online!
Nimmt eine Zeichenfolge auf den Stapel und führt zu einer Zeichenfolge auf dem Stapel. Voranstellen
i
to turn into a full program that reads from STDIN.Verwendet
&6
wie die Pyke-Antwort und alle anderen, verbindet die Token jedoch leicht unterschiedlich, indem"-"
nach jedem Rauschen ein Token hinzugefügt , das letzte gelöscht und diese Token dann durch Leerzeichen verbunden werden. Es scheint, als würde ein Byte gespart werden, während das Beitreten durch" - "
.Erläuterung:
v0.2.11 unterstützt das Rasieren von zwei weiteren Bytes durch Ersetzen
\°
mitx
und"-"
mit'-
.quelle
SOGL V0.12 , 28 Bytes
Probieren Sie es hier aus!
fun fact: if it was allowed to delimit with
-
or-
it'd be a byte shorterquelle
Ruby, 67 bytes
This is Johan Karlsson's JavaScript solution ported to Ruby. If you like this answer, you should upvote Johan's answer.
The key idea is to compare the word strings
'short'
, etc. to a single character in order to distinguish between words.Or, in alphabetical order:
Try it online!
quelle
Ruby, 78 bytes
The only important parts of the input are
p
,o
,g
, and space... ignore the rest.short
becomeso
long
becomesog
pause
becomesp
Try it online!
quelle
V, 32 bytes
Try it online!
quelle
Python 3, 66 bytes
Try it online!
quelle