TUT भाषा अनुवादक


10

पाठ का अनुवाद TUT भाषा के लिखित संस्करण में किया जा सकता है, जिसके अनुसार प्रत्येक अक्षर को "TUT शब्द" द्वारा बदल दिया जाएगा, जैसा कि निम्नलिखित तालिका में दिया गया है (लिंक किए गए लेख से अनुकूलित) * :

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'). 

निम्नलिखित i / o व्यवहार के साथ एक कार्यक्रम लिखें:

इनपुट (स्टडिन से): एक बाइनरी (0/1) सूचक i और एक ASCII स्ट्रिंग s

  • अगर मैं = 0 तो रों किसी भी ASCII पाठ हो सकती है।
  • अगर मैं = 1 तो रों कुछ वैध इनपुट के लिए TUT भाषा उत्पादन होना चाहिए।

आउटपुट (स्टडआउट के लिए): एक बाइनरी (0/1) इंडिकेटर जे और एक एएससीआईआई स्ट्रिंग टी

  • अगर मैं = 0 तो j = 1 और टी का अनुवाद है रों को TUT भाषा।
  • अगर i = 1 है तो j = 0 और t TUT भाषा से s का अनुवाद है ।
  • किसी भी मान्य इनपुट के लिए, प्रोग्राम को अपने स्वयं के आउटपुट पर लागू करना मूल इनपुट को बिल्कुल पुन: उत्पन्न करना होगा; अर्थात, प्रोग्राम ( प्रोग्राम ( i , s )) = ( i , s )। इनपुट और आउटपुट में बिल्कुल समान प्रारूप होना चाहिए।

स्कोरिंग : स्कोर कार्यक्रम में पात्रों की संख्या है - सबसे कम स्कोर जीतता है।

उदाहरण

(ए)

