编程拼图和代码高尔夫

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

22
生成斯托尔序列
我正在学习Ruby,并编写了我的第一个平凡的代码来解决这个问题。 面临的挑战是,以产生第一Ñ所述的元件斯托尔序列,小号,其被定义如下: S [0] = 1 S [n]是无法表示为序列中两个不同的先前元素之和的最小数字。 因此,该序列以1、2、4、7和10开头。下一个元素为13,因为11(= 1 + 10)和12(= 2 + 10)是先前元素的总和,但13不是。 我正在寻找最短的代码。我自己使用Ruby,长度为108个字符,但是也许我会等着看别人提出什么之后再发布它?

1
小钻石方形算法
菱形正方形算法是分形地形(高度图)生成算法。您可以在此处找到不错的说明: http://www.gameprogrammer.com/fractal.html(用作参考。) http://www.playfuljs.com/realistic-terrain-in-130-lines/(很棒的JS实现,也许您可​​能想偷走他的渲染器。在这里看看这种算法可以实现http:// demos的功能。 playfuljs.com/terrain/。) 通常的想法是,您有4个角作为种子(a),并通过平均这四个角并添加一个随机值(例如,介于-0.5和0.5之间)来计算中心点的高度(b)。如果将其应用于网格,您将再次获得菱形网格(正方形斜面45°),并重复相同的(c,d),但随机范围会变小,例如-0.125至0.125等。 您的程序必须接受许多输入: 一个整数l=1,2,3,...,用于确定具有边长的正方形网格的大小2^l+1。在l=10你将不得不储存约一万个号码。 每个角有四个种子(浮点数) 0<h<1确定粗糙度的参数(H在链接中),该粗糙度表示随机范围最初的大小 a,b代表随机范围的初始下限和上限的参数,并h在每个细化步骤中相乘。(随机数在a和之间统一选择b。 输出必须包含完成的2d网格。 因此,粗略算法如下所示: Create a square grid with sidelength 2^l+1 Place seed values in the corners Repeat: | Perform square steps | Refine Range: a = a*h; b=b*h; | Perform diamond steps | Refine Range 您应该注意一个细节:在网格的边界处,您将只有菱形的三个顶点,因此,您也应该仅计算这三个点的平均值。 一些示例的可视化(请告诉我们您使用了哪些参数)是可选的,但值得赞赏,并且当然不会增加字节数。 可以在以下位置找到该算法的稍微变化的实现:并行投影体素地形生成器 我在javascript中创建了一个小的绘图函数,用于将2D高度图替换为灰度图像。http://jsfiddle.net/flawr/oy9kxpsx/ 如果任何人都喜欢3D并可以编写脚本以3D方式查看地图,请告诉我!=)
12 code-golf  random  grid 

5
计算正方形的Delacorte数
挑战:以任何语言实现Delacorte数的计算。最短的代码获胜。 对于不同整数的一个给定的方阵1..n²(可能边长Ñ在3和27之间至少),其德拉科特数是产品的总和满足gcd(A,B)×distance²(A,B)为每个不同的对整数{a,b}。 以下示例显示了Delacorte数为160的3×3正方形。 3 2 9 4 1 8 5 6 7 在这个正方形中,我们有36个不同的对来计算,例如对4和6:gcd(4,6)× 距离 ²(4,6)= 4 另一个用于测试的示例正方形-的Delacorte数为5957: 10 8 11 14 12 21 4 19 7 9 5 13 23 1 16 18 3 17 2 15 24 22 25 6 20 Delacorte Numbers摘自该编程竞赛 -有关详细信息,请参阅此处。竞赛于2015年1月结束。这真是太好了! 规则: 必要的换行符计为1个字符。您可以在打高尔夫球的解决方案中添加换行符,但是只有在必要时才使用该语言进行计数。 您可以选择处理输入和输出的方式,而不必计算必要的语言框架,例如标准包含或主函数标头。仅实际的代码计数(包括快捷方式/别名定义),例如此C#示例: namespace System …
12 code-golf  math 

