Saturday, January 05, 2008

Project Euler 40

One more :)

This one was really easy. Also learnt a thing or two about string concatenations in python when my original techinique of k += str(someInt) was taking way to long as the length of the string increased.

Apparently when wanting to a large number of concatenation, its fast to append to an array and then do a join.

Problem #4o states:-
An irrational decimal fraction is created by concatenating the positive integers:

0.123456789101112131415161718192021...

It can be seen that the 12th digit of the fractional part is 1.

If dn represents the nth digit of the fractional part, find the value of the following expression.

d1 × d10 × d100 × d1000 × d10000 × d100000 × d1000000

Solution:-

import time
w = time.time()
d = ''.join([`num` for num in xrange(1,190000)])
print int(d[0])*int(d[9])*int(d[99])*int(d[999])*int(d[9999])*int(d[99999])*int(d[999999])
print time.time() - w

Saturday, December 29, 2007

Project Euler 39

After a long time , but here is another project euler problem that I worked on.

This one was quite fun.

Problem:-
The number 3797 has an interesting property. Being prime itself, it is possible to continuously remove digits from left to right, and remain prime at each stage: 3797, 797, 97, and 7. Similarly we can work from right to left: 3797, 379, 37, and 3.

Find the sum of the only eleven primes that are both truncatable from left to right and right to left.

NOTE: 2, 3, 5, and 7 are not considered to be truncatable primes.

Solution:-

Again its a brute force ( takes a while to get the last prime) ,

I use a generator I found online to get the list of primes and then check if it left and right truncatable.


import time
from itertools import ifilter, count

def isPrime(n):
if n == 1:
return False

i = n - 1
while i > 1:
rem = n % i
if rem == 0:
return False
else:
i = i - 1
return True

def truncateLeft(num):

k = num

while k != 0:
k /= 10
if not isPrime(k):
return False
return True


def truncateRight(num):
k = num

while k != 0:
k %=(10**(len(str(k))-1))
if not isPrime(k):
return False
return True

def sieve():
g = count(2)
while True:
prime = g.next()
yield prime
g = ifilter(lambda x, prime=prime: x % prime,g)




candidates = []

t = time.time()

primes = sieve()
start = primes.next()

while len(candidates) != 11:
if truncateLeft(start) and truncateRight(start) and start > 7:
candidates.append(start)
print str(start) + " has been added"
start = primes.next()

print sum(candidates)
print time.time() - t

Thursday, September 20, 2007


Sony Ericsson has some of the best designs for phones, just have a look at this one:-

Saturday, September 01, 2007

I dont even know what to post about anymore, but I will post more often ...... in other news last week I was in New Orleans for company training and now I am a SCRUM Master :)

Friday, August 03, 2007

Project Euler #39

This is my solution for Project Euler #39

its definitely brute force and im sure there is a better way to get the answer, but here we go

Problem:-
f p is the perimeter of a right angle triangle with integral length sides, {a,b,c}, there are exactly three solutions for p = 120.

{20,48,52}, {24,45,51}, {30,40,50}

For which value of p 1000, is the number of solutions maximised?

My Solution:-


import math, time

t = time.time()

maximum = {}

for a in xrange(1,500):
for b in xrange(1,500):
c = math.sqrt(pow(a,2)+pow(b,2))
p = a+b+c
if p == int(p) and p < 1000:
if maximum.has_key(p):
maximum[p] += 1
else:
maximum[p] = 1

e = maximum.keys()
e.sort(cmp = lambda a,b: cmp(maximum[a],maximum[b]))
print e[-1]
print time.time()-t

Friday, July 13, 2007

Namespaces for PHP

I read this kinda late, but namespaces were definitely required in php and now they have been made official http://www.gravitonic.com/blog/archives/000418.html

Thursday, July 05, 2007

Project Euler

I am completely addicted to this site...its all about solving math problems using programming.

Here is the solution to one of the problems

How Many Lychrel Numbers are below 10,000 ? http://projecteuler.net/index.php?section=problems&id=55

my solution in python, which takes abt 39 seconds:-

def lychrel(x):
i = 0
while i < 50:
x += int(str(x)[::-1])
if str(x) == str(x)[::-1]:
return False
i += 1
return True

print len ([x for x in range(1,10000) if lychrel(x)])

Saturday, May 26, 2007

Microsoft Popfly

So today I got an invite for microsoft's popfly . Popfly seems to be msfts take on letting users create mashups, websites , communities etc without typing in a single line of code and is powered by silverlight. The key word here being "user" which means anyone can create a mashup without knowing how things work behind the scenes.

The site is in alpha, and there are definitely some issues that I have come across. But the UI is amazing, it works with firefox ( big plus ! ).

I will be messing around with this and see what mashups I can come up with. Please feel free to add me as a friend ( http://www.popfly.ms/users/Kashif ) and I will post invites for users as soon as I get them :)

Sunday, May 06, 2007

Vice Funds

I read about vice funds a while back on fark.com. From the site the fund invests in alcohol, tobacco, gaming, aerospace and defense stocks. It is an interesting concept because in many ways people are addicted to this stuff and they have had very nice yearly returns ( close to 14.3%/yr ) to back their idea.

Now for anyone who still reads this would you invest in it ? Abhi , I think I already know your answer :)
I need to start posting stuff here again ....

Saturday, February 24, 2007

Roman Numeral Converter

One more codegolf challenge:-

In this challenge, you will be given a number in roman numeral form and must print out its integer value.

( from codegolf)


My latest solution at 129 bytes:-

