Questions tagged «code-golf»

Code-golf是在最小的源代码字节中解决特定问题的竞赛。

30
令人困惑的字母楼梯
在没有输入的情况下,通过一种可接受的输出方法在任何一种情况下(必须保持大小写)输出此有趣的字母模式: 一种 AB ACBC 光盘 阿比西德 AFBFCFDFEF AGBGCGDGEGFG AHBHCHDHEHFHGH 艾比西迪菲菲 AJBJCJDJEJFJGJHJIJ AKBKCKDKEKFKGKHKIKJK ALBLCLDLELFLGLHLILJLKL AMBMCMDMEMFMGMHMIMJMKMLM ANBNCNDNENFNGNHNINJNKNLNMN AOBOCODOEOFOGOHOIOJOKOLOMONO APBPCPDPEPFPGPHPIPJPKPLPMPNPOP AQBQCQDQEQFQGQHQIQJQKQLQMQNQOQPQ ARBRCRDRERFRGRHRIRJRKRLRMRNRORPRQR ASBSCSDSESFSGSHSISJSKSLSMSNSOSPSQSRS ATBTCTDTETFTGTHTITJTKTLTMTNTOTPTQTRTST AUBUCUDUEUFUGUHUIUJUKULUMUNUOUPUQURUSUTU AVBVCVDVEVFVGVHVIVJVKVLVMVNVOVPVQVRVSVTVUV AWBWCWDWEWFWGWHWIWJWKWLWMWNWOWPWQWRWSWTWUWVW AXBXCXDXEXFXGXHXIXJXKXLXMXNXOXPXQXRXSXTXUXVXWX AYBYCYDYEYFYGYHYIYJYKYLYMYNYOYPYQYRYSYTYUYVYWYXY AZBZCZDZEZFZGZHZIZJZKZLZMZNZOZPZQZRZSZTZUZVZWZXZYZ 尾随空格和换行符是可以接受的,不允许出现标准漏洞,并且这恰好是代码高尔夫,因此以字节为单位的最短答案为胜!

20
形状识别程序
您的任务是构建一个识别输入形状的程序。要标识的形状可以是以下任意一种: 广场 要被识别为正方形,源必须具有所有等长的行,并且每行的字符数与行数相同(不包括换行符)。可选的尾随换行符是可接受的。 $_=' $_=" $_"' ;say 长方形 要被识别为矩形,源必须具有全部等长的行,但是行数与每行的字符数不匹配(不包括换行符)。可选的尾随换行符是可以接受的。这可以是水平或垂直的。 $_= "no t a squ are ";# $_="but it is still a consistent shape!";## 三角形 要标识为三角形,源代码必须以一个字符开头,并且每行之后必须有一个附加字符(包括最后一个字符),或者在第一行之后,每行之后的最后一行应少一个字符,直到最后一行只有一个。 $ _= "So this "."". shape; $_="or even, this way !! " 混乱 任何不遵循上述一致格式的内容,都必须识别为混乱。 规则 您可以返回任何四个一致的可打印值来标识每个形状。 您的源代码还必须遵守上述形状之一(不,不要乱成一团)。 您的源中的一条尾随换行符是可以接受的。 您可以假定输入不包含任何空行(包括尾随换行符),不为空并且不仅由换行符组成。 所有形状的高度和宽度必须大于等于2,否则定义为混乱。 禁止出现标准漏洞。 每种语言中以字节为单位的最短解决方案为准。

