编程拼图和代码高尔夫

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

4
言语之声
人们写了很多东西,使一件东西可视化为另一件。现在,我建议能够将字母翻译成音乐!您的工作是编写一个程序,该程序需要一个文本文件并输出一个声音文件,并将每个字母转换成一个特定的音符C3-C8。 免责声明-我实际上并不期望音乐听起来不错,但我希望对此感到惊讶。 技术指标 您将文件名作为字符串,并将BPM(每分钟心跳数)作为整数。 您使大写A成为笔记C3 然后按以下顺序为每个字符上半步: ABCDEFGHIJKLMNOPQRSTUVWXYZ ()-,;.'"abcdefghijklmnopqrstuvwxyz 是的,因为跨度过多,所以不会使用每个字符。 您以这种方式翻译文件中的每个字符 以给定的BPM将这些笔记放在一起作为四分音符 要么另存为声音文件(我猜Midi将是最简单的,但是一切正常)或播放它 任何理智的输入格式都可以 无标准漏洞 这是代码高尔夫球,因此以字节为单位的最短代码胜出! 奖金 允许转置输出-50字节 通过获取多个文件,允许多个轨道相互叠加-75字节 将连续字母连接成一个较长的音符-50个字节 编辑:哇,我们的分数是负数。我将在周六宣布获胜者。
11 code-golf  music  audio 

1
构造正交对角希腊拉丁广场
考虑一个由Nx个N唯一元素组成的网格。每个元素都有一个字母(从A到第Nth个字母,包括端点)和一个数字(从1到N,包括端点)。因此,每个数字/字母对恰好在网格中一次。 您的工作是安排一个网格,以便: 每行,每列和对角线(包括换行)仅包含每个字母和数字一次。 通过包装,我的意思是 * * * # * * * # * * * # * * * # * * * * * * * * # 是对角线,以及碰到边缘的所有类似对角线。 一个示例5x5网格是: A1 B2 C3 D4 E5 C4 D5 E1 A2 B3 E2 A3 B4 C5 D1 B5 C1 D2 E3 …

10
警察和强盗
每个人都一直希望实施Conway的“人生游戏”。那很无聊!让我们去做警察和强盗吧! 您将有两支队伍:警察和强盗。每个小组有5名成员,每个成员有50个生命值。该程序将连续循环。每次迭代,都会发生以下情况: 对于每个团队,打印第一个字母(C代表警察,R强盗),空格,成员HP的空格分隔列表和换行符。这是球队的状态。两者都完成后,打印另一个换行符。例如,这可能是第一轮比赛: C 50 50 50 50 50 R 50 50 50 50 50 从1到10中选择一个随机数(包括1和10)。我们打这个电话N。如果N是偶数,则强盗输掉了这一回合。如果很奇怪,警察就会输。 从失败的团队中随机选择一个HP大于0的成员,并扣除NHP。成员的HP永远不会出现低于0的状态。 重新启动循环。 当一个团队的所有成员失去所有HP时,游戏结束。然后,如果警察获胜,将打印以下内容: C+ R- 如果强盗获胜: R+ C- 这是代码高尔夫球,因此最少的字符获胜。 这是Python 2中的示例实现: import random cops = [50]*5 robbers = [50]*5 while any(cops) and any(robbers): # print the status print 'C', ' '.join(map(str, cops)) print 'R', …
11 code-golf 

3
打入99中的每个ASCII字符
99是我本周早些时候为挑战而发明的一种编程语言。为99写一个解释器。(发明了,但要感谢你们的六个人,才不需要实施。) 在99中,您可以将单个ASCII字符打印到stdout,但是由于语言的限制,并非始终清楚如何尽可能简洁地打印特定字符。 对于128个ASCII字符中的每一个,编写一个不带任何输入并输出该唯一字符的99程序。您可以手工编写任何或所有这些答案,也可以编写其他程序(以您喜欢的任何语言)为您生成它们。 您的128 99个程序中每个字符的总和就是您的分数。最低分获胜。换行符视为一个字符。 请记住,在99中,只有偶数大小的变量(例如9999输出ASCII字符)(奇数大小的变量输出整数)。它们的值除以9,然后取为mod 128,因此将值映射到ASCII字符不需要在一定范围内。例如,内部值297、1449和-855都对应于该字符,!因为当它们被9除并取为mod 128时,它们全部变为33,这是的字符代码!。 如果您需要99的解释器,建议您使用Mac的Python答案。 我知道我说过我的下一个挑战将是更具互动性,但我仍在为那个挑战而努力。

