Mackey é um personagem de South Park conhecido por adicionar "m'kay" em tudo o que diz.
Escreva um programa ou função que transforme uma sequência de texto em algo que o Sr. Mackey diria.
Colocação M'kay
m'kay
tem uma possibilidade aleatória de 50% de ser adicionado após as pontuações,
,.
,?
e!
. Se for esse o caso, será seguido exatamente pelo mesmo sinal de pontuação que o antecede e é precedido por um espaço.Por exemplo, na sentença
Test, test.
, há dois locais quem'kay
podem ser adicionados: após a vírgula e após o período, com 50% de chance em cada local. Possíveis resultados seriamTest, m'kay, test
. ouTest, test. M'kay.
ouTest, m'kay, test. M'kay.
.Sempre deve haver pelo menos um
m'kay
adicionado . Além disso, nem sempre pode estar no mesmo local e cada local válido ondem'kay
pode ser adicionado deve ocorrer com igual probabilidade. Ou seja, você não pode adicionarm'kay
sempre no final da string se, por causa da aleatoriedade, você nunca adicionou nenhumam'kay
. Se houver apenas umm'kay
, ele deve ter a mesma probabilidade de aparecer em cada posição válida, mesmo que sua presença seja imposta.Se
m'kay
é depois?
,.
ou!
, om
deve ser uppercased.O número de
m
nosm'kay
deve ser maneira uniforme escolhido entre 1 e 3. Ou seja,m'kay
,mm'kay
emmm'kay
são todas as escolhas possíveis, cada um com probabilidade 0,33 ... Se ele deve ser uppercased (veja acima regra), todosm
devem ser uppercased.
Entradas saídas
As entradas são sequências ASCII que contêm caracteres de ASCII Dec 32 (Space) a ASCII Dec 126 (Tilde
~
). Não há quebras de linha na entrada. Você pode assumir que qualquer entrada conterá pelo menos uma das, . ? !
.Você pode assumir que não há nenhuma
m'kay
ou nenhuma de suas variantes na entrada.As entradas podem ser obtidas de STDIN, argumentos de função, linha de comando ou qualquer coisa semelhante.
A saída pode ser via STDOUT, um retorno de função ou algo semelhante.
Casos de teste
- Entrada:
Test.
Saída possível: 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.
Saída possível: 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.
Saída possível: 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!
Saída possível: Do you understand? MM'kay? Really? Good! MMM'kay!
Pontuação
Isso é código-golfe , então o código mais curto em bytes vence, certo?
M'kay
tem 50% de chance aleatória de ser adicionado após as pontuações ,,.,? e! " parece ser incompatível com " Sempre deve haver pelo menos umm'kay
adicionado ". Por favor, esclareça queRespostas:
CJam,
655249 bytesExperimente online no intérprete CJam .
Como funciona
fonte
APL (66)
Resultado de 10 execuções:
Explicação:
{
...}⍣≢
: aplica a função à entrada até o valor mudarM'kay
para cada caractere:{
...}¨⍵
: para cada caractere na entrada:'mM'[1+⍵≠',']/⍨?3
: gere 1 a 3m
s ouM
s, dependendo de o caractere ser uma vírgula ou não.'''kay',⍨
: acrescenta a string'kay
.⍵,⍨
: acrescenta o caractere' ',
: acrescente um espaço.(¯1+⌈?2×⍵∊',.!?')/¨
: para cadaM'kay
', se o caractere correspondente for um deles.,!?
, selecione-o com 50% de chance; caso contrário, selecione-o com 0% de chance.⍉⍵⍪⍉⍪
: combine cada seleção com seu caractere,∊
: lista todos os elementos simples (caracteres) em ordem.fonte
⍣≢
aplica a função repetidamente até que a entrada não corresponda à saída. Portanto, se um é adicionado, a saída é alterada e para e retorna a saída; se não for adicionado, a saída permanece inalterada e é executada novamente até que seja adicionado.K5,
9990 bytesBem, alguém precisava dar um pontapé inicial nisso!
Economizou 9 bytes usando um método menos sofisticado de colocar maiúsculas no M.
Explicação
Versão de 99 bytes
fonte
Julia, mm'kay,
115114 bytesIsso cria uma função recursiva que aceita uma string e retorna uma string.
Ungolfed + explicação:
Não gosto de South Park, mas a emoção do golfe era muito atraente para deixar passar. Obrigado ao KRyan por simplificar uma regex, economizando 1 byte.
fonte
JavaScript ES6,
7986108 bytesAcontece que fazer a
M
repetição leva muitos bytes.Versão antiga (não se repete) (86 bytes)
Versão mais antiga (não se repete, não requer pelo menos um minuto) (79 bytes) :
Versão mais antiga:
fonte
Test.
entrada.("Test.")
.Pyth,
5150.49.Guardou 1 byte graças a @Maltysen.
Experimente online.
Explicação e mais golfe em breve.
fonte
C, 170 bytes
Primeira rachadura:
Ungolfed:
fonte
Scala, 191 bytes
fonte
Mathematica, 202 bytes
Quebras de linha adicionadas para facilitar a leitura. Avalia como uma função anônima, levando a string como argumento. (
é uma abreviação de\[Function]
.)Ungolfed:
h
leva um char pontuação e torna" m'kay,"
," mm'kay,"
etc. aleatoriamente e capitalizado apropriadamente.f
pega uma string e procura qualquer caractere de pontuaçãox
; quando o encontra, adota com 50% de probabilidade o apropriadoh[x]
e 50% com uma expressão comoa[3, x]
. Ele também é atualizadoi
para o número total de pontuação substituída (nos dois casos). Então,f["X, x."]
pode avaliar paraFinalmente,
g
vai lidar com osa
's.Count
contará quantosa
nós colocamos lá; se for iguali
ao número total de pontuação, não adicionamos m'kays. Nesse caso, teremos expressões comoa[0, _] ... a[i-1, _]
e definimosa
para que retorne um m'kay para exatamente um de0..i-1
.fonte
Python,
173168156Ungolfed:
fonte
> <>, 150 bytes
13 bytes desperdiçados, mas fiquei um pouco entediado tentando reorganizá-lo. Além disso, a randomização em um Funge é difícil de jogar -.-
fonte
Perl,
938988 bytesDefinitivamente pode ser jogado um pouco mais!
4 bytes cortados graças a Dom Hastings
fonte
C ++ 290
Minha solução
A variável de explicação z determina qual sinal de pontuação e z = 0 indica o uso de 'm' em vez de 'M'.
Teste
fonte
string::npos
=>-1
ou~0
. Escolher~0
permite usar em-
vez de!=
; para que se torne condicionalif(z-~0&&r)
, economizando 11 bytes.JavaScript ES6, 121 bytes
Falha se a sequência especificada não contiver pontuação adequada.
fonte
Lua,
162160 bytesfonte