commit 8e73fc7bf5edfe731b0813c3a4fd862d214c4124
parent 5d8e3bed9cbe43504e62dbc761a012a08b78a079
Author: Walther Chen <walther.chen@gmail.com>
Date:   Sat, 26 Oct 2024 22:22:25 -0400

ba1g hamming distance

Diffstat:
Aba1g.c3 | 19+++++++++++++++++++
Mutil.c3 | 15+++++++++++++++
2 files changed, 34 insertions(+), 0 deletions(-)

diff --git a/ba1g.c3 b/ba1g.c3 @@ -0,0 +1,19 @@ +// hamming distance + +module ba1g; +import std::io; +import std::io::file; +import std::collections; + +import util; + +fn void! main(String[] args) { + if (args.len != 2) { + io::eprintn("Please supply path to data file"); + return IoError.FILE_NOT_FOUND?; + } + File f = file::open(args[1], "rb")!; + String s1 = io::treadline(&f)!; + String s2 = io::treadline(&f)!; + io::printn(util::hamming_distance(s1, s2)); +} diff --git a/util.c3 b/util.c3 @@ -50,3 +50,18 @@ fn void test_clump_finding() @test { String input = "CGGACTCGACAGATGTGAAGAACGACAATGTGAAGACTCGACACGACAGAGTGAAGAGAAGAGGAAACATTGTAA"; assert(clump_finding(input, 5, 50, 4) == {"CGACA", "GAAGA"}); } + +fn int hamming_distance(String s1, String s2) { + assert(s1.len == s2.len); + int count = 0; + for (int i = 0; i < s1.len; i += 1) { + if (s1[i] != s2[i]) { + count += 1; + } + } + return count; +} + +fn void test_hamming_distance() @test { + assert(hamming_distance("GGGCCGTTGGT", "GGACCGTTGAC") == 3); +}