1
生成Davenport-Schinzel序列
背景 甲Davenport-Schinzel序列具有两个正整数参数d和n。我们将通过给定参数来表示所有Davenport-Schinzel序列的集合DS(d,n)。 考虑自然数的所有序列1到n,包容性,满足: 序列中没有两个连续的数字相同。 没有长度大于的子序列(不一定是连续的)d,它在两个不同的数字之间交替。 让L表示这样一个序列的最大长度(给定d和n)。然后,DS(d,n)是所有具有length的此类序列的集合L。 一些示例可能会有所帮助。让d = 4,n = 3。具有这些约束的最长序列可能具有L = 8。因此,以下成员是DS(4,3): [1, 2, 1, 3, 1, 3, 2, 3] 没有连续的相同数字,并且存在交替的length子序列4,但没有更长的子序列: 1 2 1 2 1 2 1 2 1 3 1 3 1 3 1 3 2 3 2 3 2 3 2 3 1 3 1 3 …

1
伪奎因多语种语言检测计数器
捆很有趣。多语种也很有趣。存在多语种Quines,但我们可以提高标准。 编写一个文件,其中包含适用于语言α,β和γ的有效程序。当文件以语言α或β程序执行时(可能是在编译后),该程序的输出应与有效提交此竞赛的形式相同。如果您的文件是以语言γ程序执行的,则应输出一个数字。该数字的值是该程序先前执行的链,解释为二进制数。 这种解释可能有点难以理解,因此这里是一个示例。令Α,Β和Γ是分别以语言α,β或γ执行其输入的函数。程序并返回这些程序的输出。令x为该竞赛的有效提交。然后下面的表达式,当我们通过语言β,α,β,α,α,β和γ依次处理x时,将得到41,因为41 10 = 101001 2。 Γ(Β(Α(Α(Β(Α(Β(x()))))))) 您可能不会假设链中的倒数第二个执行是语言β的执行。如果您的原始提交是直接作为γ语言程序执行的,则应打印0。 您的程序在链中最多16个编译中应表现正确;也就是说,您的程序最后可以打印的最大数量是2 15-1。当然,您的程序可以支持更长的编译链。 这是一项鼓励创意解决方案的人气竞赛。投票总数最高的提交者获胜。

3
美元可分割性与完美变化
我的口袋里有15美元。同样,我在一家没有零钱的商店。在浏览时,我发现一个售价10美元(含税)的商品。我可以在不损失任何钱的情况下购买该物品吗? 在这种情况下,答案是肯定的。无论我的15美元如何分配(一个10和一个5,或三个5,等等),我总是会得到需要的10美元。 再举一个例子,我的口袋里有0.16美元。我还必须支付其他多少钱? Possible Divisions: 0.01, 0.05, 0.10 0.01, 0.05 x 3 0.01 x 16 Guaranteed Exact Change: 0.01, 0.05, 0.06, 0.10, 0.11, 0.15, 0.16 如果我口袋里有0.27美元怎么办? Possible Divisions: 0.01 x 2, 0.25 0.01 x 2, 0.05, 0.10 x 2 0.01 x 2, 0.05 x 3, 0.10 0.01 x 2, 0.05 …
11 code-golf 

6
精确传输Pi ...
继Pi的蒙特卡洛估计器之后,这一挑战是为常数Pi生成最短的代码。除了此处,您的代码必须永远输出pi的连续数字。 这是代码高尔夫,因此最短的提交(以字节为单位)获胜,只是它必须在合理的PC上在不到10秒的时间内输出前10,000位数字,并且永远不能终止。 Pi或Trig函数不能使用任何内置函数。 删除了对代码大小的硬限制。
11 code-golf  math  pi 

6
解决对角Burrows-Wheeler变换
介绍 在此挑战中,您将解决对角线Burrows-Wheeler变换。这是什么是对角Burrows-Wheeler变换的一般概述。要对消息进行编码,必须首先确保其长度为奇数(即5、7、9等)。然后,n通过来构建网格,n其中n消息的长度在哪里。第一行是原始消息。此后的每一行都是其上方的一行,但向左移动了1个字符,第一个字符向后移动。例如: Hello World ello WorldH llo WorldHe lo WorldHel o WorldHell WorldHello WorldHello orldHello W rldHello Wo ldHello Wor dHello Worl 然后,将NW到SE对角线上的每个字母放入一个新字符串中: Hello World H ello WorldH l llo WorldHe o lo WorldHel W o WorldHell r WorldHello d WorldHello e orldHello W l rldHello Wo (space) ldHello Wor …

