I had nearly the same for the last day. Then remembered that J has modular exponentiation optimized. And I have 64-bit J, so no need for extended numbers.
3 timex '(33554393&|@*&252533)^:(2947(<.&-:@(*:@+-3&*@[+]))3029)20151125' 5.12972 3 timex '33554393|20151125*(33554393&|@^&(2947(<.&-:@(*:@+-3&*@[+]))3029))252533' 1.38599e_5 On Sat, Dec 26, 2015 at 1:28 AM, David Lambert <[email protected]> wrote: > NB. Christmas > NB. To continue, please consult the code grid in the manual. Enter the > code at row 2978, column 3083. > > > n=:]+[:-:[:*/_2 _1++ NB. ROW n COL > > REPEATS=: 2978 n 3083 > > > START=: 20151125 > > PART1=: (33554393x|252533x*])^:(REPEATS-1)x:START > > > PART2=: 'finish the other 5!' > > > > > > NB. Day 21 > > Note 'information' > > hero > > Weapons: Cost Damage Armor > Dagger 8 4 0 > Shortsword 10 5 0 > Warhammer 25 6 0 > Longsword 40 7 0 > Greataxe 74 8 0 > > Armor: Cost Damage Armor > Leather 13 0 1 > Chainmail 31 0 2 > Splintmail 53 0 3 > Bandedmail 75 0 4 > Platemail 102 0 5 > > Rings: Cost Damage Armor > Damage +1 25 1 0 > Damage +2 50 2 0 > Damage +3 100 3 0 > Defense +1 20 0 1 > Defense +2 40 0 2 > Defense +3 80 0 3 > > > 100 hit points. > > > > BOSS > Hit Points: 103 > Damage: 9 > Armor: 2 > ) > > read=: 1!:1@:boxopen > Until=: 2 :'u^:(0-:v)^:_' > odd=: 1&(2b10001 b.) > even=: -.@:odd > > NAMES=: 'HERODAMAGE HEROARMOR HEROHP BOSSDAMAGE BOSSARMOR BOSSHP MELEE' > (NAMES)=: i.#;:NAMES > > battle=: fight Until death > play=: cleanup@:battle@:prepare > > melee=: MELEE&{ > next=: MELEE >:@:{`[`]} ] > fight=: next@:turn > turn=: (hero)`(boss)@.(odd@:melee) > hero=: BOSSHP&(((BOSSHP{])-(1>.(HERODAMAGE{])-(BOSSARMOR{])))`[`]}) > boss=: HEROHP&(((HEROHP{])-(1>.(BOSSDAMAGE{])-(HEROARMOR{])))`[`]}) > death=: 1 e.1>(HEROHP,BOSSHP)&{ > cleanup=: ] > > prepare=: 3 : 0 NB. prepare HERODAMAGE,HEROARMOR > > NB. 100 hit points. > > NB. BOSS > NB. Hit Points: 103 > NB. Damage: 9 > NB. Armor: 2 > > A=. 0#~#;:NAMES > A=. HEROHP (100"_)`[`]} A > A=. HERODAMAGE (({.y)"_)`[`]} A > A=. HEROARMOR (({:y)"_)`[`]} A > A=. BOSSHP (103"_)`[`]}A > A=. BOSSDAMAGE (9"_)`[`]}A > A=. BOSSARMOR (2"_)`[`]}A > ) > > test_prepare=: 3 : 0 NB. prepare HERODAMAGE,HEROARMOR > > NB.For example, suppose you have 8 hit points, 5 damage, and 5 armor, and > that the boss has 12 hit points, 7 damage, and 2 armor: > > A=. 0#~#;:NAMES > A=. HEROHP (8"_)`[`]} A > A=. HERODAMAGE (({.y)"_)`[`]} A > A=. HEROARMOR (({:y)"_)`[`]} A > A=. BOSSHP (12"_)`[`]}A > A=. BOSSDAMAGE (7"_)`[`]}A > A=. BOSSARMOR (2"_)`[`]}A > ) > > WEAPON=: _3[\ 8 4 0 10 5 0 25 6 0 40 7 0 74 8 0 > ARMOR=: 0,_3[\ 13 0 1 31 0 2 53 0 3 75 0 4 102 0 5 > RINGS=: 0,_3[\ 25 1 0 50 2 0 100 3 0 20 0 1 40 0 2 80 0 3 > A=:{<"1 L:0 WEAPON;ARMOR;RINGS;RINGS > B=:(~.L:1),A > C=: +/&:>&>B NB. C is an N by 3 array of cost, damage, armor > D=:(#~ 0 < ([: play }.)"1)C > > PART1=: {.{./:~D > > > PART2=: {.{.\:~(#~ 1 > ([: play }.)"1)C > > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm > ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
