免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234
最近访问板块 发新帖
楼主: sunzhiguolu
打印 上一主题 下一主题

小学一年级数学题 - 系列-3 [复制链接]

论坛徽章:
22
2015年亚洲杯之科威特
日期:2015-04-18 15:27:07每日论坛发贴之星
日期:2016-01-27 06:20:0015-16赛季CBA联赛之广夏
日期:2016-03-28 16:20:51程序设计版块每日发帖之星
日期:2016-04-09 06:20:00CU十四周年纪念徽章
日期:2016-05-03 09:35:1415-16赛季CBA联赛之天津
日期:2016-11-18 08:31:3115-16赛季CBA联赛之山西
日期:2016-12-07 16:29:5315-16赛季CBA联赛之八一
日期:2017-01-10 11:34:3415-16赛季CBA联赛之吉林
日期:2017-03-30 22:51:1915-16赛季CBA联赛之广夏
日期:2017-04-13 20:51:52程序设计版块每日发帖之星
日期:2016-01-27 06:20:00每日论坛发贴之星
日期:2015-12-28 06:20:00
31 [报告]
发表于 2017-06-29 20:14 来自手机 |只看该作者
赞            

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
32 [报告]
发表于 2017-06-29 21:58 |只看该作者
回复 31# Windows19
谢谢诸位大神,包括楼上打酱油的 。说过的话一定会兑现,等我消化消化。。。

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
33 [报告]
发表于 2017-07-02 20:15 |只看该作者

论坛徽章:
0
34 [报告]
发表于 2017-07-10 21:20 |只看该作者
回复 14# 523066680

Algorithm:ermute版本 <= 0.12的话在Perl 5.24及以上是build不出来的。这是因为Perl 5.24有一个称为Context rework的工作,提高了函数调用的速度,但是一些原来非公开的内部API被改了,当时造成了一批XS package break。

我前两天因为单位里工作的原因,刚好把Algorithm:ermute修了一下,现在最新的版本是0.14,你可以再试试。

评分

参与人数 1信誉积分 +5 收起 理由
523066680 + 5 很给力!

查看全部评分

论坛徽章:
12
子鼠
日期:2014-10-11 16:46:482016科比退役纪念章
日期:2018-03-16 10:24:0515-16赛季CBA联赛之山东
日期:2017-11-10 14:32:142016科比退役纪念章
日期:2017-09-02 15:42:4715-16赛季CBA联赛之佛山
日期:2017-08-28 17:11:5515-16赛季CBA联赛之浙江
日期:2017-08-24 16:55:1715-16赛季CBA联赛之青岛
日期:2017-08-17 19:55:2415-16赛季CBA联赛之天津
日期:2017-06-29 10:34:4315-16赛季CBA联赛之四川
日期:2017-05-16 16:38:55黑曼巴
日期:2016-07-19 15:03:112015亚冠之萨济拖拉机
日期:2015-05-22 11:38:5315-16赛季CBA联赛之北京
日期:2019-08-13 17:30:53
35 [报告]
发表于 2017-07-11 10:05 |只看该作者
回复 34# zhouzhen1

厉害了。高性能。

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
36 [报告]
发表于 2017-07-24 01:20 |只看该作者
v3:
  1. real        0m0.030s