(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."')

( )

(0, 'QWX WWW Rrrrd deeeeep')
(1, 'KWAKWAKSEKS SKWERWAKSWAKS RUTskwerrutruddud dudskweriskweriipup')

( )

(0, 'aa AA aA Aa rd RD rD Rd')
(1, 'skwere SKWERE eE Ee ruddud RUDDUD rutDUD RUTdud)

(((के बारे में एक तरफ उच्चारण: स्वर (के लिए TUT शब्द e, i, ay, o, yu- हो सकता है यानी, साथ तुकबंदी () (ए, ई, मैं, ओ, यू) जब वर्णमाला पढ़ने के सामान्य ध्वनियों का प्रतिनिधित्व करने वाले हैं , मुझे, मेरे, घास काटना, म्यू) तीन या अधिक अक्षर TUT शब्दों में, प्रतीकों (। u, a, e) में (लेकिन, बल्ला, शर्त के रूप में ध्वनि करने वाले हैं) क्रमश: - इन के लिए ASCII प्रतिस्थापन कर रहे हैं ( ʌ æ ɛ) जुड़े लेख में।)))


1
क्या हमें दोगुना अपरकेस का समर्थन करना है? टुट का अनुवाद क्या है AA, SKWEREया skwerE? तिगुने अक्षरों का क्या? यह है wakswakswaks, skwerwakswaks, waksskwerwaks, या यहाँ तक kyubwaks, या हम चुन सकते हैं?
जॉन ड्वोरक

1
rrdअनुवाद करना चाहिए skwerruddud; क्या हमें इसे छोड़ने की अनुमति है skwerrutdud?
जॉन ड्वोरक

@JDDvorak - हाँ, यह मामले की परवाह किए बिना, दोहरे अक्षरों को संभालना चाहिए। इनपुट (0, 'AA SKWERE skwerE') का आउटपुट (1, 'ee SUSKAKWAKSIRUTI suskakwaksirutI') होना चाहिए। इनपुट्स (1, 'AA') और (1, 'skwerE') मान्य नहीं हैं क्योंकि 'AA' और 'skwerE' किसी मान्य इनपुट के आउटपुट के रूप में नहीं होते हैं। इनपुट (1, 'SKWERE') का आउटपुट (0, 'EE') होना चाहिए। तीन या अधिक अक्षरों की एक स्ट्रिंग को युगल की कुछ संख्या के रूप में माना जाना चाहिए, संभवतः एकल के बाद। इनपुट (0, 'rrd') में आउटपुट (1, 'skwerruddud') होना चाहिए।
रेस

उह ... कैसे 0,"AA"अनुवाद करता है 1,"ee"? के रूप में 1,"SKWERE", मुझे लगता है आप का मतलब है 0,"AA", नहीं 0,"EE"
जॉन ड्वोरक

1
@psxls - मेरा इरादा था (0, rd_RD_rD_Rd) -> (1, rudud_RUDDUD_rutDUD_RUTdud) और (0, aa_AA_aAA-Aa) -> (1, skwere_SKWERE_eE_Ee)। नियम (3) TUT शब्द 'skwere' और "SKWERE 'पर लागू होता है।
res

जवाबों:


6

माणिक, 310 311 वर्ण

h=Hash[(?a..?z).zip %w{e bub kut dud i fuf jug hash ay jag kak lul mum nun o pup kwak rut sus tut yu vuv waks eks yak zuz}]
h["rd"]="ruddud"
h.keys.each{|k|h[k[0]+k]="skwer"+h[k]}
h.keys.each{|k|h[k.upcase]=h[k].upcase}
h=h.invert if b=getc==?1
i=gets
print b ?0:1;(k=i;k=k.chop until h[k]||!k[1];$><<(h[k]||k);i[k]="")until i==""

सही ढंग से संभालता है:

  • चुकता अपरकेस (पुनरावृति 18 अक्षरों को मर्ज करके अनफिक्स)
    • अगर AAमुड़ना चाहिए skwerE, तो स्वैप लाइनों # 3 और # 4
    • मैं यह भी मान लें aAऔर Aaमें बदल जाना चाहिए eEऔर Eeक्रमश:
  • rrd अनुवाद करने के लिए `skwerruddud (unfix लाभ 3 वर्ण)
  • क्यूब्स में पहली जोड़ी को एक वर्ग के रूप में बताया गया है। rrrdमें बदल जाता है skwerrutruddudrrrrdहो जाता हैskwerrutskwerruddud
  • आउटपुट अब एक वैध इनपुट है। यह वास्तव में, युक्ति द्वारा आवश्यक है
  • इनपुट टर्मिनेटर के रूप में न्यूलाइन का उपयोग करता है

इनपुट की आवश्यकता है कि संकेतक और स्ट्रिंग के बीच कोई नई रेखा नहीं है, आउटपुट इसे वहां डालता है (फिक्स: 1 वर्ण)।STDIN के साथ मिश्रण को रोकने के लिए इस बिंदु पर कंसोल आउटपुट दबा दिया गया। मुक्त उपसर्ग, यह सिर्फ एक छोटा सा बदसूरत है।

उदाहरण इनपुट:

0Hello

आउटपुट:

1
HASHiskwerlulo

मैं इस बारे में टीका लगा रहा था कि क्या समान प्रारूपों के लिए इनपुट और आउटपुट की आवश्यकता है, लेकिन यह प्रश्न में स्पष्ट नहीं था, इसलिए ... यह उत्तर मुझे ठीक लगता है (अब तक - मैं जल्द ही उत्तरों पर कुछ परीक्षण चलाऊंगा )।
Res

मुझे पता नहीं क्यों, लेकिन आपका कार्यक्रम मेरे लिए चलता है - ऑनलाइन और ऑफ दोनों - केवल तभी (छह और पात्रों के साथ) getcउपसर्ग किया जाता है STDIN.
रेस

मैं jRuby IRB 1.7.5 (2.0.0) का उपयोग कर रहा हूं और यह मुझे केवल एक चेतावनी दिखाता है। आप किस क्रिया का उपयोग कर रहे हैं?
जॉन ड्वोरक

मुझे मानचित्र बनाने के लिए आशुलिपि पसंद है। मैंने इसे पूरी तरह से शामिल किया। इससे यह संभावना नहीं है कि मैं उसे हरा दूंगा।
जोहान्स कुह्न

1
@ मेरा मानना ​​है कि इनपुट / आउटपुट की आवश्यकता स्पष्ट थी: 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).लेकिन इसे ठीक करने के लिए केवल 1 चरित्र की लागत होगी।
जोहान्स कुह्न

3

पर्ल, 453 443 309 307 303 299

($x,$_)=split//,<>,2;@x{a..z,rd}=(e,bub,kut,dud,i,fuf,jug,hash,ay,jag,kak,lul,mum,nun,o,pup,kwak,rut,sus,tut,yu,vuv,waks,eks,yak,zuz,ruddud);$x{$_ x2}=skwer.$x{$_}for a..z;$x{uc$_}=uc$x{$_}for keys%x;%x=reverse%x if$x;$z=join"|",sort{length$b<=>length$a}keys%x;s/\G(.*?)($z)/$1$x{$2}/g;print!$x+0,$_

परीक्षण के मामलों:

मैंने ओपी में सफलतापूर्वक प्रदान किए गए (ए), (बी), (सी) और (डी) परीक्षण मामलों का परीक्षण किया है।

एक * कुछ * अधिक पठनीय संस्करण:

($x,$_)=split//,<>,2;
@x{a..z,rd}=(e,bub,kut,dud,i,fuf,jug,hash,ay,jag,kak,lul,mum,nun,o,pup,kwak,rut,sus,tut,yu,vuv,waks,eks,yak,zuz,ruddud);
$x{$_ x2}=skwer.$x{$_}for a..z;
$x{uc$_}=uc$x{$_}for keys%x;
%x=reverse%x if$x;
$z=join"|",sort{length$b<=>length$a}keys%x;
s/\G(.*?)($z)/$1$x{$2}/g;
print!$x+0,$_

1
अच्छा! जाँच करने के लिए कुछ अच्छे परीक्षण के मामले, ऐसा प्रतीत होता है कि मुझे बहुत काम करना है! मैं तुम्हारा का शीघ्रता से अवलोकन किया है और मुझे लगता है कि आप उपयोग कर barewords बजाय qw (परिवर्तन से कुछ बाइट्स दस्तक कर सकते हैं qw(bub kut ... yak zuz)करने के लिए (bub,kut ... yak,zuz)), यह भी आप की जगह ले सकता keys%xके साथ @b(क्योंकि आप जानते हैं कि कुंजी की वजह से कर रहे हैं $x)। एक और तीन बचाने के लिए एक छोटा सा परिवर्तन है $1eq uc($1)करने के लिए uc$1eq$1। 443 तक ले जाने के लिए आप उस अतिरिक्त बाइट के लिए प्रिंट +से पहले छोड़ सकते हैं !। आशा है कि यह सब मान्य है, मैंने सीमित परीक्षण मामलों का परीक्षण किया है!
डोम हेस्टिंग्स

हम्म, uc$1eq$1हो सकता है uc$1 eq$1, लेकिन मैं निश्चित नहीं हूँ ... क्षमा करें यदि यह गलत है!
डोम हेस्टिंग्स

सुझावों के लिए धन्यवाद डोम! आपने मुझे 10 वर्ण बचाए। अभी भी सुधार की गुंजाइश है, मैं काम पर वापस आ जाऊँगा .. :)
psxls

2

APL (Dyalog) (372)

आप वास्तव में बता सकते हैं कि एपीएल में बिल्ट-इन स्ट्रिंग हैंडलिंग फ़ंक्शंस नहीं हैं (सामान्य सरणी वाले लोगों को छोड़कर)। मुझे अपना tolower(यह L) लिखना था । हमेशा मल्टीलाइन डायलाग एपीएल के साथ, इसका परीक्षण करने के लिए, इसे एक संपादन विंडो में पेस्ट करें और फिर इसे कॉल करें ( T)।

T
Q←⎕UCS
L←{Q(Q⍵)+32×⍵∊⎕A}
Z←{⎕←⊃z,.⍺⍺1⌽z←⍵,' '}
w←L¨W←1↓¨W⊂⍨' '=W←' E BUB KUT DUD I FUF JUG HASH AY JAG KAK LUL MUM NUN O PUP KWAK RUT SUS TUT YU VUV WAKS EKS YAK ZUZ RUD SKWER'
⍞{⎕←~⍵:{U←L⍣(l←⍺∊L⎕A)
~l∨⍺∊⎕A:⍺
⍺=⍵:U⊃⌽W
'rd'≡L¨⍺⍵:U'RUD'
U⊃W[96-⍨Q+L⍺]}Z⍺
{'rR'∊⍨v←⊃⍺:v
(⊃⌽w)≡m←L⍺:⍵∇⍬
~w∊⍨⊂m:⍺
L⍣(⍺≡L⍺)⍨⎕A/⍨26↑≡∘m¨w}Z{~×⍴⍵:''
∨/H←⊃¨⍷∘(L⍵)¨w:(⊂l↑⍵),∇⍵↓⍨l←⍴⊃H/W
(⊂⊃⍵),∇1↓⍵}⍺}⎕

उपयोग:

      T
⎕:
0
"Mrs. Hogwallop up and R-U-N-N-O-F-T."     
1
"MUMrutsus. HASHojugwakseskwerlulopup yupup enundud RUT-YU-NUN-NUN-O-FUF-TUT."      
      T
⎕:
1
"MUMrutsus. HASHojugwakseskwerlulopup yupup enundud RUT-YU-NUN-NUN-O-FUF-TUT."      
0
"Mrs. Hogwallop up and R-U-N-N-O-F-T."       

2

Tcl, 395 394 392

set m { rd ruddud 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 ঙ skwer}
set m $m[string tou $m]
if [read stdin 1] {puts 0[regsub -all ঙ(.) [string map [lreverse $m] [gets stdin]] {\1\1}]} {puts 1[string map $m [regsub -all (.)\\1 [gets stdin] ঙ\\1]]}

टिप्पणियाँ:

  • के लिए उपयोग करता skwerruddudहै rrd
  • skwereskwereeके लिए aaaaa

उदाहरण इनपुट:

0Hello

आउटपुट:

1HASHiskwerlulo

यह काम किस प्रकार करता है:

  • m एक शुरुआत में है।
  • मैं इसे अपरकेस मैप के साथ सम्‍मिलित करता हूं।
  • [स्ट्रिंग मैप] मेरे लिए अधिकांश सामान करता है (एक सूची का उपयोग करता है, इसलिए कुछ भी जो एक वैध सूची है ...)
  • डबल अक्षरों के लिए regexp। एक विशेष प्रतिस्थापन चरित्र ( ) का उपयोग करें ।

बंगाली अबुगीदा, आपने उस किरदार को कैसे चुना?
काया

\ufffiirc। वास्तव में कोई फर्क नहीं पड़ता। कोई भी गैर-अस्सी वाला चरित्र करता।
जोहान्स कुह्न

यह था \u999। जैसा कि मैंने कहा, केवल महत्वपूर्ण चीज थी: अस्सी का चरित्र नहीं।
जोहान्स कुह्न

@JohannesKuhn यह उदाहरण (c), रिटर्न में विफल रहता है 1KWAKWAKSEKS skwerWAKSWAKS RUTskwerrutruddud dudskweriskweriipup
psxls

@psxls जो सही है: का A doubled letter is replaced by `skwer` followed by the TUT word for that letter.कोई उल्लेख नहीं SKWER
जोहान्स कुह्न

2

पर्ल 385

$t=e0bub0kut0dud0i0fuf0jug0hash0ay0jag0kak0lul0mum0nun0o0pup0kwak0rut0sus0tut0yu0vuv0waks0eks0yak0zuz;@t=split 0,$t."0\U$t";@s=(a..z,A..Z);while(<>){($-,$_)=split/ /,$_,2;@l{$-?@t:@s}=$-?@s:@t;if($-){for$@(@t){s/skwer$@/$@$@/gi}for$@(@t){s/$@/$l{$@}/g}s/(r)ud/$1/gi}else{s/(.)/$l{$1}||$1/ge;for$@(@t){$r=lc$@eq$@?"skwer":"SKWER";s/$@$@/$r$@/g}s/(ru)t(d)/$1$2$2/gi}$-=!$-;print"$- $_"}

सिंटेक्स हाइलाइटर इस से नफरत करता है ...

एसटीडीआईएन पर इनपुट की उम्मीद है, प्रारूप है 0 (or 1) String to convert here.:

0 Hello! # input
1 HASHiskwerlulo! # output

1 HASHiskwerlulo!
0 Hello!

0 Look for the birds.
1 LULskwerokak fuforut tuthashi bubayruddudsus.

1 LULskwerokak fuforut tuthashi bubayruddudsus.
0 Look for the birds.

0 "Mrs. Hogwallop up and R-U-N-N-O-F-T."
1 "MUMrutsus. HASHojugwaksaskwerlulopup yupup anundud RUT-YU-NUN-NUN-O-FUF-TUT."

1 "MUMrutsus. HASHojugwaksaskwerlulopup yupup anundud RUT-YU-NUN-NUN-O-FUF-TUT."
0 "Mrs. Hogwallop up and R-U-N-N-O-F-T."

संपादित करें : मैंने X के अनुवाद के साथ एक मुद्दे पर ध्यान दिया है (यह रिवर्स में 'अक्स' बन जाता है, मैं इस पर बाद में गौर करूंगा। होश को फिर से ऑर्डर करने की आवश्यकता हो सकती है :(


1
एक्स के अलावा, यह ओपी के उदाहरणों में भी विफल रहता है (बी), (सी) और मेरे उत्तर में भी जांच के मामले (ई) और (जी)।
psxls

यह बहुत ही सच है, ड्राइंग बोर्ड पर वापस!
डोम हेस्टिंग्स

2

जीएनयू सैड, 514

s/$/\n@a!e@b!bub@c!kut@d!dud@e!i@f!fuf@g!jug@h!hash@i!ay@k!kak@l!lul@m!mum@n!nun@o!o@p!pup@q!kwak@r!rud@r!rut@s!sus@t!tut@u!yu@v!vuv@w!waks@x!eks@y!yak@z!zuz/
s/.*\n\(.*\)/&\U\1@/
ta
:a
s/^1/0\v/
td
s/^0/1\v/
:t
/\v\n/bf
s/\v\([^a-z]\)/\1\v/i
tt
s/\v\([a-z]\)\1/skwer\v\1/
s/\v\([A-Z]\)\1/SKWER\v\1/
s/\v\(.*\)\(.*\n.*@\1!\(\w\+\)@\)/\3\v\2/
s/rut\vd/rud\vd/
s/RUT\vD/RUD\vD/
bt
:d
/\v\n/bf
s/\v\([^a-z]\)/\1\v/i
td
s/\v\(skwer\)/\1\v/i
s/\v\(.*\)\(.*\n.*@\(.\)!\1@\)/\3\v\2/
s/skwer\(.\)\v/\1\1\v/
bd
:f
s/\v.*//

शायद छोटा किया जा सकता है, हालांकि मैं अभी के लिए कर रहा हूँ।

दोनों दिशाओं में रूपांतरणों को संभालने के लिए लुकअप टेबल का उपयोग करता है, सभी अपवादों को संभालना चाहिए जिसमें स्कीवर केस और रुडड / RUDDUD शामिल हैं।

प्रत्येक लाइन पर इनपुट 0/1 के रूप में लिया जाता है, उसके बाद स्ट्रिंग। \vकर्सर के रूप में उपयोग (ऊर्ध्वाधर टैब)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.