El Sr. Mackey es un personaje de South Park conocido por agregar "m'kay" en todo lo que dice.
Escriba un programa o función que transforme una cadena de texto en algo que diría el Sr. Mackey.
Colocación de M'kay
m'kay
tiene un 50% de probabilidad aleatoria de ser añadido después de que los signos de puntuación,
,.
,?
y!
. Si ese es el caso, irá seguido del mismo signo de puntuación que lo precede y precedido por un espacio.Por ejemplo, en la oración
Test, test.
, hay dos lugares dondem'kay
se pueden agregar: después de la coma y después del punto, con un 50% de probabilidad en cada lugar. Posibles resultados seríanTest, m'kay, test
. oTest, test. M'kay.
oTest, m'kay, test. M'kay.
.Siempre debe haber al menos uno
m'kay
agregado . Además, no siempre puede estar en el mismo lugar y cada lugar válido donde sem'kay
pueda agregar debe ocurrir con la misma probabilidad. Es decir, no puede agregarm'kay
siempre al final de la cadena si, debido a la aleatoriedad, nunca agregó ningunom'kay
. Si solo hay unom'kay
, debe tener la misma probabilidad de aparecer en cada posición válida, aunque su presencia se haga cumplir.Si
m'kay
es después?
,.
o!
, elm
debe uppercased.El número de
m
enm'kay
debe ser recogido de manera uniforme entre 1 y 3. Es decir,m'kay
,mm'kay
ymmm'kay
son todas las opciones posibles, cada uno con una probabilidad de 0.33 ... Si hay que uppercased (véase más arriba regla), todosm
deben ser uppercased.
Salidas, entradas
Las entradas son cadenas ASCII que contienen caracteres desde ASCII Dec 32 (Espacio) hasta ASCII Dec 126 (Tilde
~
). No hay saltos de línea en la entrada. Puede suponer que cualquier entrada contendrá al menos uno de, . ? !
.Puede suponer que no hay
m'kay
ninguna de sus variantes en la entrada.Las entradas pueden tomarse de STDIN, argumentos de función, línea de comando o cualquier cosa similar.
La salida puede ser a través de STDOUT, un retorno de función o algo similar.
Casos de prueba
- Entrada:
Test.
Salida posible: Test. M'kay.
- Entrada:
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.
Salida posible: 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.
- Entrada:
Drugs are bad, so, if you do drugs, you're bad, because drugs are bad. They can hurt your body, cause drugs are bad.
Salida posible: 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.
- Entrada:
Do you understand? Really? Good!
Salida posible: Do you understand? MM'kay? Really? Good! MMM'kay!
Puntuación
Este es el código de golf , por lo que gana el código más corto en bytes, ¿vale?
M'kay
tiene una probabilidad aleatoria del 50% de ser agregado después de los signos de puntuación".,? y! "parece ser incompatible con" Siempre debe haber al menos unom'kay
agregado ". Por favor aclare esoRespuestas:
CJam,
655249 bytesPruébelo en línea en el intérprete de CJam .
Cómo funciona
fuente
APL (66)
Resultado de 10 carreras:
Explicación:
{
...}⍣≢
: aplica la función a la entrada hasta que el valor cambieM'kay
para cada personaje:{
...}¨⍵
: para cada carácter en la entrada:'mM'[1+⍵≠',']/⍨?3
: genera de 1 a 3m
soM
s dependiendo de si el personaje era una coma o no.'''kay',⍨
: agrega la cadena'kay
.⍵,⍨
: agrega el personaje' ',
: anteponer un espacio.(¯1+⌈?2×⍵∊',.!?')/¨
: para cadaM'kay
', si su carácter correspondiente es uno de.,!?
, selecciónelo con 50% de probabilidad, de lo contrario, selecciónelo con 0% de probabilidad.⍉⍵⍪⍉⍪
: asocia cada selección con su carácter,∊
: enumera todos los elementos simples (caracteres) en orden.fuente
⍣≢
aplica la función repetidamente hasta que la entrada no coincide con la salida. Entonces, si se agrega uno, la salida se cambia y se detiene y devuelve la salida, y si no se agrega, la salida permanece sin cambios y se ejecuta nuevamente hasta que se agrega uno .K5,
9990 bytesBueno, ¡ alguien necesitaba poner esto en marcha!
Ahorró 9 bytes usando un método menos sofisticado para poner en mayúscula la M.
Explicación
Versión de 99 bytes
fuente
Julia, mm'kay,
115114 bytesEsto crea una función recursiva que acepta una cadena y devuelve una cadena.
Ungolfed + explicación:
No me gusta South Park, pero la emoción del golf era demasiado tentadora para dejarlo pasar. Gracias a KRyan por simplificar una expresión regular, ahorrando 1 byte.
fuente
JavaScript ES6,
7986108 bytesResulta que hacer que la
M
repetición tome muchos bytes.Versión anterior (no se repite) (86 bytes)
Versión anterior (no se repite, no requiere al menos un m'kay) (79 bytes) :
Versión más antigua:
fuente
Test.
entrada.("Test.")
.Pyth
515049Guardado 1 byte gracias a @Maltysen.
Pruébalo en línea.
Explicación y más golf próximamente.
fuente
C, 170 bytes
Primero descifrarlo:
Sin golf:
fuente
Scala, 191 bytes
fuente
Mathematica, 202 bytes
Saltos de línea añadidos para facilitar la lectura. Evalúa una función anónima tomando la cadena como argumento. (
es la abreviatura de\[Function]
)Sin golf:
h
toma un char puntuacion y hace que sea" m'kay,"
," mm'kay,"
, etc. azar y capitalizado apropiadamente.f
toma una cadena y busca cualquier carácter de puntuaciónx
; cuando lo encuentra, agrega con un 50% de probabilidad lo apropiadoh[x]
y un 50% de una expresión comoa[3, x]
. También se actualizai
al número total de puntuación reemplazada (con ambos casos). Entoncesf["X, x."]
podría evaluar aFinalmente,
g
se ocupará de losa
's.Count
contará cuántosa
ponemos allí; si es iguali
al número total de puntuación, entonces no agregamos ningún m'kays. En este caso, tendremos expresiones comoa[0, _] ... a[i-1, _]
, y las definiremosa
para que devuelva un m'kay para exactamente uno de0..i-1
.fuente
Python,
173168156Sin golf:
fuente
> <>, 150 bytes
13 bytes desperdiciados, pero me aburrí un poco tratando de reorganizarlo. Además, la aleatorización en un Funge es difícil de jugar golf.
fuente
Perl,
938988 bytes¡Definitivamente se puede jugar un poco más!
4 bytes cortados gracias a Dom Hastings
fuente
C ++ 290
Mi solución
La variable de explicación z determina qué signo de puntuación y z = 0 indica usar 'm' en lugar de 'M'.
Prueba
fuente
string::npos
=>-1
o~0
. Elegir~0
te permite usar en-
lugar de!=
; para que se convierta en condicionalif(z-~0&&r)
, ahorrando 11 bytes.JavaScript ES6, 121 bytes
Se bloquea si la cadena dada no contiene puntuación adecuada.
fuente
Lua,
162160 bytesfuente