Quando os bebês abrem a boca, eles não estão apenas cuspindo bobagens. Eles estão realmente falando em uma cifra altamente avançada e à prova de adultos ...
A Cifra de Conversa de Bebê
Quando um bebê fala, pode parecer algo como gogooa gagooook aagaaoooy
Cada seção separada por espaço único representa um caractere (portanto, o exemplo acima representa 3 caracteres).
Para decifrar uma seção, devemos contar o número de As e Os que ela contém. No entanto, contamos apenas aqueles que são adjacentes a outra vogal. Por exemplo, o A em 'gag' não conta, mas tanto o A quanto O em 'gaog' contam.
Contar o exemplo acima ficaria assim:
Section | Num Os | Num As
gogooa | 2 | 1
gagooook | 4 | 0
aagaaoooy | 3 | 4
Em seguida, usamos esses valores para converter a entrada em texto sem formatação em um quadrado Polybius. Esta é uma representação 5x5 do alfabeto inglês, omitindo 'J' (observe que, na conversa sobre bebês, as regras de contagem de 0 se aplicam à tabela):
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
Usando o número de Os como a coluna e o número de As como a linha, encontramos qual caractere cada seção representa:
Section | Num Os | Num As | Character
gogooa | 2 | 1 | (2,1) -> H
gagooook | 4 | 0 | (4,0) -> E
aagaaoooy | 3 | 4 | (3,4) -> Y
O que nos diz que o bebê estava apenas dizendo "HEY".
Notas :
- Se uma seção que representa um caractere tiver mais de 4 As ou Os, ignore os extras, porque 4 é o valor máximo na tabela. - Para esta tarefa, Y não é uma vogal - apenas A, E, I, O e U.
O desafio
Sua tarefa é criar um programa completo que receba uma entrada, uma palavra no idioma do bebê, e a imprima em texto sem formatação.
- Seu programa deve poder receber entradas em maiúsculas, minúsculas e uma mistura de ambas.
- A entrada conterá apenas letras do alfabeto ASCII (AZ e az), com espaços únicos para separar as palavras do bebê.
- O texto de saída pode estar em qualquer caso.
- Você deve pegar a entrada
STDIN
e imprimir o texto sem formataçãoSTDOUT
. Se o seu idioma não possuir, use o equivalente mais próximo. - Isso é código-golfe , então o código mais curto em bytes vence - mas qualquer solução é bem-vinda.
Casos de teste
'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
'GUG gAGaA gOougOou' -> 'ALE'
Bebês bebem cerveja? : D.toUpperCase()
ou chamada de função semelhante, e não um desafio realmente estimulantegogooa
tem 2 o's? E comogagooook
tem 0 a's?FAG
: PRespostas:
05AB1E , 46 bytes
Experimente online!
Explicação nas etapas
fonte
Perl, 82 bytes
Inclui +1 para
-a
Dê entrada no STDIN:
baby.pl
:Isso pressupõe uma versão perl recente o suficiente, onde
-a
implica-n
. Se o seu perl for muito antigo, você precisará adicionar uma-n
opção explícita .Também pressupõe que os bebês não podem dizer seqüências ASCII gerais que começam com dígitos como
1 this will not work
fonte
brainfuck, 656 bytes
Era uma maneira muito boa de matar algumas horas.
Requer um intérprete cerebral que usa células de quebra automática de 8 bits, permite que você vá para a esquerda da célula 0 e retorna 0 se
,
for usado quando stdin estiver vazio. Na minha experiência, essas são as configurações mais comuns.Este programa não considera Y uma vogal, mas se o OP o desejar, será uma solução fácil.
Parece que escrever isso seria uma tarefa assustadora, mas se você tiver alguma familiaridade com o idioma, não há nada de surpreendente ou novo no código. Táticas padrão para o cérebro: leia a entrada, mas certifique-se de deixar algumas células vazias entre cada byte, use essas células vazias para armazenar dados sobre a entrada, use os dados armazenados para decidir como transformá-la e cuspir algo no final . Nesse caso, foi a entrada, coloque tudo em maiúsculas, descubra quais células são vogais, jogue essas informações fora depois de usá-las para determinar quais células estão próximas às vogais, defina tudo o que não estiver próximo a uma vogal um valor que nunca será relevante, de modo que não atrapalhe mais tarde, e você está basicamente pronto. De lá você só tem que contar suas
A
s eO
s, multipliqueA
5 por 5 e adicionar o número deO
s, caso especial acima de 8 para evitar J e saída. Eu escolhi lidar com essa palavra de cada vez, em vez de pegar toda a entrada de uma só vez, então tive que configurar a parte do código que lê stdin para quebrar em 0 ou 32, mas isso não é um problema muito grande (só embrulhar a subtração de 32 em uma condicional por isso não aconteceria se o valor já é 0, então correta para qualquer<
ou>
instruções que perdeu mais tarde).Não sei como será útil, porque escrevi principalmente para manter meus pensamentos retos, e não como uma explicação real, mas aqui está o código com meus comentários e seu recuo original:
fonte
JavaScript (ES6), 145 bytes
Substitui cada palavra (e o espaço a seguir) pela sua letra correspondente.
s.split` `.map().join``
tem mais 3 bytes:fonte
Perl, 159 +1 = 160 bytes
+1 byte para o sinalizador -n. O espaço em branco não faz parte do código e é fornecido apenas para facilitar a leitura.
O código divide a entrada por espaços e converte cada palavra do bebê em letras minúsculas antes de continuar. O regex encontra todas as vogais a ou o que são seguidas por outra vogal ou são precedidas por uma vogal e as classifica, a's no início, o's no final e, em seguida, encontra o índice do primeiro 'o'. Se o número restante de correspondências (ou seja, o número de 'a') for maior que 4, então nos preocupamos com 4 a e, se houver mais de 4 o, importamos com 4 o. Em seguida, ele puxa a letra apropriada para fora da matriz e a imprime, depois passa para a próxima palavra do bebê.
fonte
Brainfuck, 283 bytes
Formatado:
Isso funciona com ou sem uma nova linha à direita na entrada.
Experimente online.
Cada caractere é processado mod 32 (com fluxo de controle, de modo que o código que implementa a operação mod ocorra apenas uma vez no programa). Isso permite a distinção entre maiúsculas e minúsculas, além de recolher o caractere de espaço e o EOF em um único caso. Uma nova linha à direita é tratada da mesma forma
J
que, que não afeta a saída.Esboço do layout da memória:
0 x C c y a A b B
onde
c
é o caractere de entrada,C
é o char mod 32,x
se é uma vogal,y
se o char anterior era uma vogalA
eB
são as contagens válidas (ao lado das vogais)a
eo
chars, respectivamente,a
eb
são seus respectivos buffers que ser copiado ou limpo, dependendo da existência de uma vogal adjacente.Quando um espaço ou EOF é atingido, é feito algum malabarismo para reduzir contagens maiores que 4 e para ignorar a letra
J
e, em seguida, o caractere decodificado é impresso.fonte
PHP, 163 bytes
Versão mais legível:
Testes:
fonte
Java 8,
272266251249 bytes-6 bytes graças a @Joba .
Conversão de -1 byte do Java 7 para 8 e
1416 bytes adicionais salvos pela alteração da peça de impressão.Explicação:
Experimente aqui.
fonte
Python 3,
163162157146 bytesUsa regex para encontrar toda a sequência de vogais maior que 2, conta As e Os com no máximo 4 e depois imprime.
fonte
APL, 60
Observe que ⎕IO ← 0 e ⎕ML ← 3
Exemplo:
Funciona no Dyalog 15.0 , já que é a versão na qual o 819⌶ foi introduzido para minúscula uma string.
fonte
Pitão, 64 bytes
Provavelmente pode ser jogado ainda mais. Experimente aqui!
fonte
R, 261 bytes
Acho que gastei muito tempo apenas para fazer isso funcionar e acredito que essa é uma solução desnecessariamente complicada, embora funcione. Recebe a entrada de stdin, é importante que a string esteja entre aspas.
O uso de quatro
apply
famílias aninhadas poderia, teoricamente, ser reduzido para apenas dois usando-omapply
. Mas porque entradas paramapply
não terão o mesmo comprimento, a menor será reciclada, o que complica as coisas e eu não consegui descobrir uma solução funcional.Se alguém estiver interessado, adicionarei uma explicação não destruída mais tarde.
Experimente todos os casos de teste no R-fiddle
Observe que esta versão recebe entrada como argumento de função em vez de stdin porque
scan
não funciona no R-fiddle. Além disso, adicionou uma nova linha para facilitar a leitura.fonte
Python 3, 262 bytes
Menos golfe (os comentários são as variáveis no código abreviado):
Experimente online!
fonte
blaoaoaog
: as vogais entrelaçadas são contadas mais de uma vez, indicandoz
quando deveria sert
(embora funcione apenasaaaooo
, embora eu não consiga descobrir o porquê ...).aooa
== (2,2) ==n
,aoaoao
== (3,3) ==t
gaoaoaog
impressões Z em vez de T. Eu acho que é porque o seu regex está pegando[ao,oa,ao,oa,ao]
, que conta5,5
, então contrai-lo para4,4
, imprimindo Z.Kotlin ,
221209 bytesAgora muito mais feio e lento, tudo em nome de 11 bytes
Salve-o em um arquivo (ex.
BabyTalk.kts
) Para executar como um script. Ou, o código acima pode ser anexadofun main(z:Array<String>)=
e compilado normalmente por um custo de mais 26 bytes.Experimente online!
Recuado:
fonte
PHP,
124 129 121 120125 bytesRecebe entrada dos argumentos da linha de comando. Corra com
-nr
ou experimente online .demolir
fonte
J , 109 bytes
Experimente online!
fonte