crobs/gsmr2.r

01pinpoint(head)
02{
03if (range = scan(head+4,6))
04   head += 4;
05else if (range = scan(head-4,6))
06   head -= 4;
07else
08   return 0;
09if (range = scan(head+2,3))
10   head += 2;
11else if (range = scan(head-2,3))
12   return head -= 2;
13else
14   return 0;
15if (range = scan(head+1,2))
16   return head+1;
17else if (range = scan(head-1,2))
18   return head-1;
19else
20   return 0;
21  
22}
23 
24 
25main()
26  {
27  head = 0;
28  pts = 0;
29  miss=0;
30  while (1)
31     {
32     if (pts && bear)
33        drive(bear,50);
34  
35     if (range = scan(head,10))
36        if (bear = pinpoint(head))
37           {
38           ++pts;
39           miss=-1;
40           if (pts < 2)
41              cannon(bear,range);
42           else
43              {
44              if (rdif>0)
45                 rdif = (range - pr) * range / 300;
46              else
47                 rdif = (range - pr) * range / 575;
48              if (tdif>2)
49                 tdif = (bear - pt) * range / 300;
50              else
51                 tdif = 0;
52              cannon(bear+tdif,range+rdif);
53              }
54           pr = range;
55           pt = bear;
56           if (bear)
57              head = bear - 46;
58           }
59     head += 10;
60     ++miss;
61     if (miss == 5)
62        {
63        pts = 0;
64         }
65     if ((miss > 100) && !(miss%10))
66        drive(head,50);
67     }
68      
69  }
70 
71