Ketika bayi membuka mulut mereka, mereka tidak hanya memuntahkan omong kosong. Mereka benar-benar berbicara dengan sandi yang sangat canggih, bukti dewasa ...
The Baby-talk Cipher
Ketika seorang bayi berbicara, itu bisa terlihat seperti gogooa gagooook aagaaoooy
Setiap bagian yang dipisahkan satu ruang mewakili karakter (jadi contoh di atas mewakili 3 karakter).
Untuk menguraikan suatu bagian, kita harus menghitung jumlah As dan Os yang dikandungnya. Namun, kami hanya menghitung yang berdekatan dengan vokal lainnya. Misalnya, A di 'gag' tidak akan dihitung, tetapi A dan O di 'gaog' akan dihitung.
Menghitung contoh di atas akan terlihat seperti ini:
Section | Num Os | Num As
gogooa | 2 | 1
gagooook | 4 | 0
aagaaoooy | 3 | 4
Kami kemudian menggunakan nilai-nilai ini untuk mengubah input menjadi plaintext pada kotak Polybius. Ini adalah representasi 5x5 dari alfabet bahasa Inggris, menghilangkan 'J' (harap dicatat bahwa, dalam baby-talk, aturan penghitungan 0 berlaku untuk tabel):
0 1 2 3 4
0 A B C D E
1 F G H I K
2 L M N O P
3 Q R S T U
4 V W X Y Z
Dengan menggunakan jumlah O sebagai kolom, dan jumlah As sebagai baris, kami menemukan karakter yang mewakili setiap bagian:
Section | Num Os | Num As | Character
gogooa | 2 | 1 | (2,1) -> H
gagooook | 4 | 0 | (4,0) -> E
aagaaoooy | 3 | 4 | (3,4) -> Y
Yang memberitahu kita bahwa bayi itu baru saja mengatakan "HEY".
Catatan :
- Jika bagian yang mewakili karakter memiliki lebih dari 4 As atau Os, abaikan ekstra, karena 4 adalah nilai maksimum pada tabel. - Untuk tugas ini, Y bukan vokal - hanya A, E, I, O dan U.
Tantangan
Tugas Anda adalah membuat program lengkap yang mengambil satu input, sebuah kata dalam bahasa bayi, dan mencetaknya dalam plaintext.
- Program Anda harus dapat mengambil input dalam huruf besar, huruf kecil, dan campuran keduanya.
- Input hanya akan berisi huruf alfabet ASCII (AZ dan az), dengan spasi tunggal untuk memisahkan kata-kata bayi.
- Teks keluaran bisa dalam hal apa pun.
- Anda harus mengambil input dari
STDIN
dan mencetak plaintextSTDOUT
. Jika bahasa Anda tidak memiliki ini, gunakan yang setara terdekat. - Ini adalah kode-golf , jadi kode terpendek dalam byte menang - tetapi semua solusi diterima.
Uji Kasus
'GLOOG KAKAAOOO ARGOOO OOOOOGUGUU' -> CODE
'oaka pooopaa gaau augu' -> GOLF
'Aoao U oOOAoa oaoAoo aoAoAOa' -> NAPPY
'GUG gAGaA gOougOou' -> ALE
'OOaGOG GoGOOoGoU gAA bLAA GOUGoOUgAIGAI' -> HELLO
'GUG gAGaA gOougOou' -> 'ALE'
Bayi minum bir? : D.toUpperCase()
panggilan fungsi atau serupa, bukan tantangan yang sebenarnya merangsanggogooa
memiliki 2 ons? Dan bagaimanagagooook
memiliki 0 a?FAG
: PJawaban:
05AB1E , 46 byte
Cobalah online!
Penjelasan dalam langkah-langkah
sumber
Perl, 82 byte
Termasuk +1 untuk
-a
Berikan masukan pada STDIN:
baby.pl
:Ini mengasumsikan versi perl cukup baru di mana
-a
menyiratkan-n
. Jika perl Anda terlalu tua, Anda perlu menambahkan-n
opsi eksplisit .Ini juga mengasumsikan bayi tidak bisa mengatakan string ASCII umum yang dimulai dengan angka seperti
1 this will not work
sumber
brainfuck, 656 byte
Ini adalah cara yang cukup bagus untuk membunuh beberapa jam.
Membutuhkan juru bahasa brainfuck yang menggunakan sel pembungkus 8-bit, memungkinkan Anda untuk belok kiri dari sel 0 dan mengembalikan 0 jika
,
digunakan ketika stdin kosong. Dalam pengalaman saya, ini adalah pengaturan yang paling umum.Program ini tidak menganggap Y sebagai vokal, tetapi jika OP menginginkannya, ini adalah perbaikan yang mudah.
Sepertinya menulis ini akan menjadi tugas yang menakutkan tetapi jika Anda memiliki keakraban dengan bahasa tidak ada yang mengejutkan atau baru dalam kode. Taktik brainfuck standar: Baca input tetapi pastikan Anda meninggalkan beberapa sel kosong di antara setiap byte, gunakan sel-sel kosong itu untuk menyimpan data tentang input, gunakan data yang Anda simpan untuk memutuskan cara mentransformasikannya dan mengeluarkan sesuatu di akhir . Dalam hal ini mendapatkan input, mengatur semuanya menjadi huruf besar, mencari tahu sel mana yang vokal, membuang informasi itu setelah menggunakannya untuk menentukan sel mana yang di sebelah vokal, atur semua yang tidak di sebelah vokal ke beberapa nilai yang tidak akan pernah relevan sehingga mereka tidak menghalangi nanti, dan Anda pada dasarnya sudah selesai. Dari sana Anda hanya perlu menghitung Anda
A
danO
, gandakanA
s dengan 5 dan tambahkanO
s, kasus khusus apa pun di atas 8 untuk menghindari J dan output. Saya memang memilih untuk menangani kata ini satu per satu, daripada mengambil seluruh input sekaligus, jadi saya harus mengatur bagian dari kode yang bertuliskan stdin untuk dipecahkan pada 0 atau 32, tetapi itu bukan masalah yang terlalu besar (cukup bungkus pengurangan dengan 32 dalam kondisi sehingga tidak terjadi jika nilainya sudah 0, lalu koreksi untuk setiap<
atau>
instruksi yang Anda lewatkan kemudian).Saya tidak tahu bagaimana itu akan membantu karena saya menulisnya sebagian besar untuk menjaga pikiran saya tetap lurus daripada sebagai penjelasan yang nyata, tapi inilah kode dengan komentar saya dan lekukan aslinya:
sumber
JavaScript (ES6), 145 byte
Ganti setiap kata (dan spasi berikut) dengan huruf yang sesuai.
s.split` `.map().join``
lebih panjang 3 byte:sumber
Perl, 159 +1 = 160 byte
+1 byte untuk flag -n. Spasi bukan bagian dari kode dan hanya disediakan untuk keterbacaan.
Kode membagi input dengan spasi dan mengubah setiap kata bayi menjadi huruf kecil sebelum melanjutkan. Regex menemukan semua a atau o vokal yang diikuti oleh vokal lain, atau didahului oleh vokal, dan mengurutkannya, a di awal, o di akhir, kemudian menemukan indeks 'o' pertama. Jika jumlah pertandingan yang tersisa (alias, jumlah 'a) lebih besar dari 4, maka kita peduli tentang 4 a, dan jika ada lebih dari 4 o, kita peduli tentang 4 o. Kemudian ia mengeluarkan huruf yang sesuai dari matriks dan mencetaknya, lalu pindah ke kata bayi berikutnya.
sumber
Brainfuck, 283 byte
Diformat:
Ini berfungsi dengan atau tanpa baris baru di input.
Cobalah online.
Setiap karakter diproses mod 32 (dengan aliran kontrol sedemikian rupa sehingga kode yang mengimplementasikan operasi mod hanya terjadi satu kali dalam program). Ini memungkinkan ketidaksensitifan huruf besar / kecil, serta meruntuhkan karakter spasi dan EOF menjadi satu huruf besar. Baris baru tambahan diperlakukan sama dengan
J
, yang tidak mempengaruhi output.Sketsa tata letak memori:
0 x C c y a A b B
di mana
c
karakter input,C
adalah char mod 32,x
adalah apakah itu vokal,y
apakah char sebelumnya adalah vokal,A
danB
merupakan jumlah yang valid (di sebelah vokal)a
dano
karakter masing-masing, dana
danb
masing-masing buffer yang disalin atau dihapus tergantung pada apakah ada vokal yang berdekatan.Ketika ruang atau EOF tercapai, beberapa juggling dilakukan untuk mengurangi jumlah yang lebih besar dari 4 dan untuk melewati huruf
J
, dan kemudian karakter yang diterjemahkan diterjemahkan.sumber
PHP, 163 byte
Versi yang lebih mudah dibaca:
Tes:
sumber
Java 8,
272266251249 byte-6 byte terima kasih kepada @Joba .
-1 byte mengkonversi dari Java 7 ke 8, dan
1416 byte tambahan disimpan dengan mengubah bagian cetak.Penjelasan:
Coba di sini.
sumber
Python 3,
163162157146 byteGunakan regex untuk menemukan semua string vokal yang lebih besar dari 2, hitung As dan Os dengan maksimum 4, lalu cetak.
sumber
APL, 60
Perhatikan bahwa ⎕IO ← 0 dan ⎕ML ← 3
Contoh:
Berfungsi di Dyalog 15.0 , karena ini adalah versi di mana 819⌶ diperkenalkan untuk huruf kecil string.
sumber
Pyth, 64 byte
Mungkin bisa bermain golf lebih lanjut. Coba di sini!
sumber
R, 261 byte
Saya pikir saya menghabiskan terlalu banyak waktu hanya untuk mendapatkan ini berfungsi dan saya percaya ini adalah solusi rumit yang tidak perlu, meskipun itu bekerja. Mengambil input dari stdin, penting bahwa string diapit dengan tanda kutip.
Penggunaan empat-bersarang-
apply
keluarga secara teoritis dapat dikurangi menjadi hanya dua dengan memanfaatkanmapply
sebagai gantinya. Tetapi karena inputmapply
tidak akan memiliki panjang yang sama, input yang lebih pendek didaur ulang yang memperumit banyak hal dan saya tidak dapat menemukan solusi yang berfungsi.Jika ada yang tertarik, saya akan menambahkan penjelasan yang ungolfed nanti.
Coba semua test case pada R-fiddle
Harap dicatat bahwa versi ini mengambil input sebagai argumen fungsi alih-alih dari stdin karena
scan
tidak berfungsi pada R-fiddle. Selanjutnya, ditambahkan baris baru untuk membuatnya lebih mudah dibaca.sumber
Python 3, 262 byte
Kurang Golf (Komentar adalah variabel dalam kode singkat):
Cobalah online!
sumber
blaoaoaog
: vokal terjalin dihitung lebih dari sekali, memberiz
ketika seharusnyat
(meskipun itu hanya bekerja padaaaaooo
, meskipun saya tidak tahu mengapa ....)aooa
== (2,2) ==n
,aoaoao
== (3,3) ==t
gaoaoaog
mencetak Z bukannya T. Saya pikir itu karena regex Anda mengambil[ao,oa,ao,oa,ao]
, yang diperhitungkan5,5
, kemudian mengkonstruksikannya ke4,4
, mencetak Z.Kotlin ,
221209 byteSekarang jauh lebih jelek dan lambat, semuanya atas nama 11 byte
Simpan ke file (mis.
BabyTalk.kts
) Untuk dijalankan sebagai skrip. Atau, kode di atas dapat diawali denganfun main(z:Array<String>)=
dan dikompilasi secara normal dengan biaya 26 byte lebih.Cobalah online!
Bertakuk:
sumber
PHP,
124 129 121 120125 byteMengambil input dari argumen baris perintah. Jalankan dengan
-nr
atau coba online .kerusakan
sumber
J , 109 byte
Cobalah online!
sumber