2
用相同的总和对数字分组
给定一个正方形的数字(0-9),您的任务是输出将数字分组的一种方式,以便: 每个数字都是一组的一部分 所有组的位数相同 所有组都由一个多边形状的边界界定(这意味着组中的每个数字至少要与同一组的另一位数字相邻[左,右,上,下],除非每个组都有1个元素)。 所有组的总和相同 输入网格将始终是一个正方形:您可以选择任何输入法(包括为函数或方法提供参数)。另外,输入将提供程序应将数字分组的组数。 输入示例: 假设您的输入格式为stringOfDigits numberOfGroups。 输入示例为: 156790809 3 会转换成(的网格sqrt(9) * sqrt(9)) 1 5 6 7 9 0 8 0 9 您必须将其分为3组,每组应包含9 / 3 = 3具有相同总和的元素。 输出:输出应为数字字符串,带有可选的空格和换行符以进行格式化,每个数字后跟一个字母a-z表示其组。numberOfTotalDigits / numberOfGroups每个组中应该确切地包含元素。您将不必将某物分成26个以上的组。 输出示例: 1a 5a 6b 7c 9a 0b 8c 0c 9b 请注意,更换所有a以s bS和bs的as是同样有效。只要每个组都用不同的字母表示,则输出有效。 另外,我希望大多数程序都可以输出类似的东西,因为换行符/空格是可选的: 1a5a6b7c9a0b8c0c9b 在这种情况下,将组a,b或的所有数字相加为c15。此外,所有组都由某个多边形绑定。 无效的输出: 1a 5a …
12 code-golf 

7
反转极性
这项挑战的目的是编写一个满足以下条件的程序: 该程序不是回文的,或者实质上不是回文的(意味着可以删除字符以使其成为回文,而无需更改程序的效果)。 该程序不是对合(意味着在其输出上运行时不会产生其原始输入) 所述逆极性程序是正常的程序的逆; 因此,当反向程序在普通程序的输出上运行时,它将返回原始输入。 什么是反向极性是什么意思?嗯,这在语言之间是不同的。 对于大多数非esolang语言,这意味着在单个操作中反转子操作的顺序,反转参数的顺序,以及反转硬编码列表/数组/元组/字典/堆栈/队列/等的内容颠倒代码块和独立行的顺序(但不改变块内的行) 例子: Haskell: x`mod`y-> y`mod`x; zipWith ((*3).(+)) [1,2,3] [4,5,6]->zipWith ((+).(*3)) [6,5,4] [3,2,1] Python:2**3-> 3**2; for x,y in [(1,2),(3,4),(5,6)]->for y,x in [(6,5),(4,3),(2,1)] 对于具有1个字符的功能的语言(例如Pyth,APL),只需反转指令字符串 对于BF等一维esolang,请颠倒说明或交换极性。极性交换是[]-> {},+-> -,--> +,>-> <,<-> >,.-> ,和,-> .(但不能同时使用) 对于像Befunge这样的二维esolang,您可以在x轴或y轴或对角线上执行反射,旋转180度,或者将反射和旋转结合起来 允许交换运算,但回文运算则不允许:2*x很好,但是x+x很糟糕。极性反转的定义很松散,但要根据判断来判断。目的不是找到最聪明的漏洞,而是找到最聪明的解决方案。 这是一次人气竞赛,因此非常聪明的漏洞可能很流行,但请尽量避免这种挑战。一旦至少有10个解决方案的至少1个投票,并且至少有1个解决方案的投票数大于至少1个投票的提交数,则将宣布获胜者;或在1个月内(以先到者为准)。这是我面临的第一个挑战,因此请尽量公平并给我建设性的反馈,但也要让我知道这是一个不合理的挑战,还是以某种方式被错误归类或模棱两可。如果您对某种语言所提出的疑问不适合我在此处提出的任何建议,请发表评论,如果强烈要求特定的澄清或规则更改,我会屈服于社区的意愿。 更新 距比赛开始已经整整1个月了(我只是偶然地检查了一下,不知道自己确实准时参加了比赛)。由于这是一场人气竞赛,因此优胜者(以压倒性优势)是 Pietu1998-Befunge。即使最下面的部分(文本反向器和反向字母)都是对合,编码器/解码器也不是,因此在那里没有问题。(在我心中)奖励点,用于设法在中间写下“ BEFUNGE”。我个人喜欢Zgarb的Theseus解决方案的新颖性,因为该语言看起来很酷(如果受限制的话)。感谢大家的参与,当选出优胜者时,我将完全开放这场比赛,并欢迎以后提交。

