! What self.number means: ! 0 Never used ! 1 Attempted to strike once ! 2 Attempted to strike twice ! 3 Attempted to strike thrice ! 4 Phosphor gone from failed striking. ! 5 Just lit. ! 6-9 Burning down progressively. ! 10 Burnt out. ! 11 Burnt out, but prematurely. parse_name [ w n; if (parser_action==##TheSame) { ! The actual code had some more stuff here, to handle ! the case where the parser is asking us whether two ! objects of the class are distinguishable, but I've ! snipped that out for brevity. } ! Otherwise we're just determining how ! many words refer to it: for (::) { w = NextWord(); switch(w) { 'match': n++; 'matches': parser_action = ##PluralFound; n++; 'burning', 'lit', 'light', 'lighted', 'alight', 'brightly': if (self.number<5) return n; if (self.number>9) return n; n++; 'glowing', 'dim', 'dimly': if (self.number~=5) return n; n++; 'burnt-out', 'burnt', 'burned', 'burned-out', 'charred': if (self.number<10) return n; n++; 'worn', 'worn-out': if (self.number~=4) return n; n++; 'out': if (self.number~= 4 or 10 or 11) return n; n++; default: return n; } } ], #### sub A{while($_[0]){$d=hex chop$_[0];foreach(1..4){$_[1].=($d %2)?1:0;$d>>=1;}}return$_[1];}sub J{$_=shift;while($_){$c=0; while(s/^0//){$c++;}s/^1//;$_[1].=(' ','|','_',"\n",'\\','/' )[$c]}@_}$PH="16f6da116f6db14b4b0906c4f324";print J(A($PH));