编程拼图和代码高尔夫

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

10
使用最少的硬币计算小费
大多数小费计算器应用程序只收取餐费的固定百分比。因此,例如,如果您的餐费为$ 23.45,则可以保留15%的小费= $ 3.52,或更慷慨的20%的小费= $ 4.69。 方便信用卡用户使用。但是,如果您不愿留下现金小费,则情况并非如此,在这种情况下,这些零头钱占了很大一部分。因此,让我们修改一下想法,以使现金用户更加方便。 您的作业 编写尽可能少的字节作为输入的程序或函数: 一顿饭的价格 最小提示百分比 最大小费百分比 并输出在[price * min_percentage / 100,price * max_percentage / 100]范围内的任何小费金额,以使所需的纸币/钞票和硬币数量最小化。 假设美国的货币面额为1¢,5¢,10¢,25¢,$ 1,$ 5,$ 10,$ 20,$ 50和$ 100。 例 这是Python中的非示例程序: import math import sys # Do the math in cents so we can use integer arithmetic DENOMINATIONS = [10000, 5000, …
23 code-golf 

13
黄金时间旅行
不要告诉任何人,但我已经刻痕了我叔叔的时间旅行机器!不过,我的叔叔痴迷于质数,并且在机器上显示出来—他已对其编程,以便只能将其加起来等于质数的日期。 所以不能去,1947-08-15因为1947 + 8 + 15 = 1970,这不是素数。它可以去1947-07-25,因为1947年+ 7 + 25 = 1979年,这是素数。因此,如果我想回去看印度的独立庆祝活动,看来我得提前几周去等待那20天。 我还有其他一些日期想去,同样,我也要去一个到我的目标日期之前(或者如果我很幸运的话,等于)目标日期的日期,该日期必须是一个质数。不过,我很不耐烦,也不想等待太多时间-所以我想找到可以使用的最接近目标日期的日期。 您能给我写一个程序来获取目标日期,并给我我应该输入到时间机器中的日期吗?它是在给定日期之前或等于该日期的最接近的日期,其部分加起来是质数? (对于这个挑战,我们使用的是多功的公历,这意味着我们甚至在人们使用较旧的儒略历时也使用当前的公历。) 输入项 一个约会 理想情况下,当前时代(AD)中的任何日期;实际上,您的语言可以自然处理的任何子集 以任何一种人类可读的格式⁺ 输出量 最接近输入日期的日期,该日期小于或等于输入日期,并且其日期+月份+年的总和为质数。 以任何一种人类可读的格式⁺ ⁺:“可读性”,如日,月,年一样,以任何顺序分别列出 测试用例 1947-08-15 => 1947-07-25 1957-10-04 => 1957-09-27 1776-07-04 => 1776-07-04 999-12-12 => 0999-12-10 2018-06-20 => 2018-06-15 1999-01-02 => 1998-12-29 1319-12-29 => 1319-07-01 (感谢@ Shaggy,@ PeterTaylor和@Arnauld在此问题上的帮助。)
23 code-golf  primes  date 

10
最短的唯一标识子字符串
给定一个字符串列表,请用其非空子字符串之一替换每个字符串,该子字符串不是列表中任何其他字符串的子字符串,并且应尽可能短。 例 给定list ["hello","hallo","hola"],"hello"应替换为,"e"因为该子字符串未包含在其中"hallo","hola"并且它尽可能短。"hallo"可通过任一取代"ha"或"al"并"hola"通过任何"ho","ol"或"la"。 规则 您可以假定字符串将为非空,并且仅包含大小写相同的字母字符。 您可以假定列表中的每个字符串都存在这样的子字符串,即列表中的任何字符串都不是其他任何字符串的子字符串。 输入和输出可以采用任何合理的格式。 这是code-golf,因此请尝试使用您选择的语言使用尽可能少的字节。 测试用例 在大多数情况下,仅给出一种可能的输出。 ["ppcg"] -> ["p"] (or ["c"] or ["g"]) ["hello","hallo","hola"] -> ["e","ha","ho"] ["abc","bca","bac"] -> ["ab","ca","ba"] ["abc","abd","dbc"] -> ["abc","bd","db"] ["lorem","ipsum","dolor","sit","amet"] -> ["re","p","d","si","a"] ["abc","acb","bac","bca","cab","cba"] -> ["abc","acb","bac","bca","cab","cba"] 相关:最短识别子字符串 -类似的想法,但涉及更多规则和繁琐的格式。
23 code-golf  string  code-golf  string  code-golf  array-manipulation  code-golf  quine  code-golf  array-manipulation  integer  matrix  classification  code-golf  quine  code-golf  string  matrix  conversion  code-golf  string  number  code-golf  string  code-golf  number  sequence  integer  code-golf  decision-problem  matrix  code-golf  string  code-golf  math  code-golf  math  array-manipulation  combinatorics  code-golf  random  code-golf  code-golf  alphabet  code-golf  python  c  code-golf  base-conversion  code-golf  string  counting  code-challenge  code-generation  fastest-code  code-golf  kolmogorov-complexity  matrix  code-golf  string  code-golf  array-manipulation  decision-problem  random  sudoku  code-golf  chess  code-golf  card-games  encode  code-golf  decision-problem  code-golf  code-golf  math  array-manipulation  matrix 

