问题标签 [cryptarithmetic-puzzle]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
4383 浏览

c# - 求解密码的有效方法

嗨,我遇到了这个难题,它是著名的基于单词和数字的难题的子集,称为Cryptarithms。假设你有一个表达式

发送 + 更多 = 金钱

现在有趣的部分是,每个字母表代表一个从 0 到 9 的唯一数字。我想写一个通用求解器,但我最终为它写了一个蛮力解决方案。任何接受者,我该如何解决?

我认为可以使用谓词逻辑或集合论来解决。我对寻找基于 C# 或 Python 的解决方案特别感兴趣。任何人。?

0 投票
7 回答
3353 浏览

java - 一种更有效的语言算术/字母计算方法?

也许你们中的大多数人都知道发送 + 更多 = 金钱。好吧,我目前正在学习 Java,其中一个练习是我必须解决 HES + THE = BEST。

现在,到目前为止,我可以/应该使用 if-for-while-do 循环,仅此而已。虽然我确信有不同的方法可以解决它,但这不是我要进行的练习的重点。我必须能够以最有效的方式使用 if-for-while-do 循环。

我的问题?我似乎想不出一种有效的方法来解决它!我想出了这个,它解决了这个难题,但也许是最糟糕的有效方法:

解决这个难题总共需要大约 15000 个奇数循环周期。这在我看来很多。请问有什么指点吗?

0 投票
1 回答
730 浏览

prolog - 带变量的 Prolog 点积(约束满足)

我正在做一个序言任务,我目前非常接近解决方案。所以,这个问题是一个约束满足问题,我必须找到一组变量的值,使得某些条件为真。具体来说,给定 3 个单词 (W1,W2,W3),分配它们的变量,使得 W1+W2=W3。这方面的一个例子是 SEND+MORE=MONEY,或 IT+IS=ME。

约束是:(1) 它们必须正确相加,(2) 起始字母不能为 0 (3) 并且所有变量必须是不同的。它必须适用于一般的文字问题。当我尝试确保它们正确加起来时,我的问题正在发生(我已经满足其他条件并且我理解问题)。就第二个单词问题而言,我们应该有:

因此,我创建了一个函数,可以在一定长度内列出 10 的幂,如下所示:

我也有实际的字母列表,比如 [I,T,I,S,M,E]。然后,我从 powlist 中构造了一个系数列表(稍后我将解释该部分),因此我们有如下内容:[10,1,10,1,-10,-1]。我这样做了,如果我们在这个系数列表和字母列表之间进行点积,并且它为零,那么约束就会得到满足。但是,我无法让这个点积理论起作用。我目前有一行说:

但这给了我以下错误:

!is/2 的参数 2 中的实例化错误
!目标:_102 是 0+10.0*_109

我不确定如何定义点积,以便它可以处理变量(而不仅仅是原子)。其余所有代码都可以完美运行(我不想把它放在这里,因为这是入门序言课程的一个非常常见的问题,我不想给懒惰的人答案)。你们有什么建议?

0 投票
2 回答
2010 浏览

prolog - Prolog 密码算术谜题

我被要求使用 Prolog 解决一个密码算术难题:

上面是谜题,我不知道问题出在哪里,结果总是返回false。另外,我不允许在 SWI-Prolog 中使用任何库。

示例查询:

0 投票
2 回答
724 浏览

loops - 如何确定分配给密码中每个字母的数字?

我有一个需要解决密码的任务。但我无法理解我在互联网上看到的算法。有人能用简单的话解释一下如何做到这一点吗?

0 投票
4 回答
200 浏览

c++ - 堆栈与整数

我创建了一个程序来解决数据结构类的密码算法。教授建议我们使用由链接节点组成的堆栈来跟踪我们用哪些数字替换了哪些字母,但我意识到整数也可以起到同样的作用。而不是堆栈 {A, 1, B, 2, C, 3, D, 4} 我可以在 1234 中保存相同的信息。

不过,我的程序似乎比他给我们的估计运行得慢得多。有人可以解释为什么堆栈的行为会更有效吗?我曾假设过,因为我不会一遍又一遍地调用方法(推送、弹出、顶部等),而只是将一个添加到我会更快的“解决方案”中。

这不是一个开放式问题,所以不要关闭它。虽然你可以用不同的方式实现,但我想知道为什么在 C++ 的核心,通过堆栈访问数据比存储在 int 中和通过 mod 提取具有性能优势。

虽然这是作业,但我实际上并不需要帮助,只是非常好奇和好奇。

谢谢,迫不及待地想学习新东西!

编辑(添加一些代码)

letterAssignments 是一个大小为 26 的 int 数组。对于 SEND + MORE = MONEY 之类的问题,不使用 A,因此 letterAssignments[0] 设置为 11。所有使用的字符都初始化为 10。 answerNum 是一个带有 as 的数字许多数字,因为有唯一的字符(在本例中为 8 位)。

如果您想查看它们,可以使用两种辅助方法:

0 投票
6 回答
6671 浏览

java - Java将子类实例数据传递给超类构造函数

有人知道Java中是否有一种方法可以在调用超类构造函数之前在子类中设置实例变量的值。我在下面有一个我想要完成的简要示意图——我需要根据子类类型不同地设置超类中定义的实例变量,但我仍然希望能够在它们之间共享通用的非构造函数代码子类的不同实例。

有什么干净的方法可以做到这一点,也许是我缺少的某种编码模式或其他什么?提前感谢您的任何想法。

0 投票
2 回答
236 浏览

prolog - 当目标/查询中的变量数量变化时如何解决 - Prolog Constrain Solver

这是使用 prolog 约束求解机制的经典 SENDMORY 密码算术问题解决方案的片段-

现在,要执行此操作,我将发送如下目标/查询:

这会给我返回数字的可能解决方案。

现在,我的问题是,我不想以这种方式对变量(如 S、E、N、...)进行“硬编码”,但目标/查询会给出变量的数量。例如,如果我通过的查询类似于:

然后,它应该只计算 SENDM 的值,并假设其他变量不适用,因此将 0 分配给这些变量,然后继续计算。下次我查询时,我可能会在查询中传递不同数量的变量。例如:

并且程序应该同样计算。

我想要实现的是针对上述场景的更通用的问题解决方案。对此的任何指示都非常感谢。我对 prolog 很陌生,并且正在使用 ECLIPSE 约束求解器。谢谢你。

0 投票
6 回答
3852 浏览

performance - 在 Prolog 中更快地实现口头算术

我已经在 Prolog 中制作了一个有效的广义口头算术求解器,但它太慢了。运行简单的表达式 SEND + MORE = MONE Y 需要 8 分钟。有人可以帮我让它运行得更快吗?

0 投票
1 回答
3146 浏览

prolog - 密码算术难题(Prolog)

我被要求编写一个 Prolog 代码来解决密码难题,使用“生成和测试”。例如,我得到solve([R,O,B],[B,E,R,T],[N,O,R,E,S])并且我需要为这些字母找到一个分配。所以我写了这段代码:

但我有一个错误,我找不到它......你能帮我吗?