Pan Mackey jest postacią z South Park znaną z dodawania „m'kay” we wszystkim, co mówi.
Napisz program lub funkcję, która przekształci ciąg tekstu w coś, co powiedziałby pan Mackey.
Dobra lokalizacja
m'kay
ma losowy 50% szans na dodawanych po interpunkcyjne,
,.
,?
i!
. W takim przypadku po nim będzie dokładnie ten sam znak interpunkcyjny, który go poprzedza, a po nim spacja.Na przykład w zdaniu można dodać
Test, test.
dwa miejscam'kay
: po przecinku i po okresie, z 50% szansą na każde miejsce. Możliwe byłyby takie wynikiTest, m'kay, test
. lubTest, test. M'kay.
lubTest, m'kay, test. M'kay.
.Zawsze musi być co najmniej jeden
m'kay
dodany . Co więcej, nie zawsze może znajdować się w tym samym miejscu i każde prawidłowe miejsce, w którymm'kay
można je dodać, musi wystąpić z jednakowym prawdopodobieństwem. Oznacza to, że nie możesz dodawaćm'kay
zawsze na końcu łańcucha, jeśli z powodu losowości nigdy go nie dodałeśm'kay
. Jeśli jest tylko jedenm'kay
, musi mieć takie samo prawdopodobieństwo pojawienia się na każdej ważnej pozycji, nawet jeśli jego obecność jest wymuszona.Jeśli
m'kay
jest po?
,.
lub!
,m
muszą być pisane wielkimi literami.Liczba
m
INm'kay
musi być uniformely podniósł między 1 i 3. Oznacza to, żem'kay
,mm'kay
immm'kay
są wszystkie możliwe opcje, każdy z prawdopodobieństwem 0,33 ... Jeśli musi być duże litery (patrz wyżej reguły), wszystkom
musi być duże litery.
Wejścia wyjścia
Dane wejściowe to ciągi znaków ASCII zawierające znaki od ASCII Dec 32 (Spacja) do ASCII Dec 126 (tylda
~
). Na wejściu nie ma podziałów wierszy. Możesz założyć, że każde wejście będzie zawierało co najmniej jeden z nich, . ? !
.Możesz założyć, że
m'kay
na wejściu nie ma żadnego z jego wariantów.Dane wejściowe mogą być pobierane z STDIN, argumentów funkcji, wiersza poleceń lub czegoś podobnego.
Dane wyjściowe mogą być przesyłane za pośrednictwem STDOUT, funkcji return lub czegoś podobnego.
Przypadki testowe
- Wejście:
Test.
Możliwe wyjście: Test. M'kay.
- Wejście:
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.
Możliwe wyjście: 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.
- Wejście:
Drugs are bad, so, if you do drugs, you're bad, because drugs are bad. They can hurt your body, cause drugs are bad.
Możliwe wyjście: 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.
- Wejście:
Do you understand? Really? Good!
Możliwe wyjście: Do you understand? MM'kay? Really? Good! MMM'kay!
Punktacja
To jest code-golf , więc wygrywa najkrótszy kod w bajtach, prawda?
M'kay
ma losowe 50% szansy na dodanie po interpunkcji ,,.,? i! ” wydaje się być niezgodne z „ Zawsze musi być co najmniej jedenm'kay
dodany ”. Wyjaśnij, żeOdpowiedzi:
CJam,
655249 bajtówWypróbuj online w interpretatorze CJam .
Jak to działa
źródło
APL (66)
Wynik 10 przebiegów:
Wyjaśnienie:
{
...}⍣≢
: zastosuj funkcję do wejścia, dopóki wartość się nie zmieniM'kay
dla każdej postaci:{
...}¨⍵
: dla każdego znaku na wejściu:'mM'[1+⍵≠',']/⍨?3
: generuj 1 do 3m
s lubM
s w zależności od tego, czy znak był przecinkiem, czy nie.'''kay',⍨
: dołącz ciąg'kay
.⍵,⍨
: dodaj znak' ',
: wstaw spację.(¯1+⌈?2×⍵∊',.!?')/¨
: dla każdegoM'kay
”, jeśli odpowiadająca mu postać jest jedną z nich.,!?
, wybierz ją z 50% szansą, w przeciwnym razie wybierz ją z szansą 0%.⍉⍵⍪⍉⍪
: dopasuj każdy wybór do jego charakteru,∊
: wymień wszystkie proste elementy (znaki) w kolejności.źródło
⍣≢
stosuje tę funkcję wielokrotnie, aż dane wejściowe nie będą pasować do danych wyjściowych. Więc jeśli jeden zostanie dodany, wyjście zostanie zmienione i zatrzyma się i zwróci wyjście, a jeśli nie zostanie dodane, wyjście pozostanie niezmienione i będzie działać ponownie, dopóki nie zostanie dodane.K5,
9990 bajtówCóż, ktoś musiał to rozpocząć!
Zaoszczędzono 9 bajtów, stosując mniej fantazyjną metodę przewijania M.
Wyjaśnienie
Wersja 99-bajtowa
źródło
Julia, mm'kay,
115114 bajtówTworzy to funkcję rekurencyjną, która akceptuje ciąg i zwraca ciąg.
Niegolfowane + wyjaśnienie:
Nie lubię South Park, ale emocje związane z golfem były zbyt kuszące, aby to pominąć. Dziękujemy KRyanowi za uproszczenie wyrażenia regularnego, oszczędzając 1 bajt.
źródło
JavaScript ES6,
7986108 bajtówOkazuje się, że
M
powtórzenie zajmuje dużo bajtów.Stara wersja (nie powtarza się) (86 bajtów)
Starsza wersja (nie powtarza się, nie wymaga co najmniej jednego m'kay) (79 bajtów) :
Najstarsza wersja:
źródło
Test.
wejściu.("Test.")
.Pyth
515049Zaoszczędzono 1 bajt dzięki @Maltysen.
Wypróbuj online.
Wyjaśnienie i więcej golfa już wkrótce.
źródło
C, 170 bajtów
Pierwsze pęknięcie:
Nie golfowany:
źródło
Scala, 191 bajtów
źródło
Mathematica, 202 bajty
Dodano podział linii dla czytelności. Ocenia anonimową funkcję, biorąc ciąg za argument. (
jest skrótem od\[Function]
.)Nie golfowany:
h
trwa char interpunkcyjny i czyni je" m'kay,"
," mm'kay,"
itp losowo i odpowiednio skapitalizowane.f
pobiera ciąg znaków i szuka znaków interpunkcyjnychx
; gdy go znajdzie, atakuje z 50% prawdopodobieństwemh[x]
, a 50% z wyrażeniem podobnym doa[3, x]
. Aktualizuje takżei
całkowitą liczbę zastąpionych znaków interpunkcyjnych (w obu przypadkach). Więcf["X, x."]
może ocenićWreszcie
g
poradzę sobie za
.Count
policzy, ilea
ich tam umieścimy; jeśli jest równyi
całkowitej liczbie znaków interpunkcyjnych, to nie dodaliśmy żadnych m'kays. W tym przypadku będziemy mieli wyrażenia podobnea[0, _] ... a[i-1, _]
i zdefiniujemy jea
tak, aby zwracało m'kay dla dokładnie jednego z nich0..i-1
.źródło
Python,
173168156Nie golfowany:
źródło
> <>, 150 bajtów
13 zmarnowanych bajtów, ale trochę się nudzę próbując to zmienić. Również losowanie w Funge jest trudne do gry w golfa.
źródło
Perl,
938988 bajtówZdecydowanie można jeszcze zagrać w golfa!
4 bajty odcięte dzięki Dom Hastings
źródło
C ++ 290
Moje rozwiązanie
Objaśnienie zmienna oo określa, który znak interpunkcyjny i z = 0 oznacza użycie „M” zamiast „M”.
Test
źródło
string::npos
=>-1
lub~0
. Wybór~0
pozwala używać-
zamiast!=
; tak, że staje się warunkoweif(z-~0&&r)
, oszczędzając 11 bajtów.JavaScript ES6, 121 bajtów
Awarie, jeśli podany ciąg nie zawiera odpowiedniej interpunkcji.
źródło
Lua,
162160 bajtówźródło