Розшифруйте Baby-talk!


26

Коли немовлята відкривають рот, вони не просто хизуються. Вони насправді говорять у високорозвиненому шифрі для дорослих ...

Шифр для немовляти

Коли дитина розмовляє, це може виглядати приблизно так, як gogooa gagooook aagaaoooy кожен розділ, що розділяється з одним пробілом, представляє символ (тому приклад вище представляє 3 символи).

Щоб розшифрувати розділ, ми повинні порахувати кількість As і Os, який він містить. Однак ми вважаємо лише ті, що примикають до іншої голосної. Наприклад, A в "gag" не зараховується, але і A, і O в "gaog".

Підрахунок наведеного вище прикладу виглядатиме так:

Section    | Num Os | Num As

gogooa     | 2      | 1
gagooook   | 4      | 0
aagaaoooy  | 3      | 4

Потім ми використовуємо ці значення для перетворення вхідних даних у звичайний текст на полібієвій площі. Це 5x5 подання англійського алфавіту, опускаючи "J" (будь ласка, зауважте, що в режимі бебі-розмови до таблиці застосовуються правила підрахунку 0):

  0 1 2 3 4
0 A B C D E
1 F G H I K
2 L M N O P
3 Q R S T U
4 V W X Y Z

Використовуючи число Os як стовпець, а число As як рядок, ми знаходимо, який символ представляє кожен розділ:

Section    | Num Os | Num As | Character

gogooa     | 2      | 1      | (2,1) -> H
gagooook   | 4      | 0      | (4,0) -> E
aagaaoooy  | 3      | 4      | (3,4) -> Y

Що говорить нам про те, що дитина просто казала "ГО".

Примітки :
- Якщо розділ, що представляє символ, має більше 4 As або Os, ігноруйте додаткові дані, оскільки 4 - це максимальне значення таблиці. - Для цього завдання Y не є голосним - лише A, E, I, O і U.

Змагання

Ваше завдання - створити повну програму, яка займає один ввід, слово на дитячій мові та друкує його в простому тексті.

  • Ваша програма повинна мати можливість приймати вхід у великі, малі та комбінації обох.
  • Вхід буде містити лише літери алфавіту ASCII (AZ та az), з окремими пробілами, щоб розділити слова дитини.
  • Вихідний текст може бути в будь-якому випадку.
  • Ви повинні взяти вхід STDINі надрукувати на простому тексті STDOUT. Якщо у вашій мові таких немає, використовуйте найближчий еквівалент.
  • Це , тому найкоротший код у байтах виграє - але будь-яке рішення вітається.

Випробування

'GLOOG KAKAAOOO ARGOOO OOOOOGUGUU' -> CODE
'oaka pooopaa gaau augu' -> GOLF
'Aoao U oOOAoa oaoAoo aoAoAOa' -> NAPPY
'GUG gAGaA gOougOou' -> ALE
'OOaGOG GoGOOoGoU gAA bLAA GOUGoOUgAIGAI' -> HELLO

3
'GUG gAGaA gOougOou' -> 'ALE'Діти п'ють ель? : D
Kritixi Lithos

7
тільки найкраще: D @KritixiLithos
FlipTack

1
Вимога у справі здається непотрібною, правда? Все, що ви робите, - це додавання .toUpperCase()або подібний виклик функції, а не фактично стимулююча проблема
MayorMonty

1
Як gogooaмає 2 o? І як у вас gagooookє 0 a?
Чарівний восьминіг Урна

1
Власне, @EriktheGolfer, ось так FAG: P
FlipTack

Відповіді:


6

05AB1E , 46 байт

lð¡vyžNvyð:}ð¡D€g1›ÏJ©'a¢4‚W5*®'o¢4‚Ws\+A'j-è?

Спробуйте в Інтернеті!