1
组织万圣节糖果-第4洞
如果您感到困惑,请参见孔#1。 每个孩子在万圣节收集糖果桶后会做什么? 按类型和大小排序,当然是1! 挑战 给定一个袋装了各种形状和大小的糖果,请根据以下说明从左到右对糖果进行排序: 第一:糖果的数量(所以一个糖果中的5个比另一个糖果中的4个要多) 第二个(如果在第一个之后有平局):如果数量相同,则具有更大内部区域(基于字符数)的糖果将排名更高。 如果在第二种排序之后仍然有平局,则可以选择第一种。 输入值 您将通过stdin得到糖果。散落。请参阅下面的示例。 输出量 以正确的顺序输出订购的糖果。注意,糖果,应始终放在非常整齐的列来安抚你的强迫症的鱼2。相同类型的糖果应直接放在彼此下面。请参阅下面的示例。 “内部区域”是什么意思? 一块糖果的内部面积由组成整个糖果的总字符来度量。 “边界”内的任何空格都被视为糖果区域的一部分。 边框是任何相连的字符循环,每个字符对角线或相邻。 例如, +--------+ | | | | | | | | +--------+ 具有比 XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX 即使总体上字符较少。 例子 输入: _ \| |/ _ _ lllllll -*------------*- -\ /- lllllll lllllll lllllllll | /\ /\ …

8
计算巨魔通行费以安全通过
受/puzzling//q/626启发 在您的冒险旅程中,您会到达一系列必须跨越的7座桥梁。每座桥下都有一个巨魔。为了过桥,您必须首先为巨魔提供一定数量的蛋糕,占所携带蛋糕的百分比。因为这些都是善意的巨魔,所以它们会把一定数量的蛋糕还给您。 每天开始时,当地巨魔国王设置每个旅行者必须支付的蛋糕税百分比,然后将巨魔蛋糕退款-每个巨魔必须退还给旅行者的蛋糕数量。 您的工作是计算当天在给定条件下通过所有7个巨魔桥所需的最少蛋糕数量。 假设: 输入两个参数:蛋糕税百分比(0到100之间的整数)和巨魔蛋糕退款。 没有人,甚至没有巨魔,都想要被另一只巨魔部分吃掉的蛋糕。如果剩下的只是一块蛋糕,那么巨魔就会得到它。 如果一个巨魔接受了蛋糕税,但是又不得不把所有蛋糕还给你(剩下的蛋糕比以前少或少),它就会生气并吃掉你和你的蛋糕。 每个巨魔必须至少保留一个完整的蛋糕。 您最多只能携带100个蛋糕。 您需要结束当前所在的日子或所有7座桥梁的另一端。 挑战: 编写一个完整的程序以输出当天要行驶的最小蛋糕数,如果今天不能安全行驶,则输出零个蛋糕-您将等待观察明天的数字。 输入应作为标准输入,命令行参数或文件输入传递。 最短的代码(字节数)获胜。 例: 蛋糕税25%,巨魔蛋糕退还2。 从 巨魔1:(19 * 0.75)= 14.25 巨魔1:(14 + 2)= 16之后开始 巨魔2之前:(16 * 0.75)= 12 巨魔2之后:(12 + 2)= 14 等等 19个蛋糕-> 16-> 14-> 12-> 11-> 10-> 9-> 8 18个蛋糕-> 15-> 13-> 11-> 10-> 9-> 8-> …
12 code-golf 

11
做一个序列
如果此序列中任何两个连续数字之间的差为-1或1并且其第一个元素为0,则整数序列为一个序列。 更精确地说:a1,a2,...,an是一个单序列,如果: For any k (1 ≤ k < n): |a[k] - a[k+1]|=1, a[1]=0 输入值 n -序列中的元素数 s -序列中元素的总和 输出量 如果可能的话,一个单序列集/列表/数组/等的长度n加上元素的总和s 空集/列表/数组/等(如果不可能) 例子 对于输入8 4,输出可以是[0 1 2 1 0 -1 0 1]或[0 -1 0 1 0 1 2 1]。可能还有其他可能性。 对于input 3 5,输出为空[],因为无法完成。 规则 这是一个代码高尔夫,最短答案以字节为单位。提交的内容应为程序或功能。输入/输出可以以任何标准方式给出。

