Code Golf! Alternating Vowels
Anyone up for a round of golf?
Are you fed up of making a machine write code for you? Do you miss thinking through problems yourself? Then you are in luck, this round, I propose adding the rule of no AI use. obviously its a game of honor with no prize, so I shan't be enforcing this, but you'll know...
Challenge:
Create a function which takes a string as a parameter, and returns the length of the longest sequence of alternating consonants and vowels. The sequence is broken by having two vowels or two consonants in a row.
Some clarification:
- A sequence can start at any letter, and is broken by two of the same letter.
- A sequence can start with a Consonant (CVC) or Vowel (VCV)
- Only the 26 standard english language letters (a-z / A-Z) are valid in the input string.
- Only the 5 canonical vowels (a, e, i, o, u) count, I'm not getting into any debate about whether "y" is a vowel. Consonants are any other letter .
- Empty strings return 0
Some examples:
| Input | Output | Sequence |
| mama | 4 | "mama" |
| sequence | 4 | "sequ" |
| abooom | 3 | "abo" |
| EmiTed | 6 | "EmiTed" |
| book | 2 | "bo" / "ok" |
| a | 1 | "a" |
| asdfampjn | 3 | "fam" |
| "" (empty string) | 0 | - |
Note, the Sequence column is for demonstration, the function only needs to return the output.
Here is a stub class you can use for your solution:
Class codegolf.AlternatingVowels
{
ClassMethod CountAlternates(input As %String)
{
q 0
}
}And some tests
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)
Do $$$AssertEquals(##class(codegolf.AlternatingVowels).CountAlternates(""), 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)
}
}
And finally, to count your solution use: (courtesy of @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
}
}Usage:
w ##class(ITPlanet.Task2).length("codegolf.AlternatingVowels", "CountAlternates")See previous editions: