Questions tagged «code-golf»

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

1
EBCDIC代码高尔夫(生日快乐,System / 360!)
自IBM推出System / 360系列计算机以来,已经有50年了。这些是第一个使用EBCDIC字符集的人。 为了纪念这种情况,让我们看看谁可以编写能够将“普通”文本与EBCDIC代码页037相互转换的最短程序。我们将使用维基百科的转换表,该转换表将CP037映射到ISO-8859-1的超集。: EBCDIC037_to_Latin1 = [ 0x00,0x01,0x02,0x03,0x9c,0x09,0x86,0x7f,0x97,0x8d,0x8e,0x0b,0x0c,0x0d,0x0e,0x0f, 0x10,0x11,0x12,0x13,0x9d,0x85,0x08,0x87,0x18,0x19,0x92,0x8f,0x1c,0x1d,0x1e,0x1f, 0x80,0x81,0x82,0x83,0x84,0x0a,0x17,0x1b,0x88,0x89,0x8a,0x8b,0x8c,0x05,0x06,0x07, 0x90,0x91,0x16,0x93,0x94,0x95,0x96,0x04,0x98,0x99,0x9a,0x9b,0x14,0x15,0x9e,0x1a, 0x20,0xa0,0xe2,0xe4,0xe0,0xe1,0xe3,0xe5,0xe7,0xf1,0xa2,0x2e,0x3c,0x28,0x2b,0x7c, 0x26,0xe9,0xea,0xeb,0xe8,0xed,0xee,0xef,0xec,0xdf,0x21,0x24,0x2a,0x29,0x3b,0xac, 0x2d,0x2f,0xc2,0xc4,0xc0,0xc1,0xc3,0xc5,0xc7,0xd1,0xa6,0x2c,0x25,0x5f,0x3e,0x3f, 0xf8,0xc9,0xca,0xcb,0xc8,0xcd,0xce,0xcf,0xcc,0x60,0x3a,0x23,0x40,0x27,0x3d,0x22, 0xd8,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0xab,0xbb,0xf0,0xfd,0xfe,0xb1, 0xb0,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,0x70,0x71,0x72,0xaa,0xba,0xe6,0xb8,0xc6,0xa4, 0xb5,0x7e,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0xa1,0xbf,0xd0,0xdd,0xde,0xae, 0x5e,0xa3,0xa5,0xb7,0xa9,0xa7,0xb6,0xbc,0xbd,0xbe,0x5b,0x5d,0xaf,0xa8,0xb4,0xd7, 0x7b,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0xad,0xf4,0xf6,0xf2,0xf3,0xf5, 0x7d,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,0x50,0x51,0x52,0xb9,0xfb,0xfc,0xf9,0xfa,0xff, 0x5c,0xf7,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0xb2,0xd4,0xd6,0xd2,0xd3,0xd5, 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0xb3,0xdb,0xdc,0xd9,0xda,0x9f]; 规则: 您的程序应该接受两个输入:(a)一个文本字符串,和(b)一个指示要执行的操作的标志。 基于此标志,您的程序应将文本的每个字节转换为相应的EBCDIC字符,反之亦然。 可以从任何明智的来源(例如,命令行参数,stdin,键盘输入)获得输入,但不得将其硬编码到程序中。 输出应显示在屏幕上(例如,stdout,document.write)或写入文件/管道。 请勿使用任何内置或外部编码转换功能(iconv,等等)。 这是一个代码高尔夫球挑战,因此最短的答案(最小字节)将获胜。 例子: (注意:这些示例是在配置为使用UTF-8编码的终端中产生的。根据系统的配置方式,您可能会看到不同的结果。十六进制等效项仅供参考,不必由代码生成) Input: "HELLO WORLD", convert to EBCDIC Output: "ÈÅÓÓÖ@æÖÙÓÄ" (0xc8c5d3d3d640e6d6d9d3c4) Input: "ÈÅÓÓÖ@æÖÙÓÄ", convert from EBCDIC Output: "HELLO WORLD" Input: …

3
BrainFlow解释器!
脑流 什么是BrainFlow? BrainFlow是BrainF ** k(BFk)的扩展,具有3个其他命令,用于增加功能和混淆。 什么命令? 除了普通的BFk命令,我们还有: ^ 根据单元格中的值跳转到单元格#。例:如果我们在单元格0处,值为4,^将使我们跳到单元格4。 = 将单元格上的值设置为该单元格的索引。例如:如果我们在4号单元格中的值为0,则=将我们的值设置为4。 & 将根据当前单元格中的值将当前单元格中的值设置为等于该单元格中的值。(这很难说,所以这里有个例子!)例如:我们在单元格#33上,当前值在此单元格为7,并将当前在单元格#33上的值设置为单元格7中的任何值。 可选挑战 完成以下任何操作将对您的字节数应用指定的奖励。 Interpreter written in BrainFlow (可以由示例解释,并且至少包含一个有意义的 ^ = 或 &): 得分/ 3 Interpreter written in BrainF**k: 分数/ 2 Doesn't contain any English letters (in either upper or lower case): 得分-20 Doesn't contain any of the BrainFlow …

