Mr Mackey adalah karakter South Park yang terkenal karena menambahkan "m'kay" dalam semua yang dia katakan.
Tulis sebuah program atau fungsi yang mengubah serangkaian teks menjadi sesuatu yang akan dikatakan Mr. Mackey.
Penempatan mungkin
m'kay
memiliki 50% kesempatan acak dari yang ditambahkan setelah tanda baca,
,.
,?
dan!
. Jika demikian, maka akan diikuti oleh tanda baca yang sama persis yang mendahuluinya dan didahului oleh spasi.Misalnya, dalam kalimat
Test, test.
, ada dua tempat yangm'kay
dapat ditambahkan: setelah koma, dan setelah periode, dengan peluang 50% di setiap tempat. Kemungkinan hasil akanTest, m'kay, test
. atauTest, test. M'kay.
atauTest, m'kay, test. M'kay.
.Harus selalu ada setidaknya satu yang
m'kay
ditambahkan . Selain itu, tidak dapat selalu berada di tempat yang sama dan setiap tempat yang valid di manam'kay
dapat ditambahkan harus terjadi dengan probabilitas yang sama. Artinya, Anda tidak dapat menambahkanm'kay
selalu di akhir string jika karena keacakan Anda tidak pernah menambahkanm'kay
. Jika hanya ada satum'kay
, itu harus memiliki probabilitas yang sama muncul di setiap posisi yang valid, meskipun keberadaannya ditegakkan.Jika
m'kay
setelah?
,.
atau!
,m
harus ditulis dalam huruf besar.Jumlah
m
inm'kay
harus dipilih secara seragam antara 1 dan 3. Yaitum'kay
,,mm'kay
danmmm'kay
semua pilihan yang mungkin, masing-masing dengan probabilitas 0,33 ... Jika itu harus dituliskan dengan huruf besar (lihat aturan di atas), semuam
harus ditulis dengan huruf besar.
Input, output
Input adalah string ASCII yang berisi karakter dari ASCII Des 32 (Spasi) hingga ASCII Des 126 (Tilde
~
). Tidak ada linebreak pada input. Anda dapat mengasumsikan bahwa input apa pun akan mengandung setidaknya satu dari, . ? !
.Anda dapat berasumsi bahwa tidak ada
m'kay
atau variannya di input.Input dapat diambil dari STDIN, argumen fungsi, baris perintah, atau yang serupa.
Output dapat melalui STDOUT, fungsi kembali, atau yang serupa.
Uji kasus
- Memasukkan:
Test.
Output yang mungkin: Test. M'kay.
- Memasukkan:
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.
Output yang mungkin: 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.
- Memasukkan:
Drugs are bad, so, if you do drugs, you're bad, because drugs are bad. They can hurt your body, cause drugs are bad.
Output yang mungkin: 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.
- Memasukkan:
Do you understand? Really? Good!
Output yang mungkin: Do you understand? MM'kay? Really? Good! MMM'kay!
Mencetak gol
Ini kode-golf , jadi kode terpendek dalam byte menang, m'kay?
M'kay
memiliki peluang acak 50% untuk ditambahkan setelah tanda baca ,,.,? dan! " tampaknya tidak sesuai dengan " Selalu harus ada setidaknya satum'kay
tambahan ". Tolong jelaskan ituJawaban:
CJam,
655249 byteCobalah online di juru bahasa CJam .
Bagaimana itu bekerja
sumber
APL (66)
Hasil 10 berjalan:
Penjelasan:
{
...}⍣≢
: terapkan fungsi ke input sampai nilainya berubahM'kay
untuk setiap karakter:{
...}¨⍵
: untuk setiap karakter dalam input:'mM'[1+⍵≠',']/⍨?3
: menghasilkan 1 hingga 3m
dtk atauM
dtk tergantung pada apakah karakternya koma atau bukan.'''kay',⍨
: tambahkan string'kay
.⍵,⍨
: tambahkan karakter' ',
: tambahkan spasi.(¯1+⌈?2×⍵∊',.!?')/¨
: untuk masing-masingM'kay
', jika karakter yang sesuai adalah salah satu.,!?
, pilih dengan peluang 50%, jika tidak pilihlah dengan peluang 0%.⍉⍵⍪⍉⍪
: cocokkan setiap pilihan dengan karakternya,∊
: daftarkan semua elemen sederhana (karakter) secara berurutan.sumber
⍣≢
menerapkan fungsi berulang kali hingga input tidak sesuai dengan output. Jadi jika ada yang ditambahkan, output berubah dan berhenti dan mengembalikan output, dan jika salah satu tidak ditambahkan, output tetap tidak berubah dan berjalan lagi sampai satu ini menambahkan.K5,
9990 byteNah, seseorang perlu memulai ini!
Disimpan 9 byte dengan menggunakan metode yang tidak terlalu mewah untuk melapisi M.
Penjelasan
Versi 99 byte
sumber
Julia, mm'kay,
115114 byteIni menciptakan fungsi rekursif yang menerima string dan mengembalikan string.
Penjelasan + tidak dikumpulkan:
Saya tidak suka South Park, tetapi sensasi golf terlalu menggoda untuk melewatkan ini. Terima kasih kepada KRyan untuk menyederhanakan regex, menghemat 1 byte.
sumber
JavaScript ES6,
7986108 byteTernyata membuat
M
pengulangan membutuhkan banyak byte.Versi lama (tidak diulang) (86 byte)
Versi yang lebih lama (tidak diulang, tidak memerlukan setidaknya satu m'kay) (79 byte) :
Versi tertua:
sumber
Test.
input.("Test.")
.Pyth,
515049Disimpan 1 byte berkat @Maltysen.
Cobalah online.
Penjelasan & lebih banyak golf segera hadir.
sumber
C, 170 byte
Retak pertama untuk itu:
Tidak Disatukan:
sumber
Scala, 191 byte
sumber
Mathematica, 202 byte
Jeda baris ditambahkan agar mudah dibaca. Mengevaluasi fungsi anonim yang menggunakan string sebagai argumen. (
adalah singkatan untuk\[Function]
.)Tidak Disatukan:
h
mengambil char tanda baca dan membuatnya" m'kay,"
," mm'kay,"
, dll secara acak dan dikapitalisasi tepat.f
mengambil string dan mencari karakter tanda baca apa punx
; ketika menemukannya, itu berhasil dengan probabilitas 50% sesuaih[x]
, dan 50% ekspresi sepertia[3, x]
. Ini juga memperbaruii
jumlah tanda baca yang diganti (dengan kedua kasus). Jadif["X, x."]
mungkin mengevaluasiAkhirnya,
g
akan berurusan dengana
.Count
akan menghitung berapa banyak yanga
kita masukkan ke sana; jika sama dengani
, jumlah total tanda baca, maka kami tidak menambahkan m'kays. Dalam hal ini, kami akan memiliki ekspresi sepertia[0, _] ... a[i-1, _]
, dan kami mendefinisikana
sehingga akan mengembalikan satu untuk satu saja0..i-1
.sumber
Python,
173168156Tidak Disatukan:
sumber
> <>, 150 byte
13 byte terbuang, tapi aku sudah bosan mencoba mengatur ulang itu. Juga, pengacakan dalam Funge sulit untuk golf -.-
sumber
Perl,
938988 bytePasti bisa bermain golf lagi!
4 byte dipotong berkat Dom Hastings
sumber
C ++ 290
Solusi saya
Variabel Penjelasan z menentukan tanda baca dan z = 0 yang menunjukkan penggunaan 'm' daripada 'M'.
Uji
sumber
string::npos
=>-1
atau~0
. Memilih~0
memungkinkan Anda menggunakan-
alih-alih!=
; sehingga kondisional menjadiif(z-~0&&r)
, menghemat 11 byte.JavaScript ES6, 121 byte
Gangguan jika string yang diberikan tidak mengandung tanda baca yang cocok.
sumber
Lua,
162160 bytesumber