Переводчик с английского на иностранный


18

брифинг

Иностранцы поселились на земле и, как ни странно, их алфавит точно такой же, как и у нас. Их язык также очень похож на наш с некоторыми очень четкими и легко вычисляемыми различиями.

Вызов

Возьмите строку и выведите эквивалент языка иностранца. Перевод работает так:

Поменяйте местами все гласные в слове с соответствующими:

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

Вы также можете написать другого переводчика для перевода Alien-> English, однако это не обязательно.

Примеры

Input: Shaun
Output: Shoboikin

Input: Java
Output: Jobovobo

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

Если гласный написан с заглавной буквы, тогда вы пишете с заглавной буквы первую букву.

Input: Alan
Output: Obolobon

Input: Australia
Output: Oboikistroboliniobo

правила

  • Применяются стандартные лазейки
  • Должен работать для текста, который содержит новые строки
  • Вы можете написать функцию, лямбду или полную программу

    Capingrobotikilobotiniapins apin wrinitining thunu runuvunursunu trobonslobotapir!


Я не уверен, что вы также можете написать другой переводчик, чтобы переводить иностранца-> английский должен означать. Можем ли мы написать обратный переводчик вместо обычного?
Деннис

4
Может быть, это только я, но это не очевидно для меня, что также несет этот смысл здесь. Во всяком случае, я не уверен, как это правило, если оно не является частью реальной задачи.
Деннис

@Dennis Ты немного капризный, но я отредактировал его, чтобы сделать его более понятным.
Шон Уайлд,

2
Почему требование перевода строки? На мой взгляд, в этом нет необходимости, и это ничего не добавляет к основному смыслу задачи.
Аднан

1
Может вход содержит любой символ ASCII или только подмножество. Например, будут ли когда-нибудь цифры на входе?
Райли

Ответы:


14

Haskell, 100 91 байт

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

5
Hoboskunull наверняка
.

12

TI-Basic, 173 + 59 + 148 = 380 байт

Надеемся, что инопланетяне используют калькуляторы TI-83/84;)

Основная программа, 173 байта

БОНУС: Оставьте вторую или третью строку в зависимости от того, хотите ли вы нормального или обратного переводчика.

"("+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

Подпрограмма ( prgmQ), 59 байт:

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

Подпрограмма ( prgmR), 148 байт:

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 ~представляет токен 0x81и @представляет токен 0x7F, узнайте больше здесь .

PPS Часть почему эти программы имеют высокое количество байт , так как sub(, inString(, length(, и все строчные буквы два байта каждый ...


Я думаю, что вы перепутали prgmRи prgmQв своем коде заголовки однажды?
Byte Commander

Да, спасибо, что поймали этого @ByteCommander :)
Timtech

8

Perl, 56 байт

Включает +1 для -p

Внести вклад в STDIN

alien.pl:

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

Работает, как показано, но заменяет \xXXэкранирование на фактический персонаж, чтобы получить заявленный счет


1
+1 Проголосовал только за чужой аватар. Шучу, решение тоже хорошее.
Хаотично

1
Иисус Христос .. Perl в лучшем виде, дамы и господа.
Прииду Нимре

6

седьмой 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,

Это работает для ввода, который содержит переводы строки?
Иордания

@ Иордания sed читает "одна строка за раз". Таким образом, он будет обрабатывать все до первой новой строки, печатать ее, печатать новую строку, а затем начинать заново, если текста больше.
Райли

Ах, конечно. J
Иордания

@ Джордан Это не было правилом, когда я писал это, но все равно получилось.
Райли

6

Питон, 99 95 93 байта

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

На ideone.com ...

Довольно просто Просто возьмите индекс, в котором мы находим каждый символ в списке гласных, и используем его, чтобы получить три символа, которые нам нужны. Если он не найден, .find()возвращается, -1поэтому просто вставьте текущий символ в конец строки. Пробелы необходимы, поэтому ни одна буква "a"не содержит добавленных c. Переведенные гласные сгруппированы по порядку букв (первая буква каждого перевода, затем вторая, затем третья).


Ух, хороший творческий подход. Я впечатлен :)
Byte Commander

1
Вы можете удалить пробел в["aeiouAEIOU".find(c)::11] for
acrolith

6

05AB1E , 28 27 20 байт

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

Попробуйте онлайн!

Unuxplobonobotiniapin

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

2
Ини лапивуну зияет!
Шон Уайлд,

@BasicallyAlanTuring: у меня ушло слишком много времени, чтобы перевести это в моей голове. Я думаю, что мне нужен обратный переводчик: P
Emigna

2
Пойдите для этого, не должно быть слишком трудно: P
Шон Уайлд

Страшно, я думаю, это говорит о том, что я люблю гольф.
датагод

Я изменил свой вопрос, из-за чего вы отвечаете неверно. Это должно работать с новыми строками
Shaun Wild


5

Python, 129 байт

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)