3
9洞标准高尔夫-开球
已经有一个9洞挑战赛(这里还有另一个挑战),但是去年真是太糟糕了。而且,我只待了2个月(尽管似乎永远)。而且有很大的不同。 排行榜:(请注意,孔的权重尚未确定) +---------------+------------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+ |Competitor | Language | Hole 1 | Hole 2 | Hole 3 | Hole 4 | Hole 5 | Hole 6 | Hole 7 | Hole 8 | Hole 9 | Total | +----------------------------------------------------------------------------------------------------------------------+ |Dennis |CJam | | 31 | | | | | | | | …

4
一天中的时间表不确定性
假设您的闹钟在一个早晨将您叫醒,但您打了贪睡使您可以再睡8分钟。当它再次响起时,您会苦苦地起身去洗个澡,估计需要15到17分钟。然后,您只需刷牙2分钟,然后穿好衣服,大约需要3至5分钟。最后,您在6至8分钟内吃了一份匆忙的早餐,然后跑出了门。 我们可以将该时序表示为8 15-17 2 3-5 6-8。 鉴于您早上的例行活动不确定,自您第一次醒来以来在特定的分钟数内完成每项任务的概率是多少? 假设每个任务需要花费几分钟,我们可以绘制不确定时间跨度的每种可能组合(例如,刷牙需要3、4和5分钟)。该图表显示了所有27种可能性,时间在右边增加,每项N分钟的任务用(N-1)短划线和一个竖线表示,以标记其结束时间。字符之间存在微小的边界,因此8和9列之间的间隔8 min 59 sec变为9 min。 1111111111222222222233333333334 1234567890123456789012345678901234567890 <-- Minute -------|--------------|-|--|-----| -------|--------------|-|--|------| -------|--------------|-|--|-------| -------|--------------|-|---|-----| -------|--------------|-|---|------| -------|--------------|-|---|-------| -------|--------------|-|----|-----| -------|--------------|-|----|------| -------|--------------|-|----|-------| -------|---------------|-|--|-----| -------|---------------|-|--|------| -------|---------------|-|--|-------| -------|---------------|-|---|-----| -------|---------------|-|---|------| -------|---------------|-|---|-------| -------|---------------|-|----|-----| -------|---------------|-|----|------| -------|---------------|-|----|-------| -------|----------------|-|--|-----| -------|----------------|-|--|------| -------|----------------|-|--|-------| -------|----------------|-|---|-----| -------|----------------|-|---|------| -------|----------------|-|---|-------| -------|----------------|-|----|-----| -------|----------------|-|----|------| -------|----------------|-|----|-------| 1234567891111111111222222222233333333334 <-- Minute 0123456789012345678901234567890 显然,该例程最多可能花费40分钟,至少花费34分钟。 问题是,在特定的某个分钟(例如第29分钟),您执行这5个任务中的每一个的机会是多少?假设每个不确定的时间范围均匀地分布在确切的整个分钟内。因此4-7任务有25%的机会需要花费4、5、6或7分钟。 从图表中可以看出,在第29分钟有一个... …

2
程序员花园
程序员花园 作为专业的软件开发人员,您不会冒险将自己暴露在强烈的非人工阳光下,但是您对鲜花也情有独钟,并希望全年保持花园良好的状态。 为此,每个月都会雇用一名园丁来整理房子脚下的花坛。但是,您需要确保园丁工作正常,并为辛勤工作的同事制定适当的薪酬。自然,软件解决方案是最好的。 输入值 将为您的程序提供输入,以描述花坛当前的状态以及需要删除的项目的详细信息。该程序必须输出没有混乱的花园,并打印出园丁的工资明细。输入可以来自STDIN,也可以作为单个命令行参数。 输入的第一行格式为 width height unwanted_item_type_count width花圃的宽度在哪里,花坛height的高度(都是ASCII字符),并unwanted_item_type_count告诉您接下来将出现几行,其中包含要从花园中移除的物品类型的描述。 每种不需要的商品类型的每一行的格式为 width height string_representation name fee_per_item 其中width是项目的宽度,是项目height的高度(均以ASCII字符表示),string_representation是不带换行符的项目的字符串表示形式,是项目name类型的标识符(空格将由下划线替换),以及fee_per_item是指园丁为清除每种物品而需要支付的费用。 例如 3 2 .R.\|/ rouge_flower 3 表示name的项目类型,该项目类型rouge_flower需要花费3来删除,如下所示: .R. \|/ 这些项目将不包含空格,并且任何项目都不能具有完全由点组成的边框,并且字符串表示形式也将是所述的确切大小。因此,以下所有都是无效输入: 3 1 ( ) space 0 1 1 . dot 0 2 1 .! bang 0 3 2 .@.\|/. plant 0 请注意,0是有效费用(费用始终是大于-1的整数)。 还要注意,花坛主要由点(.)而不是空格组成,您可以放心地将空格用作所有输入的定界。花坛总是以点本身为界。 …
12 code-golf 