3
使用箭头键浏览文本
背景 大多数(半途而废的)文本编辑器允许您使用箭头键导航文本。向上和向下允许您浏览行,同时左右移动一条线但也可以环绕。此外,如果该行短于光标的X位置,则光标会出现在该行的末尾,但如果您继续向上或向下移动,则会返回到相同的X位置。以下视觉说明可能会有所帮助: 运动实例 一个简单的文本示例可能看起来像这样。光标将插入在此文本中的两个字符之间或结尾。 ----- --- ------ let's put the cursor here: X----- --- ------ move down (v): ----- X--- ------ move left (<): -----X --- ------ v ----- ---X ------ v (notice how the X position of the cursor has been maintained) ----- --- -----X- ^ ----- ---X ------ …
11 code-golf 

4
识别三角形
计算图片中的三角形数量是大脑测试中常用的一项任务。您将获得一张包含由三角形组成的形状的图片。然后,您必须在图片中找到所有可能的三角形。 任务 系统会以您选择的格式为您提供行列表。然后,您必须输出在其中找到的三角形的列表 输入值 您会得到行的列表,每行都有四个整数坐标(例如x1 y1 x2 y2)。您可以选择输入格式,只要记录清楚即可。例子: 0 4 8 1 0 4 9 5 8 1 9 5 2 8 0 4 9 5 2 8 [[0, 4, 8, 1], [0, 4, 9, 5], [8, 1, 9, 5], [2, 8, 0, 4], [9, 5, 2, 8]] 这是与图像相同的输入: 另一个带有交叉点(仅一种格式以节省空间): …

7
用户评分的代码高尔夫-拉丝钻石[实验性]
这种挑战的表现或多或少类似于传统的代码高尔夫。唯一的区别在于,用户无需按字符或字节数对答案评分,而是将权重分配给 注释中的不同字符,并且累积权值最低的程序将获胜。 挑战 您的任务是编写一个程序,该程序采用字符串并打印菱形,其中第一个字符从中心开始,随后的字符占据与最后放置的字符集正交的空白空间。空格()将用于填充。 例如输入CAT将产生 T TAT TACAT TAT T 并()会产生 ) )() ) 并 desserts会产生 s sts strts strerts streserts stressserts stressesserts stressedesserts stressed desserts stressedesserts stressesserts stressserts streserts strerts strts sts s 并且9会产生9。 细节 该代码只能包含可打印的ASCII和换行符。(请参阅下面的原因。) 输入/输出应通过stdin / stdout进行,或者,如果不可能,则使用类似的替代方法。 您可以假设输入字符串仅包含可打印的ASCII(包括空格)。 不含有钻石图案的任何部分开头的空格的列不输出允许。允许使用任意数量和组合的尾随空格。 输出中可能会选择性地包含尾随换行符。 您可以根据需要编辑答案。 计分 所有代码必须仅使用换行符和95个可打印的ASCII字符编写: !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ (不允许使用令人讨厌的选项卡,因为Stack Exchange将它们显示为代码块中的空格。) 这96个字符中的每个字符都有一个与之关联的权重值。默认情况下,所有权重均为97。 …

