编程拼图和代码高尔夫

编程益智爱好者和代码高尔夫球手的问答

5
Zzub Zzif(反向Fizz嗡嗡声)
给定一小段嘶嘶声输出,其中所有数字均已删除,请以尽可能低的值填充正确的数字,以使嘶嘶声摘要正确。对于这一挑战的目的,fizz并buzz有3个和5个他们一贯的价值观,分别。 如果输入是fizz,buzz和空行的无效序列,则仅输出zzubzzif(带或不带换行)。 输入和输出可以是换行符分隔的行,也可以是任何适合您的语言的字符串数组格式。 您可以忽略大写,也可以随便做什么。 您需要选择处理一个或一个以上的这些:fizzbuzz,fizz buzz,buzz fizz,等等,但你必须选择这些格式中的至少一个。 您可以假设所有输入都是fizz,buzz和空行的某些序列。 例子 输入: 嘶嘶声 输出: 2 fizz 4 输入: 嗡嗡声 嘶嘶声 输出: buzz fizz 7 输入: 嘶嘶声 输出: 13 14 fizzbuzz 16 17 输入: 输出: 1 输入: 嘶嘶声 嘶嘶声 输出: zzubzzif 输入: 输出: zzubzzif

8
自编译器[关闭]
这是基于我之前听过的关于编译器的讨论,但是不幸的是,我不记得何时何地。 用任何可以自行编译的语言创建最短的编译器。针对没有“编译程序”指令(这可能不包括某些版本的VAX)的任何合理的ISA(68K,x86,MIPS,ARM,SPARC,IBM BAL等)。从中读取源程序stdin并将生成的代码打印到中stdout。您可以将标准C库用于I / O和字符串处理(例如_printf)。您不需要编译整个语言,只需编译包含编译器的任何子集(即,仅打印汇编语言奎因虽然令人印象深刻,但不算作解决方案。)

14
今天是中心
给定日期作为任何方便格式的输入,请输出一个日历,其中该日期为五周窗口的确切中心。日历的标题必须包含星期几(即Su Mo Tu We Th Fr Sa)的两个字母的缩写。不允许使用三字母或其他缩写。 例如,April 2 2019作为输入,输出应为 Sa Su Mo Tu We Th Fr 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 …

30
我反转了源代码,您否定了输入!
公然敲竹杠一个的敲竹杠。去投票那些! 您的任务(如果希望接受)是编写一个程序/函数,该程序输出/返回其整数输入/参数。棘手的部分是,如果我反转源代码,则输出必须是取反的原始整数。 例子 假设您的源代码为ABC,其输入为4。如果我CBA改为编写并运行它,则输出必须为-4。 假设您的源代码为ABC,其输入为-2。如果我CBA改为编写并运行它,则输出必须为2。 输入的0可能为0或-0,但是,如果您确实支持带符号的零,-0则应为0。

3
连接4:发现假货!
银行被打乱了,所有当地的黑手党暴徒都有不寻常的不在场证明:他们在家里玩Connect 4!为了协助调查,要求您编写一个程序来验证所有被抓住的Connect 4板,以便检查位置是否确实是有效Connect 4游戏中的位置,并且没有匆忙组合在一起警察一敲门就一声。 连接4:玩家的规则,R并Y轮流将其颜色的方块拖放到7x6网格的列中。当玩家将砖块丢入列中时,它会下降以占据该列中的最低未填充位置。如果玩家设法在棋盘上获得四格相同颜色的水平,垂直或对角线,则他们获胜,游戏立即结束。 例如(R从开始),以下是不可能的Connect 4位置。 | | | | | | | | | | | | | | | | | | | | | | | | | | |R| | | | | | | |Y| | | | | |R| |Y| | | | …

