Logica seems pretty cool!

Any desire to make it available for others to use?

Best,
John.

> On Oct 2, 2019, at 9:15 AM, KUSUMOTO Norio <kusum...@na.rim.or.jp> wrote:
> 
>  2019/09/23 18:03、Alexander Ilin <ajs...@yandex.ru>のメール:
>> 
>> 
>> Have you used the `backtrack` vocab for this?
>> https://re-factor.blogspot.com/2015/06/send-more-money.html
> 
> I ported a Prolog program to solve the same puzzle.
> 
> 
> 
> USING: logica lists assocs sequences kernel math
> locals formatting io ;
> IN: logica.test.money
> 
> LOGIC-PREDS: sumo sum1o digitsumo delo nonzeroo donaldo moneyo ;
> LOGIC-VARS: S E N D M O R Y A L G B T
>            N1 N2 C C1 C2 D1 D2 L1
>            Digits Digs Digs1 Digs2 Digs3 ;
> 
> { sumo N1 N2 N } {
>    { sum1o N1 N2 N 0 0 L{ 0 1 2 3 4 5 6 7 8 9 } __ }
> } si
> 
> { sum1o L{ } L{ } L{ } 0 0 Digits Digits } semper
> { sum1o [ D1 N1 cons ] [ D2 N2 cons ] [ D N cons ] C1 C Digs1 Digs } {
>    { sum1o N1 N2 N C1 C2 Digs1 Digs2 }
>    { digitsumo D1 D2 C2 D C Digs2 Digs }
> } si
> 
> { digitsumo D1 D2 C1 D C Digs1 Digs } {
>    { delo D1 Digs1 Digs2 }
>    { delo D2 Digs2 Digs3 }
>    { delo D Digs3 Digs }
>    [ [ [ D1 of ] [ D2 of ] [ C1 of ] tri + + ] S is ]
>    [ [ S of 10 mod ] D is ]
>    [ [ S of 10 / >integer ] C is ]
> } si
> 
> { delo A L L } { { nonvaro A } | } si
> { delo A [ A L cons ] L } semper
> { delo A [ B L cons ] [ B L1 cons ] } { delo A L L1 } si
> 
> 
> { moneyo L{ 0 S E N D }
>         L{ 0 M O R E }
>         L{ M O N E Y }
> } semper
> 
> { donaldo  L{ D O N A L D }
>           L{ G E R A L D }
>           L{ R O B E R T } 
> } semper
> 
> :: S-and-M-can't-be-zero ( seq -- seq' )
>    seq [| hash |
>         1 hash N1 of list>array nth 0 = not
>         1 hash N2 of list>array nth 0 = not and
>    ] filter ;
> 
> :: print-puzzle ( hash-array -- )
>    hash-array
>    [| hash |
>     "   " printf hash N1 of list>array [ "%d " printf ] each nl
>     "+  " printf hash N2 of list>array [ "%d " printf ] each nl
>     "----------------" printf nl
>     "   " printf hash N  of list>array [ "%d " printf ] each nl nl
>    ] each ;
> 
> 
> 
> 
> IN: scratchpad [ { { moneyo N1 N2 N } { sumo N1 N2 N } } query
>  S-and-M-can't-be-zero
>  print-puzzle
> ] time
>   0 9 5 6 7 
> +  0 1 0 8 5 
> ----------------
>   1 0 6 5 2 
> 
> Running time: 0.320353468 seconds
> 
> 
> --
> KUSUMOTO Norio
> 
> 
> 
> _______________________________________________
> Factor-talk mailing list
> Factor-talk@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/factor-talk


_______________________________________________
Factor-talk mailing list
Factor-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/factor-talk

Reply via email to