3
解决2x2特征系统
对于那些具有线性代数背景的人来说,挑战就这么简单:确定给定复数2x2矩阵的特征值和特征向量。您可能会跳过I / O详细信息等的挑战。对于那些需要对本征系统进行一些复习的人,请继续阅读。 背景 矩阵A的特征方程定义为 det| A - λI | = 0 其中λ是复数(标量)参数,I是单位矩阵,det | ... | 是决定因素。左侧求值为λ的多项式,即特征多项式,在2x2矩阵的情况下,该多项式是二次的。这个特征方程的解决方案是特征值的甲,我们将表示为λ 1和λ 2。 现在,特征向量 v 我的一个满足 A vi = λi vi 对于每一个λ 我,这给你两个方程的两个未知数的系统(的成分v 我),它可以很容易地解决。您会注意到系统实际上是未指定的,特征向量的大小不是由等式确定的。通常,我们将希望对特征向量进行归一化,即√(| x | 2 + | y | 2)= 1,其中x和y是向量分量,| x |。2是X乘以其复共轭。 注意,特征值可以是简并的,即,λ 1 =λ 2。在这种情况下,您可能无法满足具有两个线性独立特征向量的单一方程组。 挑战 给定具有复杂元素的2x2矩阵,请确定其两个(可能相同)特征值和每个特征值的归一化特征向量。结果数字必须精确到至少3个(十进制)有效数字。您可以假定任何矩阵元素的实部和虚部都在[-1,1]范围内。 您可以编写函数或程序,通过STDIN,命令行参数,提示或函数参数进行输入。您可以将结果输出到STDOUT,对话框或作为函数返回值。 您可以使用任何方便(但明确)的字符串或列表格式进行输入和输出。您还可以在成对的浮点数或复杂类型之间进行选择,以表示各个数字。 您不得使用内置函数来求解本征系统(如Mathematica …

11
二进制加密
这是基于xkcd#153的。 制作一个带有2个参数的程序或命名函数,每个参数是一个字符串或字节或字符的列表或数组。第二个参数将仅包含从中提取的字符lrfu(或等效的ASCII字节)。应该将其解释为要对由第一参数表示的位序列执行的一系列指令。 执行的处理必须等同于以下内容: 将第一个参数转换为通过串联每个字符的位组成的单个位串(解释为7位ASCII,8位扩展ASCII或标准Unicode编码之一)。例如,如果第一个参数是"AB"那么这将是一个10000011000010(7位),0100000101000010(8位或UTF-8),00000000010000010000000001000010或01000001000000000100001000000000(UTF-16在这两个字节排列顺序)等。 对于第二个参数中的每个字符,依次执行相应的指令: l将位串左移一位。例如10000011000010变为00000110000101。 r将位串右移一位。例如10000011000010变为01000001100001。 f翻转(或反转)位串中的每个位。例如10000011000010变为01111100111101。 u反转位串。例如10000011000010变为01000011000001。 将位字符串转换为ASCII字符串,每位使用一个字符。例如10000011000010变为"10000011000010"。这是因为并非所有7/8位的集合都分配有一个字符。 示例(在Python中): >>> f("b", "rfu") 01110011 它变成"b"8位ASCII二进制表示形式01100010,向右旋转(00110001),翻转每个位(11001110),然后反转(01110011)。 灵活性 其它字符可以是用来代替字符l,r,f,和u,但他们必须清楚地记录在案。 计分板 感谢@Optimizer创建以下代码段。要使用,请单击“显示代码段”,滚动到底部,然后单击“►运行代码段”。 显示代码段 var QUESTION_ID = 45087; var answers = [], page = 1;var SCORE_REG = /\d+(?=[^\d&]*(?:<(?:s>[^&]*<\/s>|[^&]+>)[^\d&]*)*$)/;function url(index) {return "http://api.stackexchange.com/2.2/questions/" + QUESTION_ID + "/answers?page=" + index + "&pagesize=100&order=desc&sort=votes&site=codegolf&filter=!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe";}function getAnswers() {$.ajax({url: url(page++),method: "get",dataType: …

2
可达的蛇方向数
这个挑战与Snake游戏无关。 想象一条通过画一条水平线形成的2D蛇n。在其身体的整数点处,这条蛇可以将其身体旋转90度。如果我们将蛇的前面定义为最左端,则旋转将移动蛇的后部,而前部将保持原位。通过反复旋转,它可以制成许多不同的蛇形体。 规则 蛇的身体的一部分不能与另一部分重叠。 蛇的身体任何部分之间都不得重叠,必须达到最终方向。在此问题中,触摸的两点被视为重叠。 我认为蛇及其反面是相同的形状。 任务 直到旋转,平移和镜像对称,总共可以制造出多少种蛇形体? 蛇体部分旋转的示例。想象一下n=10,蛇处于直线的起始方向。现在,将点4逆时针旋转90度。我们拿到的蛇从 4以10垂直趴(该蛇的尾巴)和蛇从0到4水平放置。蛇现在的身体成一个直角。 这里有一些感谢MartinBüttner的例子。 我们从水平蛇开始。 现在我们从位置4旋转。 在此方向旋转之后,我们结束了。 现在让我们考虑另一条蛇的这种取向。 现在我们可以看到非法移动,该移动在旋转过程中会引起重叠。 得分了 您的分数是n我的计算机在不到一分钟的时间内可以解决该问题的最高分。 当旋转发生时,它将随蛇一起移动一半。我们确实要担心在旋转过程中旋转的任何部分是否会与蛇的一部分重叠。为简单起见,我们可以假定蛇的宽度为零。您只能在蛇形的特定点上沿逆时针方向最多旋转90度。因为,您永远无法将蛇完全折成两段,因为那样会导致在同一方向上的同一点发生两次旋转。 无法制作的形状 不能制作的形状的一个简单例子是大写字母T。一个更复杂的版本是 (感谢Harald Hanche-Olsen的例子) 在此示例中,所有相邻的水平线和垂直线都相距1。因此,没有从这个位置采取法律行动,并且由于问题是可逆的,因此没有办法从起始位置到达那里。 语言和图书馆 您可以使用任何具有免费编译器/解释器/等的语言。适用于Linux以及任何可免费用于Linux的库。 我的机器 时间将在我的机器上运行。这是在AMD FX-8350八核处理器上的标准ubuntu安装。这也意味着我需要能够运行您的代码。因此,请仅使用易于使用的免费软件,并请提供有关如何编译和运行代码的完整说明。

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.