编程拼图和代码高尔夫

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

6
计算RFC 2550时间戳
RFC 2550是一个讽刺性提案(于1999年4月1日发布),其时间戳可以节省空间的ASCII表示形式,可以支持任何日期(甚至包括在Universe开始之前的日期以及在Universe预计结束之后的日期)。用于计算符合RFC 2550时间戳是作为算法如下(注意:所有范围包括开始,但排除端- 0至10000的所有的装置n,其中0 <= n < 10000): 年份格式 0到10,000年:一个四位数的十进制数字,在左边用零填充。 10,000到100,000年:5位数的十进制数字,以字符A为前缀。 100,000至10 30年:年份的十进制数字,以大写ASCII字母为前缀,其英文字母的索引等于十进制年份的位数,减5(B代表6位数字的年份,C代表7的年份)位数年份等)。 10 30到10 56年:与10,000到10 30相同的格式,以A开头的字母,并^在字符串前面加上插入号()(因此,10 30表示为^A1000000000000000000000000000000,10 31表示为通过^B10000000000000000000000000000000)。 10 56到10 732年:年份以两个插入符号和两个ASCII大写字母为前缀。大写字母组成一个以26为基数的数字,代表年份中的数字数量,减去57。 10 732年及以后:使用10 56到10 732的相同格式,并在必要时通过添加附加的脱字号和大写字母来扩展格式。 BCE年(0年之前):计算年的绝对值的年字符串。然后,将所有字母替换为其以26为底的补码(A <-> Z,B <-> Y等),将所有数字替换为其以10为底的补码(0 <-> 9、1 <-> 8,等),并用感叹号(!)替换插入符号。如果年份字符串是4位或更少(即-1到-10,000),请在正斜杠(/)之前加上。如果年份字符串未以正斜杠或感叹号作为前缀,请在星号(*)前面加上。 月,日,小时,分钟和秒:由于这些值最多只能是2位数字,因此它们按重要性的降序简单地附加在年份字符串的右边,并在必要时用零填充2位数字的字符串。 更高的精度:如果需要更高的精度(以毫秒,微秒,纳秒等形式),则将这些值用0到3位数字进行左填充(因为每个值都是1/1000前一个值,因此最多为999)。并以重要性从小到大的顺序附加到时间戳的末尾。 这种格式的优点是词法排序等效于相应时间戳的数字排序-如果时间A在时间B之前,那么当应用词法排序时,A的时间戳将在B的时间戳之前。 挑战 给定任意长的数字列表(例如[year, month, day, hour, minute, second, millisecond],按重要性从高到低的顺序对应于时间值),请输出相应的RFC 2550时间戳。 规则 解决方案必须适用于任何给定的输入。唯一的限制应该是时间和可用内存。 输入可以采用任何合理,方便的格式(例如,数字列表,字符串列表,由单个非数字字符分隔的字符串等)。 …
26 code-golf  string  date 

22
高尔夫文字成DNA
文字转DNA高尔夫 挑战 将输入转换为DNA输出。 算法 将文本转换为ASCII码点(例如codegolf-> [99, 111, 100, 101, 103, 111, 108, 102]) 将ASCII码串在一起(例如99111100101103111108102) 转换为二进制(例如10100111111001101001011010001000011001101011011110000110010111111011000000110) 将0s 填充到末尾以形成偶数个字符(例如101001111110011010010110100010000110011010110111100001100101111110110000001100) 更换00用A,01用C,10用G,并11用T(例如GGCTTGCGGCCGGAGACGCGGTCTGACGCCTTGTAAATA) 输出量 测试用例 codegolf > GGCTTGCGGCCGGAGACGCGGTCTGACGCCTTGTAAATA ppcg > GGCTAATTGTCGCACTT } > TTGG (padding) 技术指标 这是代码高尔夫 您的程序必须在输入中接受空格。 您的程序必须适用于codegolf。

