Questions tagged «combinatorics»

对于涉及组合学的挑战。

6
列举押韵方案
“押韵方案”是ato 的字母字符串,以z使字符的首次出现按从()开始的升序排列(无间隔)a。例如(标记为首次出现): abccdbebdcfa ^^^ ^ ^ ^ 长度的押韵方案的数目N由贝尔数 给出B(N)。(OEIS A000110) 挑战 您的任务是实现这些押韵方案的枚举,即从整数到押韵方案的双射映射。您会得到一个正整数N <= 26,以及一个非负整数0 <= i < B(N)。或者,您可以使用range 1 <= i <= B(N)。您应该输出一个length的押韵方案N,以使每一个i产生不同的字符串。 您可以编写程序或函数,通过STDIN(或最接近的替代方案),命令行参数或函数自变量获取输入,并通过STDOUT(或最接近的替代方案),函数返回值或函数(out)参数输出结果。 您可以使用大小写字母(一致)。 您的代码必须能够处理在合理的时间的任何有效输入(例如不超过几个小时了N = 26,最坏的情况下i)。N即使在慢速语言中,这也应允许解决方案以小比例扩展(对于小底数),但禁止解决方案以i(即B(N))线性扩展。特别是,这意味着您不能仅遍历所有有效长度的韵律方案,N直到放弃该i方案为止。 适用标准代码高尔夫球规则。 例子 方案的确切分配i(即给定方案的顺序N)由您决定。但是,如果您选择了字典顺序,则您的解决方案应对应于下表(-表示无效输入): N\i 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 a - …

2
通过自动取款机打给我一些现金
任务很简单。给我一些1000,500和100注意事项。 怎么样 ?你可能会问。不用担心,因为附近有自动取款机可以接收您的信用卡,因此无需抢劫银行。但是您的信用额度仅够完成任务,因此您在提款时必须格外小心。 挑战 鉴于数量1000,500以及100所需音符,计算得到至少那些许多笔记所需的特定取款。在每次提款中,ATM均可根据以下规则吐出每张钞票: 提取的金额(A)小于5000 如果为A%1000 == 0,则ATM吐出1个500便笺,5个100便笺和其余1000便笺 否则A%500 == 0,ATM会吐出5张100钞票,其余1000钞票 否则A%1000 < 500,自动柜员机会吐出floor(A/1000) 1000纸币和休息100纸币 否则A%1000 > 500,ATM会吐出floor(A/1000) 1000钞票,1 500和休息100钞票 提款金额大于等于 5000 如果为A%1000 == 0,则ATM吐出2个500便笺和其余1000便笺 否则,如果A%500 == 0ATM吐出1张500便笺和其余1000便笺 否则A%1000 < 500,自动柜员机会吐出floor(A/1000) 1000纸币和休息100纸币 否则A%1000 > 500,ATM会吐出floor(A/1000) 1000钞票,1 500和休息100钞票 为了澄清起见,以下是一张完整的纸币表,其中列出了所有可能的最高金额7000(您可以提取更多,但此后模式不会改变)。顺序是<1000> <500> <100>: 100 => 0 0 1 2500 => 2 0 …

