`
aristotle9
  • 浏览: 883 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

中国剩余问题的Haskell解法

阅读更多
神奇的原贴算法题看程序员的魅力
无穷列表在解决这个问题上有很好的直观性.
{--
如果3个人一桌,多2个人。
如果5个人一桌,多4个人。
如果7个人一桌,多6个人。
如果9个人一桌,多8个人。
如果11个人一桌,正好。请问这屋里多少人? 
--}



main = f 1 1 1 1 2 k l m n o where
    k = [3 * x + 2 | x <- [1..]]
    l = [5 * x + 4 | x <- [1..]]
    m = [7 * x + 6 | x <- [1..]]
    n = [9 * x + 8 | x <- [1..]]
    o = [11 * x | x <- [1..]]

-- f :: Integer -> Integer -> Integer -> Integer -> [Integer] -> [Integer] -> [Integer] -> [Integer] ->Integer
f a1 a2 a3 a4 a5 (b1:l1) (b2:l2) (b3:l3) (b4:l4) (b5:l5)
    | a1 == a2 && a2 == a3 && a3 == a4 && a4 == a5 = a1 : (f 1 a2 a3 a4 a5 (b1:l1) (b2:l2) (b3:l3) (b4:l4) (b5:l5))
    | a1 <= a2 && a1 <= a3 && a1 <= a4 && a1 <= a5 && b1 <= b2 && b1 <= b3 && b1 <= b4 && b1 <= b5 = f b1 a2 a3 a4 a5 l1 (b2:l2) (b3:l3) (b4:l4) (b5:l5)
    | a1 <= a2 && a1 <= a3 && a1 <= a4 && a1 <= a5 && b2 <= b1 && b2 <= b3 && b2 <= b4 && b2 <= b5 = f b2 a2 a3 a4 a5 (b1:l1) l2 (b3:l3) (b4:l4) (b5:l5)
    | a1 <= a2 && a1 <= a3 && a1 <= a4 && a1 <= a5 && b3 <= b1 && b3 <= b2 && b3 <= b4 && b3 <= b5 = f b3 a2 a3 a4 a5 (b1:l1) (b2:l2) l3 (b4:l4) (b5:l5)
    | a1 <= a2 && a1 <= a3 && a1 <= a4 && a1 <= a5 && b4 <= b1 && b4 <= b2 && b4 <= b3 && b4 <= b5 = f b4 a2 a3 a4 a5 (b1:l1) (b2:l2) (b3:l3) l4 (b5:l5)
    | a1 <= a2 && a1 <= a3 && a1 <= a4 && a1 <= a5 && b5 <= b1 && b5 <= b2 && b5 <= b3 && b5 <= b4 = f b5 a2 a3 a4 a5 (b1:l1) (b2:l2) (b3:l3) (b4:l4) l5
    | a2 <= a1 && a2 <= a3 && a2 <= a4 && a2 <= a5 && b1 <= b2 && b1 <= b3 && b1 <= b4 && b1 <= b5 = f a1 b1 a3 a4 a5 l1 (b2:l2) (b3:l3) (b4:l4) (b5:l5)
    | a2 <= a1 && a2 <= a3 && a2 <= a4 && a2 <= a5 && b2 <= b1 && b2 <= b3 && b2 <= b4 && b2 <= b5 = f a1 b2 a3 a4 a5 (b1:l1) l2 (b3:l3) (b4:l4) (b5:l5)
    | a2 <= a1 && a2 <= a3 && a2 <= a4 && a2 <= a5 && b3 <= b1 && b3 <= b2 && b3 <= b4 && b3 <= b5 = f a1 b3 a3 a4 a5 (b1:l1) (b2:l2) l3 (b4:l4) (b5:l5)
    | a2 <= a1 && a2 <= a3 && a2 <= a4 && a2 <= a5 && b4 <= b1 && b4 <= b2 && b4 <= b3 && b4 <= b5 = f a1 b4 a3 a4 a5 (b1:l1) (b2:l2) (b3:l3) l4 (b5:l5)
    | a2 <= a1 && a2 <= a3 && a2 <= a4 && a2 <= a5 && b5 <= b1 && b5 <= b2 && b5 <= b3 && b5 <= b4 = f a1 b5 a3 a4 a5 (b1:l1) (b2:l2) (b3:l3) (b4:l4) l5
    | a3 <= a1 && a3 <= a2 && a3 <= a4 && a3 <= a5 && b1 <= b2 && b1 <= b3 && b1 <= b4 && b1 <= b5 = f a1 a2 b1 a4 a5 l1 (b2:l2) (b3:l3) (b4:l4) (b5:l5)
    | a3 <= a1 && a3 <= a2 && a3 <= a4 && a3 <= a5 && b2 <= b1 && b2 <= b3 && b2 <= b4 && b2 <= b5 = f a1 a2 b2 a4 a5 (b1:l1) l2 (b3:l3) (b4:l4) (b5:l5)
    | a3 <= a1 && a3 <= a2 && a3 <= a4 && a3 <= a5 && b3 <= b1 && b3 <= b2 && b3 <= b4 && b3 <= b5 = f a1 a2 b3 a4 a5 (b1:l1) (b2:l2) l3 (b4:l4) (b5:l5)
    | a3 <= a1 && a3 <= a2 && a3 <= a4 && a3 <= a5 && b4 <= b1 && b4 <= b2 && b4 <= b3 && b4 <= b5 = f a1 a2 b4 a4 a5 (b1:l1) (b2:l2) (b3:l3) l4 (b5:l5)
    | a3 <= a1 && a3 <= a2 && a3 <= a4 && a3 <= a5 && b5 <= b1 && b5 <= b2 && b5 <= b3 && b5 <= b4 = f a1 a2 b5 a4 a5 (b1:l1) (b2:l2) (b3:l3) (b4:l4) l5
    | a4 <= a1 && a4 <= a2 && a4 <= a3 && a4 <= a5 && b1 <= b2 && b1 <= b3 && b1 <= b4 && b1 <= b5 = f a1 a2 a3 b1 a5 l1 (b2:l2) (b3:l3) (b4:l4) (b5:l5)
    | a4 <= a1 && a4 <= a2 && a4 <= a3 && a4 <= a5 && b2 <= b1 && b2 <= b3 && b2 <= b4 && b2 <= b5 = f a1 a2 a3 b2 a5 (b1:l1) l2 (b3:l3) (b4:l4) (b5:l5)
    | a4 <= a1 && a4 <= a2 && a4 <= a3 && a4 <= a5 && b3 <= b1 && b3 <= b2 && b3 <= b4 && b3 <= b5 = f a1 a2 a3 b3 a5 (b1:l1) (b2:l2) l3 (b4:l4) (b5:l5)
    | a4 <= a1 && a4 <= a2 && a4 <= a3 && a4 <= a5 && b4 <= b1 && b4 <= b2 && b4 <= b3 && b4 <= b5 = f a1 a2 a3 b4 a5 (b1:l1) (b2:l2) (b3:l3) l4 (b5:l5)
    | a4 <= a1 && a4 <= a2 && a4 <= a3 && a4 <= a5 && b5 <= b1 && b5 <= b2 && b5 <= b3 && b5 <= b4 = f a1 a2 a3 b5 a5 (b1:l1) (b2:l2) (b3:l3) (b4:l4) l5
    | a5 <= a1 && a5 <= a2 && a5 <= a3 && a5 <= a4 && b1 <= b2 && b1 <= b3 && b1 <= b4 && b1 <= b5 = f a1 a2 a3 a4 b1 l1 (b2:l2) (b3:l3) (b4:l4) (b5:l5)
    | a5 <= a1 && a5 <= a2 && a5 <= a3 && a5 <= a4 && b2 <= b1 && b2 <= b3 && b2 <= b4 && b2 <= b5 = f a1 a2 a3 a4 b2 (b1:l1) l2 (b3:l3) (b4:l4) (b5:l5)
    | a5 <= a1 && a5 <= a2 && a5 <= a3 && a5 <= a4 && b3 <= b1 && b3 <= b2 && b3 <= b4 && b3 <= b5 = f a1 a2 a3 a4 b3 (b1:l1) (b2:l2) l3 (b4:l4) (b5:l5)
    | a5 <= a1 && a5 <= a2 && a5 <= a3 && a5 <= a4 && b4 <= b1 && b4 <= b2 && b4 <= b3 && b4 <= b5 = f a1 a2 a3 a4 b4 (b1:l1) (b2:l2) (b3:l3) l4 (b5:l5)
    | a5 <= a1 && a5 <= a2 && a5 <= a3 && a5 <= a4 && b5 <= b1 && b5 <= b2 && b5 <= b3 && b5 <= b4 = f a1 a2 a3 a4 b5 (b1:l1) (b2:l2) (b3:l3) (b4:l4) l5

代码很可怕,实际上这个代码是由另一段Haskell程序生成的.
思路异常简单:对5个同余数列Merge操作,并将最近5个数据保存到寄器中,遇到5个相同的数字,得到一个结果.
结果:
Main> main
[2519,5984,9449,12914,16379,19844,23309,26774,30239,33704,37169,40634,44099,47564,51029,54494,57959,61424,64889,68354,71819,75284,78749,82214,85679,89144,92609,96074,99539,103004,106469,109934,113399,116864,120329,123794,127259,130724,134189,137654,141119,144584{Interrupted!}
分享到:
评论

相关推荐

    Tsp问题Haskell GA 算法程序

    利用Haskell内部遗传算法库解决旅行商问题,是一个运行遗传算法库的模板

    Haskell教程

    Haskell是一种纯粹的函数式编程语言,它以高度的抽象性和表达能力而闻名。它拥有严格的语法规则和类型系统,是研究函数式编程和类型理论的重要语言。Haskell的设计受到了ML和其他函数式语言的影响,尤其是惰性求值...

    Haskell Cookbook.zip

    在这本书中,读者可以深入学习Haskell的基础知识,以及如何解决实际编程问题。 Haskell的核心概念包括: 1. 函数式编程基础:Haskell是函数式的,这意味着一切皆为值,程序由纯函数组成,没有副作用。书中会介绍...

    HaskellPart1_Haskell_

    3. **柯里化**:函数可以接受部分参数并返回一个新函数,等待接受剩余参数。 4. **模式匹配**:通过匹配不同的值模式来定义函数,实现条件分支。 ### 二、类型系统 Haskell具有强静态类型系统,类型推导使得大多数...

    Haskell教程(中文版)

    **Haskell教程(中文版)** Haskell是一种纯函数式编程语言,以其强大的类型系统、惰性求值和高阶函数特性而闻名。这本由Hal Daumé III编著并由乔海燕翻译的《Yet Another Haskell Tutorial》中文版,为初学者提供了...

    Haskell Cookbook 英文无水印pdf

    《Haskell Cookbook》是一本专为Haskell编程语言爱好者和开发者准备的实用指南。这本书以英文版的形式提供,没有水印,确保了阅读的清晰度和舒适...这本书将帮助读者熟练掌握Haskell,从而能够优雅地解决各种复杂问题。

    8皇后问题 Haskell

    Haskell语言解决八皇后问题,质量很高,程序简单清晰,

    Haskell 2010 Language Report

    Haskell 2010语言报告是Haskell编程语言的一个官方文档,详细阐述了Haskell语言的规范。Haskell是一种纯函数式编程语言,它提供了强大的类型系统和高度的抽象化能力。Haskell 2010语言版本是对早期Haskell 98标准的...

    Real World Haskell PDF

    《Real World Haskell》是一本广泛认可的Haskell编程语言教程,旨在将这门函数式编程语言的理论与实践相结合,让读者能够在实际项目中运用Haskell。这本书的PDF版本是根据2015年3月1日的在线文档转制而成,确保了...

    Get Programming with HASKELL

    Get Programming with Haskell introduces you to the Haskell language without drowning you in academic jargon and heavy functional programming theory. By working through 43 easy-to-follow lessons, you'...

    haskell趣学指南

    【Haskell趣学指南】 Haskell是一种纯函数式编程语言,以其优雅...Haskell的理论基础深厚,同时在实际问题解决中也展现出强大的能力。无论是想了解函数式编程,还是想要提升编程思维,Haskell都是一个值得探索的语言。

    haskell-chart, haskell的2D 图表库.zip

    为了更好地理解和使用`haskell-chart`,可以参考其关联的wiki,那里通常会包含安装指南、API文档、示例代码以及常见问题解答。安装`haskell-chart`通常需要通过Haskell的包管理器`cabal`或`stack`进行,这一步可能...

    Haskell 文档

    ### Haskell文档知识点解析 #### 一、Haskell简介与历史 - **定义**: Haskell是一种纯函数式编程语言,以其简洁性和强大的数学模型为基础,成为研究和实际应用领域中备受推崇的语言之一。 - **特点**: 作为一种...

    haskell语言教程(learn you a haskell)

    《Haskell语言教程》是一本深受开发者欢迎的在线书籍,主要目标是帮助初学...尽管它可能对初学者来说有一定的学习曲线,但一旦掌握了Haskell,你将获得一种全新的编程视角,这对于解决复杂问题和提高代码质量非常有益。

    haskell-mode emacs

    Haskell 是一种功能强大的、纯函数式的编程语言,以其优雅的语法和强大的类型系统闻名。Emacs 是一款经典的、高度可扩展的文本编辑器,它提供了丰富的插件和模式来支持各种编程语言的开发,包括 Haskell。在 Emacs ...

    Learning Haskell Data Analysis

    ### 学习Haskell进行数据分析 #### 一、前言 在《学习Haskell数据分析》这本书中,作者詹姆斯·丘奇(James Church)为读者提供了一种全新的方式来理解和处理数据集。本书不仅介绍了Haskell这门编程语言的基础知识,...

    haskell教程

    Haskell中的Monads是解决纯函数式编程中副作用问题的一种机制。Monads允许在保持纯函数特性的前提下处理IO操作和其他有副作用的行为。Monads在Haskell中扮演着核心角色,理解Monads对于深入学习Haskell至关重要。 ...

Global site tag (gtag.js) - Google Analytics