Пояснення кроками

  1. розділити на пробіли, щоб утворити слова
  2. замініть консонанти в словах пробілами
  3. розділити слова на пробіли, щоб утворити групи голосних
  4. видаліть групи голосних довжиною, меншою за 2
  5. отримайте хв підрахунку (а) і 4, помножте на 5
  6. отримайте хв. підрахунку (о) та 4
  7. додати рахунки
  8. отримати літеру в цьому індексі алфавіту (виключаючи "j")

Хороша робота, вітаю з перемогою
FlipTack

Мені подобається підхід розщеплення за приголосними, я про це не думав
FlipTack

9

Perl, 82 байти

Включає +1 для -a

Введіть дані про STDIN:

perl -M5.010 baby.pl <<< "OOaGOG GoGOOoGoU gAA bLAA GOUGoOUgAIGAI"

baby.pl:

#!/usr/bin/perl -a
say map{$A=$O=$_=uc;y/AEIOU/@/c;s/(\B.|.\B)/$$1+=$$1<4/eg;(A..I,K..Z)[5*$A+$O]}@F

Це передбачає досить недавню версію perl, де це -aвипливає -n. Якщо ваш perl занадто старий, вам потрібно буде додати явний -nпараметр.

Він також передбачає, що немовлята не можуть сказати загальні рядки ASCII, які починаються на зразок цифр 1 this will not work


це правильне припущення. Я обов’язково зазначу це у питанні
FlipTack

6

мозковий ебать, 656 байт

+[[>>>,[>++++[<-------->-]]<]<<[>]<-[+[<+>>+<-]----[>>+<<----]>>+[<[-<]<[>]>>-]-<[[-]>+<]>[[-[->]<<+>]<->>>]<<<[>>>+<<<-]<<-]>>>>>[[<+>>+<-]----[>-<----]>--[----<]<[>]>[----<]<[>]>[------<]<[>]>[------<]<[>]><+>[[-]<->]>>]<<<[>->]<[<]>[>[<<<<<+>>>>>>+<-]<<<<]<[-]>>>>[<[>[>+<-]<-]>[-]->[<+>-]>>]<<<[-<----[>-<----]>[>+>+<<-]+>[<->[-]<]<[<]>[[<<<]<+>>>>[>>>]<<<-]>+>--------------[<->[-]]<[-<<<<[<<<]>+>>[>>>]>]<<<<]<[<+<+>>-]>++++[<<[->]>[<]>-]+<<[[-]++++<[-]>>]>[<]<<[>+<-]>>+>->[>+>+<<-]<++++[>>[-<]<[>]<-]>>[[-]++++>[-]]<<<[>]<->>>>[<+>-]<[<<<+>>>-]<<<<[>+++++<-]>[>+>+<<-]<++++++++[>>[-<]<[>]<-]>>[[-]>+<]----[>+<----]>++.[-]+>>>,[<++++[>--------<-]]>]

Це був досить хороший спосіб вбити пару годин.

Потрібен інтерпретатор, який використовує 8-бітові клітинки для обгортки, дозволяє перейти ліворуч від комірки 0 і повертає 0, якщо ,використовується, коли stdin порожній. На мій досвід, це найпоширеніші налаштування.

Ця програма не вважає Y голосним, але якщо OP хоче цього, це легко виправити.

Здається, написання цього було б непростим завданням, але якщо ви знайомі з мовою, у коді немає нічого дивного чи нового. Стандартна тактика головного мовлення: прочитайте вхід, але переконайтеся, що ви залишаєте пару порожніх комірок між кожним байтом, використовуйте ці порожні комірки для зберігання даних про вхід, використовуйте збережені дані, щоб вирішити, як їх перетворити і виплюнути щось наприкінці . У цьому випадку отримано введення, встановіть усе на великі регістри, з’ясуйте, які комірки є голосними, викиньте цю інформацію після її використання, щоб визначити, які клітинки знаходяться поруч з голосними, встановіть усе, що не є голосним для деяких значення, яке ніколи не буде актуальним, тому вони пізніше не підуть, і ви в основному все зробили. Звідти вам просто потрібно порахувати свої AіO s, помножитиAs на 5 і додайте кількість Os, окремий регістр що-небудь вище 8, щоб уникнути J та output. Я вирішив обробляти це одне слово за один раз, а не брати весь вхід відразу, тому мені довелося встановити частину коду, яка читає stdin, щоб перерватися на 0 або 32, але це не надто велика проблема (просто оберніть віднімання на 32 умовно, щоб це не сталося, якщо значення вже 0, а потім виправте будь-які інструкції <чи >інструкції, які ви пропустили пізніше).

