`

NIM(3), python

 
阅读更多
false_table = dict()
true_table = dict()

def possible_next_moves(m,n):
    for i in range(0,m):
        yield(i,n)
        
    for i in range(0,n):
        if m<i:
            yield(m,i)
        else:
            yield(i,m)
            
    for i in range(0,m):
        yield(i,n-m+i)
        
def can_reach(m,n,m1,n1):
    if m==m1 and n==n1:
        return False
    if m==m1 or n==n1 or m-m1 == n-n1:
        return True
    else:
        return False;
    
def quick_check(m,n,name):
    for k,v in false_table.items():
        if can_reach(m,n,v[1][0],v[1][1]):
            true_table[name] = (True,v[1])
            return (True,v[1])
        
    return None

def nim(m,n):
    if m>n:
        m,n = n,m
    
    name = str(m) + '+' +str(n)
    
    if name in false_table:
        return false_table[name]
    if name in true_table:
        return true_table[name]
    
    #Used for Optimization, but optional
    check = quick_check(m,n,name)
    if check:
        return check
    
    for possible in possible_next_moves(m,n):
        r=nim(possible[0],possible[1])
        if r[0] == False:
            true_table[name] = (True,possible)
            return (True, possible)
#        elif can_reach(m, n, r[1][0], r[1][1]):
#            true_table[name] = (True,r[1])
#            return (True,r[1])
        
    false_table[name] = (False,(m,n))
    return (False,(m,n))

def assert_false(m,n):
    size = 0
    for possible in possible_next_moves(m,n): 
        size = size +1
        r = nim (possible[0],possible[1])
        if r[0] != True:
            print('error!',m,n,'should be false but it has false sub move', possible)
            return
        
    print('all',size,'possible moves are checked!')


if __name__ == '__main__':
    assert_false(6,8)



false_table
{'3+5': (False, (3, 5)), '1+2': (False, (1, 2)), '0+0': (False, (0, 0)),
'4+7': (False, (4, 7))}
true_table
{'2+4': (True, (1, 2)), '2+5': (True, (1, 2)), '2+7': (True, (1, 2)),
'0+5': (True, (0, 0)), '4+8': (True, (4, 7)), '0+2': (True, (0, 0)),
'0+3': (True, (0, 0)), '2+6': (True, (1, 2)), '0+1': (True, (0, 0)),
'0+6': (True, (0, 0)), '0+7': (True, (0, 0)), '0+4': (True, (0, 0)),
'2+3': (True, (1, 2)), '0+8': (True, (0, 0)), '2+8': (True, (1, 2)),
'4+6': (True, (3, 5)), '4+4': (True, (0, 0)), '1+8': (True, (1, 2)),
'1+3': (True, (1, 2)), '1+1': (True, (0, 0)), '1+7': (True, (1, 2)),
'1+6': (True, (1, 2)), '1+5': (True, (1, 2)), '1+4': (True, (1, 2)),
'3+4': (True, (1, 2)), '3+7': (True, (3, 5)), '3+6': (True, (3, 5)),
'3+3': (True, (0, 0)), '5+8': (True, (4, 7)), '5+6': (True, (1, 2)),
'3+8': (True, (3, 5)), '6+6': (True, (0, 0)), '6+7': (True, (1, 2)),
'4+5': (True, (3, 5))}
分享到:
评论

相关推荐

    python3:Nim的Python 3包装器

    Python3中的Nim包装器是将Nim编程语言编写的库或模块转化为可以在Python3环境中使用的工具。Nim是一种静态类型的、编译型的语言,它设计的目标是具有高性能、低级控制力,同时保持高级语言的简洁性和表达力。Python3...

    nimpylib:将某些python标准库函数移植到Nim

    3. **错误处理**:nimpylib也考虑了Python异常在Nim中的处理,确保在调用Python代码时能正确捕获并处理可能出现的错误。 ### Python标准库支持 nimpylib目前可能已经移植了Python标准库的一部分函数,比如: 1. *...

    spacemacs-nim-python:http:spacemacs.org和http:python.org和https:nim-lang.org插件

    它需要安装Python 3。 它需要安装Nim,Nimble,NimSuggest,NimGrep 。 它使用 仅在Linux上测试。 向所有人开放拉取请求! 它使用GUI,具有类似于浏览器的选项卡,带有图标的文件夹树,小地图,发光的光标等。 屏幕...

    nimpy:Nim-Python桥

    在Nim中实现Python模块# mymodule.nim - file name should match the module name you're going to import from pythonimport nimpyproc greet (name: string ) : string {. exportpy .} = return "Hello, " & name ...

    两个人一起玩 Nim 游戏,python3代码亲测好用

    你和你的朋友,两个人一起玩 Nim 游戏:桌子上有一堆石头,每次你们轮流拿掉 1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。你作为先手。 你们是聪明人,每一步都是最优解。 编写一个函数,来判断你是否可以在...

    NPython:在Nim中实现的Python编程语言的(子集)

    NPython的从Nim实施的Python编程语言(的子集),从编译器到VM。 。目的乐趣和实践。 学习Python和Nim。状态能够: 用if else , while和for流控制基本功能(关闭)定义和调用。 装饰器。 内置print,dir,len,...

    nim-requirementstxt:Nim的Python Requirements.txt通用迭代器解析器

    提到的标签如"python", "nim", "iterator", "python3", "cpython", "nim-language", "nim-lang", "python-requirements", "NimNim"揭示了这个库涉及的主要领域和技术。这表明Nim-requirementstxt是Nim语言针对Python...

    psutil-nim:python psutil到nim的端口

    **psutil-nim:Python psutil到Nim的移植** `psutil`是Python中一个广泛使用的库,它提供了一种跨平台的方式来获取系统利用率,如CPU、内存、磁盘、网络以及进程信息。`psutil-nim`是将这个功能强大的Python库移植...

    psutil-nim:python psutil到Nim的端口

    **psutil-nim:Python psutil到Nim的移植** `psutil`是Python中一个广泛使用的库,它提供了一种跨平台的方式来获取系统利用率,如CPU、内存、磁盘、网络以及进程信息。`psutil-nim`是这个功能强大库的一个移植,将...

    题目描述: 你和你的朋友,两个人一起玩 Nim 游戏。python3极度简化源码,亲测有效

    题目描述: 你和你的朋友,两个人一起玩 Nim 游戏:桌子上有一堆石头,每次你们轮流拿掉 1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。你作为先手。 你们是聪明人,每一步都是最优...python3极度简化源码,亲测有效

    ponim:Nim + Python +诗歌= :)

    无论哪种情况,都有一种简便的方法可以将Nim代码与Python代码捆绑在一起。 在本文中,我们将快速概述如何通过诗歌添加Nim。 在深入研究之前,请先使用以下工具: :一种快速的,pythonic的编译语言 :一个用于将...

    nimformat:测试针对字符串替换的Python本机库的Nim实现

    nimformat库是使用出色的nimpy模块(用于真棒Nim编程语言)创建用于Python的测试库的实验结果。 目的是学习有关Nim,nimpy的知识,创建本地Python模块,并查看可以实现的速度提升(如果有的话)。 当前,在传递新...

    nimporter:导入时为Python编译Nim扩展!

    什么是Nimporter 使用Nimporter,您可以简单地将Nim源代码文件导入为Python模块,然后将它们与Python代码无缝地结合使用。可能的好处性能:Nim编译为C 无需编写C即可降低云计算成本利用两种语言的生态系统: 的广度...

    nim-nim.zip_nim

    3. 跨平台:Nim 支持多种操作系统和架构,包括 Windows、Linux、Mac OS、iOS 和 Android。 4. 并发原语:Nim 提供了基于通道和异步操作的并发模型,使得编写多线程和网络程序更加简单。 5. 类型推断:很多情况下,...

    AdventOfCode2017:我使用Nim,OCaml和Python的AoC 2017解决方案

    最初,我已经解决了Nim和Python发布时的所有任务。 OCaml解决方案已在Novemeber 2019中添加,以为AoC 2019做准备(这是我在OCaml中的第一步)。 任务 尼姆溶液 OCaml解决方案 Python解决方案 注意 利用Python的负...

    python-leetcode面试题解之第292题Nim游戏.zip

    《Python LeetCode面试题解:第292题Nim游戏》 在编程面试中,LeetCode是一个广受欢迎的在线平台,它提供了大量的算法题目,帮助开发者提升技能并准备求职面试。其中,第292题名为“Nim游戏”,这是一道涉及到策略...

    nim_magic:JupyterLab或Juypter Python笔记本的Nim细胞魔术

    nim_magic 适用于JupyterLab或Juypter Python...只需将文件nim_magic.py放在Python的导入路径中的某个位置,例如,在以下打印的目录之一中: python3 -c "import sys; print(sys.path)" 。 例 在运行Python3内核的J

    struct.nim:Nim的类似Python的“ struct”

    在Nim编程语言中,`struct.nim`模块提供了一种类似于Python的结构化数据处理方式,使得开发者能够方便地处理二进制数据流。这个模块对于那些需要处理底层数据结构,例如网络协议解析、文件格式读写或者系统编程的...

    nimpy_CodeReading:我想知道如何将Nim程序读取为python

    在IT行业中,编程语言间的互操作性变得越来越重要,Nim和Python作为两种不同特性的语言,有时我们需要在它们之间进行数据交换或者调用代码。本篇将详细讲解如何使用Nim来读取和处理Python的数据,以及如何通过`nimpy...

    nython:为Nim库构建Python扩展模块

    为Nim库构建Python扩展模块。 概要 这是使用Nim的compileToC命令生成的C代码,Python可将该C代码打包为扩展模块,并在其他地方安装您的软件包时进行本地编译。 请注意,这不能解决以下事实:带有C代码的Python轮子是...

Global site tag (gtag.js) - Google Analytics