Escrito por

Desenvolvedor at QI Tech
Discussão Heloisa Paiva · 7 hr atrás

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: