İngilizce - Yabancı çevirmen


18

Bilgilendirme

Uzaylılar yeryüzüne yerleştiler ve garip bir şekilde, alfabeleri bizimkiyle tamamen aynı. Onların dili de bizimkine çok benziyor ve bazı çok farklı ve hesaplaması kolay farklılıklar var.

Meydan okuma

Bir dize alın ve yabancı dil eşdeğeri çıktı. Çeviri şu şekilde çalışır:

Sözcüğün tüm sesli harflerini karşılık gelenlerle değiştirin:

  Vowel |   With
--------+--------
   a    |   obo
   e    |   unu
   i    |   ini
   o    |   api
   u    |   iki

Alien-> English'i çevirmek için başka bir çevirmen de yazabilirsiniz, ancak bu isteğe bağlıdır.

Örnekler

Input: Shaun
Output: Shoboikin

Input: Java
Output: Jobovobo

Input: Hello, World!
Output: Hunullapi, Wapirld!

Sesli harf büyük yazılırsa, ilk harfi büyük yazabilirsiniz.

Input: Alan
Output: Obolobon

Input: Australia
Output: Oboikistroboliniobo

kurallar

  • Standart boşluklar geçerlidir
  • Yeni satırlar içeren metinler için çalışması gerekir
  • Bir işlev, lambda veya tam program yazabilirsiniz

    Capunurobotikilobotiniapins apin wunuitining thunu runuvunursunu trobonslobotapir!


Emin Ne değilim Ayrıca, başka bir çevirmen soğumakta çevirmek yazabilirsiniz> İngilizce ortalama gerekiyordu. Normal çevirmen yerine ters çevirmen yazabilir miyiz?
Dennis

4
Belki de sadece benim, ama burada da bu anlamı taşıyan benim için belli değil . Her neyse, asıl görevin bir parçası değilse bunun nasıl bir kural olduğundan emin değilim .
Dennis

@Dennis Biraz punudobontinik oluyorsun, ama bunu daha net yapmak için düzenledim.
Shaun Wild

2
Neden satırsonu gereksinimi? Bence bu gereksizdir ve mücadelenin ana noktasına hiçbir şey katmaz.
Adnan

1
Giriş herhangi bir ASCII karakteri veya sadece bir alt küme içerebilir mi? Örneğin, girdide hiç rakam olacak mı?
Riley

Yanıtlar:


14

Haskell, 100 91 bayt

(>>= \x->last$[x]:[y|(z:y)<-words"aobo eunu iini oapi uiki AObo EUnu IIni OApi UIki",z==x])

5
Hoboskunull kesinlikle
jk.

12

TI-Basic, 173 + 59 + 148 = 380 bayt

Umarım uzaylılar TI-83/84 hesap makinelerini kullanırlar;)

Ana Program, 173 bayt

BONUS: Normal veya ters çevirmen isteyip istemediğinize bağlı olarak ikinci veya üçüncü satırı saklayın.

