编程拼图和代码高尔夫

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

1
Code Golf的动画
当我看到敲打几个字符的代码高尔夫球条目,使代码变淡时,我去查看并排差异的编辑历史记录。观看和学习:) 面临的挑战是制作一个能够产生最漂亮的动画差异的程序。 输入将是任何有序的文本版本系列。 该程序可以用任何编程语言编写。 允许程序将自身限制为以某些特定的编程语言输入数据。 程序不应该调整到特定的输入数据;该程序应该是通用的,并且可以用于任何有序的文本版本系列。 对于输入中的每个版本,输出动画中必须有相应的时间显示版本的全文。您必须为版本阶段之间的差异设置动画,并且所有版本阶段都必须存在并在输出中按顺序排列。在这些关键帧上,必须显示版本大小,并且查看者应该理解这是他们当时看到的完整版本。 该程序可能不使用任何第三方代码来计算差异。 语法突出显示输出是可选的。如果程序为语法着色,则它可能不使用任何第三方代码来这样做。 输出将是动画GIF。 该程序可能使用第三方库来创作GIF。 这是一次人气竞赛,因此,按照此站点上的人气竞赛的定义,投票最多的条目将获胜。 这是一个简单的示例脚本,该脚本使用Python的ndiff和Pillow的基本动画GIF支持,并对每个添加和删除步骤进行动画处理: 我个人认为这是一项非常糟糕的工作。它不执行语法高亮显示,不尝试移动重新排列的代码块,不觉得有人正在现场编辑它,依此类推。它还打破了关于在关键帧上显示输入大小(以字节为单位)的规则,并且使用第三方库进行区分。有很大的改进空间! 希望这些受欢迎的条目也将成为codegolf.stackexchange.com社区有用的有趣工具。因此,如果程序易于他人使用和使用,将非常感激。

8
ASCII拓扑pt 1:我可以指望您吗?
我有一个严重的问题。我有一些文本文件,其中保存着我非常重要的数字-所有重要的数字!还有二三。 这些数字是如此重要,以至于我无法将它们委托给那些新奇的十进制或二进制数字系统。我将每个数字保持一元编码,如下所示: +--+ | | +---+ +----+ | | | | | +---+ +-------+ ~/two.txt 简单可靠:数字2的两个ASCII循环。不幸的是,随着时间的流逝,这些事情会变得一团糟,现在我很难确定每个文件中有多少个循环。以下是我手工制作的一些示例: 一: +---+ | | +--+ | | | +--+ | | | | | | | +--+ +--+ | | +---------+ 三: +---------+ | +-----+ | | | +-+ | | | | | …

23
跳伞运动
这是我的第一个挑战,因此我将其保持简单。 如果您曾经telnet towel.blinkenlights.nl在命令行上键入并按下Enter键,那么您将体验到升迁的乐趣。简单来说,Asciimation是一种用ascii艺术制作动画。今天,我们将做一个非常基本的练习,让一个人做起重千斤顶。 我们将把两张ascii图片放在一起。1号: _o_ 0 / \ 2号: \o/ _0_ <blank line> 请注意,第二个在结尾处有一个空白行。 因此,您的程序应执行以下步骤: 清除控制台屏幕。 打印正确的ascii艺术图像。 设置一个标志或其他东西,以便您下次知道其他图像。 等待片刻(大约一秒钟)。 继续1。 规则 您的程序必须是(理论上)无限循环。 必须先创建您使用的编程语言,然后才能发布此挑战。 这是代码高尔夫球,因此以字节为单位的最短代码获胜。 有标准漏洞。 请享用!

19
将微秒的格式设置为小时:分钟:秒等
以下内容受到今天Stack Overflow提出的一个问题的启发。 给定一个微秒数,0 <= n <= 86400000000(例如12345678900),输出格式化的字符串hh:mm:ss:000:000,例如03:25:45:678:900。 0 -> '00:00:00:000:000' 12345678900 -> '03:25:45:678:900' 86400000000 -> '24:00:00:000:000' 我有209个字节的Python解决方案,但是它可以降低一点吗?
28 code-golf  date 