22
递归字符串替换
任务 编写一个程序或函数,给出给定的三个字符串A, B, C会生成一个输出字符串,其中Bin的每个实例A都已用递归替换C。递归替换表示重复替换,其中在每一步中Bin的所有不重叠实例A(从左到右贪婪地选择)都替换为,C直到B不再包含在中A。 输入输出 您可以对I / O使用任何默认方法。 字符串将仅包含可打印的ASCII字符(并且可以包含任何一个)。 B永远不会是一个空字符串,而A并且C可能是。 字符串应被视为纯文本,例如,您不能将其B视为Regex模式。 输入的某些组合永远不会终止。在这种情况下,您的程序可以执行任何操作。 测试用例 这些格式为: A/B/C\nOutput Hello, world!/world!/PPCG Hello, PPCG Uppercase is up/up/down Uppercase is down ababababa/aba/ccc cccbcccba delete/e/{empty string} dlt {empty string}/no/effect {empty string} llllrrrr/lr/rl rrrrllll +-+-+-+/+-+/+ + ababababa/aba/bada badabbadbada abaaba/aba/ab abb ((())())())/()/{empty string} ) 不会终止的示例: grow/ow/oow loop/lo/lo
25 code-golf  string  substitution  code-golf  math  code-golf  string  set-theory  code-golf  code-golf  compile-time  code-golf  kolmogorov-complexity  binary  code-golf  sequence  cops-and-robbers  code-golf  subsequence  card-games  code-golf  sequence  primes  code-golf  code-golf  number  graphical-output  music  code-golf  ascii-art  code-golf  string  lambda-calculus  code-golf  string  code-generation  code-golf  unicode  code-golf  math  combinatorics  code-golf  balanced-string  code-golf  sequence  cops-and-robbers  code-golf  sequence  cops-and-robbers  code-challenge  fastest-code  chess  code-golf  math  graphical-output  code-golf  string  hello-world  animation  code-golf  number  arithmetic  code-golf  integer  code-golf  code-golf  combinatorics  code-golf  kolmogorov-complexity  graphical-output  code-golf  string  code-golf  code-golf  game  code-golf  math  combinatorics  code-golf  ascii-art  popularity-contest  random  code-golf  arithmetic  number-theory  integer  code-golf  tips  underload  code-golf  math  sequence  primes  code-golf  math  path-finding  code-golf  ascii-art  primes  code-golf  kolmogorov-complexity  alphabet 

1
Android锁屏
介绍 您正坐在长桌尽头的会议室。您环顾四周,可以看到苹果董事会的蒂姆·库克,史蒂夫·乔布斯的鬼魂和杰克·多纳西。苹果之所以召开这次会议,是因为他们意识到Android锁定屏幕要酷得多,并且他们希望1-UP。当Ghost Steve哭着时,房间里的每个人都在注视着你,“帮我,CodeGolf的人!你是我唯一的希望!” 问题 Android锁定屏幕是一个3 x 3的点网格,可以通过将手指从一个点滑到另一个点来建立路径来进行连接。密码被认为是任何可能的路径,包括任何数量的点,但不包括任何数量的点。(在实际的电话上,路径必须至少有4个点长。对此挑战,请忽略该限制。)苹果计划用M x N网格(即(M * N)/ 9)替换3 x 3网格。倍好! 规则: 零点路径不是密码,但一个点路径是 一条路可以穿越自己 路径不能直接跨越点而不包含该点 一个点只能使用一次 旋转相同的路径不是相同的密码 相同但反向排序的路径不是相同的密码 例如,在3x3网格上,点编号从1到9: 1 2 3 4 5 6 7 8 9 一些有效的路径是: 1 3 7,2,3 1,5,9,2 1,8,6,5,4 4,2,3,5,6,7,8,9 5,9,6,4 一些无效的路径是: 1,3 1,9,5 7,5,4,7 4,6 您的输入将是三个数字: (M,N,d) 其中格是M x N,而d是路径的长度 1 …

24
Deranged!Combinatorics:计算子因子
次因子或rencontres数字(A000166)是一个数字序列,类似于排列组合中显示的因子阶数字。特别是ñ个subfactorial N!给出的数量紊乱一套的ñ元素。排列是一种排列,其中没有元素保持在相同位置。可以通过以下递归关系定义子因子: !n = (n-1) (!(n-1) + !(n-2)) 实际上,相同的递归关系也适用于阶乘,但是对于子阶,我们从以下内容开始: !0 = 1 !1 = 0 (对于阶乘,我们当然有1!= 1。) 给定n,您的任务是计算!n。 规则 像阶乘一样,子阶数增长非常快。如果您的程序只能处理输入n以便可以用您的语言的本机数字类型表示!n,那是很好的。但是,理论上,您的算法必须对任意n有效。这意味着,您可以假设积分结果和中间值可以用您的语言准确表示。请注意,如果常数e以有限精度存储或计算,则排除常数e。 结果必须是一个精确的整数(尤其是您不能用科学计数法近似结果)。 您可以编写程序或函数,并使用接收输入和提供输出的任何标准方法。 您可以使用任何编程语言,但是请注意,默认情况下,这些漏洞是禁止的。 这是代码高尔夫球,因此以字节为单位的最短有效答案为准。 测试用例 n !n 0 1 1 0 2 1 3 2 4 9 5 44 6 265 10 1334961 12 176214841 13 2290792932 14 32071101049 20 …

