编程拼图和代码高尔夫

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

4
狮子座的扑克脸
扑克脸 介绍 Leo喜欢玩扑克,但是他在Tech Inc.的工作要求他学习如何打法。不反对作为计算机科学家的Leo。他决定花更多的时间来学习扑克,并用它编写一个扑克机器人来帮助他玩得更好。但是现在,狮子座遇到了一个问题:为了了解如何更好地玩游戏,狮子座需要观察由多个“人物”组成的多个游戏,但是“人物”需要不同的游戏风格来提高游戏的质量和真实性。 挑战 Leo回忆说,实际上有一个致力于编程挑战的网站,正在寻求您的帮助!您的工作是编写一个程序,玩“ Pokerface”(五张扑克)的修改版。该程序将以您希望的任何格式将其输入为5张牌,然后程序将输出: 如果玩家希望交换纸牌,则完全(区分大小写)为“ true”,“ 1”或“ t”,否则为任何其他非空输出。 如果为true,则显示玩家希望交换的卡片索引列表和/或卡片名称。 0到3之间的一个数字,指定玩家需要多少张额外的纸牌。 打印出玩家希望使用的手。 (请参见下面的格式) 扑克规则 由于pokerface是基于文本的冒险游戏,因此必须以一致的方式提供卡片。卡用两个字符代码表示,第一个字符是西服,第二个字符是卡的名称。 牌: 2-9 = 2-9 10 = T 杰克= J 皇后= Q 国王= K ace = A 西装: 黑桃= S 球杆= C 心= H 钻石= D 所以黑桃的王牌是SA,红心的10是HT,钻石的第4是D4,依此类推。 一轮Pokerface包含四个步骤: 重新洗牌,向每位玩家发五张牌。 每个玩家都有机会交换任意数量的卡。 每个玩家都有机会再获得最多三张牌。 每个玩家都必须展现自己的最佳手牌。 最佳牌手获胜,并获得该玩家的积分。如果出现平局,两位选手都将获得积分。 在一个游戏中,进行了十轮比赛,得分最高的玩家获胜并获得一个“胜利点”。如果出现平局,则两个玩家都将赢得一个胜利点。 …

5
Pi中的数字运行
您的目标是输出pi(π)的连续相同数字的严格递增的序列。序列中的每个术语都必须比前一个数字长一位。因此3(pi的第0个数字)是第一次出现一连串数字(长度1)。接下来出现的是33(pi的数字24和25)。当然,此序列要求pi的数字以10为底。 到目前为止已知的数字和前六个数字都出现在前800位数内: 3 33 111 9999 99999 999999 3333333 44444444 777777777 6666666666 ... (not in first 2 billion digits) 请注意,连续的9个都在同一运行中同时出现,因此,如果您发现下一个较大的运行恰好是1000个连续0s,则将填充该序列的多个项。 我的程序没有找到更多的用语。我知道前50000位或更多位中没有更多的术语。我的程序花了50万个数字花了太长时间,所以我放弃了。 参考实施 你可以: 永远输出序列 取一个整数n并找到n序列中的第一个数字 取一个整数,n然后n按pi 的第一个数字中的顺序查找数字。 确保指定您的代码执行的操作。该数字n可以是零或一个索引。 受此mathoverflow问题的启发。
13 code-golf  sequence  pi 

11
区分大小写重要吗?
汤姆将实现他发明的一种新的编程语言。但是在实际开始研究之前,他想知道他的语言是否应该区分大小写。 一方面,对他而言,不区分大小写似乎更容易实现,但他担心这可能会导致缺少形成变量的字符组合的可能性,这意味着应使用更长的变量名来避免命名冲突(因为例如,你可以使用Hello,HEllo,heLLo和一堆其他的可能性,如果语言是大小写敏感的,但只HELLO如果没有)。 但是汤姆是一个细心的人,所以仅仅担心对他来说还不够。他想知道数字。 挑战 编写一个函数(或者完整的程序,如果您的语言不支持它们的话),给定一个整数n作为输入,输出(或返回)一个长度字符串的可能排列数量的差异(n不区分大小写)。 用汤姆的语言,变量名可以包括所有字母,下划线,以及从第二个字符开始的数字。 测试用例 Input (length of the variable) -> Output (difference between the possibilities with case sensitivity and the possibilities with case insensitivity) 0 -> 0 1 -> 26 2 -> 2340 5 -> 784304586 8 -> 206202813193260 9 -> 13057419408922746 非竞争性C ++参考实现 void diff(int n) …