Посмотреть это работает на ideone.com

Вот более красиво отформатированная версия:

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)

Наиболее интересными являются те, { ... }.get(l.lower(), l)которые пытаются найти lв словаре букву, сохраненную в преобразованном в нижний регистр, и либо возвращает переведенную версию (если найдена), либо оригинальную букву,
и [str, str.capitalize][ord(l) < 91]( ... )которая проверяет, была ли оригинальная буква заглавной ( Кодовая точка ASCII ниже 91), а затем либо вызывает str()функцию с буквой в качестве аргумента (если это не заглавная буква, ничего не делает), либо str.capitalize()функцию (преобразует первую букву строки аргумента в верхний регистр).


5

C (gcc) , 150 141 136 134 байта

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;}

Попробуйте онлайн!

Основано на ответе @algmyr и -8 благодаря @ ASCII-only

Менее гольф-версия

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;}
Только для ASCII

возможно также 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]));}
Только для 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]);}
Только для ASCII

4

Пакет, 215 байт

@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. Обработка посимвольных символов удобна с учетом регистра.


Пакетный режим - худший инструмент для всего, не так ли? (Ну, по крайней мере, вы победили TI-Basic :) Кстати, приятно видеть кодгольфа в Batch!
YoYoYonnY

4

Pyth, 42 байта

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

Программа, которая принимает входные данные в STDIN и печатает выходные данные.

Попробуйте онлайн

Как это устроено

#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 байт

Я действительно не хотел избавляться от своей привычки всегда выполнять основные функции при кодировании C, но это существенно короче, чем версия с main, и таким образом я получил еще одно письмо, чтобы написать то, что я хотел!

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]));}

комментарии

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 */
}

В Си есть что-то особенное, и как ужасно ты можешь быть с указателями и тому подобным.



@ceilingcat Я бы сказал, опубликовать свой ответ самостоятельно. Он достаточно разошелся, чтобы заслужить свой ответ. :)
algmyr


3

Javascript (ES6), 94 93 92 байта

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

Сохранено 1 байт благодаря edc65
Сохранено 1 байт благодаря Нейлу

демонстрация

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
Чтобы проверить возвращаемое значение .indexOfи .searchиспользовать ~вместо<0
edc65

1
Я посмотрел, чтобы увидеть, что произойдет, если вы замените только гласные, и я изначально получил, s=>s.replace(/[aeiou]/gi,c=>"ouiaiOUIAI"[n="aeiouAEIOU".indexOf(c)]+"bnnpk"[n%=5]+"ouiii"[n])что все еще 93 байта. Но поскольку cтеперь известно, что это гласная, вы можете использовать ее searchвместо indexOfсохранения байта!
Нил

@ Нил - Отлично! Я попробовал оба, на самом деле, но не думал объединить их.
Арно

2

Java 8, 172 байта

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;
}

И пришелец вернулся на английский (171 байт):

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 байт

Строка для перевода находится в переменной 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 байт

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

Не уверен, можно ли получить более короткую программу, используя IgnoreCase->Trueвместе с проверкой случая.


2

C 178 байт

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 ... Например, 255 в памяти как ff 00 00 00, но если для 255 есть другой порядковый номер, мы имеем 00 00 00 ff и выводим строку void ...
РосЛюП

2

C 163 162 159 байт

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";в цикл сохраняет 1 байт
Мукул Kumar


