Teks dapat diterjemahkan ke versi tertulis dari bahasa TUT dengan mengganti setiap huruf dengan "TUT word" yang sesuai, seperti yang diberikan dalam tabel berikut (diadaptasi dari artikel tertaut) * :
a e h hash o o u yu
b bub i ay p pup v vuv
c kut j jag q kwak w waks
d dud k kak r rut x eks
e i l lul s sus y yak
f fuf m mum t tut z zuz
g jug n nun
* Exceptions:
(1) Upper case letters have corresponding TUT words in upper case.
(2) A doubled letter becomes 'skwer' ('SKWER') followed by the TUT word for that letter.
- An n-fold letter is treated as a number of doubles, followed by a single if needed.
- To be considered a double or n-fold letter, the letters must be in the same case.
(3) 'rut' ('RUT') is replaced by 'rud' ('RUD') if immediately followed by 'dud' ('DUD').
Tulis program dengan perilaku i / o berikut:
Input (dari stdin): Indikator biner (0/1) i dan string ASCII s .
- Jika i = 0 maka s dapat berisi teks ASCII.
- Jika i = 1 maka s harus menjadi output Bahasa TUT untuk beberapa input yang valid.
Output (to stdout): Indikator biner (0/1) j dan string ASCII t .
- Jika i = 0 maka j = 1 dan t adalah terjemahan dari s ke Bahasa TUT.
- Jika i = 1 maka j = 0 dan t adalah terjemahan s dari Bahasa TUT.
- Untuk setiap input yang valid, menerapkan program ke output sendiri harus persis mereproduksi input asli; yaitu, program ( program ( i , s )) = ( i , s ). Input dan output harus memiliki format yang persis sama.
Penilaian : Skor adalah jumlah karakter dalam program - skor terendah menang.
Contohnya
(0, 'Look for the birds.')
(1, 'LULskwerokak fuforut tuthashi bubayruddudsus.')
(0, '"Mrs. Hogwallop up and R-U-N-N-O-F-T."')
(1, '"MUMrutsus. HASHojugwakseskwerlulopup yupup enundud RUT-YU-NUN-NUN-O-FUF-TUT."')
( c )
(0, 'QWX WWW Rrrrd deeeeep')
(1, 'KWAKWAKSEKS SKWERWAKSWAKS RUTskwerrutruddud dudskweriskweriipup')
( d )
(0, 'aa AA aA Aa rd RD rD Rd')
(1, 'skwere SKWERE eE Ee ruddud RUDDUD rutDUD RUTdud)
(((Selain tentang pengucapan: The TUT kata untuk vokal ( e
, i
, ay
, o
, yu
) dianggap mewakili suara biasa (a, e, i, o, u) ketika membaca alfabet - yaitu, berima dengan (mungkin , saya, saya, memotong, mew) dalam kata-kata TUT tiga atau-lebih huruf, simbol (. u
, a
, e
) seharusnya suara seperti dalam (tapi, kelelawar, bet) masing - ini adalah pengganti ASCII untuk ( ʌ
æ
ɛ
) dalam artikel tertaut.)))
AA
,SKWERE
atauskwerE
? Bagaimana dengan surat tiga kali lipat? apakahwakswakswaks
,skwerwakswaks
,waksskwerwaks
, atau bahkankyubwaks
, atau kita dapat memilih?rrd
harus diterjemahkan keskwerruddud
; Apakah kita diizinkan meninggalkannyaskwerrutdud
?0,"AA"
menerjemahkannya1,"ee"
? Adapun1,"SKWERE"
, saya menganggap Anda maksud0,"AA"
, bukan0,"EE"
.Jawaban:
Rubi,
310311 karakterMenangani dengan benar:
AA
harus berubah menjadiskwerE
, tukar baris # 3 dan # 4aA
danAa
harus berubah menjadieE
danEe
masing - masingrrd
diterjemahkan menjadi `skwerruddud (unfix gain 3 karakter)rrrd
berubah menjadiskwerrutruddud
.rrrrd
menjadiskwerrutskwerruddud
Input membutuhkan tidak ada baris baru antara indikator dan string, output meletakkannya di sana (fix: 1 karakter).Output konsol ditekan pada titik ini untuk mencegah pencampuran dengan STDIN. Unfix gratis, hanya sedikit lebih jelek.Input contoh:
Keluaran:
sumber
getc
diawali denganSTDIN.
(enam karakter lagi).For any valid input, applying the program to its own output must exactly reproduce the original input; i.e., program (program (i, s)) = (i, s).
Tetapi hanya akan dikenakan biaya 1 karakter untuk memperbaikinya.Perl,
453443309307303299Kasus uji:
Saya telah berhasil menguji kasus uji (a), (b), (c) dan (d) yang disediakan dalam OP.
Versi * agak * lebih mudah dibaca:
sumber
qw(bub kut ... yak zuz)
ke(bub,kut ... yak,zuz)
), juga Anda dapat menggantinyakeys%x
dengan@b
(karena Anda tahu apa kuncinya karena$x
). Perubahan kecil untuk menyimpan tiga lainnya adalah$1eq uc($1)
untukuc$1eq$1
. Anda juga dapat menjatuhkan+
sebelum!
cetak untuk byte tambahan untuk membawa Anda ke 443. Semoga itu semua valid, saya sudah menguji kasus uji terbatas!uc$1eq$1
mungkin harus begituuc$1 eq$1
, tapi saya tidak yakin ... Maaf kalau itu salah!APL (Dyalog) (372)
Anda dapat benar-benar memberi tahu APL tidak memiliki fungsi penanganan string bawaan (kecuali untuk yang array generik). Aku harus menulis saya sendiri
tolower
(ituL
). Seperti biasa dengan multiline Dyalog APL, untuk mengujinya, tempel di jendela edit lalu panggil (T
).Pemakaian:
sumber
Tcl,
395394392Catatan:
skwerruddud
untukrrd
.skwereskweree
untukaaaaa
.Input contoh:
Keluaran:
Bagaimana itu bekerja:
m
pada awalnya adalah sebuah string.ঙ
).sumber
\ufff
iirc. Tidak masalah. Karakter non-ascii akan melakukannya.\u999
. Seperti yang saya katakan, satu-satunya hal yang penting adalah: bukan karakter ascii.1KWAKWAKSEKS skwerWAKSWAKS RUTskwerrutruddud dudskweriskweriipup
.A doubled letter is replaced by `skwer` followed by the TUT word for that letter.
Tidak disebutkanSKWER
.Perl 385
Stabilo sintaks membenci yang satu ini ...
Diharapkan input pada STDIN, formatnya adalah
0 (or 1) String to convert here.
:Sunting : Saya perhatikan ada masalah dengan terjemahan X (ini menjadi 'aks' di baliknya, saya akan membahasnya nanti. Mungkin perlu memesan ulang hash :(.
sumber
GNU Sed, 514
Mungkin bisa dipersingkat, meskipun saya sudah selesai untuk saat ini.
Menggunakan tabel pencarian untuk menangani konversi di kedua arah, harus menangani semua pengecualian termasuk skwer case dan ruddud / RUDDUD dengan benar.
input diambil pada setiap baris sebagai 0/1 diikuti oleh string. Menggunakan
\v
(tab vertikal) sebagai kursor.sumber