30
交换符号和
给定一个非空的正整数,您的工作是确定的唯一值数量± x ± y ± z ± …(x,y,z,…)(x,y,z,…)(x, y, z, \dots)±x±y±z±…±x±y±z±…\pm x \pm y \pm z \pm \dots 例如,考虑列表。有八种创建总和的可能方法:(1,2,2)(1,2,2)(1, 2, 2) +1+2+2→+5+1+2+2→+5+ 1 + 2 + 2 \to +5 +1+2−2→+1+1+2−2→+1+ 1 + 2 − 2 \to +1 +1−2+2→+1+1−2+2→+1+ 1 − 2 + 2 \to +1 +1−2−2→−3+1−2−2→−3+ 1 − 2 − …

3
实施简化字距调整
介绍 字距调整是指调整文本字母之间的间距。例如,考虑Top用以下三个字形写的单词: ##### ..... ..... ..#.. ..... ..... ..#.. ..##. .###. ..#.. .#..# .#..# ..#.. .#..# .#..# ..#.. ..##. .###. ..... ..... .#... ..... ..... .#... 我们可以用点填充字形之间的间隙并完成它,但是间隙看起来太宽了。相反,我们将字形滑动到左侧,以便它们几乎可以接触: #####........ ..#.......... ..#..##..###. ..#.#..#.#..# ..#.#..#.#..# ..#..##..###. .........#... .........#... 看起来好多了!请注意,的条形图T在的左边框上方o。在此挑战中,您的任务是为此类矩形字形实现一个简单的字距调整程序。 字距调整过程 考虑具有.和#形状相同的两个矩形2D字符数组。在简单的字距调整过程中,我们首先将数组并排放置,中间放置一列.s。然后,我们将#右阵列中的每一个向左移动一步,直到#左右阵列中的s正交或对角相邻。字距调整的结果是引入相邻s 之前的步骤#。您的任务是实施此过程。 让我们举个例子: Inputs: ..### #.... #.... ..##. ...#. ...## ..### ....# Process: …
24 code-golf  grid  code-challenge  atomic-code-golf  code-golf  combinatorics  probability-theory  card-games  code-golf  number  geometry  code-golf  decision-problem  chess  code-golf  math  number  sequence  code-golf  string  regular-expression  code-golf  arithmetic  integer  code-golf  math  array-manipulation  code-golf  number  decision-problem  integer  code-golf  string  ascii-art  kolmogorov-complexity  code-golf  decision-problem  graph-theory  binary-matrix  code-golf  string  parsing  code-golf  string  code-golf  morse  code-golf  code-golf  string  code-golf  ascii-art  cellular-automata  code-golf  binary  base-conversion  code-golf  arithmetic  decision-problem  integer  checksum  code-golf  matrix  linear-algebra  code-golf  code-golf  game  code-golf  sequence  binary  code-golf  combinatorics  optimization  code-golf  decision-problem  quine  code-golf  rational-numbers  bitwise  code-golf  string  permutations  code-golf  kolmogorov-complexity  unicode  code-golf  ascii-art  number  code-golf  number  integer  binary  base-conversion  code-golf  array-manipulation  code-golf  chemistry  code-golf  number  sequence  fibonacci  code-golf  matrix  optimization  code-golf  number  code-golf  math  number  sequence  code-golf  math  array-manipulation  matrix  linear-algebra  code-golf  kolmogorov-complexity  cops-and-robbers  cops-and-robbers  code-golf  tips  basic  code-golf  decision-problem  binary  tiling  game  king-of-the-hill  python  code-golf  c  code-golf  ascii-art  code-golf  string  kolmogorov-complexity  alphabet  code-golf  number  code-golf  string  code-golf  number  sequence  integer  code-golf  number  permutations  restricted-complexity  restricted-time 