5
与元素周期表玩拼字游戏
您已经从元素周期表中获得了一组带有符号的图块。每个符号出现一次。您正在思考要说的话,但您想知道是否可行。 挑战 用您喜欢的语言编写一个程序,该程序将字符串作为输入参数。您可以假定输入不为null,没有空格并且由ASCII字符组成。 如果该单词可以由元素周期表中的符号组成,则程序应使用该字符串并输出一个真值,如果该单词不能,则输出一个假值。 为了使这个挑战更加困难,您不能两次使用符号。因此,如果您使用氮气N,则可能无法N再使用同一单词。 规则 不允许出现标准漏洞。您可以使用元素1-118(氢到Un)中的符号。您可以在此处找到所有元素的列表。您可以根据需要从文件中读取符号列表或输入自变量。 测试用例: Laos - true (LaOs) Amputation - true (AmPuTaTiON) Heinous - true (HeINoUS) Hypothalamus - true (HYPoThAlAmUS) Singapore - true (SiNGaPoRe) Brainfuck - true (BRaInFUCK) Candycane - false 这是一场代码挑战赛,最短的代码胜利。 关闭之前:尽管这看起来与此挑战相似,但我感觉有所不同,因为它不是“从周期表中生成所有可能出现的所有单词的列表”,而是“接受任意输入并确定是否它可以由元素周期表制成
13 code-golf 

12
与邻居交换主要指数
(跟进有关与邻居交换位的问题。) 任务 给定一个正整数x =(2 a ·3 b)·(5 c ·7 d)·(11 e ·13 f)·…,打印通过交换因式分解中的每个连续对素数对的指数而获得的整数,y =(2 b ·3 a)·(5 d ·7 c)·(11 f ·13 e)·… OEIS中的A061898。这是代码高尔夫球,因此最短的程序(以字节为单位)获胜! 测试用例 1 -> 1 2 -> 3 3 -> 2 10 -> 21 37 -> 31 360 -> 756 12345 -> 11578 67895678 -> 125630871
13 code-golf  primes 

8
马里奥能否转到此地图的末尾
创建一个程序,该程序在给定路径输入的情况下确定Mario是否可以E从头开始由表示为S。 路径如下所示: S = E ===== 在路径中,各种符号及其代表的含义是: =:墙壁/地板/天花板。马里奥(Mario)不能穿过墙壁,也不能跌落地板或跳过天花板(他会撞到头) (空间):空气。马里奥(Mario)可以穿过它,跳过去,跌倒它 S:空中,但显示马里奥的出发地。这将始终显示在输入的最左列,即地面上。 E:空中,除了显示马里奥想去的地方。这将始终显示在输入的最右侧一栏,即地面。 输入将在Mario可以行走的每个地方都有空间。 马里奥只能前进。在这个例子中,马里奥无法达到目标 S === === E ==== 他也不能在这个 E == == #== == == == S == ====== 但是,他可以到达所表示的空间#(不会出现在输入中),因为他可以跳到四个单元格高;马里奥是超人。他超人性的另一个例子: S = = = = = = # = = = = = = E ======= 马里奥可以E通过掉远距离,生存下来并从容地走到那里来到达目的地E。请注意,他无法到达#,因为马里奥(Mario)直线下降。 马里奥能跳真的通过比较高,但也不是很靠前。 S E …

4
我的“钥匙孔”让我感到无聊!帮我找到最小的按键
感谢@ Agawa001提出了这个问题。 说明 我的新“键盘孔”只有2个按钮,分别是+和-。 内存中的数字从开始0。 每次连续按+或,-将精确地增加/减少内存连续被按下的次数。 因此,如果按+4次,则第一次加1,第二次加2,第三次加3,第四次加4,为您10(十)。 现在,如果您按-3次,则第一次按1,第二次为2,第三次为3,剩下的是4(四)。 TL; DR 给定一个字符串+和-,请在每次更改字符时将其分开。然后,每个生成的m个+符号字符串将第m个三角形数相加,而n个-符号的每个字符串将第n个三角形数相减。 演练 现在,如果您仍然不了解,我将向您展示如何+++--+--创建1。 Program | Counter | Memory ---------------------------- | 0 | 0 + | +1 | 1 ++ | +2 | 3 +++ | +3 | 6 +++- | -1 | 5 +++-- | -2 | 3 +++--+ | …


1
解析一维语言
给定一个仅包含0的1、2和方括号的字符串,输出该字符串的语法树。 A 2需要2个参数-一个在左侧,另一个在右侧 A 1需要一个参数-向左或向右 A 0不需要任何参数,是基本情况 一对括号作为一个参数,并且括号的内容与字符串的其余部分分开计算。可以使用嵌套括号 输入字符串将始终是一棵完整的树,没有任何字符脱落。该字符串也只有一个正确的解决方案。请注意,这些函数是可交换的,并且参数的任何排列都是2可以接受的。您将不必处理不符合这些要求的输入。 输出语法格式将是function(arguments)递归形式 测试用例 0 --> 0 01 --> 1(0) 020 --> 2(0,0) 101 --> 1(1(0)) 0120 --> 2(1(0),0) 0120210 --> 2(1(0),2(0,1(0))) 01210 --> 2(1(0),1(0)) (020)210 --> 2(2(0,0),1(0)) ((020)20)1 --> 1(2(0,2(0,0)))

