Last active
January 6, 2020 21:53
-
-
Save bdkosher/200eb02e624667dd5299ab020b5162dd to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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