10
最短的唯一标识子字符串
给定一个字符串列表,请用其非空子字符串之一替换每个字符串,该子字符串不是列表中任何其他字符串的子字符串,并且应尽可能短。 例 给定list ["hello","hallo","hola"],"hello"应替换为,"e"因为该子字符串未包含在其中"hallo","hola"并且它尽可能短。"hallo"可通过任一取代"ha"或"al"并"hola"通过任何"ho","ol"或"la"。 规则 您可以假定字符串将为非空,并且仅包含大小写相同的字母字符。 您可以假定列表中的每个字符串都存在这样的子字符串,即列表中的任何字符串都不是其他任何字符串的子字符串。 输入和输出可以采用任何合理的格式。 这是code-golf,因此请尝试使用您选择的语言使用尽可能少的字节。 测试用例 在大多数情况下,仅给出一种可能的输出。 ["ppcg"] -> ["p"] (or ["c"] or ["g"]) ["hello","hallo","hola"] -> ["e","ha","ho"] ["abc","bca","bac"] -> ["ab","ca","ba"] ["abc","abd","dbc"] -> ["abc","bd","db"] ["lorem","ipsum","dolor","sit","amet"] -> ["re","p","d","si","a"] ["abc","acb","bac","bca","cab","cba"] -> ["abc","acb","bac","bca","cab","cba"] 相关:最短识别子字符串 -类似的想法,但涉及更多规则和繁琐的格式。
23 code-golf  string  code-golf  string  code-golf  array-manipulation  code-golf  quine  code-golf  array-manipulation  integer  matrix  classification  code-golf  quine  code-golf  string  matrix  conversion  code-golf  string  number  code-golf  string  code-golf  number  sequence  integer  code-golf  decision-problem  matrix  code-golf  string  code-golf  math  code-golf  math  array-manipulation  combinatorics  code-golf  random  code-golf  code-golf  alphabet  code-golf  python  c  code-golf  base-conversion  code-golf  string  counting  code-challenge  code-generation  fastest-code  code-golf  kolmogorov-complexity  matrix  code-golf  string  code-golf  array-manipulation  decision-problem  random  sudoku  code-golf  chess  code-golf  card-games  encode  code-golf  decision-problem  code-golf  code-golf  math  array-manipulation  matrix 

26
找出单词的等级
定义 单词的等级定义为当单词的所有可能排列(或排列)按字母顺序排列(例如在字典中)时的位置,无论单词是否有意义。 让我们考虑这两个词-“蓝色”和“可见”。首先,我们将按字母顺序写出这些单词的字母的所有可能排列: "blue": "belu","beul","bleu","blue","buel","bule","eblu","ebul","elub","elbu","eubl", "eulb","lbeu","lbue","lebu","leub","lube","lueb","ubel","uble","uebl","uelb", "ulbe","uleb" "seen": "eens","eesn","enes","ense","esen","esne","nees","nese","nsee","seen", "sene","snee" 现在让我们从左边看,找到所需单词的位置。我们看到单词“ blue”在第4位,“ seen”在第10位。因此,单词“ blue”的等级为4,“ seen”的等级为10。这是计算单词等级的一般方法。确保仅从1开始计数。 任务 您的任务是编写代码,以将任何单词作为输入并显示其排名。排名应该是输出。小心包含重复字母的单词。 例子 "prime" -> 94 "super" -> 93 "bless" -> 4 "speech" -> 354 "earth" -> 28 "a" -> 1 "abcd" -> 1 "baa" -> 3 您可以假定输入完全是小写,并且输入将仅包含字母字符。另外,如果输入空格或无效字符串,则可能返回任何内容。 计分 这是代码高尔夫球,因此最短的代码获胜!