8
矩阵三角法
介绍 两种最常见的三角函数,sine和cosine(或sin和cos的简称),可以扩展为矩阵值函数。计算矩阵值类似物的一种方法如下: 考虑以下两个重要的三角恒等式: 使用这些标识,我们可以为sin和导出以下方程式cos: 该矩阵指数存在于所有方阵和由下式给出: 其中A 0是单位矩阵I与A具有相同的维度。使用矩阵指数,可以将这两个三角函数(以及所有其他三角函数)评估为矩阵的函数。 挑战 给定一个正方形矩阵甲,的输出的值sin(A)和cos(A)。 规则 输入和输出可以采用任何方便且合理的格式(2D数组,您的语言的矩阵格式等)。 您可以编写一个程序,两个独立程序,一个功能或两个功能。如果选择编写两个函数,则可能会在它们之间共享代码(例如,导入和帮助函数)。 输入矩阵的值将始终为整数。 由于浮点不精确,您的解决方案可能会出现准确性问题。如果您的语言具有神奇的无限精度值,那么您的解决方案应该可以完美地工作(忽略它需要无限的时间和/或内存的事实)。但是,由于不存在那些不可思议的无限精度值,因此可以接受由有限精度引起的不准确性。制定该规则是为了避免由于要求输出达到特定精度而导致的复杂情况。 不允许为矩阵参数计算三角函数的内建函数(包括双曲三角函数)。允许使用其他矩阵内建函数(例如乘法,乘幂,对角化,分解和矩阵指数)。 测试用例 格式: A -> sin(A), cos(A) [[0]] -> [[0]], [[1]] [[0, 2], [3, 5]] -> [[-0.761177343863758, 0.160587281888277], [0.240880922832416, -0.359709139143065]], [[0.600283445979886, 0.119962280223493], [0.179943420335240, 0.900189146538619]] [[1, 0, 1], [0, 0, 0], [0, 1, 0]] -> [[0.841470984807897, -0.158529015192103, …

3
我爬了多少14人?
用登山术语来说,“ 14er”是指海拔在14 000英尺或以上的任何山脉。但是,还有另一个区别。要使一个高峰算作14er,它的“地理突出度”也必须达到300英尺或更多。这意味着要从一个14er爬到另一个14er,必须首先下降至少 300英尺,然后才能再次上升。举这个例子。1号线计为14000英尺,每条线计为100英尺。 /\__/\ / \ / \ 现在,这两个峰的高程足以计数,但它们之间的高程降幅不足以算作两个单独的峰。因此,其中一个算作14er,另一个算作“部分峰”。这是一个示例,其中两个峰算作两个单独的14er: /\ /\ / \ / \ / \/ \ / \ 两个14ers之间的下降也可能会出现部分高峰。这是最后一个山脉的略微修改版本: /\ /\ / \/\ / \ / \/ \ / \ 该山脉也算作两个14人。 您必须编写一个程序或函数,该程序或函数采用一个代表山脉的ascii艺术表示法,并返回该范围内有14个峰。您可以采用最方便的格式输入,包括2D字符数组,带换行符的字符串或带其他定界符的字符串。您可以假定所有输入将仅包含字符/\_,并且每行的长度将相同(包括尾随空格)。您还可以假设山脉从左下角以a /或a 开头_。 如果山峰的最后一段不在底线,则可以假定山峰仅在此之后减小,例如 / / / 算作单个14er。 您不必处理无效的山脉。 这是一些示例I / O: /\___/\_ / \ /\ …

13
斐波那契产品
您可以将大于0的数字分解为正Fibonacci数字的唯一和。在这个问题中,我们通过重复减去最大可能的正斐波那契数来做到这一点。例如: 1 = 1 2 = 2 3 = 3 4 = 3 + 1 12 = 8 + 3 + 1 13 = 13 100 = 89 + 8 + 3 现在,我将斐波那契乘积称为与上面相同的列表,但加法运算被乘积代替。例如,f(100) = 89 * 8 * 3 = 2136。 编写一个给定正整数n的程序或函数,该函数将返回该数字的斐波那契乘积。 测试用例: 1: 1 2: 2 3: 3 4: …
13 code-golf  math  sequence  fibonacci  code-golf  word  code-golf  cipher  code-golf  string  math  subsequence  code-golf  regular-expression  code-golf  brainfuck  assembly  machine-code  x86-family  code-golf  math  factorial  code-golf  math  geometry  code-golf  math  arithmetic  array-manipulation  math  number  optimization  stack  metagolf  code-golf  tips  assembly  code-golf  tips  lisp  code-golf  number-theory  path-finding  code-golf  number  sequence  generation  code-golf  math  geometry  code-golf  grid  permutations  code-golf  code-golf  graphical-output  geometry  fractal  knot-theory  code-golf  math  arithmetic  code-golf  interpreter  balanced-string  stack  brain-flak  code-golf  math  set-theory  code-golf  math  array-manipulation  code-golf  code-golf  string  natural-language  code-golf  code-golf  math  linear-algebra  matrix  code-golf  string  encode 

21
遍历数组
我们大家经常听到“遍历数组”这个成语的意思是“将函数映射到以下数组”。不过,我需要它做(现在!),所以我希望你能运行通过数组。 我该如何跑步? 想象在你身后有一群野狼 在数组中运行就像遍历一个数组,只是可以跳过元素。是的,有时会很混乱,但是(通常)可以正常工作。您可能会问:“跳过了哪些元素?”。好吧,这是随机完成的。让我们逐步遍历整个数组! 让e是当前元素。 让我们在中random生成一个随机浮点数[0,1)。如果是random() < 0.5,则转到下一个元素,然后转到步骤1。(您可以通过其他方式生成数字,只要它们是(理想情况下)跳过和保留的机会相等即可。例如,您可以使用从一个元素中选择一个元素两人一组,并根据结果执行操作。) 否则,您将在f上执行功能e。 目的 给定一个数组或列表/字符串(如A和)和一个数字K,遍历该数组,并添加K到所访问的每个成员中。输出/返回该数组。A将仅包含非负整数,并且K将永远是非负整数。这是一个代码高尔夫球,因此以字节为单位的最短程序获胜。 测试用例(示例) K, A => possible K' [1, 2, 3, 4], 0 => [1, 2, 3, 4] [1, 2, 3, 4], 1 => [1, 3, 3, 5] [0, 0, 0, 0], 2 => [2, 0, 0, 2]

8
转换为罗马数字!
您的任务是将给定的正整数从阿拉伯数字转换为罗马数字。 当您计数到4000时,事情就会变得困难。 罗马人通过在符号上方添加一条线将该符号乘以来做到这一点1 000。但是,上划线不能完全以ASCII显示。此外,还有两次将符号乘以的上划线1 000 000,然后是三次将符号乘以的上划线1 000 000 000,等等。 因此,我决定使用括号代替上划线。 这些符号可以单独放在括号中。例如,(VI)和和(V)(I)都是的有效表示形式6 000。(V)M也是6000的有效表示形式。 (I)是一种有效的表示方式1 000。 测试用例 Input: 1 Output: I Input: 2 Output: II Input: 3 Output: III Input: 4 Output: IV Input: 15 Output: XV Input: 40 Output: XL Input: 60 Output: LX Input: 67 Output: LXVII Input: 400 Output: …

5
识别圆锥部分
在二维平面上给定5个不同的点,确定由这些点形成的圆锥截面的类型。输出应为一个circle,hyperbola,ellipse,或parabola。 规则 这些点将处于大致线性位置,这意味着没有三个点是共线的,因此通过它们的圆锥将是唯一的。 5点的坐标将是介于-10和10之间(含10和10)的十进制数字。 十进制/浮点型值的精度应为您语言的本机浮点/十进制类型的精度。如果您的语言/数据类型是任意精度,则您可以使用小数点后的12位数字作为所需的最大精度,并四舍五入为零(例如1.0000000000005 == 1.000000000000)。 输出的大小写无关紧要。 输出ellipse时,圆锥曲线实际上是一个圆圈是不允许的。所有圆都是椭圆,但是您必须输出最具体的一个。 关于浮点数的误差和精度: 我正在尝试使其尽可能简单,以免浮点数不准确的问题受到阻碍。我们的目标是,如果数据类型是“神奇的无限精度值”,而不是浮点数/双精度数,那么一切都会正常运行。但是,由于“神奇的无限精度值”不存在,因此您编写的代码假定您的值是无限精度,并且由于浮点错误而出现的任何问题都是功能,而不是错误。 测试用例 (0, 0), (1, 5), (2, 3), (4, 8), (9, 2) => hyperbola (1.2, 5.3), (4.1, 5.6), (9.1, 2.5), (0, 1), (4.2, 0) => ellipse (5, 0), (4, 3), (3, 4), (0, 5), (0, -5) => circle (1, 0), …
13 code-golf  math 

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.