Skip to content

Instantly share code, notes, and snippets.

@prasincs
Created July 24, 2012 18:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save prasincs/3171626 to your computer and use it in GitHub Desktop.
Save prasincs/3171626 to your computer and use it in GitHub Desktop.
with Explanations
#Newbie programmer
# Exp: -> first exercise in recursion
def factorial(x):
if x == 0:
return 1
else:
return x * factorial(x - 1)
print factorial(6)
#First year programmer, studied Pascal
# Exp: -> You declare vars at the top of program/function in pascal (also you use i:= i+1 type syntax to avoid confusing with equality)
# -> Notice iterative solution
def factorial(x):
result = 1
i = 2
while i <= x:
result = result * i
i = i + 1
return result
print factorial(6)
#First year programmer, studied C
# Exp: -> Note the braces
# >>> from __future__ import braces
# File "<stdin>", line 1
# SyntaxError: not a chance
# -> C assignment syntax
def fact(x): #{
result = i = 1;
while (i <= x): #{
result *= i;
i += 1;
#}
return result;
#}
print(fact(6))
#First year programmer, SICP
#Exp: -> @<thing> is a decorator - applies a function to a function (pretty dope stuff)
# -> seems like the programmer just learned about tail calls in a Lisp class (Hence SICP reference - Structure and Interpretation of Computer Programs - great book)
@tailcall
def fact(x, acc=1):
if (x > 1): return (fact((x - 1), (acc * x)))
else: return acc
print(fact(6))
#First year programmer, Python
#Exp: -> xrange is generator - meaning it "emits/yields" a value when asked to instead of storing all the items(like list) - slightly more optimized but overkill
def Factorial(x):
res = 1
for i in xrange(2, x + 1):
res *= i
return res
print Factorial(6)
#Lazy Python programmer
# Exp: -> nicer syntax - x>1 and x*fact(x-1) only evaluates true when x>1 (slightly silly but works)
# -> also helped by the fact that 1 = True in python unlike Ruby
def fact(x):
return x > 1 and x * fact(x - 1) or 1
print fact(6)
#Lazier Python programmer
# Exp: -> why name a function when you can use anonymous functions? (lambda)
f = lambda x: x and x * f(x - 1) or 1
print f(6)
#Python expert programmer
#Exp: -> slightly fancier library functions, overkill here but extremely useful for a lot of projects
import operator as op
import functional as f
fact = lambda x: f.foldl(op.mul, 1, xrange(2, x + 1))
print fact(6)
#Python hacker
#Exp: -> Python allows operator overloading via __sub__ and __mul__ methods, a lot of abuse of those things here
import sys
@tailcall
def fact(x, acc=1):
if x: return fact(x.__sub__(1), acc.__mul__(x))
return acc
sys.stdout.write(str(fact(6)) + '\n')
#EXPERT PROGRAMMER
#Exp: Using the optimized C library instead
import c_math
fact = c_math.fact
print fact(6)
#ENGLISH EXPERT PROGRAMMER
# Exp: making fun of english/british people and their insistence on proper grammar - even in programming
import c_maths
fact = c_maths.fact
print fact(6)
#Web designer
#Exp -> copy pasted, too much comment, n00b
def factorial(x):
#-------------------------------------------------
#--- Code snippet from The Math Vault ---
#--- Calculate factorial (C) Arthur Smith 1999 ---
#-------------------------------------------------
result = str(1)
i = 1 #Thanks Adam
while i <= x:
#result = result * i #It's faster to use *=
#result = str(result * result + i)
#result = int(result *= i) #??????
result str(int(result) * i)
#result = int(str(result) * i)
i = i + 1
return result
print factorial(6)
#Unix programmer
#Exp: -> writes a shell script (most likely in Perl), puts in system path and calls that instead
import os
def fact(x):
os.system('factorial ' + str(x))
fact(6)
#Windows programmer
#Exp:-> Uses way too many windows system calls
NULL = None
def CalculateAndPrintFactorialEx(dwNumber,
hOutputDevice,
lpLparam,
lpWparam,
lpsscSecurity,
*dwReserved):
if lpsscSecurity != NULL:
return NULL #Not implemented
dwResult = dwCounter = 1
while dwCounter <= dwNumber:
dwResult *= dwCounter
dwCounter += 1
hOutputDevice.write(str(dwResult))
hOutputDevice.write('\n')
return 1
import sys
CalculateAndPrintFactorialEx(6, sys.stdout, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
#Enterprise programmer
# Exp:-> too many classes, even when the problem is really solvable in two lines
def new(cls, *args, **kwargs):
return cls(*args, **kwargs)
class Number(object):
pass
class IntegralNumber(int, Number):
def toInt(self):
return new (int, self)
class InternalBase(object):
def __init__(self, base):
self.base = base.toInt()
def getBase(self):
return new (IntegralNumber, self.base)
class MathematicsSystem(object):
def __init__(self, ibase):
Abstract
@classmethod
def getInstance(cls, ibase):
try:
cls.__instance
except AttributeError:
cls.__instance = new (cls, ibase)
return cls.__instance
class StandardMathematicsSystem(MathematicsSystem):
def __init__(self, ibase):
if ibase.getBase() != new (IntegralNumber, 2):
raise NotImplementedError
self.base = ibase.getBase()
def calculateFactorial(self, target):
result = new (IntegralNumber, 1)
i = new (IntegralNumber, 2)
while i <= target:
result = result * i
i = i + new (IntegralNumber, 1)
return result
print StandardMathematicsSystem.getInstance(new (InternalBase, new (IntegralNumber, 2))).calculateFactorial(new (IntegralNumber, 6))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment