Mr. Mackey ist ein South Park- Charakter, der dafür bekannt ist, dass er in allem, was er sagt, "m'kay" hinzufügt.
Schreiben Sie ein Programm oder eine Funktion, die eine Textfolge in etwas verwandelt, was Mr. Mackey sagen würde.
M'kay-Platzierung
m'kay
hat eine zufällige 50% ige Chance , nach den Interpunktionen,
.
?
!
hinzugefügt zu werden , und . Wenn dies der Fall ist, wird genau dasselbe Satzzeichen gefolgt von einem Leerzeichen.Im Satz
Test, test.
können beispielsweise zwei Stellenm'kay
hinzugefügt werden: Nach dem Komma und nach dem Punkt mit einer Wahrscheinlichkeit von 50% an jeder Stelle. Mögliche Ergebnisse wärenTest, m'kay, test
. oderTest, test. M'kay.
oderTest, m'kay, test. M'kay.
.Es muss immer mindestens eine
m'kay
hinzugefügt werden . Darüber hinaus kann es nicht immer am selben Ort sein und jeder gültige Ort, an demm'kay
hinzugefügt werden könnte, muss mit gleicher Wahrscheinlichkeit auftreten. Das heißt, Sie können nichtm'kay
immer am Ende der Zeichenfolge hinzufügen, wenn Sie aufgrund von Zufälligkeiten keine hinzugefügt habenm'kay
. Wenn es nur eine gibtm'kay
, muss sie dieselbe Wahrscheinlichkeit haben, an jeder gültigen Position zu erscheinen, auch wenn ihre Anwesenheit erzwungen wird.Wenn
m'kay
nach ist?
,.
oder!
, dasm
muss groß geschrieben werden.Die Zahl der
m
inm'kay
muss gleichmßig zwischen 1 und 3 abgeholt werden Das heißt,m'kay
,mm'kay
undmmm'kay
sind alle möglichen Optionen, die jeweils mit einer Wahrscheinlichkeit von 0,33 ... Wenn es (siehe oben Regel) groß geschrieben werden müssen, allem
müssen groß geschrieben werden.
Eingänge Ausgänge
Eingaben sind ASCII-Zeichenfolgen, die Zeichen von ASCII-Dez. 32 (Leerzeichen) bis ASCII-Dez. 126 (Tilde
~
) enthalten. Die Eingabe enthält keine Zeilenumbrüche. Sie können davon ausgehen, dass jede Eingabe mindestens eine der folgenden Angaben enthält, . ? !
.Sie können davon ausgehen, dass keine
m'kay
oder eine der Varianten in der Eingabe enthalten ist.Eingaben können über STDIN, Funktionsargumente, Befehlszeile oder ähnliches erfolgen.
Die Ausgabe kann über STDOUT, eine Funktionsrückgabe oder ähnliches erfolgen.
Testfälle
- Eingang:
Test.
Mögliche Ausgabe: Test. M'kay.
- Eingang:
Programming Puzzles & Code Golf Stack Exchange is a question and answer site for programming puzzle enthusiasts and code golfers. It's 100% free, no registration required.
Mögliche Ausgabe: Programming Puzzles & Code Golf Stack Exchange is a question and answer site for programming puzzle enthusiasts and code golfers. MMM'kay. It's 100% free, mm'kay, no registration required.
- Eingang:
Drugs are bad, so, if you do drugs, you're bad, because drugs are bad. They can hurt your body, cause drugs are bad.
Mögliche Ausgabe: Drugs are bad, m'kay, so, if you do drugs, you're bad, m'kay, because drugs are bad. They can hurt your body, m'kay, cause drugs are bad. M'kay.
- Eingang:
Do you understand? Really? Good!
Mögliche Ausgabe: Do you understand? MM'kay? Really? Good! MMM'kay!
Wertung
Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes, m'kay?
M'kay
hat eine zufällige 50% ige Chance, nach den Interpunktionen hinzugefügt zu werden ,,.,? und! " scheint nicht kompatibel zu sein mit " Es muss immer mindestens einem'kay
hinzugefügt werden ". Bitte klären Sie dasAntworten:
CJam,
655249 BytesProbieren Sie es online im CJam-Interpreter aus .
Wie es funktioniert
quelle
APL (66)
Ergebnis von 10 Läufen:
Erläuterung:
{
...}⍣≢
: Wenden Sie die Funktion auf den Eingang an, bis sich der Wert ändertM'kay
für jeden Charakter:{
...}¨⍵
: für jedes Zeichen in der Eingabe:'mM'[1+⍵≠',']/⍨?3
: 1 bis 3m
s oderM
s generieren, je nachdem, ob das Zeichen ein Komma war oder nicht.'''kay',⍨
: füge die Zeichenkette an'kay
.⍵,⍨
: Hänge das Zeichen an' ',
: ein Leerzeichen voranstellen.(¯1+⌈?2×⍵∊',.!?')/¨
: Wählen Sie für jedesM'kay
'das entsprechende Zeichen mit einer.,!?
Wahrscheinlichkeit von 50% aus, andernfalls mit einer Wahrscheinlichkeit von 0%.⍉⍵⍪⍉⍪
: Ordne jede Auswahl ihrem Charakter zu,∊
: liste alle einfachen Elemente (Zeichen) der Reihe nach auf.quelle
⍣≢
die Funktion so oft an, bis die Eingabe nicht mehr mit der Ausgabe übereinstimmt. Wenn man also hinzugefügt wird, wird die Ausgabe geändert und es stoppt und gibt den Ausgang, und wenn man nicht hinzugefügt wird, der Ausgang bleibt unverändert und es läuft wieder , bis man wird hinzugefügt.K5,
99-90BytesNun, jemand benötigt , um Kick-Start this!
Mit einer weniger ausgefallenen Methode zur Großschreibung des M 9 Bytes gespart.
Erläuterung
99-Byte-Version
quelle
Julia, mm'kay,
115114 BytesDadurch wird eine rekursive Funktion erstellt, die eine Zeichenfolge akzeptiert und eine Zeichenfolge zurückgibt.
Ungolfed + Erklärung:
Ich mag South Park nicht, aber der Nervenkitzel des Golfs war zu verlockend, um darauf zu verzichten. Vielen Dank an KRyan für die Vereinfachung eines regulären Ausdrucks und die Einsparung von 1 Byte.
quelle
JavaScript ES6,
7986108 BytesEs stellte sich heraus, dass die
M
Wiederholung viele Bytes benötigt.Alte Version (wiederholt sich nicht) (86 Bytes)
Ältere Version (wiederholt sich nicht, erfordert nicht mindestens ein m'kay) (79 Bytes) :
Älteste Version:
quelle
Test.
Eingabe.("Test.")
sie dann hinzu.Pyth,
5150491 Byte dank @Maltysen gespeichert.
Probieren Sie es online aus.
Erklärung & mehr Golf in Kürze.
quelle
C 170 Bytes
Erster Riss dabei:
Ungolfed:
quelle
Scala, 191 Bytes
quelle
Mathematica, 202 Bytes
Zeilenumbrüche zur besseren Lesbarkeit hinzugefügt. Wird zu einer anonymen Funktion ausgewertet, die die Zeichenfolge als Argument verwendet. (
Ist die Abkürzung für\[Function]
.)Ungolfed:
h
einen Satz char nimmt und macht es" m'kay,"
," mm'kay,"
etc. zufällig und in geeigneter Weise aktiviert.f
Nimmt einen String und sucht nach einem Interpunktionszeichenx
. wenn es es findet, greift es mit 50% iger Wahrscheinlichkeit das Passende anh[x]
, und zu 50% einen Ausdruck wiea[3, x]
. Es wird auchi
die Gesamtanzahl der ersetzten Interpunktionen aktualisiert (in beiden Fällen). Sof["X, x."]
könnte bewerten zuSchließlich
g
werde ich mich mit dena
's befassen .Count
wird zählen, wievielea
wir da reingesteckt haben; Wenn es gleichi
der Gesamtanzahl der Interpunktionszeichen ist, haben wir keine m'kays hinzugefügt. In diesem Fall haben wir Ausdrücke wiea[0, _] ... a[i-1, _]
, und wir definierena
, dass es ein m'kay für genau eines von zurückgibt0..i-1
.quelle
Python,
173168156Ungolfed:
quelle
> <> 150 Bytes
13 Bytes verschwendet, aber ich habe mich ein wenig gelangweilt, um es neu zu ordnen. Auch Randomisierung in einer Funge ist schwer zu Golf -.-
quelle
Perl,
938988 BytesKann definitiv noch mehr golfen werden!
4 Bytes abgeschnitten dank Dom Hastings
quelle
C ++ 290
Meine Lösung
Die Erklärungsvariable z bestimmt, welches Interpunktionszeichen und z = 0 die Verwendung von 'm' anstelle von 'M' anzeigt.
Prüfung
quelle
string::npos
=>-1
oder~0
. Wenn~0
Sie auswählen, können Sie-
anstelle von verwenden!=
. so dass bedingung wirdif(z-~0&&r)
, spart 11 bytes.JavaScript ES6, 121 Byte
Stürzt ab, wenn die angegebene Zeichenfolge keine geeignete Interpunktion enthält.
quelle
Lua,
162160 Bytesquelle