#!/usr/local/bin/pike// -*- mode: pike -*- // $Id: wc.pike,v 1.4 2001/06/07 17:55:11 doug Exp $ // http://www.bagley.org/~doug/shootout/ // from Per Hedbor, optimized by David Hedbor enum State { Outside, Inside }; void main() { int nl = 0, nw = 0, nc = 0; // line, word and character counters int sl; // Size of input State state = Outside; // Inside or outside word string buf; string rest=""; array l; do { buf = replace(Stdio.stdin.read( 4196 ), "\t", " "); if(strlen(buf)) { nc += sizeof(buf); l = (rest+ buf) / "\n"; nl += sizeof(l)-1; foreach(l[..sizeof(l)-2], rest) { nw += sizeof(rest / " " - ({""})); } if(sizeof(l)>1) { rest = l[-1]; } //else rest=""; } else { nw += sizeof(rest / " " - ({""})); break; } } while( 1 ); write("%d %d %d\n", nl, nw, nc); }