14
破旧的拼字游戏
问题 您被困在树林中的小屋中,只有一个旧的拼字游戏可以娱乐自己。通过检查,您会看到拼字游戏字母非常磨损,以至于每个字母都仅可见。 尽管如此,您还是决定玩游戏。您从书包中取出七个字母并将其放在托盘上,您面临的挑战是确定这些字母可能是什么。 因此,通常,给定点列表会将其转换为任何可能的字符串或字母列表。 拼字游戏瓷砖和发行 2个空白磁贴(得分0分) 1点:E×12,A×9,I×9,O×8,N×6,R×6,T×6,L×4,S×4,U×4 2分:D×4,G×3 3分:B×2,C×2,M×2,P×2 4点:F×2,H×2,V×2,W×2,Y×2 5分:K×1 8点:J×1,X×1 10点:Q×1,Z×1 所以,如果你有个列表[10,10,8,5,1,1,1],然后"QZJKEEE"将是有效的,但"QQJKEEE"不会是有效的(因为在包里只有1 Q瓦) 问题特定规则 您可以假设所有输入都是有效的,并且将始终有7个图块(即,它将不是七个10点图块的列表,也不是9个图块) 您可以假设以前没有从包中拉出任何瓷砖(因此,分布是上述定义的英语瓷砖的标准分布) 您不必生成有效的单词,只需生成有效的字母字符串即可。 只要每个图块都有对应的字母,字符串的顺序就无关紧要。 点数是根据上面定义的标准英语拼字游戏点数得出的。 您可以输出大写或小写,对于空白图块,您可以输出空格字符或下划线“ _” 您的答案可能输出为图块的任何合理表示形式,例如列表,字符串,数组或序列 一般规则: 这是代码高尔夫球,因此最短答案以字节为单位。 不要让代码高尔夫球语言阻止您发布使用非代码高尔夫球语言的答案。尝试针对“任何”编程语言提出尽可能简短的答案。 标准规则适用于具有默认I / O规则的答案,因此允许您使用STDIN / STDOUT,具有适当参数的函数/方法以及返回类型的完整程序。你的来电。 默认漏洞是禁止的。 如果可能的话,请添加一个带有测试代码的链接(即TIO)。 另外,强烈建议为您的答案添加说明。 测试用例 显然,由于可以输出任何可能的值,因此很难定义严格的测试用例。 某些情况下可能带有有效的返回值: [10,0,10,5,8,8,0] -> "Q ZKJX " [1,1,1,1,1,1,1] -> "EEEEEEE" [1,2,3,4,5,8,0] -> "NDBHKJ " …

9
基于缩进的排序
给定一个大小写相同的字母字符串列表(az XOR AZ),其中每个字符串前面都带有0个或多个空格()字符,输出相同的列表,但字符串在每个缩进级别进行排序。出于排序目的,不同父项下的压痕深度算作不同的列表。 例 如果您输入的是: bdellium fox hound alien aisle wasabi elf alien horseradish xeno irk wren tsunami djinn zebra 您的输出应为 aisle horseradish xeno wasabi alien elf bdellium alien fox hound djinn zebra irk tsunami wren 如果愿意,可以将其视为目录列表,并且需要对每个目录中的名称进行排序。 细节 一个项目可以缩进任意数量的空格。如果缩进的空格与上一项的空格相同,则它属于与上一项相同的排序层次结构。如果缩进更多空格,则这是新的子层次结构的开始。 如果缩进的行比上一行的行少,它会以相同的#或更少的空格链接到其上方最近的子组(例如上例中的辣根,它链接到其上方的wasabi组),因为芥末是它上面的第一个没有比辣根更多的空间) 您必须在输出中保留每个输入项目的缩进级别 禁止在输出中使用制表符 输入的第一行将永远不会缩进 您的程序必须至少处理全部大写和全部小写的字符串之一;它不必同时处理两者。 计分 这是一个代码高尔夫球,因此使用最少字节的答案将获胜。

21
NxNxN Rubik多维数据集上的置换数量
介绍: 3x3x3魔方具有可能的排列,大约为43 亿个。您可能之前已经听说过这个数字,但是实际上是如何计算的呢?43 ,252 ,003 ,274 ,489 ,856 ,00043,252,003,274,489,856,00043,252,003,274,489,856,000 3x3x3魔方有六个面,每个面有九个贴纸。看(外部)件而不是贴纸,我们有六个中心件。八个角块;和十二个边缘碎片。由于中心不能移动,因此我们可以在计算中忽略它们。至于拐角和边缘: 有()排列八个角的方法。每个角都有三个可能的方向,尽管(八个中的)只有七个可以独立地定向。在给定()可能性的情况下,第八个/最后一个角的方向取决于前面的七个。8 !8!8!40 ,32040,32040,32037373^72 ,1872,1872,187 有()种方式来排列十二条边。从减半这是因为恰好在拐角处时,边缘必须始终保持均匀的排列。在给定()的可能性的情况下,第十二个/最终边缘的翻转取决于前面的十一个,因此可以独立翻转十一个边缘。12 !212!2\frac{12!}{2}239 ,500 ,800239,500,800239,500,80012 !12!12!2112,0482112112^{11}2 ,0482,0482,048 综上所述,我们有以下公式: 8 !× 37× 12 !2× 211= 43 ,252 ,003 ,274 ,489 ,856 ,0008!×37×12!2×211=43,252,003,274,489,856,0008!×3^7×\frac{12!}{2}×2^{11} = 43,252,003,274,489,856,000 资料来源:维基百科-Rubik的立方体排列 尽管这看起来可能已经很复杂了,但对于3x3x3多维数据集来说仍然相当简单。对于偶数立方体,公式略有不同。例如,这是4x4x4多维数据集的公式: 8 !× 37× 24 !2247= 7 ,401 ,196 ,841 ,564 ,901 ,869 …

