@program pokemendel.muf 1 1000 d i $include $lib/alynna $def female 0 $def male 1 $def herm 2 $def gshift 3 : main var d1 var d2 var d3 var gender-mom var gender-dad var gender "=" split ( figure out what we'll be passing ) ( First, lets get one or two chromosomes from dad ) case "m*" smatch when "male" gender-dad ! ( A pure male will always pass either X or Y ) random 2 % case 0 = when "X" d2 ! end 1 = when "Y" d2 ! end endcase end "h*" smatch when "hermaphrodite" gender-dad ! ( A hermaphrodite father has a 50% chance of passing either an X or Y, and a 50% chance of passing either an XX or XY ) random 4 % case 0 = when "X" d2 ! end 1 = when "Y" d2 ! end 2 = when "X" d2 ! "X" d3 ! end 3 = when "X" d2 ! "Y" d3 ! end endcase end "g*" smatch when "gendershifter" gender-dad ! ( A gendershifter father has a 50% chance of passing either an X or Y, and a 50% chance of passing either an XY or YY ) random 4 % case 0 = when "X" d2 ! end 1 = when "Y" d2 ! end 2 = when "X" d2 ! "Y" d3 ! end 3 = when "Y" d2 ! "Y" d3 ! end endcase end default pop { "Invalid gender for father." }tell exit end endcase ( Now, lets get one chromosome from mom ) case "f*" smatch when "female" gender-mom ! ( Females always pass an X ) "X" d1 ! end "h*" smatch when "hermaphrodite" gender-mom ! ( A hermaphrodite mother will always pass an X or a Y ) random 2 % case 0 = when "X" d1 ! end 1 = when "Y" d1 ! end endcase end "g*" smatch when "gendershifter" gender-mom ! ( A gendershifter mother will always pass an X or a Y ) random 2 % case 0 = when "X" d1 ! end 1 = when "Y" d1 ! end endcase end default pop { "Invalid gender for mother." }tell exit end endcase { d1 @ d2 @ d3 @ if d3 @ then }cat gender ! ( A result of three X chromosomes will cancel out an X ) gender @ "XXX" smatch if "XX" gender ! then ( A result of three X chromosomes will cause 2 Y's to form an X ) gender @ "YYY" smatch if "XY" gender ! then ( Some other results ) gender @ "YX" smatch if "XY" gender ! then gender @ "YY" smatch if "XY" gender ! then gender @ "YYX" smatch if "XYY" gender ! then gender @ "YXX" smatch if "XXY" gender ! then gender @ "YXY" smatch if "XYY" gender ! then gender @ "XYX" smatch if "XXY" gender ! then { "Result of " gender-mom @ " mother and " gender-dad @ " father -- Mom passed " d1 @ "; Dad passed " d2 @ d3 @ dup not if pop then "; final result: " gender @ case "XX" smatch when "female" end "XY" smatch when "male" end "XXY" smatch when "hermaphrodite" end "XYY" smatch when "gendershifter" end endcase "(" gender @ ")" }cat "genmux" pretty tellhere ; . c q