"("+Ans+")→Str1
"@a~obo@A~Obo@e~unu@E~Unu@i~ini@I~Ini@o~api@O~Api@u~iki@U~Iki@→Str2    <-- English to Alien
"@obo~a@Obo~A@unu~e@Unu~E@ini~i@Ini~I@api~o@Api~O@iki~u@Iki~U@→Str2    <-- Alien to English
For(I,2,length(Ans
If "@"=sub(Str2,I-1,1
Then
Str1+"~"+sub(Str2,I,inString(Str2,"@",I)-I
prgmQ
Ans→Str1
End
End

Alt program ( prgmQ), 59 bayt:

Ans→Str9
inString(Ans,"~
sub(Str9,Ans,length(Str9)-Ans+1→Str8
Str9
prgmR
Repeat Str9=Ans+Str8
Ans+Str8→Str9
prgmR
End

Alt program ( prgmR), 148 bayt:

Ans→Str0
inString(Ans,"~→Z
inString(Str0,"~",Ans+1→Y
inString(sub(Str0,1,Z-1),sub(Str0,Z+1,Ans-Z-1→X
sub(Str0,1,-1+inString(Str0,"~
If X
sub(Str0,1,X-1)+sub(Str0,Y+1,length(Str0)-Y)+sub(Str0,X+length(sub(Str0,Z+1,Y-Z-1)),Z-X-length(sub(Str0,Z+1,Y-Z-1

PS ~, jetonu 0x81ve jetonu @temsil eder 0x7F, buradan daha fazla bilgi edinin .

Çünkü bu programlar yüksek bayt sayımı neden PPS parçası olduğunu sub(, inString(, length(ve tüm küçük harfler her bayt ikisidir ...


Sanırım bir kez karıştın prgmRve prgmQkod başlıklarında bir kez mi?
Bayt Komutanı

Evet, @ByteCommander :) 'ı yakaladığınız için teşekkürler
Timtech

8

Perl, 56 bayt

İçin +1 içerir -p

STDIN'e giriş verin

alien.pl:

#!/usr/bin/perl -p
s%\w%"`"&$&|("A\x0fboE\x15nuI\x09niO\x01piU\x09ki"=~/\u$&\K.../,$&)%eg

Gösterildiği gibi çalışır, ancak \xXXiddia edilen puanı almak için kaçışları gerçek karakterle değiştirin


1
+1 Sadece Alien avatarı için seçildi. Şaka yapıyorum, çözüm de güzel.
Kaotik

1
İsa Mesih .. Perl en iyi şekilde, bayanlar ve baylar.
Priidu Neemre

6

sed 89

s,a,&b\n,gi
s,i,&n\r,gi
s,o,&p\r,gi
s,u,&k\r,gi
s,e,&n\f,gi
y,aeouAEOU\n\r\f,ouaiOUAIoiu,

Bu yeni satırlar içeren girdi için işe yarıyor mu?
Ürdün

@Jordan Öyle. sed "her seferinde bir satır" okur. Böylece her şeyi ilk satırsonuna kadar işleyecek, yazdıracak, satırsonu yazdıracak ve daha fazla metin varsa baştan başlayacaktır.
Riley

Ah, elbette. --🏻
Ürdün

@Jordan Bunu yazdığımda bu bir kural değildi, ama yine de işe yaradı.
Riley

6

Python, 99 95 93 bayt

lambda s:"".join(("ouiaiOUIAI bnnpkbnnpk ouiiiouiii"+c)["aeiouAEIOU".find(c)::11] for c in s)

İdeone.com'da ...

Gayet basit. Sesli harf listesinde her bir karakteri bulduğumuz dizini alın ve ihtiyacımız olan üç karakteri çekmek için kullanın. Bulunmazsa, .find()döndürür, -1bu nedenle dizenin sonuna geçerli karakteri yapıştırın. Boşluklar gereklidir, böylece herhangi bir harf "a"eklenenleri içermez c. Çevrilen ünlüler harf sırasına göre gruplandırılır (her çevirinin ilk harfi, sonra ikincisi, sonra üçüncüsü).


Vay canına, hoş yaratıcı yaklaşım. Etkilendim :)
Byte Commander

1
["aeiouAEIOU".find(c)::11] for
İçindeki

6

05AB1E , 28 27 20 bayt

žÀ.•₅%~≠#ùÛãú•3ôD™«‡

Çevrimiçi deneyin!

Unuxplobonobotiniapin

žÀ                    # the string "aeiouAEIOU"
  .•₅%~≠#ùÛãú•        # the string "obounuiniapiiki"
              3ô      # split in pieces of 3
                D™«   # concatenate with a title-case copy
                   ‡  # transliterate

2
Ini lapivunu gapilfining!
Shaun Wild

@TasicallyAlanTuring: Bunu kafamda çevirmek için çok uzun sürdüm. Bence ters çevirmene ihtiyacım var: P
Emigna

2
Bunun için git, çok zor olmamalı: P
Shaun Wild

Korkunç, sanırım golfü sevdiğimi söylüyor.
datagod

Sorumun geçersiz olmasına neden olan sorumu değiştirdim. Bu yeni hatlarla çalışmalı
Shaun Wild

5

PHP, 91 Bayt

<?=strtr($argv[1],[A=>Obo,E=>Unu,I=>Ini,O=>Api,U=>Iki,a=>obo,e=>unu,i=>ini,o=>api,u=>iki]);

5

Python, 129 bayt

lambda s:"".join([str,str.capitalize][ord(l)<91]({"a":"obo","e":"unu","i":"ini","o":"api","u":"iki"}.get(l.lower(),l))for l in s)

İdeone.com'da çalıştığını görün

İşte daha güzel biçimlendirilmiş bir sürüm:

lambda s: \
    "".join(
        [str, str.capitalize][ord(l) < 91](
            {"a":"obo", "e":"unu", "i":"ini", "o":"api", "u":"iki"}
            .get(l.lower(), l)
        )
    for l in s)

En ilginç parçalardır { ... }.get(l.lower(), l)saklanan mektup aramak çalışır hangi lsözlükte harfe dönüştürülmüş ve ya çevrilmiş halini (bulursa), ya da başka orijinal mektup, döner
ve [str, str.capitalize][ord(l) < 91]( ... )(ki orijinal harf bir harf olup olmadığını denetler ASCII kod noktası 91'den küçüktür) ve sonra ya str()harfi içeren işlevi bağımsız değişken olarak (büyük harf değilse, hiçbir şey yapmazsa) ya da str.capitalize()işlevi (bağımsız değişken dizesinin ilk harfini büyük harfe dönüştürür ) çağırır .


5

C (GCC) , 150 141 136 134 bayt

a;i;e(char*n){for(char*v=" AEIOUIAI",*t;i=*n++;printf(&a))t=index(v,i-i/96*32),a=t?t-v:0,a=a?v[a+3]|L" 潢畮楮楰楫"[a]<<8|i&32:i;}

Çevrimiçi deneyin!

@Algmyr ve -8 tarafından verilen cevap sadece ASCII sayesinde -8

Daha az golf versiyonu

a;i;
e(char*n){
  for(char*v=" AEIOUIAI",*t;i=*n++;printf(&a))
    t=index(v,i-i/96*32),
    a=t?t-v:0,
    a=a?v[a+3]|L" 潢畮楮楰楫"[a]<<8|i&32:i;
}

149? 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;}
Yalnızca ASCII

belki de 149: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]));}
Sadece ASCII

144: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]);}
Sadece ASCII

4

Toplu, 215 bayt

@echo off
set/pt=
set s=
:l
if "%t%"=="" echo(%s%&exit/b
set c=%t:~0,1%
for %%a in (obo.a unu.e ini.i api.o iki.u Obo.A Unu.E Ini.I Api.O Iki.U)do if .%c%==%%~xa set c=%%~na
set s=%s%%c%
set t=%t:~1%
goto l

STDIN üzerine girdi alır. Karakter karakter işleme, büyük / küçük harfe duyarlı olma kolaylığına sahiptir.


Toplu iş her şey için en kötü araçtır, değil mi? (Peki, en azından TI-Basic'i yendin :) Bu arada Batch'da bir codegolf görmek güzel!
YoYoYonnY

4

Pyth, 42 bayt

#sXw"aeiouAEIOU"+Jc"obounuiniapiiki"3mrd3J

STDIN üzerine giriş alan ve çıktıyı basan bir program.

Çevrimiçi deneyin

Nasıl çalışır

#sXw"aeiouAEIOU"+Jc"obounuiniapiiki"3mrd3J  Program.
#                                           Loop until error statement:
   w                                         Get w, the next line of the input
                   "obounuiniapiiki"         Yield string literal "obounuiniapiiki"
                  c                 3        Split that into groups of three characters
                 J                           Assign that to J and yield J
                                     mrd3J   Map title case over J
                +                            Merge the lower and title groups
    "aeiouAEIOU"                             Yield string literal "aeiouAEIOU"
  X                                          Translate w from that to the three-character
                                             groups
 s                                           Concatenate that
                                             Implicitly print

4

C, 167 bayt

C kodlaması yaparken her zaman ana işlevleri yapma alışkanlığımı kırmak istemedim, ancak bu bir ana sürümden daha kısa ve bu şekilde istediğimi hecelemek için başka bir mektup aldım!

golfed

a;l;i;e(char*n){for(;i=*n++;l=i>90,i-=32*l,a=!(i-65)+2*!(i-69)+3*!(i-73)+4*!(i-79)+5*!(i-85),printf(a?"%c%c%c":"%c",(a?"HOUIAI"[a]:i)+l*32,"ibnnpk"[a],"!ouiii"[a]));}

Yorumlananlar

a;l;i;
e(char*n)
{
    for(;
        i = *n++;  /* Get char and advance */
        l = i>90,  /* Is lowercase? */
        i -= 32*l, /* Make uppercase */

        /* Is 1,2,3,4,5 depeding on the vowel and 0 for no vowel */
        a = !(i-65) + 2*!(i-69) + 3*!(i-73) + 4*!(i-79) + 5*!(i-85),

        printf(a?"%c%c%c":"%c",        /* Print 1 or 3 chars? */
               (a?"HOUIAI"[a]:i)+l*32, /* Print appropriate char+case */
                  "ibnnpk"[a],            /* Print appropriate char */
                  "!ouiii"[a]));          /* Print appropriate char */
}

C ve işaretçilerle ne kadar korkunç olabileceğiniz konusunda özel bir şey var.



@ceilingcat Cevabınızı kendi başınıza gönderin. Kendi cevabını hak edecek kadar farklı. :)
algmyr


3

Javascript (ES6), 94 93 92 bayt

s=>s.replace(/[aeiou]/gi,c=>"OUIAIouiai"[n="AEIOUaeiou".search(c)]+"bnnpk"[n%=5]+"ouiii"[n])

Edc65 sayesinde 1 bayt
kaydedildi Neil sayesinde 1 bayt kaydedildi

gösteri

let f =
s=>s.replace(/[aeiou]/gi,c=>"OUIAIouiai"[n="AEIOUaeiou".search(c)]+"bnnpk"[n%=5]+"ouiii"[n])

function translate() {
  document.getElementById("o").value = f(document.getElementById("i").value);
}
translate();
<input id="i" size=80 oninput="translate()" value="Hello, World!"><br><input id="o" size=80 disabled>


1
Dönüş değerini kontrol etmek .indexOfve yerine .searchkullanmak ~için<0
edc65

1
Sadece sesli harfleri değiştirirseniz ne olacağını görmek için baktım ve başlangıçta s=>s.replace(/[aeiou]/gi,c=>"ouiaiOUIAI"[n="aeiouAEIOU".indexOf(c)]+"bnnpk"[n%=5]+"ouiii"[n])hala 93 bayt olan aldım . Ama cşimdi bir sesli harf olarak bilindiği için artık bayt kaydetmek searchyerine kullanabilirsiniz indexOf!
Neil

@Neil - Güzel! Aslında ikisini de denedim ama birleştirmeyi düşünmedim.
Arnauld

2

Java 8, 172 bayt

String f(String s){String v="AEIOUaeiou",r="OboUnuIniApiIkiobounuiniapiiki",o="";for(char c:s.toCharArray()){int n=v.indexOf(c);o+=n>-1?r.substring(n*3,n*3+3):c;}return o;}

ungolfed:

String f(String s){
    String v="AEIOUaeiou",r="OboUnuIniApiIkiobounuiniapiiki",o="";
    for(char c:s.toCharArray()){
        int n=v.indexOf(c);
        o+=n>-1?r.substring(n*3,n*3+3):c;
    }
    return o;
}

Ve Alien tekrar İngilizceye (171 bayt):

String g(String s){String[] v="AEIOUaeiou".split(""),r="Obo Unu Ini Api Iki obo unu ini api iki".split(" ");for(int i=0;i<v.length;i++)s=s.replaceAll(r[i],v[i]);return s;}

Ungolfed:

String g(String s){
    String[] v="AEIOUaeiou".split(""),r="Obo Unu Ini Api Iki obo unu ini api iki".split(" ");
    for(int i=0;i<v.length;i++)s=s.replaceAll(r[i],v[i]);
    return s;
}

2

Tcl, 75 bayt

Çevrilecek dize değişkendir s.

string map {A Obo a obo E Unu e unu I Ini i ini O Api o api U Iki u iki} $s

2

Mathematica, 128 bayt

#~StringReplace~{"a"->"obo","A"->"Obo","e"->"unu","E"->"Unu","i"->"ini","I"->"Ini","o"->"api","O"->"Api","u"->"iki","U"->"Iki"}&

IgnoreCase->TrueVaka kontrolü ile birlikte daha kısa bir programın elde edilip edilemeyeceğinden emin değilim .


2

C 178 bayt

char*p[256],*a="obo\0unu\0ini\0api\0iki\0Obo\0Unu\0Ini\0Api\0Iki",*b="aeiouAEIOU";main(c){for(c=0;b[c];++c)p[b[c]]=a+4*c;for(;(c=getchar())>0;)p[c]?printf("%s",p[c]):putchar(c);}


@ceilingcat & c, byte1 byte2 byte3 olarak numarayı kaydederse tamam olabilir ... Örneğin, bellekte ff 00 00 00 olarak 255, ancak 255 için başka bir endian varsa 00 00 00 ff var ve geçersiz dizeyi yazdırıyoruz ...
RosLuP

2

Cı, 163 162 159 bayt

char*t="aeiou";n,k;q(char*x){for(;*x;n<0||(*x=t[n>1?n%2?0:2:n+3])&&k>90||(*x-=32),printf("%c%.2s",*x++,n<0?"":&"bonunipiki"[2*n]))n=strchr(t,tolower(k=*x))-t;}

char*t="aeiou";Döngü için koyarak 1 bayt tasarruf
Mukul Kumar


2

C #, 133121 bayt

s=>{int i;return string.Concat(s.Select(c=>(i ="AIUEOaiueo".IndexOf(c))>-1?"OboIniIkiUnuApioboiniikiunuapi".Substring(i*3,3):c+""));}

Düzenle (sayesinde milk)

teşekkür ederim :) Aslında bu aşırı yük biliyorum ama bunu yazarken bir şekilde tamamen unuttum ..

s=>string.Concat(s.Select((c,i)=>(i="AIUEOaiueo".IndexOf(c))>-1?"OboIniIkiUnuApioboiniikiunuapi".Substring(i*3,3):c+""));

Select(char, int)Aşırı yüklemeyi kullanabilirsiniz, böylece beyan etmenize gerek yoktur ive hepsini tek bir satıra koyabilirsiniz. s=>string.Concat(s.Select((c,i)=>(i="AIUEOaiueo".IndexOf(c))>-1?"OboIniIkiUnuApioboiniikiunuapi".Substring(i*3,3):c+""));
süt

2

Cı, 207 202 bayt (Cyoce sayesinde)

#include <stdio.h>
#define r(c,t) case c:printf(t);continue;
int main(){int c;while(~(c=getchar())){switch(c){r('a',"obo")r('e',"unu")r('i',"ini")r('o',"api")r('u',"iki")default:putchar(c);}}return 0;}

1) Her türlü beyandan önce türü atlamaktan nefret ediyorum

2) Gerçekten kullanılamaz kod koymak istemiyorum (main () fonksiyonu olmadan)

Kullanımı:

c89 cg.c -o cg; echo "Testing" | ./cg

PPCG'ye Hoşgeldiniz!
Martin Ender

@MartinEnder, bu beklenmedik ... ama teşekkür ederim :)
Xdevelnet

(c=getchar())!= EOF olabilir ~(c=getchar())
Cyoce


1

Swift 2.2 196 bytes

¯\_(ツ)_/¯

Golfed

var r = ["a":"obo","e":"unu","i":"ini","o":"api","u":"iki"];var q={(s:String) in var o = "";for var i in s.lowercaseString.characters{o += r[String(i)] != nil ? r[String(i)]!:String(i)};print(o);}

unGolfed

var r = ["a":"obo","e":"unu","i":"ini","o":"api","u":"iki"]
var q={(s:String) in
    var o = ""
    for var i in s.lowercaseString.characters {
        o += r[String(i)] != nil ? r[String(i)]!:String(i)
    }
    print(o)
}

Alanlar var r = [gerekli mi?
Cyoce

Evet oyun alanında, bir ödev arasında boşluk bırakmazsanız size bir hata verir ve boşluk eklemenizi söyler. Swift muhtemelen golf oynamak için en kötü dillerden biri ama denemek eğlenceli olacağını düşündüm.
Danwakeem

Ve kapanışa bir değişken atarken bana bu hatayı vermemesi ilginçti. Bu nedenle omuz silken adam
Danwakeem

evet ben de fark ettim. Bu yüzden kafam karıştı.
Cyoce

0

Perl 6 ,  84  82 bayt

{my%o=<a obo e unu i ini o api u iki>;S:i:g[<{%o.keys}>]=%o{$/.lc}.samecase($/~'a')}
{my%o=<a obo e unu i ini o api u iki>;S:i:g[<[aeiou]>]=%o{$/.lc}.samecase($/~'a')}

Expanded:

# bare block lambda with implicit parameter 「$_」
{
  # create the mapping
  my %v = <a obo e unu i ini o api u iki>;

  # replace vowels in 「$_」
  S
    :ignorecase
    :global
  [
    <[aeiou]>
  ]

  = # replace them with:

  %v{ $/.lc }
  # change it to be the same case as what was matched, and a lowercase letter
  .samecase( $/ ~ 'a' )
}

Kullanımı:

my &english-to-alien = {my%o=<a obo e unu i ini o api u iki>;S:i:g[<[aeiou]>]=%o{$/.lc}.samecase($/~'a')}

say english-to-alien 'Australia'; # Oboikistroboliniobo

0

C - 192 bayt

(netlik için yeni satırlar eklendi)

int c,j,b;main(){
char*f[]={"bo","nu","ni","pi","ki",""},
s[]={14,16,0,-14,-12};
while(c=getchar()){for(b=j=0;j<10;++j)
{if(c=="aeiouAEIOU"[j]){c+=s[j%=5];b=1;break;}}
printf("%c%s",c,f[b?j:5]);}}

Sadece arama tabloları ve bir boolean anahtarı.

Lookup each letter in table (string) of vowels; if found, then modify it according to the rule in table s. Print each character followed by a string: if a vowel was found, print the character modified by the value in s followed by the rest of the syllable stored in table f; if a vowel was not found, print the original character and an empty string.



0

Ruby, 102 93 91 88 78 bytes

gsub(/[#{b='aeiouAEIOU'}]/){'obounuiniapiikiOboUnuIniApiIki'[b.index($&)*3,3]}

Explanation:

Execute the line like ruby -pe "gsub(/[#{b='aeiouAEIOU'}]/){'obounuiniapiikiOboUnuIniApiIki'[b.index($&)*3,3]}", next up type, for example, Australia it should output: Oboikistroboliniobo.

It's pretty straightforward, replace all vowels with a substring based on the index of the to-be replaced vowel in (b), times 3 and the next 3 characters in the translation string.


1
I suspect the leading and trailing quotation marks (and internal escapes if the input has quotation marks) in the output might disqualify this. Anyway, you can save two bytes by moving the assignment of b into the Regexp (/[#{b=...}/).
Jordan

1
I think the space p $* is unnecessary
Cyoce

1
Use the -p flag to save additional bytes. ruby -pe 'gsub(/[#{b="aeiouAEIOU"}]/){"obounuiniapiikiOboUnuIniApiIki"[b.index($&)*3,3]}'
Value Ink

I count 78 + 2 (-pe). How do you get 71?
Not that Charles

@NotthatCharles do the characters needed for execution really matter in this case? I just didn't count them.
Biketire

0

TI-BASIC, 201 197 195 bytes

Ans+" →Str1:"AEIOUaeiou→Str2:"OUIAIouiai→Str3:"bonunipiki→Str4:1→X:While X<length(Str1:inString(Str2,sub(Str1,X,1→A:5fPart(.2A→B:If A:sub(Str1,1,X-1)+sub(Str3,A,1)+sub(Str4,2B-1,2)+sub(Str1,X+1,length(Str1)-X→Str1:X+1+2(A>0→X:End:sub(Str1,1,length(Str1)-1

To think that I'd find another TI-BASIC answer here!

Anyway, the input is an English string in Ans.
The output is the translated string.

Examples:

"HE
HE
prgmCDGF1A
HUnu
"Hello
Hello
prgmCDGF1A
Hunullapi

Explanation:
(Newlines added for readability. Multiple lines from the same line will be denoted with a : in the following code block.)

Ans+" →Str1                     ;append a space to the input string and store the result
                                ; in "Str1"
"AEIOUaeiou→Str2                ;store the upper- and lowercase vowels in "Str2"
"OUIAIouiai→Str3                ;store the beginning letter of each corresponding translated
                                ; vowel in "Str3"
"bonunipiki→Str4                ;store the remaining letters of each translated vowel
                                ; in "Str4"
1→X                             ;store 1 in "X"
While X<length(Str1             ;loop until all English letters have been checked
inString(Str2,sub(Str1,X,1→A    ;get the current letter and store its index in "Str2"
                                ; into "A"
5fPart(.2A→B                    ;get which translated vowel end should be used
                                ; B ranges from 1 to 5
If A                            ;if the current letter is a vowel
sub(Str1,1,X-1)                 ;extract the substring of the input before the
                                ; current letter
: +sub(Str3,A,1)                ;append the translated vowel start
: +sub(Str4,2B-1,2)             ;append the translated vowel end
: +sub(Str1,X+1,length(Str1)-X  ;append the remaining substring of the input
: →Str1                         ;store the result of these concatenations into "Str1"
X+1+2(A>0→X                     ;check if A>0 (if the current letter was a vowel)
                                ; if true, increment "X" by three
                                ; if false, increment "X" by one
End
sub(Str1,1,length(Str1)-1       ;remove the trailing space and store the result in "Ans"
                                ;implicit print of "Ans"

Notes:

  • TI-BASIC is a tokenized language. Character count does not equal byte count.

  • Lowercase letters in TI-BASIC are two bytes each.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.