复制代码

  1. #!/usr/bin/perl
  2. # version 26, subversion 0 (v5.26.0)
  3. use 5.010;
  4. explore();

  5. # ______________________ SUB ______________________

  6. sub explore { E_(0) }

  7. sub E_ {
  8.     my $n = shift;
  9.     state $b   = [ (0) x 4 ];
  10.     state $has = [ (0) x 10 ];
  11.     state $in  = [ [ 0, 1 ], [ 2, 3 ], [ 0, 2 ], [ 1, 3 ], [ 0, 3 ] ];

  12.     if ( $n == 3 ) {
  13.         # b3 = 15 - (15 - b0 - b1) - (15 - b0 - b2)
  14.         my $b3 = $b->[0] + $b->[0] + $b->[1] + $b->[2] - 15;
  15.         return if $b3 < 1 or $b3 > 9;
  16.         $b->[3] = $b3;
  17.         my ( @test, @x ) = (0) x 10;
  18.         $test[$_]++ and return for @$b;

  19.         for my $i (@$in) {
  20.             my $it = $b->[ $i->[0] ] + $b->[ $i->[1] ];
  21.             return if $it < 6 or $it > 14;
  22.             $it = 15 - $it;
  23.             return if $test[$it]++;
  24.             push @x, $it;
  25.         }

  26.         say join ' ', @$b[ 0, 1 ], $x[0];
  27.         say join ' ', @$b[ 2, 3 ], $x[1];
  28.         say join ' ', @x[ 2, 3, 4 ];
  29.         say '-----';
  30.         return;
  31.     }

  32.     for my $it ( 1 .. 9 ) {
  33.         next if $has->[$it];
  34.         $has->[$it]++;
  35.         $b->[$n] = $it;
  36.         E_( $n + 1 );
  37.         $has->[$it]--;
  38.     }
  39. }

  40. __DATA__
  41. $_
复制代码

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
37 [报告]
发表于 2017-07-24 12:54 |只看该作者
回复 32# sunzhiguolu

>> ...说过的话一定会兑现,等我消化消化。。。

消化消化
帖子都快消失,还不出来说说话...

论坛徽章:
0
38 [报告]
发表于 2020-07-30 00:11 |只看该作者
最近在看《七周七语言》,这类题用prolog是最合适的,而perl有AI:rolog,写了个代码,因为要完成穷举和满足所有条件,运行时间会有点久。
fd_domain与fd_all_diff函数都是自己写的,另个解决问题的方式是通过递归来实现的。
  1. use AI::Prolog;
  2. use Data::Dumper;
  3. $Data::Dumper::Indent = 0;

  4. my $prolog;

  5. # If reading from DATA, we need a CHECK block to ensure that
  6. # DATA is available by the time the constructor is called
  7. CHECK {
  8.     $prolog = AI::Prolog->new(
  9.         do { local $/; <DATA> }
  10.     );
  11. }
  12. #[4, 9,2,
  13. # 3,5,7,
  14. # 8, 1,6]
  15. $prolog->query("sudoku([_, _,_,_,_,_,_, _,_], Solution).");

  16. #显示执行过程
  17. #$prolog->trace(1);
  18. while ( my $results = $prolog->results ) {
  19.     #print "@$results\n";
  20.     print Dumper $results;
  21. }

  22. __DATA__
  23. member(X, [ X | _ ]).
  24. member(X, [ _ | TAIL ]) :-
  25.    member(X, TAIL).
  26. fd_domain([],_).
  27. fd_domain([ HEAD | TAIL ],L) :-
  28.    member(HEAD,L),
  29.    fd_domain(TAIL,L).
  30. fd_all_diff([]).
  31. fd_all_diff([ HEAD | TAIL ]) :-
  32.    not(member(HEAD,TAIL)),
  33.    fd_all_diff(TAIL).
  34. sum([], 0).
  35. sum([Head|Tail],Total) :-
  36.     sum(Tail,Sum),
  37.     Total is Head + Sum.
  38.    
  39. valid([]).
  40. valid([HEAD|TAIL]) :-
  41.     sum( HEAD , Total),
  42.     eq(15,Total),
  43.     valid(TAIL).
  44. sudoku(Puzzle, Solution) :-
  45.     Solution = Puzzle,
  46.     eq(Puzzle, [S11, S12, S13, S21, S22, S23, S31, S32, S33]),
  47.     fd_domain(Solution, [1,2,3,4,5,6,7,8,9]),
  48.     eq(Row1,[S11, S12, S13]),
  49.     eq(Row2,[S21, S22, S23]),
  50.     eq(Row3,[S31, S32, S33]),
  51.     eq(Col1,[S11, S21, S31]),
  52.     eq(Col2,[S12, S22, S32]),
  53.     eq(Col3,[S13, S23, S33]),
  54.     eq(ObjLineL,[S11, S22, S33]),
  55.     eq(ObjLineR, [S13, S22, S31]),
  56.     fd_all_diff(Solution),
  57.     valid([Row1, Row2, Row3, Col1, Col2, Col3, ObjLineL, ObjLineR]).
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP