Da Vini Code

Simplicity is the ultimate sophistication. – Leonardo Da Vinci.

I am Vini. I like to code. Hence the title.
I love my work. And hence the blog.
I make mistakes. Hence the rotten tomatoes. (!) Er.. Just hope I don’t get that as often.

A better implementation of bead-sort



Bead sort (a.k.a Abacus sort, or Gravity sort) is a sorting algorithm that can sort a list of positive integers.
Belonging to a class of natural algorithms, It uses (/simulates) gravity to sort an input list.

The sort algorithm accomplishes this in three acts –


Figure 1: Illustration of abacus sort for an input list [2,6,1,4,3]


Git Cheatsheet



Combinatorial Algorithms


Combinatorial algorithms(permutations, combinations, powersets, subsets et, al) had never been my forte.

Infact, I was quite scared of them.
Presumably an irrational fear that stuck with after a failed effort in my graduate years.

No matter, This weekend, I set out to remedy that.
I didn’t want to read on the algorithms before implementing and decided I’d go pencil-and-paper and implement one that occurs naturally to me.

Here goes the result of that –


Project Euler Problem 22


Whilst trying Project Euler problems, I often write a prototype in Python before trying out an implementation in Haskell.
This problem however was screaming for “Functional Programming”.

In fact this time around, I started with a Haskell implementation and went on to translate to Python just for kicks. 🙂

Suffice to say, I am very pleased with myself. 😀

import Char
import List

names = [<List of names from problem specification>]

{- For each string s in list, Calculate sum of the characters’ alpha positions -}
sumChars :: [String] -> [Int]
sumChars [] = []
sumChars (x:xs) =
(foldl (\acc ltr -> acc + (ord(ltr)-ord(‘A’) + 1)) 0 x) : sumChars xs

main = do
let sortedNames = sort(names)
let zippedSumAndIndex = zip [1 .. length(sortedNames)] (sumChars sortedNames)
let total = foldl (\x y -> x + fst(y) * snd(y)) 0 zippedSumAndIndex
print total

Go to Top