Skip to main content

Command Palette

Search for a command to run...

Koan Wars: Kotlin vs TypeScript - Hamming

Updated
2 min read
Koan Wars: Kotlin vs TypeScript - Hamming
J

Senior Full-Stack Developer with over 20 years of experience building web applications for startups, government, and higher education.

This post is the first in a series of Koan Battles, using Kotlin and TypeScript, we'll complete a Koan in both languages and then discuss the differences.

By the end of this series, you'll have a good understanding of the key features and nuances of both Kotlin and TypeScript, and be able to apply this knowledge to your own programming projects.

Whether you're a beginner or an experienced programmer, Koans provide an excellent way to learn a new language or deepen your knowledge of an existing one.

Join me as we embark on this exciting journey of discovery, enlightenment and er fighting.

Koan- Hamming Distance

Calculate the Hamming Distance between two DNA strands.

Hamming Distance is the number of positions at which the corresponding symbols in two DNA strands are different. For example:

GAGCCTACTAACGGGAT
CATCGTAATGACGGCCT
^ ^ ^  ^ ^    ^^

They have 7 differences, and therefore the Hamming Distance is 7.

Kotlin Solution

fun compute(left: String, right: String): Int {
    require(left.length == right.length) 
        { "DNA strands must be of equal length" }

    return left.zip(right).count { it.first != it.second }
}

Typescript Solution

export function compute(left: string, right: string): number {
  if (left.length !== right.length)
    throw new Error("DNA strands must be of equal length");

  return [...left].filter((l, i) => l !== right[i]).length;
}

Comparison

As you can see, the basic logic is the same in both languages: we check that the two DNA strands have the same length, and then we zip up the two arrays so they are easy to compare for the Hamming count.

One key difference between the Kotlin and TypeScript implementations is the way they handle errors. In Kotlin, we use the require function to check that the two strings have the same length, and if they don't, we throw an exception.

In TypeScript, we use a regular if statement to check the length of the strings, and if they don't have the same length, we throw an error using the throw keyword.

Result

Overall, the two implementations are quite similar. It's close but I'll have to give this battle to Kotlin. That's more down to the use of standard library functions zip and count than the language. We could have gotten the TypeScript closer to the Kotlin solution with something like lodash.

Score

Kotlin 1, TypeScript 0

E
Egi Mata3y ago

I don't understand this. Why compare this two languages?

J

Why not compare the two languages?

Koans are a good way to compare and contrast the language syntax and the different ways you might approach the problem.

Also useful if you know one of the languages and would like to get to know the other 😀

2
E
Egi Mata3y ago

Justin Ramel I understand, thank you Justin 🙌🏻🙌🏻

1

More from this blog

Justin's Dev Journal

26 posts

I'm a Senior Full-Stack Developer with over 20 years of experience building web applications for startups, government, and higher education.