Path: csiph.com!eternal-september.org!feeder.eternal-september.org!mx02.eternal-september.org!.POSTED!not-for-mail From: Paul Rubin Newsgroups: comp.lang.forth Subject: Re: Strings and numbers Date: Wed, 09 Sep 2015 00:41:43 -0700 Organization: A noiseless patient Spider Lines: 25 Message-ID: <877fo0t4y0.fsf@jester.gateway.pace.com> References: <87egjjk8kn.fsf@jester.gateway.sonic.net> Mime-Version: 1.0 Content-Type: text/plain Injection-Info: mx02.eternal-september.org; posting-host="4a8d07ad1a0f5884bbd8208f7dcd0e0f"; logging-data="4343"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19zmy/urmNjjYhJeFBepaLm" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3 (gnu/linux) Cancel-Lock: sha1:HipbnAJuIQTILhTTe7s1CnNWUQw= sha1:b8lr1qBEd4s/CHjsSjMcexwlQ0g= Xref: csiph.com comp.lang.forth:41884 "WJ" writes: >> > > http://programmingpraxis.com/2015/07/21/a-number-puzzle/#comments > No one has yet posted a Forth solution. \ http://programmingpraxis.com/2015/07/21/a-number-puzzle : .bit ( i -- n ) 1 swap lshift ; \ bits are numbered from 0 : clear-bit ( n i -- n ) .bit invert and ; \ clear bit i in n : test-bit ( n i -- flag ) .bit and 0<> ; \ true if bit i is 1 : append-digit ( n i -- n ) swap 10 * + ; : num { r n s -- n } s 0= if n else 10 0 do n i append-digit s i test-bit over r mod 0= and if r 1+ swap s i clear-bit recurse else drop then loop then ; : go 1 0 $3ff num . ; go