Computer Science

All of these projects describe work that I did as an undergrad at IIT Kanpur.

Batch Website

Summer ‘16

This is a project thought up by some brilliant people. I’m one of the contributors to it. It allows anyone to setup a batch website free of cost, by using static site hosting provided by github. We did this in particular for our batch, which is available here.

Kudos to all the people who made this happen.

Breaking Cryptosystems

CS641: Modern Cryptology, Winter ‘15

The ‘assignment’ in this course was a text adventure game which involved breaking various ciphers to clear a particular level. Over the course of the semester, we broke:

  • Substitution cipher
  • Block substitution cipher
  • Substitution-Permutation cipher
  • DES (with differential cryptanalysis)
  • SASAS (AES like attack) cipher
  • RSA (with low public exponent, using coppersmiths LLL based attack)
  • A hash function

The code and reports cannot be made public since the assignment is likely to be repeated in later versions of the course. Can be provided on legitimate requests.

Capture The Flag

CS628: Network and Systems Security, Winter ‘15

Although this is not really a ‘project’ in the true sense, I feel like it deserves to be here. A set of challenging and interesting tasks set as a part of a capture the flag contest which was one of the assignments in this course. The code and brief descriptions for the attacks can be found in the link given in the header.

The other assignments in this course were based off MIT6.858 assignments.

Data Compression using Probabilistic Inference

CS772: Probabilistic Machine Learning, Winter ‘15

A brief survey of the state of the art probabilistic lossless data compression algorithms and experiments with these algorithms. Covered nonparametric bayesian models, markov models and neural networks

The poster for the project can be found here

SAT solving on GPUs

CS498: Undergraduate Project, Fall ‘15


SVM approximation methods

CS 678: Learning with Kernels, Fall ‘15

A (theoretical) study and comparison of DC-Pred++ and LDKL. The report includes the history and origin of the algorithms as well as how they compare in performance.

The presentation for the project can be found here


CS 350: Principles of Programming Languages, Fall ‘15

Some problems whose solutions are implemented in Oz. Also includes an interpreter for the declarative semantic model of Oz (including threads) written in Oz.

Oz has a well-specified declarative semantic model.

Reinforcement Learning in Haskell

CS 653: Functional Programming, Fall ‘15

A library for reinforcement learning in Haskell. Implementation of SARSA, QLearn and an example game (cat and mouse).

The goal was to add the algorithms into HLearn, but a lot of work remains before that can be done.

This poster accompanied the final presentation for this project.

Note: The content is based on the notes and programs given here.

Scene Classification

CS 679: Machine Learning for Computer Vision, Winter ‘14

Implementation of the paper - Bayesian Hierarchical Models for Natural Scene Classification (Fei-Fei Li, Pietro Perona).

The paper uses a bag-of-words model to classify natural scenes into various categories.

Done in Matlab.

The poster for this project can be found here

Java Compiler

CS 335: Compilers, Winter ‘14

Compiler for a subset of Java to MIPS written in C++

Supports looping expressions, type checking, primitive datatypes, 1D arrays and recursion


CS 360: Introduction to Computer Graphics, Fall ‘14

A game using the core OpenGL API

Implementes basic physics, texture loading, a navigable (3d) camera and blinn-phong shading.


Template Creator

CS252: Computing Laboratory, Fall ‘14

Ruby on Rails project. Create homepages, resumes and templates with MathJax support.

A report is also available in the repository.


CS330: Operating Systems, Fall ‘14

Linked here is the second assignment of three assignments that included implementations of:

  • System calls pertaining to Fork, Exec, Join, Yield, Sleep and Exit
  • UNIX, First in First Out, Round Robin, Shortest Job First and Non-Preemptive job scheduling algorithms
  • Random, First in First Out, Least Recently Used (LRU) and LRU Clock page replacement algorithms
  • Semaphores

Rubik’s Pocket Solver

A solver for the 2x2x2 Rubik’s Cube. A Breadth First Search based approach.


Programming Club, IIT Kanpur, Summer ‘13

Gesture recognition using OpenCV. A (slightly over-the-top) demo video is available on youtube

Colour filtering followed by a classifier trained with SVM.


ESc 101: Fundamentals of Computing, Fall ‘12

Java, MySQL based implementation of basic version control features. Features implemented include separate local/remote stores with diffs, pull from remote, merge etc. Branching not supported.


Fewest Moves

A (somewhat) popular prezi about Rubik’s Cube’s Fewest Moves solving.

The original purpose was for a lecture I took at the Rubik’s Cube Hobby Group, IIT Kanpur.

Page under construction