5
确定有多少个轮子
非数学解释 不论您的背景如何,这都是可以理解的解释。不幸的是,它确实涉及一些数学,但是对于大多数具有中学水平的人来说应该是可以理解的。 指针序列是a(n + 1)= a(na(n))的任何序列。 让我们对这个公式进行一点理解,以了解其含义。这只是意味着要找出我们在上一个术语中看到的序列中的下一个术语,往后退许多步并复制找到的术语。例如,如果到目前为止我们有序列 ... 3 4 4 4 3 ? 我们将向后退3步 3 ... 3 4 4 4 3 ? ^ 使我们的结果4。 现在,通常我们可以在两个方向上都无限的磁带上玩游戏,但是我们也可以在轮子上玩游戏,在经过一定数量的步骤后,我们回到序列的开头。 例如,这是序列的可视化 [1,3,1,3,1,3] 现在我们可能会注意到,轮子中的任何数字x超过轮子中的单元数n,也可能是x mod n,因为围绕轮子的每个完整电路都等于无所事事。因此,我们将只考虑所有成员小于轮子尺寸的轮子。 数学解释 指针序列是a(n + 1)= a(na(n))的任何序列。通常,这些定义是从整数到整数,但是您可能会注意到,此定义中唯一需要的是后继函数和逆函数。由于所有循环组都具有这两者,因此我们实际上可以考虑任何循环组上的指针序列。 如果我们开始寻找这些类型的功能,我们会注意到每个功能都有几个相似的功能。例如,在Z 3上,以下3个都符合我们的要求。 f1 : [1,2,2] f2 : [2,1,2] f3 : [2,2,1] (这里的列表用于表示一个函数,该函数仅通过输入对列表进行索引就可以得到结果) 我们可能会注意到这些功能都是彼此“旋转”的。正式什么我通过旋转的意思是,一个函数b是一个旋转一个 IFF …

10
自然日志上的蚂蚁
这是一个很好的初学者挑战,也是一个很好的时间杀手。 我只说了-自然-对数,因为标题太短了,这与对数无关。 给定2个变量: 蚂蚁数量n。 日志的宽度w。 输出日志宽度w与n蚁(实施例示出w=3,n=6) | | | \O/ \O/ \O/ | | -O- -O- -O- | | /o\ /o\ /o\ | | ^ ^ ^ | | | | \O/ \O/ \O/ | | -O- -O- -O- | | /o\ /o\ /o\ | | ^ ^ ^ | …

14
重用您的代码!
在这一挑战中,我们试图立即解决两个重要问题。他们是: 给定整数a和b,确定b -1是否为质数。 给定整数a和b,返回nCr(a,b)。 具体来说,您必须编写两个程序,一个程序执行第一个任务,另一个程序执行另一个任务。由于我们想一次解决两个问题,因此建议在两个程序中使用同一段代码。 计分 答案的分数是两个程序之间的Levenshtein距离。分数越低越好。如果出现平局,则以两个程序中组合代码最短的答案为准。您可以使用此脚本来计算解决方案的分数。 规则 您必须用相同的语言编写两个程序来解决上述任务。您可以使用所需的任何I / O方法。对于任务1,您可以返回真实/虚假值,或选择两个值分别表示是和否,然后相应地返回它们。例如。您可以选择“ "prime"真”和“ "not prime"假”。 您使用的算法必须适用于所有可能的输入,但是如果代码由于使用的数字类型的限制而无法用于大量数字,则可以。您可以假定输入有效。 程序的任何子集都不能解决问题,即。如果删除了任何字符,该代码将无法正常工作。例如,以下代码无效,因为可以在不破坏程序的情况下删除未使用的else-block: if (1) { /* change to 0 to get the second program*/ ... } else { ... } 不允许出现标准漏洞。 测试用例 a b -1是质数? a b 1 1 false 2 3 true 5 2 false …