Я не знаю, наскільки це буде корисно, тому що я написав це здебільшого, щоб думки були прямими, а не як справжнє пояснення, але ось код з моїми коментарями та його первісне відступ:

+[[>>>,[>++++[<-------->-]]<]get an entire word of input
                            each character lowered by 32
                            two empty cells between characters
                            stops when reaching a space or null byte

any lowercase letters have become uppercase; anything with a value below 65 used
to be an uppercase character; fix it

<<[>]<-[+                for each character until hitting 1:
  [<+>>+<-]              make a backup
  subtract 64 from the character but stop if it hits 0
  ----[>>+<<----]>>+     generate the number 64
  [                      64 times:
    <[                     if the character is not 0:
      -                    subtract 1
      <                    go to a guaranteed 0 cell to break the loop
    ]

    we're either on the character or to the left of it; sync up
    <[>]

  >>-]
  -<[[-]>+<]>            logical NOT of character

  [                      if logical NOT returns true:
    [-[->]<<+>]<-          add 32 to backup of character
  >>>]

  <<<[>>>+<<<-]          move copy over to make room
<<-]
  >>>>>[                 for each character:
  [<+>>+<-]              make copies
  ----[>-<----]>--       check if it's A
  [----<]<[>]>           check if it's E
  [----<]<[>]>           check if it's I
  [------<]<[>]>         check if it's O
  [------<]<[>]>         check if it's U

  IF YOU NEED TO ADD Y; THIS IS THE PLACE

  <+>[[-]<->]            logical NOT to complete vowel check
>>]

<<<[                if the last char is a vowel; prevent a side effect
  >->
]

<[<]>[                 for each character:
  >[                     if it's a vowel:
    <<<<<+>>>>>>+<-          leave a flag to the left and right to show that a
  ]                          vowel is adjacent
<<<<]

<[-]>                  clean up a side effect left behind if first char is vowel

>>>[                   for each char:
  <[                     if it's adjacent to a vowel:
    >[>+<-]<-              move it to the side
  ]
  >[-]-                otherwise; destroy it
  >[<+>-]              move backup over if it exists (subtracting 1)
>>]

all characters without a vowel beside them have been set to 255
all characters with a vowel beside them are set to itself minus 1

notable charaters are: 'A' minus 1 = 64
                       'O' minus 1 = 78

<<<[                 for each character:
  -<----[>-<----]      subtract 64
  >[>+>+<<-]           make a copy
  +>[<->[-]<]<[<]>     logical NOT

  [[<<<]<+>>>>[>>>]<<<-] if NOT returns true; record an A

  >+>--------------  subtract 14 from backup

  [<->[-]]<          logical NOT
  [-<<<<[<<<]>+>>[>>>]>] if NOT returns true; record an O
<<<<]


<[<+<+>>-]           make a backup of A count
>++++[<<[->]>[<]>-]  subtract 4 but don't go below 0
+<<[                   if the char was greater than 3:
  [-]++++<[-]>>          put 4 there
]
>[<]                  resynchronise
<<[>+<-]              if there were fewer than 4 As put the number back

same thing but for the O count

>>+>->[>+>+<<-]       make a backup of O count
<++++[>>[-<]<[>]<-]   subtract 4 but don't go below 0
>>[                     if the char was greater than 3:
  [-]++++>[-]             put 4 there
]
<<<[>]                resynchronise
<->>>>[<+>-]          if there were fewer than 4 Os put the number back

<[<<<+>>>-]<<<<[>+++++<-] A*5 plus B = index of character to output

>[>+>+<<-]            make a backup
<++++++++[>>[-<]<[>]<-] subtract 8 but don't go below 0
>>[[-]>+<]            if the result is nonzero it is late enough in the alphabet
                      that it must be increased by 1 to exclude J as a possible
                      output
----[>+<----]>++      add 65 to make it a letter
.[-]+>>>,             output and get new input
[<++++[>--------<-]]> sub 32 if not 0
]