2

C #, 133 121 байт

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

Изменить (спасибо milk)

спасибо :) Я на самом деле знаю эту перегрузку, но как-то совершенно забыл это при написании этого ..

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

Вы можете использовать Select(char, int)перегрузку, так что вам не нужно объявлять iи можно поместить все это в одну строку. s=>string.Concat(s.Select((c,i)=>(i="AIUEOaiueo".IndexOf(c))>-1?"OboIniIkiUnuApioboiniikiunuapi".Substring(i*3,3):c+""));
молоко

2

C 207 202 байта (спасибо Cyoce)

#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) Я ненавижу опускать тип перед любым видом объявлений

2) Я не очень люблю ставить неиспользуемый код (без функции main ()).

Использование:

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

Добро пожаловать в PPCG!
Мартин Эндер

@MartinEnder, это неожиданно ... но спасибо :)
Xdevelnet

(c=getchar())!= EOFможет стать~(c=getchar())
Cyoce


1

Swift 2.2 196 байт

¯ \ _ (ツ) _ / ¯

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)
}

Нужны ли пробелы var r = [?
Cyoce

Да, в приложении для игровых площадок, если вы не ставите пробел между заданиями, оно выдаст вам ошибку и предложит вам добавить пробелы. Свифт, наверное, один из худших языков для игры в гольф, но я подумал, что было бы интересно попробовать.
Danwakeem

И было интересно, что это не дало мне этой ошибки, когда я назначал переменную замыканию. Отсюда
пожимание

да, я тоже это заметил Вот почему я был смущен.
Cyoce

0

Perl 6 ,  84  82 байта

{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' )
}

Использование:

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 байта

(новые строки добавлены для ясности)

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]);}}

Просто таблицы поиска и логический переключатель.

Поиск каждой буквы в таблице (строка) гласных; если найдено, то измените его в соответствии с правилом в таблице s. Выведите каждый символ, за которым следует строка: если найден гласный символ, выведите символ, модифицированный значением, за sкоторым следует остаток слога, хранящийся в таблице f; если гласный не был найден, выведите исходный символ и пустую строку.



0

Рубин, 102 93 91 88 78 байт

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

Объяснение:

Выполнить строку ruby -pe "gsub(/[#{b='aeiouAEIOU'}]/){'obounuiniapiikiOboUnuIniApiIki'[b.index($&)*3,3]}", следующего типа вверх, к примеру, Australiaон должен вывод: Oboikistroboliniobo.

Это довольно просто, замените все гласные на подстроку, основанную на индексе заменяемого гласного в (b), раз 3 и следующие 3 символа в строке перевода.


1
Я подозреваю, что начальные и конечные кавычки (и внутренние экранированные символы, если на входе есть кавычки) в выходных данных могут это дисквалифицировать. В любом случае, вы можете сохранить два байта, переместив присваивание bв регулярное выражение ( /[#{b=...}/).
Джордан,

1
Я думаю, что пространство p $*не нужно
Cyoce

1
Используйте -pфлаг, чтобы сохранить дополнительные байты. ruby -pe 'gsub(/[#{b="aeiouAEIOU"}]/){"obounuiniapiikiOboUnuIniApiIki"[b.index($&)*3,3]}'
Value Ink

Я считаю 78 + 2 ( -pe). Как вы получаете 71?
Не то чтобы Чарльз

@NotthatCharles действительно ли символы в этом случае имеют значение для выполнения? Я просто не считал их.
Biketire

0

TI-BASIC, 201 197 195 байтов

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

Думать, что я найду другой ответ TI-BASIC здесь!

В любом случае, ввод - это английская строка в Ans.
Результатом является переведенная строка.

Примеры:

"HE
HE
prgmCDGF1A
HUnu
"Hello
Hello
prgmCDGF1A
Hunullapi

Объяснение:
(Новые строки добавлены для удобства чтения. Несколько строк из одной и той же строки будут обозначены символом :в следующем блоке кода.)

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"

Примечания:

  • TI-BASIC - это токенизированный язык. Количество символов не равно количеству байтов.

  • Строчные буквы в TI-BASIC по два байта каждая.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.