r,l,s={'M':1000,'D':500,'C':100,'L':50,'X':10,'V':5,'I':1},1000,0
for j in raw_input():s+=r[j]-(0,l*2)[r[j]>l];l=r[j]
print s

Any other ideas ?

Update:

After manzo's comment, I searched a little and came up with this. Right now its at 119 bytes

r,l,s=dict(M=1000,D=500,C=100,L=50,X=10,V=5,I=1),1000,0
for j in raw_input():s+=r[j]-(0,l*2)[r[j]>l];l=r[j]
print s

Saturday, January 06, 2007

Colors for Visual Studio

Having watched a lot of videos featuring textmate, I really liked the color scheme that was being used by a lot of the videos. After some searching I came across Scott Hanselmans blog where he suggests some colors that bring it quite close.

This is what my current setting looks like:-

Any ideas for the colors of the html tag names other than white ?


Friday, December 08, 2006

Codegolf

Ive been working on this codegolf challenge recently which I found quite fun to do (codegolf == accomplish a challenge in code using least amt of lines )

The challenge in question:-

The game of REVERSE requires you to arrange a list of numbers in numerical order from left to right. To move, you tell the computer how many numbers (counting from the left) to reverse. For example, if the current list is 2 3 4 5 1 6 7 8 9 and you reverse 4, the result will be 5 4 3 2 1 6 7 8 9. Now if you reverse 5, you win.

What we're asking you to do is, given a list of numbers in a random order, produce the moves required to arrange them so they end up in numerical order.

(from codegolf.com)



Now Ive been working on this for a couple of hours and the best I can come up with is this ( My language of choice, python):-


[UPDATE #1]: File Size - 181kb

1) Changed the while loop condition

2)A different way of printing, by adding a comma after the last object one can suppress the new line that is automatically added by print in python

3)Removing unnecessary indentation helped on the file size

4)Didnt need the strip function

import re,sys
n = map(int,re.split(" ",sys.stdin.readline()))
l = len(n)
while l:
m = n.index(max(n[0:l])) + 1
n[:m] = n[m-1::-1]
n[:l] = n[l-1::-1]
print m,l,
l -= 1


[ORIGINAL]


import re,sys
n = map(int,re.split(" ",str(sys.stdin.readline()).strip()))
l = len(n)
while n != sorted(n):
m = n.index(max(n[0:l])) + 1
n[:m] = n[m-1::-1]
n[:l] = n[l-1::-1]
print m,"\n",l
l -= 1


the algorithm works in the following way:-

given a list, get its length

find the index of the maximum value within it, do a reverse from 0 to the index, so now the max is in front (and the move being the index + 1)

then do a reverse again on the length of the list , bringing the max to the end of the list (now the move after that being the length of the list)

decrease the length, so you iterate over a smaller list and repeat the same steps on the smaller section of the list


Anyone have anymore ideas to make this shorter ( either the program itself or the algorithm ) ?

Saturday, December 02, 2006

C-USA Champions


That was a fantastic game yesterday. Had a lot of fun ... definitely need more pictures

Thursday, October 05, 2006

Cant argue with this

"You’ve achieved success in your field when you don’t know whether what you’re doing is work or play." - Warren Beatty

Saturday, September 23, 2006

Learning Python

Just started to pick up on Python,

I am sure everyone who took COSC 2320 with Dr. Anderson remembers the word count program. Well after going through some of the tutorials of python here is the same program in python

Not only is it smaller, but its also easier to understand. Hopefully more to follow


import re
import string

#dictionary to store words and their counts
word_count = {}

#read in text document line by line
for line in open("trial.txt").readlines():

#remove leading and trailing whitespace
line = string.strip(line)

#split the string into words
#based on whitespace, punctuation, digits
for word in re.split("["+string.whitespace+string.punctuation+string.digits+"]",line):

#make the word lower case
word = string.lower(word)

#check if it is actually a word
if re.match("^["+string.lowercase+"]+$",word):

#increment count if true
if word_count.has_key(word):
word_count[word]+=1

#else add entry
else:
word_count[word] = 1

for w in word_count:
print w, ":" ,word_count[w]



Edit: Some more playing around


import re
import string

word_count = {}

text = open("trial.txt").read();

#list of words delimited by whitespace, punctuation and digits
#iterate by words in returned list from split
#lower case all the words in the text
words = re.split("["+string.whitespace+string.punctuation+string.digits+"]",string.lower(text))

#go through the list
for i in range(0,len(words)-1):

#as long as the word in the list is a word and is not already a key
if re.match("^["+string.lowercase+"]+$",words[i]) and not word_count.has_key(words[i]):

#add to the dictionary and get the count from the list
word_count[words[i]] = words.count(words[i])

for w in word_count:
print w,":",word_count[w]

Thursday, August 31, 2006

Blogger Beta

Finally got into the beta, but where did the rest of the enteries go ? They are back

Friday, August 25, 2006

Time for another update .... dont know about what though ..... anyone able to switch over to the new blogger beta ?

Friday, June 16, 2006

A templating implementation for PHP that probably comes quite close to the one provided by struts :- Flexy http://pear.php.net/manual/en/package.html.html-template-flexy.php

Struts so far has been awesome

Tuesday, May 30, 2006

Lets see here

Well its kinda late for the highlights but here they are anyway:-

Michael awakens and finding himself in the most awkward position ever ( you have to hear the story from him for the full effect )

Awesome Career Fair

We all passed OS ( this one was too close )

PGH 547 is being remodelled ( and not the way we thought it would be, this one not so much of a highlist )

Completing the SE project 30 minutes before the demo

At the moment this is all that I remember , and good luck to everyone who will be starting their internship tomorrow.