30
最常用的词是什么?
最常用的词是什么? 给定一个句子,您的程序必须遍历整个句子,计算每个单词的出现频率,然后输出最常用的单词。由于句子没有固定的长度,因此可能会很长,因此您的代码必须尽可能短。 规则/要求 每个提交应该是完整的程序或功能。如果它是一个函数,则只需将函数调用添加到程序底部即可使其可运行。其他任何内容(例如C中的标头)都必须包括在内。 您的语言必须有免费的口译/编译器。 如果可能,请提供指向可以测试您的程序的站点的链接。 您的程序不得向写入任何内容STDERR。 您的程序应从STDIN(或使用您语言中最接近的替代语言)输入。 禁止出现标准漏洞。 你的程序必须是不区分大小写(tHe,The和the所有有助于计数the)。 如果没有最常见的单词(请参见测试案例3),则您的程序应不输出任何内容。 “单词”的定义: 您可以通过在空格处分割输入文本来获得单词列表。输入将永远不包含任何其他类型的空格,而不是普通空格(特别是没有换行符)。但是,最后的单词应仅包含字母数字(az,AZ,0-9),连字符(-)和撇号(')。您可以通过在拆分单词之前删除所有其他字符或将它们替换为空格来实现此目的。为了保持与规则的先前版本兼容,不需要包括撇号。 测试用例 The man walked down the road. ==> the ----- Slowly, he ate the pie, savoring each delicious bite. He felt like he was truly happy. ==> he ----- This sentence has no most frequent word. ==> …

15
KOTH:每个硬币都有两个面
最终结果可用 介绍 在我以前以重主题(幻想战争,全球性大流行 ……)进行KOTH之后,我又回来了一款全新的轻松游戏。这次,您将面临“类似于棋盘游戏”的局面。一堆倒置的硬币放在一张大桌子的中央,您决心分担赃物! 词汇表 硬币:可以翻转或翻转的令牌。 未翻转:硬币放置在桌子上,其价值朝下。这是硬币的默认状态。 翻转:硬币放在桌上,其价值朝上。 本地:指您的一堆硬币。 全局:指位于中心的一堆硬币。 原理 在游戏开始时,每个玩家从0点和0个硬币(翻转或未翻转)开始。该游戏是回合制的。在回合中,玩家最多可以执行3个动作,与桌子中央的一堆硬币,自己的一堆硬币或与其他玩家进行交互。 游戏开始时会随机定义播放顺序。玩家在参数列表中的顺序代表转牌顺序,在该列表中从左到右。如果您是两边的最后一个,则“下一个”和“上一个”分别带有循环,分别表示“在该列表的右侧”和“在该列表的左侧”。 游戏持续50回合,或者直到玩家回合结束时中心处有0个硬币为止(这意味着即使您在第一个动作之后堆成空,您也将完成3个动作,并且您可以放回硬币以让游戏继续)。使用以下公式随机定义全局硬币的起始数目: (2 ^ nb_players) + (nb_players * 10) - random(1 + (nb_players ^ 2))` 每个动作都会使您获得积分(或使您输掉一些),并且在游戏结束时,您拥有的每个硬币都会被添加到您的积分中(未翻转为-1,翻转为+2)。得分最高的玩家获胜。 控制器通过命令参数为您提供输入,而程序必须通过stdout输出。 句法 输入项 每次调用程序时,它将收到以下格式的参数: Round;YourPlayerId;Coins;PlayerId_Points_Flipped_Unflipped;PlayerId_Points_Flipped_Unflipped;... 轮次按1分索引。 输入示例 6;2;52;1_20_3_12;0_-2_0_1;2_12_1_0 在这里,您看到它是第六轮,您是玩家2。中央一堆有52个硬币。您有12点,1个倒装硬币和0个未倒装硬币。积分可以是负数。 输出量 您必须输出三个字符(无空格,无分隔符),每个字符对应于本轮将要执行的一个动作。字符的顺序决定了动作的顺序。您可以多次输出相同的动作。如果没有足够的硬币来完成操作,它将使用可用硬币的最大数量,并且仅对所使用的硬币计数。 N:不 1采取任何行动:从中央筹码中拿出 1个硬币[效果:+1局部不翻转/ -1点/ -1整体不翻转] 2:从中央堆中获取2个硬币[效果:+2局部不翻转/ -2点/ -2全局未翻转] 3:从中央筹码中取出3个硬币[效果:+3本地未翻转/ -3点/ -3全局未翻转] …

6
连接素数
挑战: 您将得到一个仅包含数字的字符串。您的任务是输出必须连接形成字符串的最小素数。如果这不可能,则输出0。 测试用例: 输入->输出: 252 -> 3 235 -> 2 92 -> 0 31149 -> 2

2
游程编码中的循环
考虑使用1和的一些二进制序列2,例如: 1, 2, 1, 1, 2, 2, 1, 2, 1, 2, 2, 1 ... 让我们写下其运行长度: 1, 2, 1, 1, 2, 2, 1, 2, 1, 2, 2, 1 ... _ _ ____ ____ _ _ _ ____ 1, 1, 2, 2, 1, 1, 1, 2, ... 在这种情况下,我们碰巧获得了另一个二进制序列。当然,不能保证(例如,如果我们重复该过程,则第三次运行将是3),但是让我们假设我们这样做了。 现在的问题是,我们是否可以找到一个序列,以便多次应用这种游程编码可以使我们返回原始序列?对于1的循环长度(即此变换的固定点),我们发现了Oldenburger-Kolakoski序列(OEIS条目A0000002): 1, 2, 2, …

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 - …

3
残数系统
就大量挑战而言,我认为这可能很有趣。 在此挑战中,我们将使用残数系统(RNS)对大整数执行加法,减法和乘法。 什么是RNS RNS是人们开发用于识别整数的多种方法之一。在该系统中,数字由一系列残差表示(它们是模运算后的结果(即整数除法后的余数))。在此系统中,每个整数都有许多表示形式。为了使事情简单,我们将限制事情,以便每个整数都唯一表示。我认为用一个具体的例子来描述正在发生的事情比较容易。 让我们看一下前三个质数:2、3、5。在RNS系统中,我们可以使用这三个数来唯一表示任何小于2 * 3 * 5 = 30的残数。采取21: 21小于30,因此我们可以使用将2、3和5修改后的结果来表示它(即,整数除以2、3和5之后的余数) 我们将使用以下整数序列来标识21: 21〜{21 mod 2,21 mod 3,21 mod 5} = {1,0,1} 因此,在我们的RNS系统中,我们将使用{1,0,1}而不是“ 21”。 通常给定整数n,我们将n表示为{ n mod 2,...,n mod p_k },其中p_k是最小素数,因此n小于等于或等于p_k的所有素数的乘积。 另一个例子,假设我们有3412。在这里我们需要使用2,3,5,7,11,13,因为2*3*5*7*11*13=30030而2*3*5*7*11=2310这太小了。 3412〜{3412 mod 2,3412 mod 3,3412,mod 5,...,3412 mod 13} = {0,1,2,3,2,6} 您会注意到,使用此系统,我们可以相对轻松地表示非常大的数字。使用{1,2,3,4,5,6,7,8,...}残基,我们可以表示最多{2,6,30,210,2310,30030,510510,9699690 ...}分别。(这是系列) 我们的任务 我们将使用这些残基对大数进行+,-和*。我将在下面描述这些过程。现在,这里是输入和输出规格。 输入项 您将通过stdin或function参数获得两个(可能非常大)的数字。它们将以基数为10的字符串给出。 为了进一步概述问题,我们将第一个输入n称为第二个输入m。假设n> m> …

30
将数字相加,将数字取反
给定一个数字> 0,输出所有位(1 .. n)串联并取反的和,然后将它们加起来。例如,当n = 6时: 数字1到6串联在一起: 123456 反转: 654321 将它们加在一起将得到:777777。另一个示例是n = 11: 1 2 3 4 5 6 7 8 9 10 11 > 1234567891011 和 11 10 9 8 7 6 5 4 3 2 1 > 1110987654321 将它们加在一起将得到2345555545332。这也称为A078262。 最短的代码胜出!

30
正负顺序
正负顺序 正负序列是从两个种子开始的序列,a(0)而b(0)。该序列的每次迭代都是该序列的前两个成员的加法和减法。即a(N) = a(N-1) + b(N-1)和b(N) = a(N-1) - b(N-1)。 目的产生无限的正负序列或K给出的第一步K。您可以使用给出K第一步的无限输出程序,生成器或函数/程序来执行此操作。输出顺序无关紧要,只要它是一致的即可。(即,b(K) a(K)或a(K) b(K),之间使用一些非数字,非换行符。)输出必须以输入开头。 测试用例 对于输入10 2(为a(0) b(0),这是第一个K方法(或无限方法的一个子节)的可能输出: 10 2 12 8 20 4 24 16 40 8 48 32 80 16 96 64 160 32 192 128 320 64 384 256 640 128 768 512 1280 256 1536 1024 2560 …

2
口红“ quine”
任务 以单个Unicode字符作为输入。 以也符合该规范的相同语言输出程序,但不包含输入字符。 如果你的程序与输入运行一个,然后输出程序,然后用输入运行b,程序就输出被允许的包含字符一个。但是,仍然不允许b出现在该程序中。换句话说,仅禁止输入程序的最新版本。 无论标题怎么说,都适用标准的奎因规则。 最短的程序获胜。程序必须至少一个字节长。 例 如果程序是ABCD。(#是注释) > slangi "ABCD" A EBCD # "FBCD" "JGGJ" "UGDKJGDJK" are all OK > slangi "EBCD" C ABGD # "EBGD" "UIHDAIUTD" are all OK > slangi "ABGD" B AFCD > slangi "AFCD" Z ABCD slangi虚拟语言的口译员在哪里。

6
1 + 1 = 10,1 + 2 = 3
在以10为底和以2为底的基础上编写一个函数或程序,使其无法执行简单的算术运算(加,减,乘和除)。 该函数将以数学表达式作为输入,并以正确的底数输出正确的结果。输入的n数字将由一个或多个运算符(+ - * /)分隔。 如果所有输入值仅包含0和1,则将所有值视为二进制。如果至少一位数字为2-9,则所有值均被视为以10为底。 规则: 您可以假设数字之间只有一个运算符(10*-1不会出现) 您可以假设没有括号。 普通运算符优先级(如果您有疑问,请尝试在Google计算器中使用表达式)。 您不能假设只会有整数 输入或输出中将没有前导零 您可以假设只会提供有效的输入 您可以假设所有输入值均为正(但减号运算符可能使负输出成为可能,1-2=-1和10-100=-10) 不接受REPL 您可以选择将输入作为单独的参数或作为单个参数,但是输入必须以正确的顺序进行。 也就是说,用户可以代表1-2与输入参数1,-,2,但不1,2,-。 您必须接受+ - * /输入中的符号,不能接受plus,minus等等。 您必须支持浮点值(或不超过您的语言的最大限制,但是不支持仅整数)。 eval 被接受 例子: 1+1 10 1010+10-1 1011 102+10-1 111 1+2+3 6 10*10*10 1000 11*11*11 11011 10*11*12+1 1321 10.1*10.1 110.01 20.2*20.2 408.04 10/5 2 110/10 11 Also accepted (optional …

24
在列表中查找True值的范围
挑战: 编写一个接受布尔值列表并返回True的所有范围的函数或程序。 测试用例: f [F] = [] f [T] = [[0,0]] f [T,T,F,T] = [[0,1],[3,3]] f [F,T,T,F,F,T,T,T] = [[1,2],[5,7]] f [F,T,T,F,F,F,T,T,T,T] = [[1,2],[6,9]] f [T,T,F,F,F,T,T,T,T,T,T,T,T,T,T,F] = [[0,1],[5,14]] f [F,F,T,T,F,F,F,F,F,F,F,F,T,T,T,T,T,T,T,T,F,F,F,F,F,F,F,F,F,F,F,F,F,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,T,T] = [[2,3],[12,19],[33,54],[93,94]] 规则: 您可以选择输入的编码方式,例如列表,数组,字符串等。 必须将输出编码为类似列表的类似列表或显示这样的字符串,因此数组,列表,元组,矩阵,向量等。 布尔值必须被编码为常量,否则可以将T / F进行任何简单的转换为所需的常量 编辑:允许在运行时评估或类似评估。 不要忘记解释如何将输入传递给程序/函数并给出测试用例的输入/输出 转换为所需的输入格式不计在内 不允许出现标准漏洞 如果您的语言具有执行此功能的功能,则不允许 我不会接受我自己的提交 编辑:输出格式是灵活的。如果未打印列表或类似内容,则范围值必须用一个非数字字符分隔,并且也必须分隔范围。 得分: 分数以字节为单位,除非不适合您的语言(例如Piet中的代码) 最低分获胜 输入和输出具有很大的灵活性,但是不允许将T / F替换为可以完成所有工作的功能的解决方案。 …

11
Dyalog APL官方2016年比赛
如果您认为这可能很有趣,但是工作量过多,请考虑参加这个小得多的挑战。 2016年有点有趣(可能还有挫败感!)…… Dyalog的“年度难题”。请享用! 目标 查找Dyalog APL(下载)表达式(允许使用其他语言,请参见下面的“ 资格”),该表达式精确地包含数字2 0 1 6,该数字等于0到100。例如: 20=16 ×2016 2⌊016 2+0+1*6 ... 目的是在每个表达式中使用尽可能少的字符(一个表达式的最小字符数为5 –四位数字2 0 1 6和一个原始函数/运算符)。 规则 每个表达式必须包含数字2 0 1 6(按该顺序),并且不能包含其他数字。预设的常量和变量也不允许。 除了四位数2 0 1 6以外,只能使用内置符号和名称,括号/大括号,空格,高减号和小数点。结果表达式必须是确定性的(即,在重复求值时得出相同的结果)。对于非APL,也可以使用带有名称的功能/操作符;和这里一样的规则。 假定您的语言的所有默认设置。对于Dyalog APL,这意味着⎕ML和⎕IO均为1,并且⎕PP为10。 包括从0到100在内的所有数字的正确表达式的每个条目都将根据这些表达式所使用的字符数(不包括多余空格)(所有101个表达式的最小值505)进行评级。 合格 任何人都可以进入。您可以用任何语言回答,但只有APL回答会被考虑接受。如果您使用APL以外的其他语言,则可以使用代码片段,程序,函数等代替表达式,并且可以打印,将数字保留在可访问的内存位置,或者以其他方式返回结果,只要直接编写代码即可计算为所需的数字,作为您语言的任何标准数值数据类型。 截止日期 2016年11月30日。 奖品 接受您的答案 在Dyalog的2016年名人堂中永生不朽! 提交您的输入 2016年11月30日之后,我将接受最短的答案,并以您的名义将您的答案提交给Dyalog的2016年名人堂。 常问问题 是否允许J(例如37 = ⌈⍟!20J16)? 否:除了四位数字2 0 1 6之外,只能使用内置符号和名称,括号/大括号,空格,高减号和小数点。 输出为字符串可以接受吗? …

1
……墨西哥将为此付出代价!
唐纳德·特朗普对该网站上的人们的工作印象深刻。他看到您帮助Ben Carson所做的工作多么了不起,因此他甚至雇用您建造自己的墙。他认为你很棒。现在他再次需要您的帮助。虽然他成功地修建了自己的隔离墙,但现在他需要墨西哥政府来支付这笔费用。他想每英里收费100万美元,他告诉他们美墨边境长1989英里。但是,他们不确定此数字是否准确,因此他们也希望按比例绘制视觉表示。那就是您要进入的地方。您将使用此地图: 并针对边界上每n(50 <= n <= 500)英里绘制一条25像素长的线,该线垂直于该点的边界斜率。使用地图右侧的比例尺,我确定了100英里〜50像素。我为n = 60绘制了前3行的样本,但这些只是近似值: 笔记: 唯一的输入是n。输出应该是地图图像,其中添加了线条,将其绘制到屏幕上或保存在光栅图像文件中(您可以覆盖原始地图文件)。 您可以使用所需的任何文件名保存空白地图文件。它是JPEG,但可以根据需要将其转换为另一种常见的栅格格式。另外,只要您保持尺寸比例不变,并且线条仍然可以缩放,就可以将图像尺寸最多减少50%。 每条线应垂直于该点的边界斜率。应从该点之前的50英里处开始计算坡度,并在该点之后的50英里处终止计算坡度。 准确性: 每条线的斜率可以有±5°的误差范围 每条线之间的间距的误差范围为±20英里(在常规地图上为10像素)。

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.