20
列出*所有*元组!
给定输入n编写程序,将使用自然数生成所有可能的n元组。 n=1 (1),(2),(3),(4),(5),(6)... n=2 (1,1),(1,2),(2,1),(2,2),(1,3),(3,1),(2,3),(3,2),(3,3)... n=6 (1,1,1,1,1,1) (1,1,1,1,2,1) (1,1,1,2,1,1)... 输出的顺序可以不违反任何其他规则。 从理论上讲,该程序必须永久运行并列出所有适用的元组一次。 实际上,您的程序将达到整数类型的限制并崩溃。只要只有整数类型是无限的,程序就可以无限长地运行,这是可以接受的。 如果只允许程序运行那么长时间,则必须在有限时间内列出每个有效的元组。 您可以选择输出,除了自然数外还包括零。 为了方便起见,您可以选择程序的输出格式,只要元组和每个元组内的数字之间的分隔清晰且一致即可。(例如,每行一个元组。) 输入(n)是1到6的整数。对于超出此范围的输入,未定义所需的行为。 适用代码高尔夫球规则,以最短的程序获胜。 感谢“ Artemis Fowl”在沙盒阶段的反馈。

2
疑难杂症
给定结的陶氏符号及其交叉符号,请计算其括号多项式。 尽管存在更多的技术定义,但对于这一挑战,将结视为通过将绳的两端连接在一起而实际制成的东西就足够了。由于结存在于三维中,因此当我们将其绘制在纸上时,我们使用结图 -二维投影,其中的交叉点恰好是两条线,一上一下。 这里(b)和(c)是同一结的不同图。 我们如何在纸上表示一个结图?我们大多数人不是伦勃朗,因此我们依赖于Dowker表示法,其工作方式如下: 在结上选择任意起点。沿着结向任意方向移动,并从1开始对您遇到的交叉点进行编号,并进行以下修改:如果是偶数,并且您当前正在越过交叉点,则取消该偶数。最后,选择与1、3、5等对应的偶数。 让我们尝试一个例子: 在这个结上,我们选择“ 1”作为起点,然后继续向上和向右移动。每次我们去超过或下另一块绳,我们分配交叉点的下一个自然数。例如[3,-12],在图中,我们将与通过交叉的链对应的偶数取反。因此,此图将由表示[[1,6],[2,5],[3,-12],[-4,9],[7,8],[-10,11]]。列出1、3、5、7等的伙伴给我们[6,-12,2,8,-4,-10]。 这里有几件事要注意。首先,陶氏符号对于给定的结不是唯一的,因为我们可以选择任意的起点和方向。但是,有了这种表示法,就可以完全确定结的结构(从技术上讲,直到反映出其主要结的组成部分)。尽管并非所有的Dowker记号都可能形成结,但在此问题中,您可以假定输入代表实际的结。 为了避免打结之间产生歧义,并使挑战更容易解决,您还将获得一个交叉标志列表作为输入。 在正交叉处,下线从上线的角度转到左侧。在负数交叉处,它向右移动。请注意,倒车绕来绕去的结方向(即扭转双方在行和下行)不会改变交叉的迹象。在我们的示例中,交叉标志为[-1,-1,-1,1,-1,1]。它们以与道克符号相同的顺序给出,即编号为1、3、5、7等的交叉点。 AAA DDD⟨D⟩⟨D⟩\langle D\rangle 没有任何交叉的唯一循环的多项式为1。 DDDDDDDDD(−A2−A−2)(−A2−A−2)(-A^2-A^{-2}) DDD 在上图中,可以将第一张图中具有轮廓的交叉形式转换为第二张图(也称为正平滑)或第三张图(负平滑)。 AAAA−1A−1A^{-1} 感到困惑了吗?让我们做一个例子,尝试找到()的方括号多项式(注:这是两个连接在一起的结。这种图在此挑战中将不是潜在的输入,因为输入将只是单个结,但可能显示为算法的中间结果。) 我们首先使用规则3 我们在两个新结上再次使用规则3 我们用这四个新的结代替第一个方程。 将规则1和2应用于这4条告诉我们 所以,这告诉我们 恭喜您完成了结理论的简介! 输入值 两张清单: 道克符号,例如[6,-12,2,8,-4,-10]。交叉点的编号必须从1开始。相应的奇数[1,3,5,7,...]是隐式的,不能作为输入提供。 与道克符号对应的交叉口的符号(1/ -1或(如果您更喜欢0/ 1或false/ true或'+'/ '-')),例如[-1,-1,-1,1,-1,1]。 除了一对列表,还可以有一对列表,例如 [[6,-1],[-12,-1],... 输出量 A−2+5+A−A3A−2+5+A−A3A^{-2}+5+A-A^3[[1,-2],[5,0],[1,1],[-1,3]] −k…k−k…k-k\ldots kk∈Nk∈Nk\in \mathbb{N}[0,1,0,5,1,0,-1]A0A0A^0 规则 这是一个代码高尔夫挑战。无法使用任何标准漏洞,并且不能使用具有用于计算Dowker表示法或Bracket多项式的工具的库。(仍然可以使用包含这些库的语言,但不能使用库/软件包)。 测验 // 4-tuples of [dowker_notation, crossing_signs, …

6
那条蛇去哪儿了?
编写一个函数(使用尽可能少的字节),该函数采用任意数量的列和行的二维数组,其中: 0 代表空块, 1 代表蛇块。 该函数必须返回蛇可能经过的路径数。 范例1: 输入: [ [1,1,1,1,1], [0,0,0,0,1], [0,0,0,0,1], ] 输出: 2 在上面的示例中,该函数将返回,2因为答案是以下之一: 范例2: 输入: [ [1,1,1,1], [0,0,1,1], [0,0,1,1], ] 输出: 6 在此示例中,该函数将返回,6因为答案是以下之一: 注意: 评估输入时,可以假定: 表示列的数组将始终具有相同的大小(因此,数组为矩形); 至少存在1条有效路径; 蛇不能穿过边缘(某些蛇可能会发生这种情况)。 蛇将始终至少有2个方块; 蛇不能斜移动。 路径是定向的。(因此,两条路径在不同位置处结束,但看起来完全一样的路径不是同一条路径,它们将总计)

22
FIFO缓存未命中数
这个挑战真的很简单(并且是更困难挑战的先兆!)。 给定一个资源访问数组(用非负整数简单表示)和一个参数n,返回假定我们的缓存具有容量n并在充满时使用先进先出(FIFO)弹出方案的缓存未命中数。 例: 4, [0, 1, 2, 3, 0, 1, 2, 3, 4, 0, 0, 1, 2, 3] 0 = not in cache (miss), insert, cache is now [0] 1 = not in cache (miss), insert, cache is now [0, 1] 2 = not in cache (miss), insert, cache is …

26
交易所大写
给定两个字母字符串,将每个字符串的大写模式转移到另一个字母上。最少的字节数获胜。 Input: CodeGolf xxPPCGxx Output: coDEGOlf XxppCgxx 这两个字符串都是等长且非空的,只有字母a..z和A..Z。 您可以相对于输入以任何顺序输出两个结果字符串。 您可以将一对字符串表示为一个字符串,并使用非字母单字符分隔符输入和/或输出。 您可以将字符串表示为字符列表或一个字符的字符串,但不能表示为代码点值的序列,除非这些只是您语言中的字符串。 您的输入和输出可能代表不同的字符串。 测试用例: CodeGolf xxPPCGxx -> coDEGOlf XxppCgxx lower UPPER -> LOWER upper MiXeD lower -> mixed LoWeR A A -> A A ABcd EfGh -> AbCd EFgh
35 code-golf  string 

23
嘈杂的囚徒困境
在此挑战中,您将扮演吵杂的囚徒困境。 在囚徒困境是博弈论中一个场景,其中有两名球员,每两种选择:合作或者缺陷。如果每个球员都缺阵,他们会为自己做得比他们合作时更好。 反复犯人的困境是相同的游戏,只是您反复与同一个对手比赛,并且您知道对手过去玩过什么。您的目标始终是为自己积累最高分,而不管对手的表现如何。 嘈杂的囚徒困境使沟通变得有些混乱。您对对手过去玩过的游戏的了解会带来一些干扰。您还将了解过去的举动。面对同一个对手的回合中,噪声率是恒定的,但是不同回合之间的噪声率却不同。 挑战 在这个挑战中,您将编写一个Python 3程序来解决嘈杂的被囚徒的困境。 您的程序将收到三个输入: 您自己的动作,无需应用随机翻转。 对手的动作,并应用随机翻转。 状态变量,每轮以一个空列表开头,可以根据需要进行修改。如果您不想使用它,则可以忽略它。 您的程序应输出'c'以配合或'd'缺陷。 例如,这是一个程序,如果对手过去至少60%的时间在应用了随机翻转之后并且在前10次翻转中进行了合作,则该程序可以进行合作: def threshold(my_plays, their_flipped_plays, state): if len(their_flipped_plays) < 10: return 'c' opp_c_freq = their_flipped_plays.count('c')/len(their_flipped_plays) if opp_c_freq > 0.6: return 'c' else: return 'd' 如果您不了解Python,请使用伪代码编写提交内容,然后某个人(我或该站点的另一个成员)可以制作相应的Python程序。 游戏玩法 比赛亚军可以在这里找到:noisy-game。运行noisy-game.py以运行锦标赛。我将使用新提交的内容更新该存储库。示例程序可以在中找到basic.py。 程序的总体得分是其在100多个游戏中得分的总和。 游戏由每个玩家与每个玩家(包括其自身)的循环赛对决组成。一场对决包括100发回合。一回合包含300个动作,每个动作涉及输出'c'或'd'。 您的提交将与每个提交(包括您自己的提交)进行对战。每场比赛将进行100场比赛。在每个回合中,翻转概率将从中均匀地随机选择[0, 0.5]。 每回合将包含300步。在每次移动时,两个程序都将收到他们尝试过的所有先前播放的声音,以及在应用了翻转之后另一个程序已经做出的所有先前播放的声音,以及一个状态变量,该变量是可变的列表,程序可以根据需要对其进行修改。程序将输出其动作。 动作得分如下:如果一个程序播放a 'c',则相反的程序将获得2分。如果某个程序播放'd',则该程序将获得1分。 然后,以等于翻转概率的概率独立地翻转每个动作,并存储以显示给对手。 在完成所有回合之后,我们求和每个对战中每个球员获得的积分。然后,我们使用以下评分系统来计算每个玩家的游戏得分。在所有比赛完成后执行此评分。 计分 我们将使用进化评分。每个程序以相等的权重开始。然后,使用游戏中的总点数,权重更新如下,进行100次迭代: 每个程序的新权重与之前权重和平均总分的乘积成正比,再乘以其对手的权重。 …

27
具有唯一字符的代码生成器
挑战 您的任务是编写一段代码,输出另一段代码。该代码必须依次输出另一个代码,直到最终代码输出整数1为止。链端在第一时间1被输出。 您的任何程序都不得共享任何字符(“规则”部分中只有一个例外)。 获奖作品将是链条最长的作品。决胜局将是最短的总代码长度。 规则: 您可以同时使用函数,程序和代码片段。您可以假设一个REPL环境。 所有功能必须使用相同的语言编写 禁止使用与符号无关的语言。这包括部分独立于符号的语言,例如Headsecks。 默认输出格式可以有选择地在函数的输出中忽略。这包括尾随换行符ans =等。 您可以重复使用空格字符(ASCII代码点32),但请注意以下几点: 您可以在其中一个功能中使用任意多个空格字符,但在所有其他功能中将其限制为最多5个 如果代码点32在您的语言中不是空格,则不能重复使用任何字符。 没有任何程序可以输入 该链必须至少两个程序长。 例: 您的初始代码是abc+cab+bac。输出:foofoo*123,依次输出disp(~0),输出1。这是一个由3个程序组成的链,总长度为29(决胜局)。

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.