/* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$I$?~ ~~II$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ,???$$???,, I$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ $$$$$$$$$$$$$$$$$$$$$$$$D, ~?I$??????????++?++I$?~ I$$$$$$$$$$$$$$$$$$$$$$$$$$ $$$$$$$$$$$$$$$$$$$$$$???8$$$$7?$$8MMMMMMMM8O$??$??7$?~~$$$$$$$$$$$$$$$$$$$$$$$$ $$$$$$$$$$$$$$$$$$$??$8Z$$$8MMMMMMMMMMMMMMMMMMMMMM$$77$$?I?$$$$$$$$$$$$$$$$$$$$$ $$$$$$$$$$$$$$$$$=?$$$$$8MMMMMMN8MMMMM8MMMMMD8MMMMMMM8777???I$$$$$$$$$$$$$$$$$$$ $$$$$$$$$$$$$$$D~$Z8$$MMMMMMMMMMMM88???78MMMMMMMMMMMMMMM7O$$$?$$$$$$$$$$$$$$$$$$ $$$$$$$$$$$$$$ $OZ$MMMMMMMMMMM~~==~~~~~~~~~~,~$MMMMMMMMMD7$I7: $$$$$$$$$$$$$$$$ $$$$$$$$$$$$? 88$OMMMMMMMMMMMMMMMMMNMMNNMMMM87?=MMMMMMMMMMMM7?$$ $$$$$$$$$$$$$$$ $$$$$$$$$$$? 8$$8MMMMMMMMMMMMMMMMNNNNNNNNNNNMMNMMMMMMMMMMMMMM8$78 $$$$$$$$$$$$$$ $$$$$$$$$$? $$$8MMM~?7MMMMMMNNNNDNZ7$7IIZZDND8NNNMMMMMMMM?MMMM8Z78 $$$$$$$$$$$$$ $$$$$$$$$? 888MMM8~?$MMMMMMNNNDDNDD7?I7777DDNNDNNNNMMMMMM$$$MMMN8Z8~$$$$$$$$$$$$ $$$$$$$$N,DZ8MMMM~+MMMMMNNNDNNDDD88D88DD8DDDDDDDNNNNNNMMMMM??MMMM$$8~$$$$$$$$$$$ $$$$$$$$~8$88MMM~?MMMM77N8DDD8DD888888Z$8888Z8DDDDD8NNMMMMMM??MMM8O$8I$$$$$$$$$$ $$$$$$$$?88$MMMM$MMM$7777NNDDD888888OOOOOO888888DDDDOZ$MMMMMMM8MMM88O$I$$$$$$$$$ $$$$$$I?8$OMMMMIMMMMMM77ND8D8888OOOOOZ77OOOOOO8888DDNNNNMMMMMMMMMMM$88$$$$$$$$$$ $$$$$$I$88ZMMMMMMMMMNNDDD8888O8OOOOZZZZZOZZOOO888888DDDDNNMMMMMMMMM888Z$$$$$$$$$ $$$$$$8888MMMMMMMMMMNNNNDD88887OOZZOII77+7OZOOZ$888D8DNNNMMMMMMMMMMM888D$$$$$$$$ $$$$$8$88$MMMMMMMMMDNNDDD8Z8OO8O$ZZ$Z$IIOZZZ77OOO8888DDDN8NMMMMMMMMM88$8$$$$$$$$ $$$$$8888NMMMMMMMMMMNDDD8D8O8OZOO$$Z$$ZO$OO$OOZOOOO88DDDDMMMMMMMMMMM$88MI$$$$$$$ $$$$$DDD8MMMMMMMMMNMNDDD888O8OZZOZ$Z77$$7$OZOOZZOOO888DDDMMMMMMMMMMM8O8N8$$$$$$$ $$$$$M8O8MMMMMMMMMMNNN8888O8OZZZZZZ77I?=777ZZZZOZOOO8D8DNNNMMMMMMMMMM8OZM$$$$$$$ $$$$$DD88MMMMMMMMMMNDDDD888OOOZZZ$$$II??IZ$$OOZZOOO888DDDNMNMMMMMMMMMO88M$$$$$$$ $$$$$M8$8NMMMMMMMMMNNDD8DZZOOZOZZZZ$$7II77$Z7$ZZZO8O888DNN8MMMMMMMMMM8ZZ8$$$$$$$ $$$$$M8Z88MMMMMMMMMNNDD8D8O8OZOZZZZ$Z$$$$$$Z$ZZOOO8Z8DDDNNDMMMMMMMMM88$8I$$$$$$$ $$$$$8M888MMMMMMMMMMNDDD8D888OZZOZZOZZOOZOOZOOOO8O8D8DDNNMMMMMMMMMMM$88M$$$$$$$$ $$$$$$MO8OMMMMMMMMMNNNDDD888OOOOZZZZZZZZZZZZZZOOO888DDDDNNMMMMMMMMMM88ZM$$$$$$$$ $$$$$$MM888MMMMMMMMMNNNNDDD888OOOOZOZZOOZOOOO8OO888DDDNNNMMMMMMMMMM8O8MM$$$$$$$$ $$$$$$7M$88MMMMMMMMMMMNNDDD8D8888OOOOOOOOOOO8888D88DDDNNNMMMMMMMMMM8Z$M$$$$$$$$$ $$$$$$$NM$$$MMMMMMMMMMNNNDDD8888888OOOOO8OO888888DDDNNNNMMMMMMMMMM8$88I$$$$$$$$$ $$$$$$$$M88OMMMMMMMMMMMMNNNDDDD8D88888888888DD88DDDNNNMMMMMMMMMMM8$8$M$$$$$$$$$$ $$$$$$$$MM$O$8MMMMMMMMMNMN8NDDDD8D88DDZ8888D8ODDDNNNNMMMMMMMMMMMM$$$M$$$$$$$$$$$ $$$$$$$$$MM$$$MMMMMMMMMMMNDNDDNNDDDDDD88DDDDDDNNNNMNMMMMMMMMMMMM??$M$$$$$$$$$$$$ $$$$$$$$$$MM$$?$MMMMMMMMMMMMMMNNNNDNDDNNDNNNNNNNMMMMMMMMMMMMMM8~+~8I$$$$$$$$$$$$ $$$$$$$$$$$MM~?+?MMMMMMMMMMMMMMMNMNNNNNNNNNNNNMMMMMMMMMMMMMMMI~~:MI$$$$$$$$$$$$$ $$$$$$$$$$$$MM~=??MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM$$?~M$$$$$$$$$$$$$$$ $$$$$$$$$$$$$$ND$$$$MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM$$$$ZM$$$$$$$$$$$$$$$$ $$$$$$$$$$$$$$$MD$$7$$MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM$$$$7M$$$$$$$$$$$$$$$$$$ $$$$$$$$$$$$$$$$$MD$$$OOMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMZ8$88MD$$$$$$$$$$$$$$$$$$$ $$$$$$$$$$$$$$$$$$$DM$77$$$MMMMMMMMMMMMMMMMMMMMMMMM$88$$$MD$$$$$$$$$$$$$$$$$$$$$ $$$$$$$$$$$$$$$$$$$$$$D8$$$$7$$$OMMMMMMMMMMMM$~??$$$$$8D$$$$$$$$$$$$$$$$$$$$$$$$ $$$$$$$$$$$$$$$$$$$$$$$$MMM$$$$7$~~~~:~~ ~~:~~~?$$$DDI$$$$$$$$$$$$$$$$$$$$$$$$$$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$8888?~~~~~ ~ ~~~~888I$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$I8888888$?$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ===== ===== === ===== ===== ===== ======= ===== === === === === === ============= ==== ==== === ============= ============= === === === === === ==== ===== ===== ===== ===== =========== ===== ===== ===== ===== ============= ==== ===== ===== ===== ========= ========= ========= ========= ==== ==== ==== ==== ==== ==== ==== ==== === ==== ==== ==== ==== ==== ==== ==== ========= ==== ==== ==== ==== ==== ==== ===== ==== ==== ==== ==== ==== ==== ==== ========= ========= ========= ==== ===== ===== ===== Crobots : Hal9000 Type : Midi (Classic) Version : 12.0 Author : Maurizio Camangi Begin : 22-03-2020 Revision : 22-03-2020 Whilst no-one usually gives a darn about reading these comments I can write anything I want regardless of the fact this is not my mother-tongue and my English is awful. HAL9000 v.12 is an improved (!) version of HAL9000 v.7 (2010) which back in the day (2015) was the best HAL9000 series robot on the KOTH. Differences: - Modern book-like F2F - Simplified routine to count enemies 1. A robot may not injure a human being or, through inaction, allow a human being to come to harm. 2. A robot must obey orders given to it by human beings, except where such orders would conflict with the First Law. 3. A robot must protect its own existence as long as such protection does not conflict with the First or Second Law. */ int ang, oang, range, orange, d, dir, posx, posy, x, y, dist, flag, attack, timer, clock, deg1, asin, acos; fastradar() /* Count enemies */ { return ( (scan(deg1, 10)!=0) +(scan(deg1+20, 10)!=0) +(scan(deg1+40, 10)!=0) +(scan(deg1+60, 10)!=0) +(scan(deg1+80, 10)!=0) +(scan(deg1+100,10)!=0) ); } stop() { fire2(dir,0); while( speed() > 59 ); } degree(xx,yy) /* Direction to x,y */ int xx,yy; { return(dir=(360+((xx-=loc_x())<0)*180+atan(((yy-loc_y())*100000)/xx))); } dista(dx,dy) /* Square distance (avoid sqrt()) */ int dx,dy; { return (((dx-=loc_x())*dx+(dy-=loc_y())*dy)); } corner() /* Get closer to corner */ { drive(degree(x, y), 100); while( (dist = dista(x, y)) > 8100 ) { if(dist < 25600) ; else fire(dir); } stop(); if ( ++timer%12 == 1 ) { if ( fastradar() < 2 ) { while(1) { if (((posx=loc_x())%880)<120) dir=180*(posx>500); else if (((posy=loc_y())%880)<120) dir=90+180*(posy>500); else if (range>610) dir=ang+25; else if (range<180) dir=ang+195; else dir=ang+180*(clock^=1); fire2(dir,100); fire2(dir,100); fire2(dir,100); } } if( damage() < 60 ) attack|=2; else attack=0; } } int radar3(sc) { if ( scan(sc, 10) ) ; else if ( scan(sc+=20, 10) ) ; else return 0; ang = sc; return 1; } fire(dir) { if (speed()<100) drive(dir,100); else { if (scan(dir,10)) ang=dir; if (range>850) { ang+=120; } } if (scan(ang,10)) { asin=(sin(ang-dir)/14384); acos=(cos(ang-dir)/3796)-230; find(); if (orange=scan(oang=ang,3)) { find(); cannon(ang+(ang-oang)*((880+(range=scan(ang,10)))/482)-asin, range*230/(orange-range-acos)); } else search(); } else search(); } find() { if(scan(ang-13,10)) ang-=5; else if(scan(ang+13,10)) ang+=5; if(scan(ang+12,10)) ang+=4; else if(scan(ang-12,10)) ang-=4; if(scan(ang-11,10)) ang-=2; if(scan(ang+11,10)) ang+=2; } search() { if (range=scan(ang+=350,10)) return cannon(ang,range); if (range=scan(ang+=20,10)) return cannon(ang,range); if (range=scan(ang+=320,10)) return cannon(ang,range); if (range=scan(ang+=60,10)) return cannon(ang,range); if (range=scan(ang+=280,10)) return cannon(ang,range); search(ang-=220); } fire2(dir,v) { drive(dir,v); if (range=scan(oang=ang,10)) { if (scan(ang-8,5)) { if (scan(ang-=5,2)) ; else ang-=4; } else { if (scan(ang+8,5)) { if (scan(ang+=5,2)) ; else ang+=4; } else { if (scan(ang,1)) ; else if (scan(ang-=3,2)) ; else ang+=6; } } return(cannon((ang<<1)-oang,(scan(ang,10)<<1)-range)); } else { if(range=scan(ang+=20,10)) cannon(ang,range); else if(range=scan(ang-=40,10)) cannon(ang,range); else ang+=80; } } lightsaber(delta) { d=damage()+delta; while(dista(x,y) < (123450-4925*(damage()>d))) fire(dir); } main() { degree(x=20+960*(posx=loc_x()>499), y=20+960*(posy=loc_y()>499)); corner(deg1=90*((posy<<1)|(posx^posy))); while (1) { if (radar3(deg1+70*flag)) { dir=deg1 + (30<d) attack&=~(1<d) { lightsaber(0); } } } else { dir=deg1 + 15 + (60*flag); lightsaber(5); } corner(stop(flag^=1)); } }