Це дивовижно ... та так, під голосними я мав на увазі a, e, i, o, u :)
FlipTack

6

JavaScript (ES6), 145 байт

alert(prompt().replace(/\S+ ?/g,x=>(g=r=>(q=(x.match(/[aeiou]{2,}/gi)+"").split(r).length-1)>4?4:q,(g(/a/i)*5+g(/o/i)+10)*20/19|0).toString(36)))

Замінює кожне слово (та наступний пробіл) на відповідну букву.

s.split` `.map().join`` на 3 байти довше:

alert(prompt().split` `.map(x=>(g=r=>(q=(x.match(/[aeiou]{2,}/gi)+"").split(r).length-1)>4?4:q,(g(/a/i)*5+g(/o/i)+10)*20/19|0).toString(36)).join``)

Зараз у виклику зазначено, що ви повинні написати " повну програму, яка приймає введення [від STDIN] і друкує її [до STDOUT]." Це означає, що відповіді, як написані в даний час, відповіді заборонені.
CAD97

Добре подання, але, як сказав CAD, це повинно бути повноцінною програмою. Я не дуже знайомий з JavaScript, але я думаю, що підказка та попередження є найкращими еквівалентами STDIN / OUT, правда?
FlipTack

@ Flp.Tkc Так, якщо ви не використовуєте Node або якесь інше середовище. Я оновлю код.
ETHproductions

питання говорить або найближчий еквівалент. Для js у веб-переглядачі підказки та сповіщення досить близькі
Фред Старк

5

Perl, 159 +1 = 160 байт

+1 байт для прапора -n Пробіл не входить до коду і надається лише для читабельності.

