Diff
Not logged in

Differences From Artifact [62e6040714438eff]:

To Artifact [ef5cfcc2ac51c863]:


20 } 20 } 21 21 22 class GuardedOutput : GameObserver 22 class GuardedOutput : GameObserver 23 { 23 { 24 this(in Game g) 24 this(in Game g) 25 { 25 { 26 setup_sigint_handling(); 26 setup_sigint_handling(); 27 ideal_log ~= g.score_if_abort_now; | 27 score_log ~= g.score; 28 flushed = false; 28 flushed = false; 29 } 29 } 30 30 31 override void on_game_changed(char c, in Game g, bool finished) 31 override void on_game_changed(char c, in Game g, bool finished) 32 { 32 { 33 if(flushed) 33 if(flushed) 34 return; 34 return; 35 35 36 log ~= c; 36 log ~= c; 37 score_log ~= g.score; 37 score_log ~= g.score; 38 ideal_log ~= g.score_if_abort_now; < 39 if(finished || log.length+1==g.map.W*g.map.H) 38 if(finished || log.length+1==g.map.W*g.map.H) 40 flush(); 39 flush(); 41 } 40 } 42 41 43 private: 42 private: 44 string log; 43 string log; 45 long[] score_log; 44 long[] score_log; 46 long[] ideal_log; < 47 bool flushed; 45 bool flushed; 48 46 49 void flush() 47 void flush() 50 { 48 { 51 Tuple!(long, int, int) cand; | 49 Tuple!(long, int) cand; 52 cand[0] = long.min; 50 cand[0] = long.min; 53 51 54 for(int i=0; i<score_log.length; ++i) 52 for(int i=0; i<score_log.length; ++i) 55 if(cand[0] < score_log[i]) 53 if(cand[0] < score_log[i]) 56 cand = tuple(score_log[i],i,0); | 54 cand = tuple(score_log[i],i); 57 for(int i=0; i<ideal_log.length; ++i) < 58 if(cand[0] < ideal_log[i]) < 59 cand = tuple(ideal_log[i],i,1); < 60 55 61 if(cand[2]==0) { < 62 string str = log[0..cand[1]+1]; < 63 std.c.stdio.printf("%.*s\n", str.length, str.ptr); < 64 } else { < 65 string str = log[0..cand[1]]; < 66 std.c.stdio.printf("%.*sA\n", str.length, str.ptr); | 56 std.c.stdio.printf("%.*sA\n", cand[1], log.ptr); 67 } < 68 std.c.stdio.fflush(std.c.stdio.stdout); 57 std.c.stdio.fflush(std.c.stdio.stdout); 69 flushed = true; 58 flushed = true; 70 } 59 } 71 60 72 private: 61 private: 73 static __gshared GuardedOutput g_output; 62 static __gshared GuardedOutput g_output; 74 63