Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在KenKen拼图“乘法”域中查找所有可能的因素

在KenKen拼图“乘法”域中查找所有可能的因素
EN

Stack Overflow用户
提问于 2009-06-05 16:42:40
回答 1查看 3.1K关注 0票数 3

KenKen拼图是一个拉丁正方形,分为多个边连接的域:一个单元格,同一行或列中的两个相邻单元格,一行或单元格中排列的三个单元格,等等。每个域都有一个标签,它给出一个目标数字和一个算术运算(+-*/),该运算应用于该域的单元格中的数字,以产生目标数字。(如果域只有一个单元格,则没有给定的运算符,只有一个目标-平方已为您解决。如果运算符是-或/,则该域中只有两个单元。)拼图的目的是(重建)与域的边界和标签一致的拉丁方。(我想我只看过一次具有非唯一解的拼图。)

单元格中的数字可以从1到拼图的宽度(高度);通常,拼图的边上有4到6个单元格,但可以考虑任意大小的拼图。在已发布的拼图(4x4或6x6)中,域通常不超过5个单元,但同样,这似乎不是一个硬限制。(然而,如果拼图只有一个域,那么这个维度的拉丁方块就会有很多解……)

编写KenKen求解器的第一步是具有可以在任何域中生成可能的数字组合的例程,首先忽略域的几何形状。(线性域,如三个单元格的行,在已解决的拼图中不能有重复的数字,但我们暂时忽略这一点。)我已经能够编写一个Python函数来逐个处理加法标签:给它提供拼图的宽度、域中的单元格数量和目标和,它将返回一个有效数字加起来的元组列表。

乘法的例子让我难以理解。我可以得到一个字典,其关键字等于给定大小的拼图中在给定大小的域中可获得的产品,值是包含给定产品的因子的元组列表,但我无法计算出一个逐个案例的例程,甚至不是一个糟糕的例程。

将给定的乘积分解为质数似乎很容易,但将质数列表划分为所需的因数会让我感到困惑。(我已经思考了Knuth的TAOCP卷4的分册3,但我还没有学会如何‘摸索’他的算法描述,所以我不知道他的集合划分算法是否会是一个起点。理解Knuth的描述可能是另一个问题!)

我很乐意预先计算常见域名和拼图大小的“乘法”字典,并将加载时间加到开销上,但这种方法似乎不是处理拼图的有效方法,比如说,一边有100个单元格,而域名大小从2到50个单元。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-06-05 22:35:34

简化目标:您需要枚举所有相乘以形成某个乘积的整数组合,其中整数的数量是固定的。

要解决这个问题,您只需要对目标数进行素数分解,然后使用组合方法从这些因子中形成所有可能的子积。(当您拥有所有可能的子产品时,还有一些其他约束很容易包含进来,比如没有条目可以比max_entry更好,并且您有固定数量的整数可用,n_boxes_in_domain。)

例如,如果max_entry=6n_boxes_in_domain=3target_number=20:20得到(2,2,5),则得到(2,2,5)和(1,4,5)。

其中的诀窍是形成所有可能的子产品,下面的代码实现了这一点。它的工作原理是遍历形成所有可能的单对的因子,然后递归地执行此操作,以给出所有单对或多对的所有可能的集合。(它的效率很低,但即使是大数字也有一个很小的素因式分解):

代码语言:javascript
运行
AI代码解释
复制
def xgroup(items):
    L = len(items)
    for i in range(L-1):
        for j in range(1, L):
            temp = list(items)
            a = temp.pop(j)
            b = temp.pop(i)
            temp.insert(0, a*b)
            yield temp
            for x in xgroup(temp):
                yield x

def product_combos(max_entry, n_boxes, items):
    r = set()
    if len(items)<=n_boxes:
        r.add(tuple(items))
    for i in xgroup(items):
        x = i[:]
        x.sort()
        if x[-1]<=max_entry and len(x)<=n_boxes:
            r.add(tuple(x))
    r = [list(i) for i in r]
    r.sort()
    for i in r:
        while len(i)<n_boxes:
            i.insert(0, 1)
    return r

我将把生成主因子的工作留给您,但这似乎适用于

代码语言:javascript
运行
AI代码解释
复制
max_entry=6, n_boxes=3, items=(2,2,5)
[2, 2, 5]
[1, 4, 5]

对于更难的情况,比如target_number=2106