23
交通方向
规则 给定ISO3166-1-Alpha-2国家/地区代码,您的任务是确定该国家/地区的交通方向: 输入的内容将是有效的国家/地区代码(有效,因为它是所提供的两个列表中的一个) 如果有帮助,输入可以是两个字符的列表,而不是字符串 您可以选择小写输入 你会选择一个值,说了正确的(你的选择),并输出值,当且仅当在该国的业务是右撇子,并在其他情况下,别的 您只需要处理以下列表之一中包含的国家/地区代码: 这些都是左撇子流量的国家: ['AI', 'AG', 'AU', 'BS', 'BD', 'BB', 'BM', 'BT', 'BW', 'VG', 'BN', 'KY', 'CX', 'CC', 'CK', 'CY', 'DM', 'FK', 'FJ', 'GD', 'GG', 'GY', 'HK', 'IN', 'ID', 'IE', 'IM', 'JM', 'JP', 'JE', 'KE', 'KI', 'LS', 'MO', 'MW', 'MY', 'MV', 'MT', 'MU', 'MS', 'MZ', 'NA', …

6
Gimli,让它更短吗?
我是Gimli的作者之一。我们已经在C中拥有2个tweet(280个字符)的版本,但是我想看看它有多小。 Gimli(论文,网站)是一种高速,高安全级别的加密排列设计,将在2017年加密硬件和嵌入式系统大会(CHES)(9月25日至28日)上展出。 任务 像往常一样:用您选择的语言来实现Gimli的较小可用的实现。 它应该能够将384位(或48个字节,或12个无符号int ...)作为输入并返回(如果使用指针,则可以在适当位置进行修改)应用于这384位的Gimli结果。 允许从十进制,十六进制,八进制或二进制的输入转换。 潜在的极端情况 整数编码被假定为低端(例如,您可能已经拥有的)。 您可以重命名Gimli为,G但是它仍然必须是函数调用。 谁赢? 这是代码高尔夫球,因此最短的答案以字节为单位!标准规则当然适用。 下面提供了参考实现。 注意 引起了一些关注: “嗨,帮派,请用其他语言免费实施我的程序,这样我就不必了”(致谢@jstnthms) 我的回答如下: 我可以轻松地用Java,C#,JS,Ocaml来完成它……这很有趣。目前,我们(Gimli团队)已在AVR,Cortex-M0,Cortex-M3 / M4,Neon,SSE,SSE展开,AVX,AVX2,VHDL和Python3上实现(并优化)。:) 关于金利 状态 Gimli将一轮回合应用于384位状态。状态表示为尺寸为3×4×32的平行六面体,或等效地表示为32位字的3×4矩阵。 每个回合是三个操作的序列: 非线性层,特别是应用于每列的96位SP盒; 在第二轮中,形成一个线性混合层; 在第四轮中,不断增加。 非线性层。 SP盒包含三个子操作:第一个单词和第二个单词的旋转;第二个单词的旋转。3输入非线性T函数;以及第一个和第三个单词的交换。 线性层。 线性层包含两个交换操作,即小交换和大交换。从第1轮开始,每4轮进行一次小交换。从第3轮开始,每4轮进行一次大掉期。 舍入常数。 Gimli有24发子弹,编号为24,23,...,1。当舍入数r为24、20、16、12、8、4时,我们将舍入常数(0x9e377900 XOR r)与第一个状态字进行异或。 C语言参考源 #include <stdint.h> uint32_t rotate(uint32_t x, int bits) { if (bits == 0) return x; …

17
模拟我的笨老闹钟
我有一个带两个按钮的笨拙的旧闹钟:hour和minute。该hour按钮增加设置警报的小时数,并minute增加设置警报的分钟数。但是,一些聪明的设计师意识到同时按下两个按钮应该具有一定的意义,因此决定同时按下hour和minute将导致警报设置为12:00 am/ 0:00。您的任务是模拟此行为。 任务 给定开始时间和一系列按钮状态,请确定结束时间。 从开始时间开始,增加每次出现的小时的时间,增加每次出现(1,0)的分钟(0,1)的时间,并将每次出现的时间设置0:00为(1,1)。状态(0,0)应被忽略,因为它们与两个按钮都不对应。 当加上分钟和小时时,如果分钟/小时超过最大值,则将其设置为0,即,增加分钟值59应将分钟值设置为0,增加小时值23应将小时值设置为0。将分钟/小时值增加到它们的限制以上不会影响其他值,例如增加10:59产量的分钟10:00,而不是增加11:00。 例 给定输入时间13:58和步骤[(0,1),(0,1),(0,1),(0,0),(1,1),(1,0)], (0,1)。这相当于minute被按下。现在是时候了13:59。 (0,1)。这相当于minute被按下。现在是时候了13:00。 (0,1)。这相当于minute被按下。现在是时候了13:01。 (0,0)。这对应于两个按钮均未被按下。现在不受影响的时间13:01 (1,1)。这对应于两个按钮都被按下。现在是时候了0:00。 (1,0)这相当于hour被按下。现在是时候了1:00。 因为我们以结尾1:00,所以它是输出。 输入输出 输入将包含一个时间和一系列按钮状态。输出是单个时间。 输入时间和输出时间可能是 (hour, minute)或(minute, hour)以24小时为单位的2元组,例如(13, 30)(hour范围从0至23,minute范围从0至59) 同前,但在12-Hour时间和布尔am/ pm开关(hour范围为0到11或12并1以11与minute从0至59)。 此后的分钟数,0:00例如810(从0到1439,包括0) 编码相同信息的任何其他格式 按钮状态的序列表示布尔2元组的列表,例如: 元组列表: [(0,1),(1,0),(0,0),(1,1)] 用空格分隔的字符串: "01 10 00 11" 字符串: "01100011" 在第四纪: [1,2,0,3] 转换为整数: 99 编码相同信息的任何其他格式 测试用例 time,steps -> output 06:49,[(0, 1)] -> 06:50 …
25 code-golf  date 

12
绘制轮廓
给定高程的矩形矩阵,绘制其轮廓。 任务 如果,则两个元素x和y处于同一轮廓线级别floor(x/10) == floor(y/10)。例如,52和58处于相同的轮廓级别,但是58和64不在同一轮廓级别。 绘制轮廓的行为定义如下:对于每个元素e,将其替换为如下选择的两个字符的字符串: 第一个字符是" "下面的元素是否与下面的元素处于e相同的轮廓线级别,e或者下面没有任何元素e,"_"否则 第二个字符是," "如果右边的元素与该元素e处于相同的轮廓线级别,e或者右边没有元素e,"|"否则 将行中的元素连接在一起,然后用换行符将这些行连接在一起。 例 假设输入为[[5,20],[3,6]],可视为 5 20 3 6 我们先来看一下5。由于3处于与相同的轮廓水平5,因此第一个字符为" "。由于20与的轮廓级别不同5,因此第二个字符是"|"。 现在我们来看20。由于6轮廓线级别与相同20,因此第一个字符为"_"。由于的右边没有元素20,因此第二个字符是" "。 现在我们来看3。由于下面没有元素3,因此第一个字符为" "。由于6与处于相同的轮廓水平3,第二个字符是" "。 现在我们来看6。由于下面没有元素6,因此第一个字符为" "。由于的右边没有元素6,因此第二个字符是" "。 基于这些两个字符的字符串,我们进行替换以获得[[" |","_ "],[" "," "]]。将这些结合在一起,我们得到的输出 |_ 规则 输入矩阵将始终为矩形,并由正整数组成。 尾随空格或换行符可以为任意数量(包括0),并且不必以任何方式保持一致。 只要产生相同的结果,就不必遵循相同的算法。 您的程序或函数可能会输出以换行符分隔的字符串,字符串列表或等效字符串。 这是代码高尔夫球,因此以字节为单位的最短代码获胜。 测试用例 input output [[1,5,8,9],[3,11,13,8],[7,14,10,9],[4,8,7,6]] _ _ | | |_ _| [[0,10,20,30,40,50,60,70,80,90],[0,0,10,10,20,20,30,30,40,40],[0,0,0,10,10,10,20,20,20,30],[0,0,0,0,10,10,10,10,20,20],[0,0,0,0,0,10,10,10,10,10],[0,0,0,0,0,0,10,10,10,10],[0,0,0,0,0,0,0,10,10,10],[0,0,0,0,0,0,0,0,10,10],[0,0,0,0,0,0,0,0,0,10],[0,0,0,0,0,0,0,0,0,0]] …

8
验证拓扑
挑战 给定T有限集的子集S={1,2,3,...,n},确定是否T为拓扑。 说明 某个集合的幂 P(S)集S是的所有子集的集合S。一些例子: S = {}, P(S) = {{}} S = {1}, P(S) = {{}, {1}} S = {1,2}, P(S) = {{}, {1}, {2}, {1,2}} S = {1,2,3}, P(S) = {{}, {1}, {2}, {3}, {1,2}, {1,3}, {2,3}, {1,2,3}} 甲拓扑 T上的集S的一个子集P(S)与以下属性: {}在T和S在T 如果A和B在,T那么他们的交集A ∩ B 如果A和B在,T那么他们的联合也是A ∪ B* *这个定义不是很正确,但是对于有限集却是正确的,对于这个挑战的目的就足够了。实际的公理也将允许无限的并集,但这与有限的情况无关。 …

26
制作锯齿形
您的任务是接受一个整数输入,并使用斜杠和反斜杠打印锯齿形图案。 整数输入确定每个曲折和曲折的长度,以及曲折和曲折的数量 模式始终从右到左开始 测试用例 4-> / / / / \ \ \ \ / / / / \ \ \ \ 2-> / / \ \ 0-> 1-> / 8-> / / / / / / / / \ \ \ \ \ \ \ \ / / / / …

30
* this *和* that *上的此代码错误,是否真的写在其中?
受我启发的语言不是您要寻找的语言! 挑战 选择两种不同的编程语言,然后编写一个程序,将以下行打印到stdout(或等效文件): This program errors out in <the current language> :P 然后在两种语言中都产生不同类型的错误。 规则 一些规则来自最初的挑战。 在输出中,语言名称应严格遵循: TIO上列出的名称,可以选择不包括版本号和/或实现名称(例如,如果您使用JavaScript (Node.js)其中一种语言,则可以使用JavaScript您的语言名称,但不能使用JS或Javascript。) 如果您选择的语言在TIO上不可用,则在官方网站(或GitHub存储库)上提供全名。 这两个程序都不应该接受用户的任何输入。 您可以使用两种语言的注释。 相同语言的两种不同版本计为不同语言。 如果这样做,程序应输出主要版本号,并且如果在两个不同的次要版本上运行,则还应报告次要版本。 您不应该使用预构建的版本函数(这包括在运行时已经评估过的变量)。 只要此标记不包含代码片段(例如,在C 语言中),根据该元共识,两种使用相同语言的不同命令行标记也会计为不同的语言-Dblahblah...。 如果这样做,程序还应该输出使用的标志。 除非两个错误都由相同的语义生成(例如“除以零”,“分段错误”或“索引超出范围”),否则将认为这两个错误是不同的。 如果语言的运行时在发生错误后没有退出,而是以某种方式向用户报告该错误,则这是有效的错误。 如果一种语言不能区分错误消息,但是具有导致错误的已知原因列表,则必须指定原因,而不是错误消息。 一个示例是><>,它只有一个错误消息something smells fishy...,但是esolangs Wiki页面上有错误原因列表。 除非通过调用eval()或类似方法生成,否则不允许语法错误。 允许通过throw(JS),raise(Python),die(Perl)或类似方式手动投掷某些东西,但是所有这些都被视为一种错误。 也允许在2D或golflangs中通过无效命令进行错误(并将其视为一种错误)。 例子 Python和Ruby Python:This program errors out in Python :P到stdout,然后是未定义的标识符 Ruby:This program errors out …

30
实施简单的秒表
挑战 您的任务是编写一个程序,该程序每秒(包括立即在您的程序启动时)每秒打印一次从您的程序启动起经过的时间。 规则 时间必须以hh:mm:ss格式打印。(单位值的前导零) 时间戳记必须用CR,LF或CRLF分隔。(无前导空格) 新的时间必须每秒出现一次。(stdout不能缓冲一秒钟) 如果程序在23:59:59之后运行,其行为是不确定的。 sleep(1)即使打印,计算,循环等的开销累积到一秒钟,您也可以使用,即使可以跳过特定的一秒钟。 输出示例: 00:00:00 00:00:01 00:00:02 00:00:04 00:00:05 ⋮ 请注意,00:00:03这里由于处理开销而丢失了。实际跳过的值(如果有)当然取决于实现和/或系统。 C中的参考实现:(仅适用于POSIX兼容系统) #include <unistd.h> // sleep() #include <tgmath.h> #include <assert.h> #include <stdlib.h> #include <stdio.h> #include <time.h> #ifndef __STDC_IEC_559__ #error "unsupported double" #endif static_assert(sizeof(double) == 8, "double must have double precision"); #define MAX_PRECISE_DOUBLE ((double)(1ULL << 52)) …
25 code-golf  date 

28
头晕的整数枚举
今天的挑战是输出一个枚举所有整数的给定序列项。该序列如下:如果我们有一个0索引函数生成该序列,f(n)并且ceil(x)是上限函数,则f(0) = 0; abs(f(n)) = ceil(n/2); sign(f(n))当n和ceil(n/2)都为偶数或均为奇数时为正。 为了帮助理解此顺序,前几个术语如下: 0 1 -1 -2 2 3 -3 -4 4 5 -5 -6 6 7 -7... 您的任务是编写一个程序,该程序需要一个整数n并输出n序列的第n个项。输入只能是0或1索引。 测试用例(0索引): 0 => 0 1 => 1 2 => -1 3 => -2 4 => 2 5 => 3 这是代码高尔夫球,最少字节获胜!

11
纸牌屋(第1版)
版本2 在这里。 简单的挑战:给定一个整数,用给定数目的故事画一张纸牌屋。如果数字为负,则将房子上下颠倒。例子: Input: 2 Output: /\ -- /\/\ Input: 5 Output: /\ -- /\/\ ---- /\/\/\ ------ /\/\/\/\ -------- /\/\/\/\/\ Input: 0 Output: <empty, whitespace or newline> Input: -3 Output: \/\/\/ ---- \/\/ -- \/ 输入可以是数字或字符串。输出必须与显示的完全一样,并允许前导和/或尾随空格和换行符。 这是代码高尔夫球,因此每种语言中最短的程序/功能可能会获胜!

4
隔行旋转
挑战 给定一个字符正方形矩阵(可单字节打印的ASCII字符),请沿相反方向旋转矩阵的每个“环”。 让我们举个例子: 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P 然后,将最外面的环顺时针旋转90度,如下所示: 1 2 3 4 5 L G B 6 1 6 A M 2 B F => N 3 G K …
25 code-golf  matrix 

24
将字符串减少为字母的一小段
给定一个仅包含小写和大写字母字符和空格([a-zA-Z ])的非空字符串,请将其缩减为从第一个字符开始的字母代码段。 要减少字符串,请从第一个字母字符开始,然后删除其后不是字母下一个字母的每个字符。继续执行此操作,直到到达字符串末尾。 例如codegolf: 以开始c,请删除,o因为它不是字母表的下一个字母。 保持d,因为它是字母表中的一个字母,并保持e,因为它是一个字母了。 删除g,o和l,然后保留f。 您的最后一个片段将是 cdef 规则 应该保持大写,这样CodEgolF会导致CdEF 空格不是字母,因此即使它是字符串的开头,也应始终将其删除 由于减少的性质,输入的第一个字母字符将始终是输出的第一个字符。 zZ是字母表的最后一个字母。其后没有字母,字母不会循环。 测试用例 codegolf -> cdef CodEgolf -> CdEf codeolfg -> cdefg ProgrammingPuzzles -> P Stack Exchange -> St The quick red fox jumped over the lazy brown dog -> Tuvw Zebra -> Z Abcdegfhijkl -> Abcdef 计分 …

10
加倍一些钻石
问题 给定一个正整数n,其中n < 100 输出菱形图案,如下所示: 输入项 n=1 /\/\ \/\/ 输入n=2: /\ /\ //\\/\/\//\\ \\//\/\/\\// \/ \/ 输入n=3: /\ /\ //\\ /\ /\ //\\ ///\\\//\\/\/\//\\///\\\ \\\///\\//\/\/\\//\\\/// \\// \/ \/ \\// \/ \/ 输入n=4: /\ /\ //\\ /\ /\ //\\ ///\\\ //\\ /\ /\ //\\ ///\\\ ////\\\\///\\\//\\/\/\//\\///\\\////\\\\ \\\\////\\\///\\//\/\/\\//\\\///\\\\//// \\\/// \\// \/ \/ …

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.