30
有关人物
背景 有关人物是CBS上的犯罪剧,也是我最近最喜欢的电视节目。 该节目讲述的是一个名叫亿万富翁程序员的哈罗德·芬奇(Harold Finch)和他的搭档约翰·里斯(John Reese)的故事,他是特种部队的资深人士和前中央情报局特工。该程序员创建了一个有感觉的AI,称为“机器”,可以在暴力犯罪发生之前对其进行预测。它通过监视和分析全球所有的监视摄像机和电子通讯,随时跟踪地球上的每个人。 哈罗德(Harold)为美国政府制造了“机器”(The Machine),以事前侦查恐怖活动。它根据预测的犯罪是否与国家安全相关将其划分为列表。相关案件由政府处理,而“无关”列表被编程为每天删除。 哈罗德本人为自己准备了一个后门,希望自己能处理“无关紧要”的清单。此后门会导致机器致电距Harold最近的公用电话(大约每天一次)并向他读取一个社会安全号码。该SSN属于因预谋犯罪而处于生命危险中的人,或正在计划此类犯罪的人。 挑战 编写一个无需输入即可输出30个随机电话号码和SSN的程序(请参见下文)。 输出量 每两天将打印两行文本。 Crime predicted: 555-55-5555 Calling: 1-555-555-5555 跟换行符 此过程应重复一个“月”(30个“天”)。 电话号码 每个电话号码必须包含以下元素: 必须具有美国国家/地区代码(第一位数字)。 必须具有随机区号(第一个三位数字)。 电话号码本身的前三位数字应为555,其后为4位随机数。 这是一个带注释的示例: 1-814-555-3857 | | | | | | | | | | | +----------> random four digits | | | | | +--------------> the set 555 …
28 code-golf  random 

2
打印ASCII体素
编写一个程序,读取n×n×nn×n×nn\times n \times n它代表一个二进制值的阵列n×n×nn×n×nn\times n \times n立方体,即由n3n3n^3小立方体。每个值表示在给定位置上是否存在体素(小立方体)。程序必须将给定的数组输出为ASCII图形(这意味着通过控制台输出或写入文件)。 例子 让我们考虑以下2×2×22×2×22\times 2\times 2数组: [ [[0,0], [1,0]] [[1,1], [1,0]], ] [ [[0,0], [0,0]] [[1,1], [1,1]], ] 在这种情况下,输出应如下所示(此处看起来不如在垂直空间较小的代码编辑器/控制台中那样好): +----+ / /|-+----+ +----+ | /| | | +----+ | | | | | + + + | |/ | | +----+ | |/ +----+ +----+----+ …