7
混合基数转换
背景 这里的大多数人应该熟悉几种基本系统:十进制,二进制,十六进制,八进制。例如,在十六进制系统中,数字12345 16将代表 1*16^4 + 2*16^3 + 3*16^2 + 4*16^1 + 5*16^0 请注意,我们通常不希望基数(此处为16)从数字更改为数字。 这些常用的位置系统的一般化使您可以为每个数字使用不同的数字基础。例如,如果我们在十进制和二进制系统之间切换(从最低有效数字的底数为10开始),则数字190315 [2,10]表示 1*10*2*10*2*10 + 9*2*10*2*10 + 0*10*2*10 + 3*2*10 + 1*10 + 5 = 7675 我们将此基准表示为[2,10]。最右边的基数对应于最低有效数字。然后,当您浏览数字(左边)时,您要经过底数(左),如果位数比基数多,则四处循环。 有关更多阅读,请参阅Wikipedia。 挑战 编写一个程序或函数,给定一个D由输入基数I和输出基数组成的数字列表O,将所表示的整数D从base 转换I为base O。您可以通过STDIN,ARGV或函数参数获取输入,然后返回结果或将其打印到STDOUT。 您可以假设: 在数字I和O都大于1。 在I与O非空。 输入数字在给定的基数中有效(即,没有比其基数大的数字)。 D可以为空(表示0)或可以有前导零。您的输出不应包含前导零。特别是,表示结果的结果0应作为空列表返回。 您不得使用任何内置或第三方基本转换功能。 这是代码高尔夫球,最短的答案(以字节为单位)获胜。 例子 D I O Result [1,0,0] [10] [2] [1,1,0,0,1,0,0] …

6
整数情绪
写一个程序或函数“起反应”,以一个给定的整数Ñ(通过函数输入参数/ ARGS /标准输入) 该程序不在乎负数,喜欢偶数,不喜欢奇数,而害怕数字13。 它应该输出以下内容: 如果n <0: -------------------------- | | | | (| _ _ |) | | | | | | | | | oooooooooo | | | | | | | -------------------------- 如果n%2 == 0且n> -1: -------------------------- | | | | (| ^ ^ |) | | | …

6
实现一个8位加法器
挑战 实现一个函数,该函数接受值范围为0-255的两个整数,并返回这些整数的总和256。您只能使用按位取反(〜),按位或(|),移位运算符(>>,<<) ,以及赋值(=)。 您不能使用的东西包括(但不限于) 加,减,乘和除 循环 条件语句 函数调用 最好使用二进制或二进制取反以及移位操作。如果出现平局,则最受欢迎的解决方案将获胜。与往常一样,存在标准漏洞。 这是一个简单的2位加法器的示例。它使用77个二进制取反,28个二进制“或”和2个移位,总共得到107分(可以通过运行带有C的预处理器来看到gcc -E)。通过删除#defines并简化结果表达式,可以使其效率更高,但是为了清楚起见,我将其保留了下来。 #include <stdio.h> #define and(a, b) (~((~a)|(~b))) #define xor(a, b) (and(~a,b) | and(a,~b)) int adder(int a, int b) { int x, carry; x = xor(and(a, 1), and(b, 1)); carry = and(and(a, 1), and(b, 1)); carry = xor(xor(and(a, 2), and(b, 2)), …

15
在没有比较运算符的情况下比较C或C ++中的两个整数
产生最短的程序,该程序将两个有符号整数作为输入(通过stdin或作为参数)并显示3个不同的输出,具体取决于第一个数字是(1)大于,(2)小于还是(3)等于第二个数字数。 赶上 您不能在程序中使用以下任何一项: 该标准比较操作符:<,>,<=,>=,==,!=。 任何库文件除conio,stdio或iostream。 任何非ASCII或不可打印的ASCII字符。 赢家 字符数最少的程序获胜。

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.