Skip to content

Instantly share code, notes, and snippets.

@bdkosher
Last active January 6, 2020 21:53
Show Gist options
  • Save bdkosher/200eb02e624667dd5299ab020b5162dd to your computer and use it in GitHub Desktop.
Save bdkosher/200eb02e624667dd5299ab020b5162dd to your computer and use it in GitHub Desktop.
class Man {
String name
Man father
int birthYear
int deathYear
int begatSonAtYear
static named(String name) {
new Man(name: name)
}
Man sonOf(Man father) {
this.father = father
this
}
Man bornYearsBeforeFlood(int years) {
birthYear = 0 - years
this
}
Man bornYearsAfterFlood(int years) {
birthYear = years
this
}
Man livedForYearsAfterFlood(years) {
deathYear = years
this
}
Man begatSonAtAndDiedYearsAfter(int age, int yearsAfter) {
if (father && !birthYear) {
birthYear = father.begatSonAtYear
}
begatSonAtYear = birthYear + age
deathYear = begatSonAtYear + yearsAfter
this
}
Man begatSonAtAndDiedAtAge(int age, int ageAtDeath) {
begatSonAtAndDiedYearsAfter(age, ageAtDeath - age)
}
Man diedAtAge(int age) {
if (father && !birthYear) {
birthYear = father.begatSonAtYear
}
deathYear = birthYear + age
this
}
@Override
String toString() {
"$name lived ${deathYear - birthYear} years, born year $birthYear, died year $deathYear"
}
def lineage() {
def lineage = [this]
def dad = this.father
while (dad) {
lineage << dad
dad = dad.father
}
lineage
}
}
def noah = Man.named('Noah').bornYearsBeforeFlood(600).livedForYearsAfterFlood(350)
def shem = Man.named('Shem').sonOf(noah).bornYearsBeforeFlood(100).begatSonAtAndDiedYearsAfter(102, 500)
def arphaxad = Man.named('Arphaxad').sonOf(shem).bornYearsAfterFlood(2).begatSonAtAndDiedYearsAfter(35, 403)
def shelah = Man.named('Shelah').sonOf(arphaxad).begatSonAtAndDiedYearsAfter(30, 403)
def eber = Man.named('Eber').sonOf(shelah).begatSonAtAndDiedYearsAfter(34, 430)
def peleg = Man.named('Peleg').sonOf(eber).begatSonAtAndDiedYearsAfter(30, 209)
def reu = Man.named('Reu').sonOf(peleg).begatSonAtAndDiedYearsAfter(32, 207)
def serug = Man.named('Serug').sonOf(reu).begatSonAtAndDiedYearsAfter(30, 200)
def nahor = Man.named('Nahor').sonOf(serug).begatSonAtAndDiedYearsAfter(29, 119)
def terah = Man.named('Terah').sonOf(nahor).begatSonAtAndDiedAtAge(70, 205)
def abram = Man.named('Abram').sonOf(terah).begatSonAtAndDiedAtAge(100, 175)
def isaac = Man.named('Isaac').sonOf(abram).begatSonAtAndDiedAtAge(60, 180)
def jacob = Man.named('Jacob').sonOf(isaac).begatSonAtAndDiedAtAge(34, 147)
def judah = Man.named('Judah').sonOf(jacob).diedAtAge(119)
judah.lineage().reverse().each { println it }
# Years relative to year of Great Flood
Noah lived 950 years, born year -600,died year 350
Shem lived 602 years, born year -100,died year 502 child
Arphaxad lived 438 years, born year 2, died year 440 grandchild
Shelah lived 433 years, born year 37, died year 470 great grandchild
Eber lived 464 years, born year 67, died year 531 great x2 grandchild
Peleg lived 239 years, born year 101, died year 340 great x3 grandchild
Reu lived 239 years, born year 131, died year 370 great x4 grandchild
Serug lived 230 years, born year 163, died year 393 great x5 grandchild
Nahor lived 148 years, born year 193, died year 341 great x6 grandchild
Terah lived 205 years, born year 222, died year 427 great x7 grandchild
Abram lived 175 years, born year 292, died year 467 great x8 grandchild
Isaac lived 180 years, born year 392, died year 572 great x9 grandchild
Jacob lived 147 years, born year 452, died year 599 great x10 grandchild
Judah lived 119 years, born year 486, died year 605 great x11 grandchild
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment