Pengarahan
Alien telah menetap di bumi dan anehnya, alfabet mereka sama persis dengan kita. Bahasa mereka juga sangat mirip dengan bahasa kami dengan beberapa perbedaan yang sangat berbeda dan mudah dihitung.
Tantangan
Ambil string dan tampilkan bahasa asing yang setara. Terjemahan berfungsi seperti itu:
Tukar semua vokal dalam kata dengan yang sesuai:
Vowel | With
--------+--------
a | obo
e | unu
i | ini
o | api
u | iki
Anda juga dapat menulis penerjemah lain untuk menerjemahkan Bahasa Inggris-> Bahasa Inggris, namun ini opsional.
Contohnya
Input: Shaun
Output: Shoboikin
Input: Java
Output: Jobovobo
Input: Hello, World!
Output: Hunullapi, Wapirld!
Jika vokal dikapitalisasi maka Anda menggunakan huruf kapital pertama ..
Input: Alan
Output: Obolobon
Input: Australia
Output: Oboikistroboliniobo
Aturan
- Celah standar berlaku
- Harus berfungsi untuk teks yang berisi baris baru
Anda dapat menulis fungsi, lambda, atau program lengkap
Capingrobotikilobotiniapins dan wrinitining thunu runuvunursunu trobonslobotapir!
Jawaban:
Haskell,
10091 bytesumber
TI-Basic, 173 + 59 + 148 = 380 byte
Semoga alien menggunakan kalkulator TI-83/84;)
Program Utama, 173 byte
BONUS: Pertahankan baris kedua atau ketiga tergantung pada apakah Anda menginginkan penerjemah yang normal atau terbalik.
Subprogram (
prgmQ
), 59 byte:Subprogram (
prgmR
), 148 byte:PS
~
mewakili token0x81
dan@
mewakili token0x7F
, pelajari lebih lanjut di sini .PPS Bagian dari mengapa program ini memiliki jumlah byte tinggi adalah karena
sub(
,inString(
,length(
, dan semua huruf kecil dua byte masing-masing ...sumber
prgmR
danprgmQ
di headline kode Anda sekali?Perl, 56 byte
Termasuk +1 untuk
-p
Berikan masukan pada STDIN
alien.pl
:Bekerja seperti yang ditunjukkan, tetapi ganti
\xXX
lolos dengan karakter yang sebenarnya untuk mendapatkan skor yang diklaimsumber
sed 89
sumber
Python,
999593 byteDi ideone.com ...
Cukup mudah. Ambil saja indeks yang kita temukan masing-masing karakter di dalam daftar vokal dan gunakan untuk menarik tiga karakter yang kita butuhkan. Jika tidak ditemukan,
.find()
kembali-1
jadi tempelkan karakter saat ini di akhir string. Spasi diperlukan agar huruf apa"a"
pun tidak termasuk yang ditambahkanc
. Vokal yang diterjemahkan dikelompokkan berdasarkan urutan huruf (huruf pertama dari setiap terjemahan, lalu yang kedua, kemudian yang ketiga).sumber
["aeiouAEIOU".find(c)::11] for
05AB1E ,
282720 byteCobalah online!
Unuxplobonobotiniapin
sumber
PHP, 91 Bytes
sumber
Python, 129 byte
Lihat itu berjalan di ideone.com
Berikut versi yang diformat dengan lebih baik:
Bagian yang paling menarik adalah
{ ... }.get(l.lower(), l)
mencoba mencari huruf yang disimpan dalam huruf kecill
ke dalam kamus dan mengembalikan versi terjemahan (jika ditemukan), atau huruf aslinya,dan
[str, str.capitalize][ord(l) < 91]( ... )
yang memeriksa apakah huruf aslinya adalah huruf kapital ( Titik kode ASCII lebih rendah dari 91) dan kemudian memanggilstr()
fungsi dengan huruf sebagai argumen (jika bukan huruf kapital, tidak melakukan apa-apa) ataustr.capitalize()
fungsi (mengubah huruf pertama dari string argumen ke huruf besar).sumber
C (gcc) ,
150 141 136134 byteCobalah online!
Berdasarkan jawaban oleh @algmyr dan -8 terima kasih hanya untuk @ ASCII
Versi kurang golf
sumber
a;l;i;e(char*n){for(char*v=" AEIOU",*t;i=*n++;printf("%c%c%c"+4*!a,(a?" OUIAI"[a]:i)|i&32," bnnpk"[a]," ouiii"[t=index(v,i-32*l),a=t?t-v:0]))l=i>96;}
a;l;i;e(char*n){for(char*v="AEIOU",*t;i=*n++;printf("%c%c%c"+4*!a,(a?" OUIAI"[a]:i)|i&32," bnnpk"[a]," ouiii"[t=index(v,i&95),a=t&&t-v<5?t-v+1:0]));}
a;l;i;e(char*n){for(char*v=" AEIOU",*t;i=*n++;)printf("%c%c%c"+4*!a,a?" OUIAI"[a]|i&32:i," bnnpk"[a]," ouiii"[t=index(v,i-i/96*32),a=t?t-v:0]);}
Batch, 215 byte
Mengambil input pada STDIN. Memproses karakter demi karakter memiliki kenyamanan menjadi case-sensitive.
sumber
Pyth, 42 byte
Program yang mengambil input pada STDIN dan mencetak hasilnya.
Cobalah online
Bagaimana itu bekerja
sumber
C, 167 byte
Saya benar-benar tidak ingin menghentikan kebiasaan saya untuk selalu melakukan fungsi-fungsi utama saat mengkode C, tetapi ini jauh lebih singkat daripada versi dengan main dan dengan cara ini saya mendapat surat lain untuk mengeja apa yang saya inginkan!
Golf
Berkomentar
Ada sesuatu yang istimewa tentang C dan betapa mengerikannya Anda dengan pointer dan semacamnya.
sumber
Retina , 60 byte
Hitungan byte mengasumsikan penyandian ISO 8859-1.
Cobalah online!
sumber
Javascript (ES6),
949392 byteDisimpan 1 byte berkat edc65
1 byte disimpan berkat Neil
Demo
sumber
.indexOf
dan.search
menggunakan~
alih-alih<0
s=>s.replace(/[aeiou]/gi,c=>"ouiaiOUIAI"[n="aeiouAEIOU".indexOf(c)]+"bnnpk"[n%=5]+"ouiii"[n])
yang masih 93 byte. Tetapi karenac
sekarang dikenal sebagai vokal, Anda sekarang dapat menggunakansearch
alih-alihindexOf
menghemat satu byte!Java 8, 172 byte
ungolfed:
Dan Alien kembali ke Bahasa Inggris (171 byte):
Tidak Disatukan:
sumber
Tcl, 75 byte
String yang akan diterjemahkan ada dalam variabel
s
.sumber
Mathematica, 128 byte
Tidak yakin apakah program yang lebih pendek dapat diperoleh dengan menggunakan
IgnoreCase->True
bersama dengan pemeriksaan kasus.sumber
C 178 byte
sumber
C,
163162159 bytesumber
char*t="aeiou";
ke dalam untuk loop menghemat 1 byteC #,
133121 byteEdit (terima kasih kepada
milk
)terima kasih :) Saya benar-benar tahu kelebihan ini tetapi entah bagaimana benar-benar lupa ketika menulis ini ..
sumber
Select(char, int)
kelebihan sehingga Anda tidak perlu mendeklarasikani
dan dapat menempatkan semuanya dalam satu baris.s=>string.Concat(s.Select((c,i)=>(i="AIUEOaiueo".IndexOf(c))>-1?"OboIniIkiUnuApioboiniikiunuapi".Substring(i*3,3):c+""));
C,
207202 byte (terima kasih kepada Cyoce)1) Saya benci menghilangkan tipe sebelum segala jenis deklarasi
2) Saya tidak terlalu suka menaruh kode yang tidak dapat digunakan (tanpa fungsi main ())
Pemakaian:
sumber
(c=getchar())!= EOF
dapat menjadi~(c=getchar())
Swift 2.219 byte
¯ \ _ (ツ) _ / ¯
Golf
tidak disatukan
sumber
var r = [
diperlukan?Perl 6 ,
8482 byteDiperluas:
Pemakaian:
sumber
C - 192 byte
(baris baru ditambahkan untuk kejelasan)
Hanya tabel pencarian dan saklar boolean.
Cari setiap huruf dalam tabel (string) vokal; jika ditemukan, maka modifikasi sesuai aturan dalam tabel
s
. Cetak setiap karakter diikuti oleh string: jika vokal ditemukan, cetak karakter yang diubah oleh nilais
diikuti oleh sisa suku kata yang disimpan dalam tabelf
; jika vokal tidak ditemukan, cetak karakter asli dan string kosong.sumber
Ruby,
10293918878 bytePenjelasan:
Mengeksekusi baris seperti
ruby -pe "gsub(/[#{b='aeiouAEIOU'}]/){'obounuiniapiikiOboUnuIniApiIki'[b.index($&)*3,3]}"
, jenis up berikutnya, misalnya,Australia
seharusnya keluaran:Oboikistroboliniobo
.Ini cukup mudah, ganti semua vokal dengan substring berdasarkan indeks vokal yang akan diganti di (b), kali 3 dan 3 karakter berikutnya dalam string terjemahan.
sumber
b
ke dalam Regexp (/[#{b=...}/
).p $*
tidak perlu-p
bendera untuk menyimpan byte tambahan.ruby -pe 'gsub(/[#{b="aeiouAEIOU"}]/){"obounuiniapiikiOboUnuIniApiIki"[b.index($&)*3,3]}'
-pe
). Bagaimana Anda mendapatkan 71?TI-BASIC,
201197195 byteUntuk berpikir bahwa saya akan menemukan jawaban TI-BASIC lain di sini!
Bagaimanapun, inputnya adalah string bahasa Inggris di
Ans
.Outputnya adalah string yang diterjemahkan.
Contoh:
Penjelasan:
(Baris baru ditambahkan agar mudah dibaca. Beberapa baris dari baris yang sama akan dilambangkan dengan a
:
di blok kode berikut.)Catatan:
TI-BASIC adalah bahasa tokenized. Jumlah karakter tidak sama dengan jumlah byte.
Huruf kecil dalam TI-BASIC masing-masing adalah dua byte.
sumber