Geben Sie bei einer gegebenen Zeichenfolge das "Glück" dieser Zeichenfolge zurück.
Das Glück einer Saite ist eine ganze Zahl, die sich wie folgt zusammensetzt:
- Das Grundglück für eine Saite ist 1.
- Für jeden aufeinanderfolgenden Buchstaben es Aktien mit dem Wort „Glück“ (Groß- und Kleinschreibung), multiplizieren Sie das Glück von 2. Zum Beispiel, wenn die Zeichenfolge ist „ lu mberjack“ oder „sma ck “ Du würdest multiplizieren 4. (Genauer gesagt, 2 ^ Anzahl aufeinanderfolgender Zeichen.)
- Die geteilten Buchstaben müssen in der gleichen Reihenfolge sein, in der sie als "Glück" angezeigt werden, können jedoch an einer beliebigen Stelle im Wort mit demselben Wert beginnen ("luc" hat den gleichen 8 * -Multiplikator wie "cky").
- Wenn das Wort mehrfach vorkommt und aufeinanderfolgende Zeichen mit glücklichen teilt, verwenden Sie die längste aufeinanderfolgende Zeichenfolge.
- Für JEDEN Brief, den es mit dem Wort "Omen" teilt, subtrahiere 2 vom Glück.
- Es kann beliebig oft in beliebiger Reihenfolge mit einem Zeichen übereinstimmen. Zum Beispiel verliert die Zeichenfolge "nnnnnomemenn" 24 Glück (12 übereinstimmende Buchstaben)
Beispiel:
luck("lucky")
>>32
2 ^ 5 (5 aufeinanderfolgende Buchstaben) = 32
luck("firetruck")
>>6
2 ^ 3 - 2 (3 aufeinanderfolgende Briefe von uck , e geteilt mit omen)
luck("memes")
>>-7
1 - 8 (Grundbetrag, 4 geteilt mit "Omen")
Dies ist Codegolf, daher gewinnt die Antwort mit den wenigsten Bytes.
Sie können nach Belieben eingeben und ausgeben - schreiben Sie eine Funktion, verwenden Sie die Standardeingabe usw.
Nehmen Sie für Funktionen an, welcher Datentyp für diese Sprache Sinn macht. (In JavaScript wird beispielsweise a übergeben String
und a zurückgegeben. Number
)
Bearbeiten: Sie können davon ausgehen, dass die Eingabe in Kleinbuchstaben erfolgt.
int8_t str_luck(const char* str);
oder sollte es seinuint64_t str_luck(const char* str);
?Antworten:
05AB1E ,
36322826 BytesErläuterung
Probieren Sie es online aus
2 Bytes gespart dank Adnan
quelle
'
, also für 26:Œv'¸éyåiyˆ}}¯é¤go¹'ƒÖ¦Ãg·-
:).JavaScript (ES7),
123112107 ByteBearbeiten: 11 Bytes dank @Titus gespeichert, indem angenommen wird, dass der Buchstabe
L
nicht in der Eingabe erscheint. 5 Bytes gespart dank @Oriol. ES6-Version für125114109 Bytes:quelle
replace([^])
stattmatch([])
? Verschwenden Sie 3 Bytes oder gibt es einen Grund?null
Übereinstimmungsergebnis umzugehen ?()
in diesem Fall; Iss alle sechs auf, mit denen du sparen würdestmatch(/[omen]/)
. Das Mitleid.L
am Ende des Substrs (das niemals in der ursprünglichen Zeichenfolge erscheint) muss ich mir keine Sorgen um irrelevante Übereinstimmungen machen und kann tatsächlich[5,4,3,2,1,0]
beide Male dasselbe Array verwenden. Satte 13 Bytes sparen!-2*s.split(/[omen]/).length+2
ist kürzer.Pyth,
272628 Bytes1 Byte gespart dank OP :-)
Erläuterung:
Teste es hier .
quelle
"omen"
zu Just wechseln ,"omen
und Pyth wird es verstehenRuby,
9187 BytesString#count
's finnicky Nutzung schlägt wieder zu! (Wenn eine Zeichenfolge übergeben wird, werden alle Vorkommen jedes Buchstabens im Funktionsargument anstelle aller Vorkommen der gesamten Zeichenfolge gezählt.)Probieren Sie es online aus
Eine Version, die Zeilen aus STDIN aufnimmt und ausgibt: 89 Byte (86 +3 vom
-n
Flag)quelle
String#count
ist komisch. +1 für (ab) Verwendung. Ist es auch kürzergets
als eine Funktion zu verwenden?gets
ich auchputs
zur ausgabe habe, also in diesem fall nicht.Ruby: 100 Bytes
quelle
/[omen]/
als Regex, es zu spielen - es passt zu jedem Charakter und ist im praktischen Gebrauch besser als das Verketten von|
s für einzelne Charaktere.Javascript - 206 Bytes
quelle
s[k]=='o'||s[k]=='m'||s[k]=='e'||s[k]=='n'
sehen Sie aus:"oman".split("").includes(s[k])
(s[k]=='o'||s[k]=='m'||s[k]=='e'||s[k]=='n')
you could use('omen'.indexOf(s[k])+1)
(assuming this is JavaScript)function luck(r)
aufr=>
eine anonyme Funktion zurückgreifen, das ist alles, was für diese Herausforderung erforderlich ist. Ich habe auch eine Bearbeitung auf der Herausforderung , so dass Sie nicht zu befürchten Fall, so dass Sie die entfernenr=r.toLowerCase();
substring
Ihnen kannslice
ich glauben, verwenden (testen Sie dies jedoch, da ich nicht sicher bin)Ruby, 57 Bytes
gets
setzt$.
als Nebeneffekt 1, dann erhöhen wir es, bis der reguläre Ausdruck, der$.
aufeinanderfolgenden Glückszeichen entspricht, nicht mehr übereinstimmt.quelle
Haskell, 99
Ein anderer Ansatz ... Ich habe gerade etwas über Function Aliasing gelernt
Verwendung
quelle
Mathematica, 86 Bytes
Code:
Erläuterung:
LongestCommonSubsequence
gibt die längste zusammenhängende Teilzeichenfolge zurück, die der Eingabe und gemeinsam ist"lucky"
.StringLength
gibt seine Länge.StringCount
zählt die Anzahl der Vorkommen der Zeichen"omen"
in der Eingabe.quelle
Python (139 Bytes)
quelle
from intertools import*
TSQL, 233 Bytes
Golf gespielt:
Ungolfed:
Probieren Sie es online aus
quelle
Haskell (
134132 Bytes)Weder ein Codegolfer noch ein Haskell-Programmierer, also würde ich gerne ein paar Tipps dazu geben.
(Beispiel:
g "firetruck"
)quelle
Python 3,
168157152139144136 BytesEDIT: Wirklich offensichtliche Dinge, die ich hätte leichter sehen sollen, wurden geändert und einige sind etwas weniger offensichtlich.
Edit 2: doof (˚n˚). Das Programm warf Fehler. Ich habe es repariert. nicht wirklich 153 :(
Vielen Dank an Leaky Nun für das Speichern von 5 Bytes und an jmilloy für das Speichern von
138 Bytes.Das Programm durchläuft alle möglichen Teilzeichenfolgen in der Eingabe (möglicherweise, weil es auch unmögliche Teilzeichenfolgen berechnet, z. B. 8 bis 7), prüft, ob die Teilzeichenfolge "glücklich" ist, und setzt dann den Exponenten von 2 auf die Länge von Die Teilzeichenfolge sollte größer als der aktuelle Wert sein. Könnte evtl. mit nur einer while-Schleife verbessert werden. Könnte möglicherweise eine Verbesserung gebrauchen; Ich bekomme immer noch den Dreh raus.
quelle
while p+1
wirdwhile-~p
b=s[p:q]
,len(b)
must beq-p
right?print(2**m-2*sum(i in"omen" for i in s))
for your last three lines you'll do better, like 148?while-~q:n=q-p;m=n if(s[p:q]in"lucky")*n>m else m;q-=1
for 143?sum(map(s.count,"omen"))
saves one byte, making it 135PHP-Programm,
139135108BytesQuantensprung schlägt bei mehreren Teilzeichenfolgen fehl, bei denen das erste Auftreten kürzer ist. :(
Eigentlich könnte ich weitere 7 Bytes in PHP <5.4 mit register_globals speichern
Verwendung:
php -d error_reporting=0 <filename> <string>
+5 für eine Funktion:
Tests (auf die Funktion)
quelle
C # (Visual C # Interactive Compiler) mit Flag
/u:System.Text.RegularExpressions.Regex
, 99 ByteProbieren Sie es online!
quelle
Scala, 155 Bytes
quelle