6
二维凸包的面积
您将得到一个整数对的数组/列表/向量,这些整数对表示2D欧几里得平面上点的笛卡尔坐标(x ,y)(X,ÿ)(x, y);所有坐标都在− 104-104−10^4和10410410^4,允许重复。找到这些点的凸包的面积,四舍五入到最接近的整数;确切的中点应四舍五入为最接近的偶数整数。您可以在中间计算中使用浮点数,但前提是可以保证最终结果始终正确。这是代码高尔夫球,因此最短的正确程序将获胜。 点集合P的凸包是包含P的最小凸集。在欧几里得平面上,对于任何单个点(x ,y ),它都是该点本身。对于两个不同的点,它是包含它们的线,对于三个非共线的点,它是它们形成的三角形,依此类推。PPPPPP(x ,y)(X,ÿ)(x,y) 关于凸包的视觉效果最好的可视化解释,最好是将所有点想象成钉子在木板上,然后在它们周围拉伸橡皮筋将所有点围起来: 一些测试用例: Input: [[50, -13]] Result: 0 Input: [[-25, -26], [34, -27]] Result: 0 Input: [[-6, -14], [-48, -45], [21, 25]] Result: 400 Input: [[4, 30], [5, 37], [-18, 49], [-9, -2]] Result: 562 Input: [[0, 16], [24, 18], [-43, 36], [39, …

6
字符串操作解释器
摘要 制作了一种新的字符串操作语言,仅使用字符$+#-!*|@>!您的任务是在尽可能少的字节中为其实现一个解释器。 输入值 字符串,是此语言的一行。可以采用任何合理的方式(标准输入,函数参数,命令行参数等)或将其用作预定义变量。如果程序要求用户输入,请接受它从stdin要求的所有用户输入,仅此而已,请参见下文。您可能会认为它是一个有效程序。 输出量 无论使用哪种语言输出,以下说明。您必须以任何合理的方式(标准输出,函数输出等)输出字符串或变量值。语言明确输出后,必须转到stdout。禁止出现标准漏洞。 语言规格 处理和语法 该语言具有非常简单的处理形式,因为它仅执行字符串操作:它以空字符串("")开头,并随每个术语进行更改。一个术语由一个或两个部分组成:一个函数(在下面),然后可能是一个参数(在下面),用于编辑其行为。术语用竖线(|)分隔。您可能会认为它不会是一个空程序,并且任何条件都不会是空的。您应该在程序末尾输出该值。 功能 该语言只有6种功能,如下所示。每个函数都接受一个或零个参数。 + 连接字符串(采用一个字符串参数,将其连接到当前值) ! 反转当前值的字符顺序(无参数) * 重复字符串(采用一个整数参数,将当前值重复多次) - 删除所有出现的值(采用一个字符串参数,从当前值删除所有出现的值) $ [pseudo-]随机改组当前值(无参数) <将当前值输出到stdout(无参数) 价值观 这些是可以传递给函数的值,由匹配它们的正则表达式表示: @[^|]*字符串文字,包括除管道以外的任何字符。它可能是空的。 #[0-9]+ 整数文字 >下一行stdin。如果与一起使用*,则转换为整数。 测试用例 ╔════════════════════════╤═════════════╤══════════════╗ ║code │input │output ║ ╟────────────────────────┼─────────────┼──────────────╢ ║+>|!|+@hello|*> │13 │31hello31hello║ ║ │2 │ ║ ╟────────────────────────┼─────────────┼──────────────╢ ║+>|+@abcdefg|$ │hello │hcloeebafdlg ║ ╟────────────────────────┼─────────────┼──────────────╢ ║+@how areyou|-@o|-> …

12
魔术模平方
我是数论的忠实拥护者。数论中的一件大事是模块化算术。当且仅当m \ mid ab时,定义为。一个有趣的事情是提高幂:尤其是当模数是质数时。特别地,已经证明,如果a和m是相对质数(除了1之外没有其他共同因素),则存在一个数e,使得a ^ e \ equiv 1 \ mod m。a≡bmodma≡bmodma\equiv b\mod mm∣a−bm∣a−bm\mid a-baaammm111eeeae≡1modmae≡1modma^e\equiv 1\mod m 我将通过一个例子来说明什么是练习。取模数。程序或功能的可能输出为:m=7m=7m=7 3 2 6 4 5 1 2 4 1 2 4 1 6 1 6 1 6 1 4 2 1 4 2 1 5 4 6 2 3 1 1 1 …

11
模拟按位循环标记
挑战 给定两个默认I / O格式的字符串,请执行以下操作: 注意:质询将第一个字符串称为“数据”,第二个字符串称为“程序”。 将程序更改为无限字符串,该字符串就是程序无限重复(例如10-> 1010101010...)。挑战将其称为“无限程序” 当数据为非空时,请在无限程序上循环执行以下操作: 一种。如果当前命令为“ 0”,则删除数据中最左边的位。如果数据为空,则“ 0”不执行任何操作。 b。如果当前命令为“ 1”,则如果数据中最左边的位为1,则将程序中的下一个字符附加到数据中。 C。如果现在数据不为空,则输出数据。 测试用例 数据是输入的左侧,程序是右侧。 100, 0 --> 00, 0 1111, 1 --> 11111, 111111, 1111111, ... 10, 011 --> 0, 0, 0 1110, 011 --> 110, 1101, 11010, 1010... 笔记 数据和程序将仅包含0和1 对于不暂停的数据/程序,您的程序无需暂停。 数据和程序在输入中不会为空。 您可能有多个尾随和换行符 禁止标准漏洞 您可以使用任何方便的I / O格式 …

1
实施MENACE
背景 MENACE(中号 achine Ë ducable Ñ oughts 甲 ND Ç rosses ë ngine)是用于游戏圈与叉,由英国计算机科学家唐纳德米基在1960创建一个基本的浅的机器学习算法。它最初由304个火柴盒实现,每个火柴盒都标有板子位置并包含彩色珠子(九种颜色之一,代表可能的移动)。Michie计算得出,这304个火柴盒足以满足棋盘上每个动作的组合。 您可能会更数学化,您会发现N&C板上实际上有19,683种Nought,Cross和Blanks的可能组合;但是,他计算了减少此数字的方法(以加快算法的速度,并有可能减少火柴盒!)。首先,他删除了所有不可能的举动,例如: ------- |X|0|X| | |0| | |X|X| | ------- (两个零和四个十字架) 接下来,他补偿了旋转。例如,如果在火柴盒上,我们看到: ------- | |0|0| |X| |X| | |0| | ------- 我们可以使用同一框 ------- | |X| | |0| |0| | |X|0| ------- 因此,上述有色珠代表相对位置,而不是绝对位置。例如,如果我们说红色的珠子表示左上角,那么我们将看一下盒子顶部的图像,然后看看: ------- | |0|0| |X| |X| | …

3
网格上的不明确位置
您有一个带有四个距离传感器的小机器人。它知道房间的布局,但是除了能够锁定网格方向之外,它没有方向感。您希望能够根据读数找出机器人的位置,但是由于传感器有限,它可能会模棱两可。 挑战说明 您将获得一个房间布局和四个顺时针方向的距离读数,以获取您与墙之间的单元数量。房间的中间可能有墙壁,而网格的边缘也是墙壁。机器人不能放在墙上。 您的目标是列出机器人可能在房间内的所有位置,以给出给定的读数。请记住,机器人没有方向感(除了被锁定在网格上的90度角之外,即,机器人永远不会以对角线或其他倾斜角取向),因此读取[1、2、3,例如,[4]与读取[3、4、1、2]相同。 例子 对于这些示例,单元格坐标将从左上角的单元格以0索引(x,y)对给出。读数将在方括号中的列表中按顺时针顺序给出。布局将在墙壁上使用井号,并使用其他字符(通常是点)来表示空单元格。 情况1 . . . . . . . . . . # . . . . . [1、0、2、3] ==>(1、0),(3、1) [0,0,3,3] ==>(0,0),(3,0),(0,3),(3,3) [2,1,1,0] ==>(0,2),(2,1) [1,1,2,2] ==>(1,1) 情况二 # a . # a . a # . . # a . . # . . # …
11 code-golf  grid 

9
奎因大金字塔
该任务是一个非常简单的带有缠绕的quine挑战,您必须以金字塔形状输出源代码。金字塔的形状定义如下: 1 234 56789 ABCDEFG HIJKLMNOP QRSTUVWXYZa bcdefghijklmn ......etc...... 此挑战的主要局限性是您的Quine必须包含足够多的字节,以免阻碍金字塔的样式。例如,以下程序长度将起作用: 1-byter: 1st layer of the pyramid (not allowed by definition of a quine). 4-byter: 1st and 2nd layers of the pyramid. 9-byter: 1st, 2nd and 3rd layers of the pyramid. etc... 因此,如果您的程序是: QWERTY 这将是无效的,因为它将安排为: Q WER TY 但是,如果您的程序是QWERTYUIO,那就可以了: Q WER …

11
生成棒球音高字符串
目标 编写一个程序或函数,该程序或函数需要一个正整数,n并随机生成一系列合法的长度的音高(此后称为音高字符串)n。 输入值 非零正整数n<= 100 输出量 返回一个随机字符串或字符列表,这些字符串或字符串表示可能的有效音调字符串length n。使用的字符将是: B-球。如果您累积了其中的4个,击球手就会走动并击球。 S-罢工。如果您累积了其中的3个,击球手就没电了,击球完毕。 F-犯规。也将增加打击次数,但无法击退击球员。即,您不能让Foul成为有效字符串中的最后一个音调。超过两次罢工/犯规的任何犯规都不会增加罢工的次数(击球手此时已经有2次罢工,而第3次将使他退出)。 H-命中。击球手将球击中并完成击球。 (这被略微简化,但是您不必担心) 有效的音高字符串是指以三振,步行或击球结尾的字符串。 即,无效的音高字符串具有 在第4球,第3击或击中之后的其他投球 在产生第四个球,第三个打击或命中之前终止。 规则 您的程序必须能够针对给定的输入产生所有可能的结果。 您的程序不必一定是随机的,但仍必须遵循以前的规则。 这是代码高尔夫球。 例子 Input => Possible Outputs 1 => [H] #Can only end with a hit 2 => [S,H], [B,H], [F,H] #Can only end with a hit 3 => [S,S,S], [F,F,S], …

7
近似整数与相邻因子的比例
如果1不算作因素,则 40有两个相邻因素(4和5) 1092有两个相邻因素(13和14) 350没有两个相邻因子(在因子2、5、7、10、14、25、35、50、70和175中,没有两个是连续的) 具有此属性的正整数比例是可以被6(2×3),12(3×4),20(4×5),30、56…中的任何一个整除的比例。如果我们仅计算可被前n个因子整除的比例,则得到的近似值随着n的增加而变得更加准确。 例如,对于n = 1,我们找到被2×3 = 6整除的整数比例,即1/6。对于n = 2,所有可被3×4 = 12整除的整数也可被6整除,因此近似值仍为1/6。对于n = 3,可被6或20整除的整数比例为1/5,依此类推。 以下是前几个值: 1 1/6 0.16666666666666666 3 1/5 0.20000000000000000 6 22/105 0.20952380952380953 9 491/2310 0.21255411255411255 12 2153/10010 0.21508491508491510 15 36887/170170 0.21676558735382265 21 65563/301070 0.21776663234463747 24 853883/3913910 0.21816623274423785 27 24796879/113503390 0.21846817967287144 对于介于提供的值之间的n值,输出应与上述值的输出相同(例如n = 5 →1/5)。 您的程序应采用n并输出小数或十进制答案。您可以在任何偏移量处取n(例如,在此序列中使用0索引或2索引,而不是1索引)。 对于十进制输出,对于给定的所有测试用例,您的程序必须至少精确到5位数字。 …
11 code-golf  number 

2
帕特森高尔夫蠕虫
帕特森蠕虫是一种细胞自动机,存在于无限的三角形网格中,每走一步,它们就会朝某个方向旋转并移动一个单位。它们的定义特性是,它们永远不会两次经过相同的地点,并且每当遇到相同的环境时,他们都会做出相同的决定。蠕虫总是从自己的角度“看到”,其尾巴位于3处,其头部位于此六角形的中心: 例如,考虑使用以下规则的蠕虫: 如果0、1、2、4和5都为空,则沿方向2移动 如果0、1、4和5为空白,并且填充了2,则沿方向0移动 如果0、1和5为空白,而2和4已填充,则沿方向0移动 这将导致以下路径(来自Wikipedia): 如果蠕虫发现自己处于周围所有环境都被淹没的状态,它将终止。 输入值 数字列表。第n个数字表示蠕虫应在必须做出决定的第n个新情况下做出什么决定。请注意,如果除了一个周围的环境外,其他所有空间都被填充,则它必须沿唯一的空白方向移动。这不算作“决定”,也不消耗数字。要生成上面显示的示例蠕虫,输入为[2, 0, 0]。确保输入产生蠕虫,该蠕虫会终止并且不会回溯其路径,并且输入永远不会太短。 输出量 从处开始输出坐标列表,以指示蠕虫头所在的位置(1, 0)。我们将考虑向上和向右移动仅是y值的减小,而向上和向左移动则是x值的减小和y值的减小。例如,示例输入的路径输出为 (1, 0), (1, 1), (0, 0), (-1, -1), (0, -1), (0, 0), (0, 1), (-1, 0), (0, 0) 测试用例 您也可以使用javascript代码段运行测试。 [2,0,0]: (1,0),(1,1),(0,0),(-1,-1),(0,-1),(0,0),(0,1),(-1,0),(0,0) [1,0,4,0,1,5]: (1,0),(2,1),(2,2),(1,2),(0,1),(0,0),(0,-1),(1,-1),(2,0),(2,1),(3,1),(4,2),(4,3),(3,3),(2,2),(1,1),(1,0),(2,0),(3,1),(3,0),(4,0),(5,1),(5,2),(4,2),(3,2),(2,1),(1,1),(0,0),(-1,0),(-2,-1),(-2,-2),(-1,-2),(0,-1),(1,0),(1,-1),(2,-1),(3,0),(4,1),(4,2),(5,3),(5,4),(4,4),(3,3),(3,4),(2,4),(1,3),(1,2),(1,1),(0,1),(-1,0),(-1,1),(-2,1),(-3,0),(-3,-1),(-2,-1),(-1,-1),(0,0) [1,0,5,1]: (1,0),(2,1),(2,2),(1,2),(0,1),(0,0),(0,-1),(1,-1),(2,0),(2,1),(3,2),(3,3),(2,3),(1,2),(0,2),(-1,1),(-1,0),(0,0),(1,1),(1,2),(1,3),(0,3),(-1,2),(-1,1),(-2,0),(-2,-1),(-1,-1),(0,0) [2,0,1,0]: (1,0),(1,1),(0,0),(-1,-1),(0,-1),(0,0),(-1,0),(-1,-1),(-1,-2),(0,-1),(1,0),(2,1),(1,1),(0,1),(0,0) 以下匆忙组装的(可能是越野车)程序将显示蠕虫: 显示代码段 var canvas = document.querySelector("canvas"); var ctx …

3
它是算术几何序列吗?
一个等差-等比数列是算术序列和几何序列的的elementwise产物。例如,1 -4 12 -32是算术序列1 2 3 4和几何序列的乘积1 -2 4 -8。整数算术几何序列的第n个项可以表示为 an=rn⋅(a0+nd)an=rn⋅(a0+nd)a_n = r^n \cdot (a_0 + nd) 对于某些实数ddd,非零实数rrr和整数a0a0a_0。请注意,rrr和ddd不一定是整数。 例如,所述序列2 11 36 100 256 624 1472 3392具有a0=2a0=2a_0 = 2,r=2r=2r = 2,和d=3.5d=3.5d = 3.5。 输入值 的有序列表n≥2n≥2n \ge 2的整数作为输入的任何合理的格式。由于某些几何序列定义允许r=0r=0r=0并定义00=100=10^0 = 1,所以输入是否为算术几何序列将不取决于是否允许rrr为0。例如,123 0 0 0 0不会作为输入出现。 输出量 是否为算术几何序列。输出真实/虚假值或两个不同的一致值。 测试用例 真正: 1 -4 12 -32 …


12
拆分它。但不是所有的!
受此StackOverflow问题的启发。 输入: 我们将接受三个输入: D要分割的分隔符 一个I介于两个字符之间的字符,我们将忽略分隔符(我知道,这听起来有些含糊,但我将在下面进行解释) 一串 S 输出: 包含拆分后的子字符串的列表/数组。 例: Input: D = ',' I = '"' S = '11020199,"Abc ",aduz,,444,bieb,dc,2 ,2222.00,whatever 5dc,222.22,22.00,"98,00","12,000,000",21-09-2018, 06:00,",-,"' Output: ['11020199', 'Abc ', 'aduz', '', '444', 'bieb', 'dc', '2 ', '2222.00', 'whatever 5dc', '222.22', '22.00', '98,00', '12,000,000', '21-09-2018', ' 06:00', ',-,'] 为什么?有关逗号分割通常也分裂98,00,12,000,000并,-,在二/三段。但是由于它们在I输入字符中,因此我们忽略此处的拆分。 挑战规则: 您可以假设I输入字符串中总是有偶数个字符。 您可以假定该字符I将始终有一个D下一个字符(除非它是输入的第一个或最后一个字符),但仍然可以正确分割。所以你不会有类似之类的D …
11 code-golf  string 

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.