Skip to content

Instantly share code, notes, and snippets.

View rrampage's full-sized avatar

Raunak Ramakrishnan rrampage

View GitHub Profile
@rrampage
rrampage / Sort by 1's.py
Last active December 18, 2015 12:19
Given a positive integer n, sort numbers from 1 to n with increasing number of bits set. If two numbers have same number of bits set, the lower number will come first. (From Codebunk FB Page)
View Sort by 1's.py
"""Using the implementation from Wikipedia: https://en.wikipedia.org/wiki/Hamming_weight#Efficient_implementation """
def hamming_weight(n):
t1 = n - ((n>>1) & 0x55555555)
t2 = (t1 & 0x33333333) + ((t1 >> 2) & 0x33333333)
return ((((t2 + (t2 >> 4)) & 0x0F0F0F0F) * 0x01010101) >> 24,n)
def hamming_sort(n):
return [x[1] for x in sorted(map(hamming_weight,xrange(1,n+1)))]
@rrampage
rrampage / keybase.md
Created October 13, 2017 14:27
Keybase
View keybase.md

Keybase proof

I hereby claim:

  • I am rrampage on github.
  • I am raunak (https://keybase.io/raunak) on keybase.
  • I have a public key ASBUeum7e_np2neA9YXi60A7YLGFHk9yI9n3VCNsKgQSIwo

To claim this, I am signing this object:

@rrampage
rrampage / check_perm.py
Last active July 14, 2018 17:11
Check if two strings are anagrams in O(n) time
View check_perm.py
# Check if two strings are permutations (anagrams) of each other
# For this example, using just the lowercase ASCII letters as the alphabet
# Step 1 : Generate k primes using Sieve of Erasthothenes
# Step 2 : Map characters in alphabet to prime
# Step 3 : Compare the products of the 2 strings
# Why does this work?
# - Multiplication is commutative i.e a * b * c = c * a * b
# - Fundamental theorem of arithmetic i.e every natural number can be expressed uniquely as either a prime or a product of primes (https://en.wikipedia.org/wiki/Fundamental_theorem_of_arithmetic)
from string import ascii_lowercase as ALPHABETS
@rrampage
rrampage / wayback.sh
Created September 28, 2023 10:23
Search wayback machine for URL
View wayback.sh
#!/bin/bash
# Search Wayback machine for a particular URL
# Add to your ~/.bashrc or ~/.bash_profile
# Needs `jq` and `curl` to work
if [[ -z $1 ]]; then
echo "Usage: $0 URL";
else
curl "http://web.archive.org/cdx/search/cdx?url=$1*&output=json&fl=original,timestamp" 2> /dev/null | jq '.[1:][] |"https://web.archive.org/web/" +.[1] + "/" + .[0]' 2> /dev/null;
fi
@rrampage
rrampage / symbolic_differentiator.go
Last active October 10, 2023 22:32
Symbolic Differentiator
View symbolic_differentiator.go
package main
import (
"fmt"
"regexp"
"strconv"
)
var polyRegex = regexp.MustCompile(`\s*(?P<coef>[+-]?[0-9]*)?\s*\*?((?P<var>[a-z])?\s*(\^(?P<pow>[+-]?[0-9]+))?)?\s*`)
var wsRegex = regexp.MustCompile(`\s+`)