for(split$",lc){
    $b=0;
    @a=sort/([ao](?=[aeiou])|(?<=[aeiou])[ao])/g;
    $b++until$b>$#a||$a[$b]eq o;
    $c=($d=$#a-$b+1)>4?4:$d;
    $b=$b>4?4:$b;
    print+(a..i,k..z)[5*$b+$c];
}

Код розбиває введення на пробіли та перетворює кожне дитяче слово в малі, перш ніж продовжувати. У регулярному вираженні знаходять усі голосні звуки a або o, за якими слідує інша голосна або передують голосній, і сортує їх, a на початку, o в кінці, потім знаходить індекс першого 'o'. Якщо кількість решти збігів (ака, кількість 'a') більша за 4, тоді ми дбаємо про 4 a, а якщо їх більше 4 o, ми дбаємо про 4 o. Потім він витягує відповідну букву з матриці і роздруковує її, а потім переходить до наступного дитячого слова.


4

Brainfuck, 283 байт

,[[<[>-[>>>-<<<----[----[>+<------[>-<------[<[-]>>>>[-]->>[-]<<<<<-]]]]]>[>>>>+
<<<<-]>>+<[>[>+<-]>>[>+<-]<<<-]<,<<[>>>+<<<-]>]>+[<+>[-<<]>[[-]+++++[<++++++>-]<
+<]>>>]<]>>[-]>+>>+[[-]>[<+>-[<+>-[<+>-[<+>[-]]]]]<<<]>->[>+<-[[>+<-]>>+>]>[+>--
--[->]]]+[-<+]>>+++++++++++++[>+++++<-]>.,]

Відформатовано:

,
[
  [
    <
    [
      >-
      [
        not a
        >>>-<<<
        ----
        [
          not e
          ----
          [
            not i
            >+<
            ------
            [
              not o
              >-<
              ------
              [
                consonant
                <[-]>
                >>>[-]->>[-]<<<<<-
              ]
            ]
          ]
        ]
      ]
      >[>>>>+<<<<-]> >+<
      [
        prev was vowel
        >[>+<-]>>[>+<-]<<<-
      ]
      <,<<[>>>+<<<-]
      >
    ]
    >+
    [
      <+>[-<<]
      >[[-]+++++[<++++++>-]<+<]
      >>>
    ]
    <
  ]
  >>[-]>+>>+
  [
    [-]
    >[<+>-[<+>-[<+>-[<+>[-]]]]]<
    <<
  ]
  >->
  [
    >+<-
    [
      [>+<-]
      >>+>
    ]
    >
    [
      +>----[->]
    ]
  ]
  +[-<+]
  >>+++++++++++++[>+++++<-]
  >.,
]

Це працює з або без закінчення нового рядка на вході.

Спробуйте в Інтернеті.

Кожен символ обробляється mod 32 (з потоком управління таким чином, що код, що реалізує операцію mod, виникає лише один раз у програмі). Це дає можливість нечутливості випадку, а також згортання символу простору та EOF в єдиний випадок. Зворотний новий рядок трактується так само J, як і це не впливає на результат.

Ескіз макета пам’яті:

0 x C c y a A b B

де cсимволом введення Cє char mod 32, xчи є голосним, yчи був попередній char голосним, Aі Bчи вважаються дійсні (поряд з голосними) aі oсимволи відповідно, і aіb є їхніми відповідними буферами, які скопіювати чи очистити залежно від того, чи є суміжний голосний.

Коли буде досягнуто пробіл або EOF, робиться деяке жонглювання, щоб зменшити число, що перевищує 4, і пропустити літеру J, після чого роздруковується розшифрований символ.


це дуже близько до реалізації Java в кількості байтів ... капелюхи для вас
hstde

це злочин, що в цьому менше балів, ніж у моєму банальному рішенні, яке перевищується вдвічі
підземниймонорельс

@undergroundmonorail Це робить мене співучасником!
Мітч Шварц

3

PHP, 163 байти

<?php for(;$c=preg_replace('/(?<![AEIOU]).(?![AEIOU])/','',strtoupper($argv[++$i]));$j=min($d[79],4)+5*min($d[65],4),print range(A,Z)[$j+($j>8)])$d=count_chars($c);

Більш прочитана версія:

<?php
for (
    ;
    $c = preg_replace(
        '/(?<![AEIOU]).(?![AEIOU])/',
        '',
        strtoupper($argv[++$i])
    );
    $j = min($d[79], 4) + 5 * min($d[65], 4),
    print range(A, Z)[$j + ($j > 8)]
)
    $d = count_chars($c);

Тести:

$ php babytalk.php GLOOG KAKAAOOO ARGOOO OOOOOGUGUU
CODE
$ php babytalk.php oaka pooopaa gaau augu
GOLF
$ php babytalk.php Aoao U oOOAoa oaoAoo aoAoAOa
NAPPY
$ php babytalk.php GUG gAGaA gOougOou
ALE
$ php babytalk.php OOaGOG GoGOOoGoU gAA bLAA GOUGoOUgAIGAI
HELLO

3

Java 8, 272 266 251 249 байт

interface M{static void main(String[]i){String z="(?=[AEIOU])|(?<=[AEIOU])";for(String s:i[0].split(" ")){int a=s.split("(?i)A"+z+"A",-1).length-1,o=s.split("(?i)O"+z+"O",-1).length-1,t=(a>4?4:a)*5+(o>4?4:o);System.out.printf("%c",t>9?t+66:t+65);}}}

-6 байт завдяки @Joba .
-1 байт перетворення з Java 7 на 8 та 14 16 додаткових байтів, збережених зміною частини друку.

Пояснення:

Спробуйте тут.

interface M{                   // Class:
  static void main(String[]i){ //  Main method:
    String z="(?=[AEIOU])|(?<=[AEIOU])";
                               //   Regex-part for look-ahead or look-behind of vowels
    for(String s:i[0].split(" ")){  
                               //    Loop over the program-arguments
      int a=s.split("(?i)A"+z+"A",-1).length-1,
                               //     The amount of A's with adjacent vowels
          o=s.split("(?i)O"+z+"O",-1).length-1,
                               //     The amount of O's with adjacent vowels
          t=(a>4?4:a)          //     If `a` is larger than 4, just take 4, else take `a`
            *5                 //     Multiply it by 5
            +(o>4?4:o);        //     And add 4 if `o` is larger than 4, else take `o`
       System.out.printf("%c", //     Print a character:
        t>9?                   //      If `t` is larger than 9 (index of J)
         t+66                  //       Take character unicode (skipping J)
        :                      //      Else:
         t+65);                //       Take character unicode (prior to J)
    }                          //   End of loop
  }                            //  End of main-method
}                              // End of program

1
Зараз у виклику зазначено, що ви повинні написати " повну програму, яка приймає введення [від STDIN] і друкує її [до STDOUT]." Це означає, що відповіді, як написані в даний час, відповіді заборонені.
CAD97

@ CAD97 Спасибі, якось прочитайте минуле. Я відповідно відредагував свою відповідь.
Kevin Cruijssen

1
Замість використання верхнього рядка великого регістру додайте прапорець інваріантного регулярного виразного символу (? I) на початку s.split
Joba

2

Python 3, 163 162 157 146 байт

import re
for W in input().upper().split():S=''.join(re.findall("[AEIOU]{2,}",W)).count;I=min(S('A'),4)*5+min(S('O'),4);print(end=chr(65+I+(I>9)))

Використовує регулярний вираз, щоб знайти весь рядок голосних більше 2, підраховує As і Os з максимумом 4, а потім друкує.


2

APL, 60

{⎕A[a+9<a←5⊥+/¨'ao'∊⍨¨⊂⍵/⍨0(,∨,⍨)2∧/⍵∊'aeiou']}¨' '(≠⊂⊢)819⌶

Зауважте, що ⎕IO ← 0 і ⎕ML ← 3

Приклад:

fn←{⎕A[a+9<a←5⊥+/¨'ao'∊⍨¨⊂⍵/⍨0(,∨,⍨)2∧/⍵∊'aeiou']}¨' '(≠⊂⊢)819⌶
fn 'Aoao U oOOAoa oaoAoo aoAoAOa'
NAPPY

Працює в Dyalog 15.0 , оскільки це версія, в якій 819⌶ було введено для рядкового рядка.


Ви впевнені, що кинули J, а не К?
FrownyFrog


1

R, 261 байт

Я думаю, що я витратив занадто багато часу просто на те, щоб працювати над цим, і я вважаю, що це непотрібне складне рішення, хоча воно працює. Враховуючи stdin, важливо, щоб рядок був укладений у лапки.

x=el(strsplit(toupper(scan(,""))," "))
cat(apply(sapply(c("A","O"),function(y)sapply(sapply(regmatches(x,gregexpr("[AEIOU]{2,}",x,)),paste,collapse=""),function(s)min(sum(el(strsplit(s,""))%in%y),4)))+1,1,function(z)t(matrix(LETTERS[-10],5))[z[1],z[2]]),sep="")

Використання чотирьох вкладених apply сімей теоретично можна скоротити до двох, використовуючи mapplyзамість цього. Але оскільки вхідні дані mapplyне будуть однакової довжини, коротша частина рециркулюється, що ускладнює речі, і я не міг знайти робоче рішення.

Якщо хтось зацікавився, я поясню пізніше пояснення.

Спробуйте всі тестові випадки на R-скрипці

Зверніть увагу, що ця версія приймає введення як аргумент функції замість stdin, оскільки scanне працює на R-скрипці. Крім того, додано новий рядок, щоб полегшити його читання.


0

Python 3, 262 байти

import re;f,b,v,n,r,l,t,g,a,o=re.findall,input().lower(),'aeiou',list(range(26)),'[aeiou]','abcdefghiklmnopqrstuvwxyz','',len,'a','o';del n[9],
for w in b.split():
 O,A=g(f(o+r,w))+g(f(r+o,w)),g(f(a+r,w))+g(f(r+a,w))
 if O>4:O=4
 if A>4:A=4
 t+=l[A*5+O]
print(t)

Менше гольф (коментарі - це змінні у скороченому коді):

import re
findAll = re.findall #f
babyTalk = input('Baby Talk: ').lower() #b
vowels = 'aeiou' #v
numbers = list(range(26)) #n
del numbers[9]
letters = 'abcdefghiklmnopqrstuvwxyz' #l
finalText = '' #t
length = len #g
regex = '[aeiou]' #r
o = 'o' #o
a = 'a' #a
for word in babyTalk.split(): #w in b
 Os = len(findAll('o[aeiou]', word)) + len(findAll('[aeiou]o', word)) #O
 As = len(findAll('a[aeiou]', word)) + len(findAll('[aeiou]a', word)) #A
 if Os > 4: Os = 4
 if As > 4: As = 4
 print(As, Os)
 finalText += letters[As*5+Os]
 print(finalText)

Спробуйте в Інтернеті!


Це не працює ні за слово blaoaoaog: переплетені голосні рахуються не один раз, даючи, zколи це має бути t(хоча це працює просто aaaooo, хоча я не можу зрозуміти, чому ....)
CAD97

@ CAD97 Ви говорите, що aooa має бути p, а не n?
nedla2004

не за призначенням; aooa== (2,2) == n, aoaoao== (3,3) ==t
CAD97

щойно перевірив це, і CAD правильний, gaoaoaogдрукує Z замість T. Я думаю, це тому, що ваш регекс підбирається [ao,oa,ao,oa,ao], який рахує 5,5, а потім обмежує його 4,4, друкуючи Z.
FlipTack

@ Flp.Tkc Ви знаєте, як це виправити? Я дуже новачок у регексе.
nedla2004

0

Котлін , 221 209 байт

Зараз набагато потворніше і повільніше, все в ім'я 11 байт

readLine()!!.toLowerCase().split(" ").map{fun
c(c:Char)=Regex("([aeiou]{2,})").findAll(it).fold(0){a,b->a+b.value.count{it==c}}.let{if(it>4)4 else it}
(('A'..'I')+('K'..'Z'))[c('a')*5+c('o')]}.forEach(::print)

Збережіть його у файлі (наприклад BabyTalk.kts) для запуску як сценарій. Або вищезазначений код може бути попередньо fun main(z:Array<String>)=складений і складений звичайно за вартість ще 26 байт.

Спробуйте в Інтернеті!

Відступ:

readLine()!!
    .toLowerCase()
    .split(" ")
    .map {
        fun c(c: Char) =
            Regex("([aeiou]{2,})")
                .findAll(it)
                .fold(0) {
                    a, b ->
                    a + b.value.count { it == c }
                }
                .let { if (it > 4) 4 else it }
        (('A'..'I') + ('K'..'Z'))[c('a') * 5 + c('o')]
    }
    .forEach(::print)

0

PHP, 124 129 121 120 125 байт

for(;$s=$argv[++$i];print chr((8<$O+=5*$A)+$O+65))for($k=$A=$O=0;$c=_&$s[$k++];$p=$c)$$c+=$$c<4&!trim($p.$s[$k]&__,AEIOU)[1];

Приймає дані з аргументів командного рядка. Бігайте з-nr або спробуйте в Інтернеті .

зламатися

for(;$s=$argv[++$i];            # loop $s through arguments
    print chr((8<$O+=5*$A)+$O+65)   # 3. map A and O counts to letter, print
)
    for($k=$A=$O=0;                 # 1. reset A and O counters
        $c=$s[$k++]&_;              # 2. loop $c through characters:
        $p=$c)                          # 2. remember current character as previous
        $$c+=                           # 1. increment counter for $c, if ...
            $$c<4&                          # it is < 4 and ...
            !trim($p.$s[$k]&__,AEIOU)[1];   # ... previous or next char is vowel

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.