HTML Code Golf! Vogais Alternadas
Alguém a fim de uma rodada de golfe?
Você está cansado de fazer uma máquina escrever código para você? Sente falta de resolver problemas por conta própria? Então você está com sorte: nesta rodada, proponho adicionar a regra de não usar IA. Obviamente, é um jogo de honra sem prêmios, então não poderei fiscalizar, mas você saberá...
Desafio:
Crie uma função que receba uma string como parâmetro e retorne o comprimento da maior sequência de vogais e consoantes alternadas. A sequência é interrompida ao haver duas vogais ou duas consoantes seguidas.
Alguns esclarecimentos:
- Uma sequência pode começar em qualquer letra e é interrompida por duas letras do mesmo tipo.
- Uma sequência pode começar com uma Consoante (CVC) ou Vogal (VCV).
- Apenas as 26 letras padrão da língua inglesa (a-z / A-Z) são válidas na string de entrada.
- Apenas as 5 vogais canônicas (a, e, i, o, u) contam; não entrarei em nenhum debate sobre se o "y" é uma vogal. Consoantes são qualquer outra letra.
- Strings vazias retornam 0.
Alguns exemplos:
| Input | Output | Sequência |
| mama | 4 | "mama" |
| sequence | 4 | "sequ" |
| abooom | 3 | "abo" |
| EmiTed | 6 | "EmiTed" |
| book | 2 | "bo" / "ok" |
| a | 1 | "a" |
| asdfampjn | 3 | "fam" |
| "" (string vazia) | 0 | - |
Nota: a coluna "Sequência" serve para demonstração; a função só precisa retornar o resultado numérico.
Aqui está um esboço de classe que você pode usar para sua solução:
Class codegolf.AlternatingVowels
{
ClassMethod CountAlternates(input As %String)
{
q 0
}
}E alguns testes:
Class codegolf.unittest.AlternatingVowels Extends %UnitTest.TestCase
{
Method TestLowerCase()
{
Do $$$AssertEquals(##class(codegolf.AlternatingVowels).CountAlternates("mama"), 4)
Do $$$AssertEquals(##class(codegolf.AlternatingVowels).CountAlternates("sequence"), 4)
Do $$$AssertEquals(##class(codegolf.AlternatingVowels).CountAlternates("asdfakljn"), 3)
Do $$$AssertEquals(##class(codegolf.AlternatingVowels).CountAlternates("emited"), 6)
Do $$$AssertEquals(##class(codegolf.AlternatingVowels).CountAlternates("book"), 2)
Do $$$AssertEquals(##class(codegolf.AlternatingVowels).CountAlternates("a"), 1)
}
Method TestEmptyString()
{
Do $$$AssertEquals(##class(codegolf.AlternatingVowels).CountAlternates(""), 0)
}
Method TestUpperCase()
{
Do $$$AssertEquals(##class(codegolf.AlternatingVowels).CountAlternates("MAMA"), 4)
Do $$$AssertEquals(##class(codegolf.AlternatingVowels).CountAlternates("SEQUENCE"), 4)
Do $$$AssertEquals(##class(codegolf.AlternatingVowels).CountAlternates("ASDFAKLJN"), 3)
Do $$$AssertEquals(##class(codegolf.AlternatingVowels).CountAlternates("EMITED"), 6)
Do $$$AssertEquals(##class(codegolf.AlternatingVowels).CountAlternates("BOOK"), 2)
Do $$$AssertEquals(##class(codegolf.AlternatingVowels).CountAlternates("A"), 1)
}
Method TestMixedCase()
{
Do $$$AssertEquals(##class(codegolf.AlternatingVowels).CountAlternates("MAma"), 4)
Do $$$AssertEquals(##class(codegolf.AlternatingVowels).CountAlternates("SeQuEnCe"), 4)
Do $$$AssertEquals(##class(codegolf.AlternatingVowels).CountAlternates("AsDfakLjN"), 3)
Do $$$AssertEquals(##class(codegolf.AlternatingVowels).CountAlternates("EMItEd"), 6)
Do $$$AssertEquals(##class(codegolf.AlternatingVowels).CountAlternates("BoOk"), 2)
Do $$$AssertEquals(##class(codegolf.AlternatingVowels).CountAlternates("a"), 1)
}
}
E, finalmente, para contar o tamanho da sua solução, use: (cortesia de @Eduard Lebedyuk)
Class ITPlanet.Task2
{
ClassMethod main() As %String
{
quit ""
}
/// write ##class(ITPlanet.Task2).length()
ClassMethod length(class = {$classname()}, method = "Main") As %Integer
{
#dim methodObj As %Dictionary.MethodDefinition
set methodObj = ##class(%Dictionary.MethodDefinition).IDKEYOpen(class, method)
quit methodObj.Implementation.Size
}
}Uso:
w ##class(ITPlanet.Task2).length("codegolf.AlternatingVowels", "CountAlternates")Veja edições anteriores: