M. Mackey est un personnage de South Park bien connu pour avoir ajouté "m'kay" dans tout ce qu'il dit.
Ecrivez un programme ou une fonction qui transforme une chaîne de texte en quelque chose que M. Mackey dirait.
Placement M'kay
m'kay
a une chance de hasard 50% d'être ajouté après les ponctuations,
,.
,?
et!
. Si tel est le cas, il sera suivi du même signe de ponctuation qui le précède et précédé d'un espace.Par exemple, dans la phrase
Test, test.
, il estm'kay
possible d’ajouter deux endroits : après la virgule et après le point, avec une chance de 50% à chaque endroit. Les résultats possibles seraientTest, m'kay, test
. ouTest, test. M'kay.
ouTest, m'kay, test. M'kay.
.Il doit toujours y avoir au moins un
m'kay
ajouté . De plus, il ne peut pas toujours se trouver au même endroit et chaque endroit valide oùm'kay
il est possible d’ajouter doit avoir la même probabilité. C'est-à-dire que vous ne pouvez pasm'kay
toujours ajouter à la fin de la chaîne si, par hasard, vous n'en avez jamais ajoutém'kay
. S'il n'y en a qu'unm'kay
, il doit avoir la même probabilité d'apparaître dans chaque position valide, même si sa présence est imposée.Si
m'kay
est après?
,.
ou!
, lem
doit être en majuscule.Le nombre d'
m
inm'kay
doit être choisi uniformément entre 1 et 3. C'est-à-direm'kay
,mm'kay
etmmm'kay
sont tous des choix possibles, chacun avec une probabilité de 0,33 ... S'il doit être mis en majuscule (voir la règle ci-dessus), toutm
doit être en majuscule.
Entrées, sorties
Les entrées sont des chaînes ASCII contenant des caractères de ASCII 32 décembre (espace) à ASCII 126 (tilde
~
). Il n'y a pas de sauts de ligne dans l'entrée. Vous pouvez supposer que toute entrée contiendra au moins un des éléments suivants, . ? !
.Vous pouvez supposer qu'il n'y a aucune
m'kay
ou aucune de ses variantes dans l'entrée.Les entrées peuvent provenir de STDIN, des arguments de fonction, de la ligne de commande ou de quelque chose de similaire.
La sortie peut être via STDOUT, un retour de fonction ou quelque chose de similaire.
Cas de test
- Contribution:
Test.
Sortie possible: Test. M'kay.
- Contribution:
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.
Sortie possible: 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.
- Contribution:
Drugs are bad, so, if you do drugs, you're bad, because drugs are bad. They can hurt your body, cause drugs are bad.
Sortie possible: 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.
- Contribution:
Do you understand? Really? Good!
Sortie possible: Do you understand? MM'kay? Really? Good! MMM'kay!
Notation
C'est du code-golf , donc le code le plus court en octets gagne, m'kay?
M'kay
a 50% de chance d'être ajouté après les ponctuations,.,? et! " semble être incompatible avec " Il doit toujours y avoir au moins unm'kay
ajouté ". S'il vous plaît clarifier queRéponses:
CJam,
655249 octetsEssayez-le en ligne dans l' interprète CJam .
Comment ça fonctionne
la source
APL (66)
Résultat de 10 courses:
Explication:
{
...}⍣≢
: applique la fonction à l'entrée jusqu'à ce que la valeur changeM'kay
pour chaque personnage:{
...}¨⍵
: pour chaque caractère de l'entrée:'mM'[1+⍵≠',']/⍨?3
: générer 1 à 3m
s ouM
s selon que le caractère est une virgule ou non.'''kay',⍨
: ajoute la chaîne'kay
.⍵,⍨
: ajouter le personnage' ',
: préfixe un espace.(¯1+⌈?2×⍵∊',.!?')/¨
: pour chaqueM'kay
', si le caractère correspondant est l'un des.,!?
, sélectionnez-le avec 50% de chance, sinon sélectionnez-le avec 0% de chance.⍉⍵⍪⍉⍪
: associe chaque sélection à son caractère,∊
: liste tous les éléments simples (caractères) dans l'ordre.la source
⍣≢
applique la fonction de manière répétée jusqu'à ce que l'entrée ne corresponde pas à la sortie. Ainsi, si vous en ajoutez une, la sortie est modifiée et elle s'arrête et renvoie la sortie. Si aucune n'est ajoutée, la sortie reste inchangée et elle s'exécute jusqu'à ce qu'une soit ajoutée.K5,
9990 octetsEh bien, il fallait que quelqu'un lance ça!
Sauvegardé 9 octets en utilisant une méthode moins élégante de mettre en majuscule le M.
Explication
Version de 99 octets
la source
Julia, mm'kay,
115114 octetsCela crée une fonction récursive qui accepte une chaîne et renvoie une chaîne.
Ungolfed + explication:
Je n'aime pas South Park, mais le tressaillement du golf était trop attrayant pour laisser passer cela. Merci à KRyan pour avoir simplifié une expression rationnelle en économisant 1 octet.
la source
JavaScript ES6,
7986108 octetsIl s'avère que la
M
répétition prend beaucoup d'octets.Ancienne version (ne se répète pas) (86 octets)
Ancienne version (ne se répète pas, ne nécessite pas au moins un m'kay) (79 octets) :
La plus ancienne version:
la source
Test.
entrée.("Test.")
.Pyth,
515049Sauvegardé 1 octet grâce à @Maltysen.
Essayez-le en ligne.
Explication et plus de golf à venir.
la source
C, 170 octets
Première fissure:
Ungolfed:
la source
Scala, 191 octets
la source
Mathematica, 202 octets
Des sauts de ligne ont été ajoutés pour améliorer la lisibilité. Evalue en fonction anonyme en prenant la chaîne en argument. (
est un raccourci pour\[Function]
.)Ungolfed:
h
prend un char ponctuation et rend" m'kay,"
," mm'kay,"
etc. au hasard et capitalisé de manière appropriée.f
prend une chaîne et cherche n'importe quel caractère de ponctuationx
; quand il le trouve, il règle avec une probabilité de 50% celle qui convienth[x]
et une expression comme 50%a[3, x]
. Il met également à jouri
le nombre total de ponctuations remplacées (dans les deux cas). Alorsf["X, x."]
pourrait évaluer àEnfin,
g
va traiter avec lea
.Count
comptera combiena
nous en avons mis là; si cela équivauti
au nombre total de ponctuation, alors nous n'avons pas ajouté de kay. Dans ce cas, nous aurons des expressions commea[0, _] ... a[i-1, _]
, et nous définironsa
comme il retournera un m'kay pour exactement un0..i-1
.la source
Python,
173168156Ungolfed:
la source
> <>, 150 octets
13 octets perdus, mais je me suis un peu ennuyé en essayant de le réorganiser. Aussi, la randomisation dans un Funge est difficile à jouer.
la source
Perl,
938988 octetsPeut certainement être joué au golf un peu plus!
4 octets coupés grâce à Dom Hastings
la source
C ++ 290
Ma solution
La variable d’ explication z détermine le signe de ponctuation et z = 0 indique d’utiliser «m» plutôt que «M».
Tester
la source
string::npos
=>-1
ou~0
. Choisir~0
vous permet d'utiliser-
au lieu de!=
; de sorte que conditionnel devientif(z-~0&&r)
, économisant 11 octets.JavaScript ES6, 121 octets
Se bloque si la chaîne donnée ne contient pas de ponctuation appropriée.
la source
Lua,
162160 octetsla source