25
按最大数字排序
挑战: 给定一个整数列表,请按其最大的一位数字降序排列。具有相同大数字的数字的顺序将按第二大数字排序,依此类推。 我们忽略数字中重复的数字。而且,如果一个数字中的所有数字都相同,则列表中这些数字的顺序可以是您想要的任何方式。 例: Input: [123, 478, -904, 62778, 0, -73, 8491, 3120, 6458, -7738, 373] Possible outputs: [8491, -904, 62778, 478, -7738, 6458, 373, -73, 3120, 123, 0] [8491, -904, 62778, 478, -7738, 6458, -73, 373, 3120, 123, 0] 为什么?以下是对数字进行排序的相关数字: Output: [8491, -904, 62778, 478, -7738, 6458, 373, -73, …

26
逐行打印波浪形字符串
挑战 编写一个将字符串s和整数n作为参数的程序或函数。程序按如下所示转换时应打印(或返回)字符串: 从左上角开始,然后向下和向右移动,以s高度波动的形式书写n。然后,从上到下,将每行合并为一个字符串(无空格)。 例 给定字符串“ WATERMELON”,高度为3: 该波应如下所示: W R O A E M L N T E 然后,合并从上到下的行: WRO AEMLN TE 因此,您的程序应返回字符串“ WROAEMLNTE” 同样,高度为4的“ WATERMELON”应产生以下波动: W E A M L T R O E N 然后,您的程序应返回字符串“ WEAMLTROEN” 规则 输入项 输入可以采用任何合理的格式。在任何情况下,该字符串都可以使用。您可能会认为0 < n <= s.length 输出量 输出应仅包含转换后的字符串(无论是返回还是打印到STDOUT),以及任何结尾的换行符。 计分 这是代码高尔夫球,因此最短答案以字节为单位!不允许出现标准漏洞。 测试用例 Input …
23 code-golf  string 

5
动画Jacob的ASCII梯形图
您可能已经在儿童科学博物馆中看到了雅各的阶梯。如果您不熟悉它们的外观,那么Wikimedia Commons上有一些图像和视频示例。今天的挑战是创建电子设备的动画ASCII版本。最后,它应该看起来像这样: 梯子构造 这是高度(H)为6 的梯子的基本形状: 6 \ / 5 \ / 4 \ / 3 \ / 2 \ / 1 \ / 0 ¯¯ 左侧的数字仅表示此示例的行号,不应包含在输出中。我们将通过数字(R)引用给定的行。第0行是底部¯¯。从1到H的每一行包括四个部分: 空格(U + 0020)重复(H - R)次 反斜线\(U + 005C) 空格(U + 0020)重复(2 * R)次 正斜杠/(U + 002F) 第0行是相同的,除了两个斜杠都用宏¯(U + 00AF)代替。在每行末尾或梯形图下方都可以留有空白。前导空格不是。 电弧构造 构造好梯子后,即可在左侧和右侧之间创建圆弧。一个弧线完全位于一行内,并替换了前导\和尾随之间的空间/。因此,第2行的弧中将包含4个字符,第3行的弧中将包含6个字符,依此类推。每个弧均使用以下规则组成: 唯一允许的字符是_/¯\(U + 005F,U …

30
扩大一些
此挑战基于此Stackoverflow问题。 输入一个正数,将其输出为每个数字的总和乘以10的幂。 输入项 一个数字,作为整数,字符串或数字/字符列表。 该数字将严格为正。 如果您接受数字作为字符串或列表,则它不会以开头0。 输出量 一个字符串,表示每个相关的以10为底的数字的总和,每个数字均乘以其各自的以10为底的幂。总和表示为a + b。如果需要,您可以在+标志的两边最多使用一个空格。操作数以降序列出。 0 永远不能是有效的操作数。 该+符号(是否用空格包围)可能不是开头或结尾部分。 例子 Input Output 12 10 + 2 or 10+2 or 10 +2 or 10+ 2 9 9 123 100 + 20 + 3 10 10 101 100 + 1 无效的输出 2 1 + 1 10 10 + …
23 code-golf  number 

15
多维逆转
给定非负整数的N维正交(无参)数组,并指示要反转的维数,则返回该数组,但沿这些维数反转。该指示可以作为长度为N的布尔列表或从0或1索引的前N个维度的子集的列表给出。 请说明您的输入格式。代码说明深表感谢。 演练示例 我们得到了2层3行4列3D阵列 [[[ 1, 2, 3, 4], [ 5, 6, 7, 8], [ 9,10,11,12]], [[13,14,15,16], [17,18,19,20], [21,22,23,24]]] 和其中之一 [true,false,true](布尔列表) [0,2](0索引列表) [1,3](1索引列表) 我们需要颠倒第一个和最后一个维度的顺序,即颠倒层和行(列)的元素,而不是每一层的行。首先(执行此操作的实际顺序无关紧要),我们颠倒了图层的顺序: [[[13,14,15,16], [17,18,19,20], [21,22,23,24]], [[ 1, 2, 3, 4], [ 5, 6, 7, 8], [ 9,10,11,12]]] 然后我们反转每一行元素的顺序: [[[16,15,14,13], [20,19,18,17], [24,23,22,21]], [[ 4, 3, 2, 1], [ 8, …

11
不断增长的图
考虑固定范围内的一维数字序列,即 [1, 2, 4, 6, 8, 0, 2, 7, 3] in range [0, 10⟩ 不断增长的图形* **是一条线,该线从左到右连接此序列中的所有点,并且始终向上或保持水平。如有必要,该线从上到下环绕,并从那里继续向上到达下一个点。 这项挑战的目标是将序列分成所有不递减的不同子序列,以便与有限的垂直轴一起绘制时,它们将形成一个不断增加的图。这是通过在一个子序列的末尾和下一个子序列的末尾添加一个点来完成的,以便与顶部边界相交的线的角度与与底部边界相交的线的角度对齐,并且两个交叉点具有相同的水平坐标。上面的示例将给出以下输出: [1, 2, 4, 6, 8, 10] [-2, 0, 2, 7, 13] [-3, 3] 相应的图将如下所示: 并延伸轴以获得更好的视图: 所需的输出是构成“不断增加的图”各部分的子序列的列表。进行绘图不是必需的,但是会为您赢得积分;)。输出必须以某种方式清楚地分隔子序列。 笔记 范围的左边界(包括边界)始终为零,右边界为整数N。 该序列将永远不会包含不在范围内的值。 第一个子序列在开始时没有附加点。 最后一个子序列在末尾没有额外的点。 不需要提供绘制子序列所需的起始索引。 测试用例 Input: [0, 2, 4, 6, 1, 3, 5, 0], 7 …

23
编码-随机播放-解码
挑战 您的任务是将整数编码为ASCII字符的字符串,然后在所述字符串被随机混洗后成功解码。 您将编写两个程序/函数,分别称为Encoder和Decoder。 编码器 输入:在范围内的整数。ññn[ 0 ,231− 1 ][0,231-1个][0,2^{31}-1] 输出:一个字符串sss的ASCII字符(不一定打印)。 解码器 输入:字符串s的随机排列s′s′s'。sss 输出:整数ññn。 计分 令一种一种A为s在所有可能值n上的最大长度。如果编码器不确定地起作用(允许,请参见下文),则A将是s可能出现的最大长度(可能为∞)。sssññn一种一种Asss∞∞\infty 令大号Ë大号ËL_E为编码器的长度(以字节为单位),大号d大号dL_D为解码器的长度(以字节为单位)。 然后你的分数是甲⋅ (大号Ë+ Ld)一种⋅(大号Ë+大号d)A\cdot(L_E+L_D)。 提交的分数最低的是胜利。 时限 对于单个测试用例(即n的单个值),编码器和解码器的执行时间都存在1分钟的任意时间限制。ññn 目的是避免通过枚举具有某些属性的所有序列来发现强行编码的解决方案。如果您的解决方案做的比这更聪明,那么它很可能会符合时间限制,并被认为是有效的。同样,如果它在TIO上对ññn一些随机选择值起作用,则将其视为有效。否则,我将在我的机器上对其进行测试,但是请注意,如果您的解决方案是纯蛮力的,则几乎肯定会失败。 规则 该编码器和解码器必须写在同一语言。 对于编码器返回的字符串s的每个可能的排列s ',解码器必须输出正确的整数ññn。s′s′s'sss 该编码器和解码器都不会允许共享信息(通过全局变量或文件的方式,比如)以任何方式。 所述的输出编码器不需要不是确定性的(即,相同的输入ññn如果可以产生不同的输出串的编码器被运行多次),但解码器必须始终猜测正确的整数ññn。 的编码器和解码器可以采取,并返回整数ññn在任何方便的方式(例如,如果n = 14ñ=14n=14是细的输入是14,"14"或[1,4])。 所述编码器可输出的串sss由任一印刷其上stdout 或通过返回一个字符串,一个列表/字符数组或范围内的整数列表/阵列[ 0 ,127 ][0,127][0,127] ; 请注意,解码器将接收输入的置换sss被返回的编码器,所以它应该接受字符串s′s′s'在相同的格式为sss。 禁止出现标准漏洞。 如果可能,请说明您的代码如何工作以及您要求的分数为什么正确。 例 假设n = 14ñ=14n=14。 所述编码器接收14作为输入。它可能输出"qwerty"。 该解码器接收的置换"qwerty"作为输入,例如"tweyqr"。它必须输出14(以任何方便的格式)。 该编码器可能返回[113,119,101,114,116,121],以及,在这种情况下,解码器将已收到(例如)[116,119,101,121,113,114]。 请注意,编码器返回的字符串也可能包含不可打印的ASCII字符(但始终在范围内[0x00, ..., …

12
醉汉之旅之家
醉汉之旅之家 在这个挑战中,您将要编写一个程序,模拟一个酒鬼从酒吧回家的途中。 输入: 输入将是一个邻接矩阵(表示一个有向图),该矩阵表示酒鬼可以采取的路径。在每个位置,酒鬼都会随机选择一条路径(每个选项的机会大致相等,并且与先前的选择无关)。 假设酒鬼总是从柱子开始(邻接矩阵的第一行)。 如果酒鬼陷入死胡同,可以认为他要么回家了,要么因公共陶醉而被捕,程序应该返回他的路。 可以假设该图将始终包含至少一个死角。 还可以假定酒鬼将始终能够退出酒吧(第一行将不全为零),并且如果酒鬼将卡在某个位置,则该行将用全零表示。 输出: 输出将是酒鬼试图回家的道路。位置的值可以为零或一个索引。 例子: Input [1,0,1,1] [0,0,0,0] [1,0,0,0] [1,1,1,1] Possible Outputs [0,2,0,3,2,0,0,3,1] [0,3,0,3,1] Input [0,1,1,1,0,1] [1,0,1,0,1,1] [0,0,0,0,0,0] [0,0,0,0,0,1] [1,0,0,0,0,0] [0,0,0,0,0,0] Possible outputs [0,1,5] [0,5] [0,1,4,0,2] [0,3,5] [0,3,0,1,4,0,5] Deterministic path: Input [0,0,1,0] [0,0,0,1] [0,1,0,0] [0,0,0,0] Output [0,2,1,3]

19
新密码提示:Word-walker
我想到了一种生成密码的新方法,尽管从长远来看它可能不太聪明,但它仍然可以成为有趣的代码高尔夫。 使用一串字,将生成密码: 在第n个单词中选择第n个字符 如果n大于单词,则继续倒计数 例: This is a fun task! T s a u ! T是第一个字符 s是第二 个字符a是第一个字符,但来回移动它也是第三个字符 u是第二个字符,但由于倒数,它也是第四个字符 “!” 是“任务”中的第五个字符!因此将包含在最终密码中,Tsau! 规则 输入将是一个字符串 用空格分隔字符串,必须包含所有其他字符 大写字母必须保持大写,小写字母相同 您在每个单词中执行n步,其中n是之前的单词数加1 如果n大于单词,则必须向后移动单词,如果按了开始,则再次前进,直到您踩了n次 第一个字符和最后一个字符仅跨过一次,因此在第七个位置上的“ fun”以“ funufun”为例,以n结尾,而不是“ funnuff”,以f结尾 输出必须是字符串 例子: Input Output Once Upon A Time OpAe There was a man Taaa Who made a task Waak …
23 code-golf  string 

15
不完全是罗马三元
给定整数n≥0,请使用数字139ABCDE…和1个字符的分隔符以非位置基3表示法将其输出。每个数字都是3的连续幂,并且分隔符左侧的数字被取反,例如 A931 | B →81-(1 + 3 + 9 + 27)→ 41。一个数字只能出现一次。 严格地,让一个数字的值为: 如果数字是1、3或9,则为它的值 27如果数字是 A B.. 之前的数字值的3倍Z 您的输出应满足sum(右边|的数字值)-sum(左边的数字值|)== input。 例子 input output ---------------- 0 | 1 |1 7 3|91 730 |D1 9999 FEDC|GA9 您可以使用其他非空格字符作为分隔符。还允许您没有分隔符,在这种情况下,最大的数字以正数开头。您不需要处理大于2 32 -1(PMIGDCBA9|RQNLH3)的任何东西。 您可以编写完整的程序或函数,并且可以在任何常用通道上提供输入和输出。 这是代码高尔夫球,因此答案越短越好!

25
按给定顺序对字符串进行排序
您面临的挑战是对字符串进行排序,而不是按照正常的字母顺序(abc..xyz),而是按指定的字母对字符串进行排序。 你必须写一个程序或功能有两个输入端:一个字母一个和串小号。两者都将仅包含小写英文字母,并且都将包含至少一个字符。 您必须在移动字母小号,使得第一次出现在信一出现,再取其信在第二出现一个,等有可能会在某些字母小号没有出现在一,这些都应该在年底左右不能相对移动。 测试用例: A S Result axd haxuizzxaxduxha aaaxxxxdhuizzuh a xyz xyz abc dcba abcd il nmiuplliu iillnmupu asdf qwerty qwerty 最小字节获胜!
23 code-golf  string 

10
一个字母适合另一个吗?
你还记得我的垫子按颜色正确分组吗? 昨天我看着它,发现有些字母适合其他字母。示例:一个字母P适合该字母所在的位置R。因此,这是一个简单的挑战:给定两个字母,如果其中一个字母适合另一个字母(直接或旋转但不翻转),则返回真实值,否则返回假值。也就是说,如果输入为[P,R]或[R,P],则必须返回true,因为在两种情况下一个字母都适合另一个字母。如果得到[L,U],则必须返回false,因为两者都不适合。 规则 输入必须是[0-9A-Z]范围内的两个字母数字字符,因为垫子中还有数字,可以按照您需要的任何形式显示(两个单独的字符作为两个输入,一个列表包含两个字符,一个字符串包含2个字符,无论如何)。 输出必须是一致的(真值和假值必须始终相同)。 以下是配件表(请注意,字母始终适合于其适当位置,以防万一您收到类似[Y,Y]输入的内容): char fits inside chars -------------------------------------------------------- C G,O F B,E,P,R G O I 0,1,7,B,D,E,F,H,K,L,M,N,O,P,R,T,V,W,X,Z L E M W P R S O V A W M 0 O 1 B,E,L 3 O 6 9,O 8 O 9 6,O 我郑重保证我已经测试过孩子垫子上的所有配件。(擦干额头上的汗水。) 这是代码高尔夫球,因此每种语言的最短代码可能会胜出! 一些测试案例 input output ------------- [C,G] …

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.