4
画一个阿波罗垫片
给定三个相互切线的圆,我们总是可以找到另外两个与这三个圆都切线的圆。这两个被称为阿波罗圈。请注意,Apollonian圆之一实际上可能在三个初始圆周围。 从三个切圆开始,我们可以通过以下过程创建一个称为Apollonian垫片的分形: 将最初的3个圈子称为父圈子 找到父圈子的两个阿波罗圈 对于每个阿波罗圈: 对于三对父圆中的每对: 将Apollonian圈子和两个父圈子称为新的父圈子集,然后从步骤2重新开始。 例如从相等大小的圆圈开始,我们得到: 在Wikipedia上找到的图片 我们还需要一点符号。如果我们有一个半径为r且中心为(x,y)的圆,则可以将其曲率定义为k =±1 / r。通常,k为正,但是我们可以使用负k表示将垫圈中所有其他圆包围起来的圆(即所有切线从内部接触该圆)。然后,我们可以指定一个三元组的圆:(k,x * k,y * k)。 出于这个问题的目的,我们将假设正整数k以及有理数x和y。 有关此类圈子的更多示例,请参见Wikipedia文章。 在这篇文章中,还有一些关于整体垫圈的有趣的东西(以及其他有趣的东西)。 挑战 系统会为您提供4个圆的规格,每个规格看起来都像(14, 28/35, -112/105)。您可以使用任何方便的列表格式和除法运算符,以便在需要时可以简单地eval输入。您可以假设这四个圆确实彼此相切,并且第一个圆具有负曲率。这意味着您已经获得了其他三个周围的阿波罗圈。有关有效示例输入的列表,请参阅挑战的底部。 编写一个程序或函数,在给出此输入的情况下,绘制一个Apollonian垫片。 您可以通过函数参数ARGV或STDIN进行输入,然后将分形呈现在屏幕上或以您选择的格式将其写入图像文件。 如果对生成的图像进行光栅化,则其每侧必须至少为400像素,并且最大圆周围的填充不足20%。当您到达半径小于最大输入圆的400的圆或小于像素的圆时,以先发生的为准,您可能会停止递归。 您只能绘制圆形轮廓,而不能绘制完整的光盘,但是可以选择背景和线条的颜色。轮廓不得大于外圆直径的200。 这是代码高尔夫球,因此最短的答案(以字节为单位)获胜。 输入示例 这是维基百科文章中所有转换为规定输入格式的整体垫片: [[-1, 0, 0], [2, 1, 0], [2, -1, 0], [3, 0, 2]] [[-2, 0, 0], [3, 1/2, 0], [6, …

8
激流独木舟
您正在划一条独木舟在一条相当快的激流河上。突然,您的船桨爆炸了,您发现自己处在危险的境地,没有任何船桨,使河流急速驶下。幸运的是,您仍然具有编程技能,因此您决定在独木舟旁边雕刻一个程序,以帮助您在急流中生存。但是,独木舟侧面没有太多的表面可用来编写程序,因此您必须使程序尽可能短。 河流可以表示为8 x 16的网格。我们将在列上标记数字0为7,在行上标记数字0为15。 y --------15 --------14 --------13 --------12 --------11 --------10 --------9 --------8 --------7 --------6 --------5 --------4 --------3 --------2 --------1 --------0 01234567 x 上图:一条完全平静,普通的河流,没有障碍物。自然,这不是您要走的河。 您从坐标(4,0)开始,然后从那里不受控制地向河上移动(即向量 (0,1)),直到撞到一块岩石(o在这些示例中以表示)。当您撞到一块岩石时,您将有55%的机会越过岩石的左侧(即vector (-1,1)),而有45%的机会就越过岩石的右侧(即vector (1,1))。如果独木舟位于最左边或最右边的列上,它将始终向中心移动。如果没有岩石,它将直接向上移动。 y ----x---15 ----xo--14 -o--x---13 ----x---12 ---ox---11 ---x----10 ---xo---9 ---ox---8 ----xo--7 -----x--6 ----ox--5 -o--x---4 ----x---3 ----xo--2 ----x---1 ----x---0 01234567 上图:用字符表示的独木舟可能走的路线 x 给定河流的地图,编写一个程序,将输出在给定列上划独木舟的可能性。 以适合您程序的任何一种方法接受输入(例如STDIN,命令行参数, …

30
打印ASCII表
任务是显示ASCII表的n个字符。 您可以编写一个带有参数n的函数(或将参数作为参数的程序,也允许使用STDIN),该参数将是要打印的最后一个字符的索引。 任务非常简单,因此举个例子,这里是Python 2.7的可能实现: (lambda n:map(chr, range(n)))(256) 正如我所说的,这是一个简单的任务。所以这是代码高尔夫球,最短的代码获胜! 编辑 正如您中某些人指出的那样,该代码不会打印结果。这只是一个例子,因为我可能很难用英语解释问题;-)。 编辑2 可以用任何编程语言随意发布答案,即使它不是最短的代码。也许那里有一些有趣的实现! 编辑3 修复了示例,以便打印结果。
28 code-golf 

5
政府墙壁供应有限
介绍 知识渊博的高尔夫球手为我们准备了世界末日的洪水。撤离有危险的地区,人口转移到高地。 我们低估了洪水(或者@ user12345的代码中存在错误)。一些高地地区正在迅速接近海平面。必须竖起墙壁,以确保现在人口稠密的营地的生存。可悲的是,政府的隔离墙供应有限。 问题 我们的世界末日场景由一行中的两个数字n和来描述m。在该行之后是每行n具有m值的行,仅用一个空格分隔。每个值将是四个字符之一。 x不可逾越。水不能在这里流动。不能在这里筑墙。 -不稳定 水可以在这里流过。不能在这里筑墙。 .稳定。水可以流过这里。可以在这里竖起墙壁。 o营地。水可以流过这里。如果是这样,每个人都会死亡。在这里不能建墙。 水将从地图的所有边缘流出,除非该边缘无法通行或在瓷砖上建了墙。编写一个程序,该程序可以输出保护营地所需的最小墙数。 输入示例 6 7 x . . x x x x x . . x - - x x . x x - - x x . o o o - . x . o o o - . …
28 code-golf 

19
飞跃秒!
由于今天标志着有史以来第26个leap秒的发生,因此您的挑战将是输出迄今为止已发生的GMT或UTC中每leap秒的日期和时间。 输入值 没有输入。 输出量 1972-06-30 23:59:60 1972-12-31 23:59:60 1973-12-31 23:59:60 1974-12-31 23:59:60 1975-12-31 23:59:60 1976-12-31 23:59:60 1977-12-31 23:59:60 1978-12-31 23:59:60 1979-12-31 23:59:60 1981-06-30 23:59:60 1982-06-30 23:59:60 1983-06-30 23:59:60 1985-06-30 23:59:60 1987-12-31 23:59:60 1989-12-31 23:59:60 1990-12-31 23:59:60 1992-06-30 23:59:60 1993-06-30 23:59:60 1994-06-30 23:59:60 1995-12-31 23:59:60 1997-06-30 23:59:60 1998-12-31 23:59:60 2005-12-31 23:59:60 …

12
告诉我动作
杰克和简决定在下班前下棋。不幸的是,杰克很不擅长可视化。他发现很难找到除了典当之外的给定部件可能的移动! 您的挑战是帮助杰克找到给定棋子(典当除外)的可能选项。 万一忘记了,各个部分用以下符号表示: K:国王 问:女王 N:骑士 B:主教 R:白嘴鸦 作为一个例子,下面的图像中的奈特位于d4和能够移动到c2,b3,b5,c6,e6,f5,f3,e2。对于给定的输入: Nd4 您将产生: Nc2 Nb3 Nb5 Nc6 Ne6 Nf5 Nf3 Ne2 规则: 只要列出了所有可能的动作,输出的顺序就无关紧要 可能的动作可以用空格,换行符或任何其他定界符分隔 输入可以作为参数传递给程序,也可以通过 STDIN 程序中的空格应计算在内,因此请充分利用它 这是代码高尔夫。(请避免使用专门为此目的设计的任何工具/实用程序。)答案最短者为准!
28 code-golf  chess 

8
编写Hang子手解算器
您需要编写一个Hangman解算器。根据该英语单词列表[1]进行测试,解决最多单词数量的求解器获胜,而总不正确猜想的数量成为决胜局。单词列表中的所有单词将以随机顺序进行测试。 [1]:从此处获取此单词列表,然后删除数字,然后删除长度为1或带有非字母字符的单词,然后选择最常见的4096个唯一单词作为此单词列表。 细节: 您的程序将与游戏程序进行交互,该程序将通过stdin为您提供下划线和正确猜出的字母。您的程序将给出您的猜测的标准,并且必须从输入中推断先前的猜测是对还是错。错误6次后,您的程序将丢失。每个游戏结束后(输赢之后),您的程序必须为下一个游戏做好准备。 您的代码长度必须严格小于2048个字节,并且程序不得使用任何外部资源(包括但不限于访问本地存储或Internet上的单词表)。 示例:(输入之前>仅在此处进行澄清-输入中实际上不存在该输入) >_______ // 7 underscores a // Now you wait for input again >_a___a_ e >_a___a_ // Implies that your guess is wrong >_____ // new round, this will be given ONLY IF you already have 6 losses 假设您有6次错误,您将收到一个最终输入,表示您的猜测是错误的,并且您的程序必须准备好开始新的回合(即再次输入)。 如果赢了 >_angman h >hangman >_____ // …

29
编写您喜欢的短语
选择一个正好5个字长的引号或词组,例如Programming puzzles and code golf!。 编写一个程序,将其附加n次后,依次输出该短语的前n + 1个单词。 例如,如果您的程序代码为,MYPROG而短语为Programming puzzles and code golf!,则正在运行... MYPROG 应该输出 Programming MYPROGMYPROG 应该输出 Programming puzzles MYPROGMYPROGMYPROG 应该输出 Programming puzzles and MYPROGMYPROGMYPROGMYPROG 应该输出 Programming puzzles and code MYPROGMYPROGMYPROGMYPROGMYPROG 应该输出 Programming puzzles and code golf! 超过4次是不确定的,您的程序可以执行任何操作。 规则 您的短语必须是语法有意义的英语。理想情况下,应适当大写并标点符号。 你的短语可以是任意长度,但它的熵,通过计算公式http://www.shannonentropy.netmark.pl/,可能不小于3.5。 (粘贴您的短语,点击“ 计算”并寻找最后一个H(X)。) 您的词组只能包含可打印的ASCII字符(20到7E十六进制)。您的代码只能包含可打印的ASCII以及制表符和换行符。 您的词组必须恰好包含5个唯一词和4个空格。所有非空格都算作单词的一部分。空格是单词边界。他们可能不在前面或后面;除了最后的话,应该还有一个。 输出也应在单词之间包含一个空格。每个附加步骤的输出可能包含尾随空格,但不包含前导空格。 输出到标准输出。没有输入。 计分 分数是初始未附加程序的字节长度。(例如,MYPROG得分6) …

12
死鱼短号
死鱼是最著名的非图灵完全编程语言之一。它只有一个累加器(从0开始)来存储数据,并且只有四个命令: i - Increment the accumulator s - Square the accumulator d - Decrement the accumulator o - Output the accumulator Deadfish程序可能类似于: iiisdo 那会打印: 8 挑战 创建一个程序,该程序将输入数字并输出Deadfish代码以显示该数字。(或创建一个将数字作为参数并返回代码的函数。)它必须适用于从0到的任何整数255 目标 尝试使您的代码尽可能短的代码生成给定的数字。例如: iiiiiiiiio 和 iiiso 每次打印9,但第二个较短。 计分 你的分数是: The number of characters in your source code + The sum of the lengths of …

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.