15
跟着我重复!
给定一个字符串作为参数,输出最长的不重叠重复子字符串的长度;如果没有这样的字符串,则输出零。 您可以假设输入字符串不为空。 例子 abcdefabc:子字符串abc在位置1和7处重复,因此程序应输出3 abcabcabcabcab:abcabc或bcabcaor cabcab重复,因此程序应输出6。(子字符串abcabcabcab也被重复,但是出现的部分重叠,因此我们不接受它)。 aaaaaaa:aaa例如在位置1和4处重复,因此程序应输出3 abcda:a重复,因此程序应输出1 xyz:没有重复的字符串→ 0 ababcabcabcabcab:应返回6 这是代码高尔夫球,因此最少的字节获胜。
23 code-golf  string  code-golf  code-golf  kolmogorov-complexity  primes  code-golf  kolmogorov-complexity  hexadecimal  code-golf  code-golf  string  code-golf  string  random  code-golf  array-manipulation  code-golf  ascii-art  kolmogorov-complexity  random  code-golf  array-manipulation  code-golf  stateful  code-golf  hello-world  code-golf  string  code-golf  interpreter  lisp  code-golf  restricted-source  quine  palindrome  code-golf  ascii-art  random  generation  challenge-writing  ascii-art  random  polyglot  maze  answer-chaining  string  cops-and-robbers  whitespace  code-golf  string  cops-and-robbers  whitespace  code-golf  number  sequence  code-golf  date  code-golf  ascii-art  decision-problem  code-golf  combinatorics  chemistry  code-golf  kolmogorov-complexity  source-layout  radiation-hardening  code-golf  ascii-art  path-finding  maze  code-golf  string  ascii-art  game  animation  code-golf  string  ascii-art  code-golf  ascii-art  kolmogorov-complexity  code-golf  restricted-source  new-years 

27
列出n的所有有序分区
挑战是列出给定正整数的所有有序分区(组成(组合))n。这些数字从名单1到n其总和n。例如,给定input n = 4,结果应为: 4 1,3 3,1 2,2 2,1,1 1,2,1 1,1,2 1,1,1,1 结果可以采用任何顺序,但是必须包含每个有序分区一次。这意味着n = 4,[1, 1, 2],[1, 2, 1]而且[2, 1, 1]必须是结果的一部分。 这是我自己的实现此目的的JavaScript代码: function range(n) { for (var range = [], i = 0; i < n; range.push(++i)); return range; } function composition(n) { return n < 1 ? [[]] : …

6
正整数的部分分解
正整数的集合是正整数d_1 d_2 ... d_k的因式分解,n如果 d_1 * d_2 * ... * d_k = n 每个正整数都有一个唯一的素因式分解,但通常它们也具有其中某些项是复合的分解。例如 12 = 6 * 2 = 4 * 3 = 3 * 2 * 2 编写一个程序,函数,动词或类似物,将单个正整数作为输入并返回或打印其不同因式分解的完整列表。分解可以以任何顺序生成,并且它们的项可以以任何顺序生成,但是彼此之间不应有两个置换。1除两个例外,分解可能不包括:对于输入,n您可以给出分解n*1而不是n; 对于输入,1您可以给出因式分解1而不是空白列表。 您可以假定输入将在带符号的32位整数范围内。如果输出为字符串,则分解中的数字定界与分解中的定界之间应该有明显的区别,但是(例如)没有必要将因子与连在一起*。 您的代码应能够在合理的台式机上在10分钟内处理任何有效输入。 例子 1 [[]] or [[1]] or [[1 1]] 7 [[7]] or [[7 1]] or [[1 7]] 12 …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.