代码语言:javascript
运行
AI代码解释
复制
max_entry=50, n_boxes=6, items=(2,3,3,3,3,13)
[2, 3, 3, 3, 3, 13]
[1, 2, 3, 3, 3, 39]
[1, 2, 3, 3, 9, 13]
[1, 1, 2, 3, 9, 39]
[1, 1, 2, 3, 13, 27]
[1, 1, 2, 9, 9, 13]
[1, 1, 1, 2, 27, 39]
[1, 3, 3, 3, 3, 26]
[1, 3, 3, 3, 6, 13]
[1, 1, 3, 3, 6, 39]
[1, 1, 3, 3, 9, 26]
[1, 1, 3, 3, 13, 18]
[1, 1, 3, 6, 9, 13]
[1, 1, 1, 3, 18, 39]
[1, 1, 1, 3, 26, 27]
[1, 1, 1, 6, 9, 39]
[1, 1, 1, 6, 13, 27]
[1, 1, 1, 9, 9, 26]
[1, 1, 1, 9, 13, 18]
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/958678

复制
相关文章
ASP.NET Core 使用最简洁的代码实现登录、认证和注销
认证是一个确定请求访问者真实身份的过程,与认证相关的还有其他两个基本操作——登录和注销。ASP.NET Core利用AuthenticationMiddleware中间件完成针对请求的认证,并提供了用于登录、注销以及"质询"的API,本篇文章利用它们使用最简单的代码实现这些功能。
郑子铭
2023/08/30
5500
ASP.NET Core 使用最简洁的代码实现登录、认证和注销
asp.net三种重定向方法的总结
(1)Server.Transfer方法: Server.Transfer(m2.aspx);/网络
Java架构师必看
2021/03/22
6880
ASP.NET Core Authentication系列(二)实现认证、登录和注销
在上一篇文章介绍ASP.NET Core Authentication的三个重要概念,分别是Claim, ClaimsIdentity, ClaimsPrincipal,以及claims-base authentication是怎么工作的。
梁规晓
2020/11/05
3.4K0
ASP.NET Core Authentication系列(二)实现认证、登录和注销
ASP.NET Core 6框架揭秘实例演示[39]:使用最简洁的代码实现登录、认证和注销
认证是一个确定请求访问者真实身份的过程,与认证相关的还有其他两个基本操作——登录和注销。ASP.NET Core利用AuthenticationMiddleware中间件完成针对请求的认证,并提供了用于登录、注销以及“质询”的API,本篇文章利用它们使用最简单的代码实现这些功能。(本文提供的示例演示已经同步到《ASP.NET Core 6框架揭秘-实例演示版》)
蒋金楠
2023/07/10
3180
ASP.NET Core 6框架揭秘实例演示[39]:使用最简洁的代码实现登录、认证和注销
用最简单的方式在ASP.NET Core应用中实现认证、登录和注销
本篇文章节选自《ASP.NET Core 3框架揭秘》(下册),针对本书的限时5折优惠截至到今天24时,有兴趣的朋友可以通过加入读者群进行购买。入群方式:扫描右方二维码添加“博文小丸子(broadview002)”,并将本书书号“38462”作为验证信息。源代码从这里下载。
蒋金楠
2020/03/26
3.5K0
如何在Apache上配置重定向
HTTP重定向是将一个域名或地址指向另一个域名或地址的方式。有几种不同的重定向,每种重定向都对浏览器造成的影响不同,两种最常见的类型是临时重定向和永久重定向。
何处惹尘埃
2018/07/24
7.4K0
备案的网站怎么注销 为什么备案网站需要注销
备案网站的注销是非常必要的,很多主办者在不想经营网站以后想要注销,那备案的网站怎么注销是大多数人的疑惑。大家都知道如果不及时注销备案网站,不经常使用网站,很多可能被不法分子钻空子并强迫被篡改,然后不法分子可能通过此网站发布一些有害信息。
用户8715145
2021/10/08
15.2K0
GB28181-2022注册注销基本要求、注册重定向解读和技术实现
GB28181-2022注册、注销基本要求相对GB28181-2016版本,做了一定的调整,新调整的部分如下:
音视频牛哥
2023/02/14
1.5K0
GB28181-2022注册注销基本要求、注册重定向解读和技术实现
QQ可以注销你会注销吗?他们是这么说的.
在当时要是有个诺基亚,你可就非常厉害了,天天想着挂等级,加好友,不管认不认识的都加一遍,偷菜抢车那是非常火的了!
IT小侠公社
2019/06/12
2.1K0
QQ可以注销你会注销吗?他们是这么说的.
注销和页面跳转
当用户想切换登录账号,或者想退出登录状态时,这时候就需要注销已登录的账号。现在我们来为网站添加注销登录的功能,这个功能 Django 也已经为我们提供,我们只需做一点简单配置。 注销登录 注销登录的视图为 logout,我们简单修改一下 index.html 的代码,添加一个注销登录的按钮: templates/index.html {% if user.is_authenticated %} <p>你已登录,欢迎你:<a href="#">{{ user.username }}</a></p>
追梦人物
2018/04/17
4.6K0
IdentityServer Topics(7)- 注销
注销IdentityServer与删除身份cookie一样简单,但为了完成联合注销,我们必须考虑将用户从客户端应用程序(甚至可能是上游身份提供程序)中注销。 删除身份Cookie 要删除身证cookie,只需在HttpContext的扩展方法SignOutAsync即可。你需要传递一个值IdentityServerConstants.DefaultCookieAuthenticationScheme ,如果你修改了他,那么使用你自定义的值。 await HttpContext.SignOutAsync(Id
晓晨
2018/06/22
2.1K0
网站备案怎么注销 网站备案注销有什么原因
现在很多个人网站有一部分都不使用了,长期下来就会被废弃不运营。如果需要注销在网站的备案的话,就必须得需要把网站备案注销或者备案。具体的流程还得去在工信部的网站去查询,因为各地的要求都是不一样的,要对应个人的信息才可以。那么下来关于网站备案怎么注销和注销有什么原因的问题会在下面为大家带来一个详细的介绍。
用户8715145
2021/09/30
14.5K0
ASP.NET Core知多少(13):路由重写及重定向
在做微信公众号的改版工作,之前的业务逻辑全塞在一个控制器中,现需要将其按厂家拆分,但要求入口不变。
圣杰
2019/09/12
1.2K0
ASP.NET Core知多少(13):路由重写及重定向
CAS的登录和注销原理
之前写过一篇文章,介绍单点登录的基本原理。这篇文章重点介绍开源单点登录系统CAS的登录和注销的实现方法。并结合实际工作中碰到的问题,探讨在集群环境中应用单点登录可能会面临的问题。
程序猿讲故事
2019/09/27
3.5K0
CAS的登录和注销原理
要注销 QQ 么?
刚刚号主通过微信公众号『腾讯客服』后台回复“QQ注销”,通过回复看到排在第一个是:【QQ软件】注销号码方法,再回复这句,便得到 QQ 号码注销的方法,在 QQ7.9.9及以上版本实现这个注销功能。
LieBrother
2019/04/02
1.4K0
要注销 QQ 么?
如何将HTTP重定向到Apache上的HTTPS
HTTP ( 超文本传输​​协议 )是万维网 ( WWW )上数据通信的基本协议; 通常在Web浏览器和存储Web文件的服务器之间。 而HTTPS是HTTP的安全版本,其中“ S ”端代表“ Secure ”。
子润先生
2021/06/15
4.7K0
Consul注销实例时候的问题
当我们在Spring Cloud应用中使用Consul来实现服务治理时,由于Consul不会自动将不可用的服务实例注销掉(deregister),这使得在实际使用过程中,可能因为一些操作失误、环境变更等原因让Consul中存在一些无效实例信息,而这些实例在Consul中会长期存在,并处于断开状态。它们虽然不会影响到正常的服务消费过程,但是它们会干扰我们的监控,所以我们可以实现一个清理接口,在确认故障实例可以清理的时候进行调用来将这些无效信息清理掉。 开始以为只要简单的调用注销接口就能轻松完成,但是实际实践的
程序猿DD
2018/02/01
2.3K0
Consul注销实例时候的问题
linux用户的登录和注销
在 Linux 系统中,用户登录和注销是使用 Shell(命令行解释器)来完成的。本文将介绍如何在 Linux 系统中进行用户登录和注销的详细过程,并给出相应的示例。
玖叁叁
2023/04/09
6.3K0
ASP.NET Core 6框架揭秘实例演示[36]:HTTPS重定向
HTTPS是确保传输安全最主要的手段,并且已经成为了互联网默认的传输协议。不知道读者朋友们是否注意到当我们利用浏览器(比如Chrome)浏览某个公共站点的时候,如果我们输入的是一个HTTP地址,在大部分情况下浏览器会自动重定向到对应HTTPS地址。这一特性源于浏览器和服务端针对HSTS(HTTP Strict Transport Security)这一HTTP规范的支持。ASP.NET利用HstsMiddleware和HttpsRedirectionMiddleware这两个中间件提供了对HSTS的实现。(本文提供的示例演示已经同步到《ASP.NET Core 6框架揭秘-实例演示版》)
蒋金楠
2023/06/09
7910
ASP.NET Core 6框架揭秘实例演示[36]:HTTPS重定向
点击加载更多

相似问题

ASP.Net LoginStatus注销重定向

23

Facebook注销重定向不起作用

10

ASP.net注销不起作用

15

Laravel 5.1注销重定向不起作用

11

Asp.net身份注销不起作用

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档