Skip to content

Instantly share code, notes, and snippets.

@pasberth
Forked from kos59125/fizzbuzz.ts
Created October 2, 2012 10:50
Show Gist options
  • Save pasberth/3818141 to your computer and use it in GitHub Desktop.
Save pasberth/3818141 to your computer and use it in GitHub Desktop.
FizzBuzz in TypeScript
module FizzBuzz
{
export var doFizzzBuzz = function (n : number)
{
var fb = new FizzBuzz (new Fizz (new Buzz (null)))
var table = document.createElement ("table")
document.body.appendChild (table)
for (var i = 1; i <= n; i++)
{
var row = document.createElement ("tr")
var key = document.createElement ("th")
key.appendChild (document.createTextNode (i.toString ()))
var value = document.createElement ("td")
value.appendChild (document.createTextNode (fb.fizzbuzz (i)))
row.appendChild (key)
row.appendChild (value)
table.appendChild (row)
}
}
class FizzBuzz
{
fb : FizzBuzz;
constructor (fb : FizzBuzz)
{
this.fb = fb
}
consume (n : number, buffer : string) : string
{
return buffer
}
fizzbuzz (n : number) : string
{
var buffer = ""
for (var current = this.fb; current != null; current = current.fb)
{
buffer = current.consume (n, buffer)
}
if (buffer.length == 0)
{
buffer = n.toString ()
}
return buffer
}
}
class Fizz extends FizzBuzz
{
constructor (fb : FizzBuzz)
{
super (fb)
}
consume (n : number, buffer : string) : string
{
if (n % 3 == 0)
{
return buffer + "Fizz"
}
else
{
return buffer
}
}
}
class Buzz extends FizzBuzz
{
constructor (fb : FizzBuzz)
{
super (fb)
}
consume (n : number, buffer : string) : string
{
if (n % 5 == 0)
{
return buffer + "Buzz"
}
else
{
return buffer
}
}
}
}
FizzBuzz.doFizzzBuzz (100)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment