Questions tagged «code-golf»

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

5
通过重复添加2个数字来生成任何数字
您将获得一台具有两个16位寄存器的计算机,x和y。寄存器被初始化x=1和y=0。机器唯一可以执行的操作是加法65536。即: x+=y- x被替换(x + y) mod 65536; y不变 y+=x -类似地 y x+=x- x被替换2x mod 65536; 仅在x偶数时合法 y+=y -类似地 y 目标是在其中一个寄存器(x或y)中获得预定数量。 编写一个程序或子例程,该程序或子例程接收一个数字(在stdin,,argv函数参数,堆栈顶部或任何其他常规位置),并输出一个程序以获取该数字。输出应该转到任何其他常规输出设备stdout,或者(如果您的语言没有stdout)。 输出程序最多可以达到100%加上最佳值的2个步骤。也就是说,如果最短的获取目标编号的程序包含n步骤,则您的解决方案不能超过2n+2。此限制是为了避免“过于简单”的解决方案(例如,计算1、2、3,...),但不需要完全优化;我希望最短的程序最容易找到,但不能确定... 例如:输入=25。输出: y+=x x+=y x+=y x+=x x+=x x+=x y+=x 另一个示例:对于任何斐波那契数,输出具有此交替模式。对于输入= 21,输出为 y+=x x+=y y+=x x+=y y+=x x+=y y+=x 最短的代码(以字节为单位)获胜。 (这个难题的灵感来自于我最近必须生成的16位处理器的一些代码) PS:我想知道-最佳程序最长的数字是多少?

5
将x-illion转换为标准格式
给定一个字符串,该字符串包括一个前缀,然后是“ illion”,请将此数字转换为标准格式。 例如: "million" -> 10^6 "trillion" -> 10^12 "quattuordecillion" -> 10^45 该程序必须能够处理高达100%的输入,即10 ^ 303。可以在此处找到名称及其标准格式值的列表-请注意,这会为每10 ^ 3增量(直到10 ^ 63)给出值,但随后会以10 ^ 30增量给出值,但是这种模式非常简单。 该程序需要处理所有100种情况(甚至没有提供的网站明确给出的情况)-以下是一些示例: "sexvigintillion" -> 10^81 "unnonagintillion" -> 10^276 "octotrigintillion" -> 10^117 输入可以通过STDIN,函数参数或硬编码为字符串来给出。 这是代码高尔夫球,所以最短的代码胜出!

6
模拟循环标签系统
一个循环标签系统是由两个符号的字母(我将使用一个微小的,图灵完备的计算模型{0,1}的),一个有限的,非空的循环列表的制作是由这两个符号,以及无限的词也包括那两个符号。 在每一步: 单词中的第一个元素被删除 如果是0当前产量,则跳过 如果是1当前产生式,则附加在该词的末尾。 下一生产活动。如果这是最后一个作品,请返回第一个。 当单词变为空时,系统停止。 一个例子(来自维基百科): Productions: (010, 000, 1111) Initial word: 11001 Generation Production Word (before) Word (after) 0 010 11001 → 1001010 1 000 1001010 → 001010000 2 1111 001010000 → 01010000 3 010 01010000 → 1010000 4 000 1010000 → 010000000 5 1111 010000000 → …

4
解决Dominion中的加倍和三倍动作
灵感 这个问题的灵感来自于流行的甲板建筑纸牌游戏《Dominion》中的《王座室》和《王宫》。 作为回合的一部分,人们扮演一系列动作。这两个特定动作导致下一个播放的动作重复两次或三次*。其他“一般”动作会导致特定的游戏效果,但是我们对细节不感兴趣,只需用字母标记它们即可。 有趣的情况是,当一个王室或国王法院影响另一个王室的王室时,使自身的加倍或三倍效果增加了一倍或三倍。长久的宝座室,国王宫廷和繁复的动作链会混淆甚至是经验丰富的Dominion玩家。 您的目标是编写使用尽可能少的字节正确解析这些链的代码。在解释这些链如何在Dominion规则中解析之前,我将描述程序要求。 *从技术上讲,您选择受影响的行动是解决“王室”或“国王法院”的一部分,但这种观点对于解决这一挑战是比较干净的。 课程要求 写一个 程序或命名函数。它应该接受所播放的动作链(STDIN或函数输入),并输出或打印因加倍和三倍效果而产生的动作链。最少的字节数获胜。 输入值 一个字符串,表示播放的动作序列。一般的操作是用大写字母来表示A通过Z。特殊加倍动作王座室由人物表示2,三重动作“国王法院”由表示3, 字符(动作)的数量在1到30之间(含1和30)。如果需要,可以在换行符后面输入输入。 输入示例: WA23G3GA 输出量 大写字母组成的字符串A来Z。这应该是解决双重和三重影响所产生的一般动作的顺序,顺序是它们发生的顺序。 如果需要,可以将输出结尾换行。否则不应有其他字符。 输出示例:WAGGGGGGAAA。 Dominion中的两倍和三倍如何工作 在这里,我将详细说明根据自治领规则2,王室室和国王法院的链条如何3工作。 播放后2,下一个要解决的动作将发生两次。因此,如果您先玩2,然后玩A,您会A发生两次。 2A -> AA 同样, A2BC -> ABBC 3DE -> DDDE 3N2BC3XY2 -> NNNBBCXXXY 请注意,在最后一个示例中,决赛2没有任何内容可以加倍,因此没有任何效果。 当倍增或三倍效果本身变为两倍或三倍时,会发生有趣的事情。例如, 22AB -> AABB 首先,您玩2。然后,您播放另一个2,是前一个的两倍2。结果,接下来的两个动作加倍。首先,A解决两个副本。然后,B解决副本。 请注意,A它不是四倍的:在第一个2行为的第A一个副本之后,下一个副本对下一个未解决的行为()起作用B。没有B,我们将拥有 22A -> AA 其中的第二个副本2正在等待下一个操作加倍,但没有任何操作来。 最后,让我们看一个复杂的例子。 223BCDE -> BBBCCCDDE 和以前一样,第一个2导致第二个2被加倍。因此,接下来的两个动作将加倍。第一个副本2将下一个动作加倍3,在解决下一个副本之前必须彻底解决这个问题2。第一副本的3三倍B,第二副本的三倍C。现在,仍在等待的第二个副本2将下一个仍未解决的操作()加倍D。在此之后,不再保留任何倍增或三倍的效果,而最终的动作E只发生了。 …
14 code-golf  game 

2
折数
Pi是一个无理数,表示其十进制表示形式永远不会终止或重复。 Pi被截断为41个十进制数字(40个位)3.1415926535897932384626433832795028841971。 如果忽略小数点并将数字列为正整数序列(避免重复),则会得到3 1 4 15 9 2 6 5 35 8 97 93 23 84 62 64 33 83 27 950 28 841 971(OEIS A064809)。 (注意,15该序列出现在序列中,而不是1 5因为1已经发生。 请注意,0因为它不是正数,所以不会发生;950包含第一个零。) 为了构造第一个归零数,我们使用此序列索引Pi的数字(第一个数字为3,第二个为1,依此类推)。 因此,第一个编号的第一位是Pi的第三位, 第二位是Pi的第一位, 第三位是Pi的第四位,第四位是Pi 的第十五位, 依此类推。 在第一个数字后添加小数点以模仿Pi。 因此,第一个第41位数字是 4.3195195867462520687356193644029372991880。 (请注意,对于第30位,我必须一直到Pi的第974位。) 为了构造第二个序数,使用第一个序数而不是Pi来重复该过程。(Pi本身可以称为零归零数。)因此,新序列为4 3 1 9 5 19 58 ...,第一个海盗数被索引以产生第二个,然后开始9.14858...。 以相同的方式创建更多的打折号,每个打折号都是从之前的打折号生成的。 挑战 您的任务是编写可能的最短程序,该程序采用两个整数N和D,并输出N截断为D十进制数字数字。 …
14 code-golf  pi 

1
最小的类似Boggle的安排
如果忽略关于不多次使用同一字母多维数据集的规则,请考虑如何将单词排列在任意大的Boggle网格上。还要假设您有无限数量的字母立方体(所有字母都存在),并且是。QuQ MISSISSIPPI可以仅使用6个立方体来排列单词。这是一种可能的安排: S MIS PP 从开始,M我们反复在水平,垂直或对角线上采取任何步骤,直到拼出整个单词。 令人惊讶的是,更长的短语AMANAPLANACANALPANAMA也只需要6个立方体: MAN PLC 但是,较长,更复杂的字符串所需的最小多维数据集并不总是很明显。 挑战 编写一个程序,该程序接受一个字符串,并以类似于Boggle的方式对其进行排列,以便使用最少的多维数据集。(生成的网格的尺寸和空单元格的数量无关。) 假设除了空格(十六进制代码21至7E)之外,每个可打印ASCII字符都具有无限数量的多维数据集,因为它用作空网格单元。仅输入可打印的ASCII字符串(无空格)。 输入应从标准输入或命令行中获取。输出应转到stdout(或最接近的备用输出)。 输出中的前导或尾随换行符和空格都可以(但希望没有多余的数量)。 当字符串变长时,搜索空间将呈指数级增长,但是您无需尝试提高算法的效率(尽管那会很不错:))。这是代码高尔夫球,因此以字节为单位的最短解决方案为准。 例 如果输入是Oklahoma!(最少8个字符),则它们都是有效的输出,因为它们都具有正好8个填充的网格单元,并且它们遵循(修订)的Boggle读取模式: Oklaho !m 要么 ! Oamo klh 要么 lkO !amo h 等等

4
是时候做数学了
介绍 这是我最喜欢的数学难题之一。 给定一个数字(例如3)和使用该数字的次数(例如5),请生成10个表达式,仅使用+即可得出1、2、3、4、5、6、7、8、9和10 -,×,÷,^和√(根)(允许使用括号将操作分组)。 例如: (3^3 + 3)/(3 + 3) = (33 - 3)/(3 + 3) = 3 + 3/3 + 3/3 = 5 请注意,以上所有方法均使用5个3和数学运算并将结果求和为5。您也可以在√之前使用3表示立方根。对于在√之前使用4表示第四个根,也是如此。 另请注意,可以使用两个3来形成33,或者可以使用三个3来形成333,依此类推。 挑战 您将获得两个数字(范围从1到5)作为函数参数,STDIN或命令行参数。 第一个数字表示要使用哪个数字,第二个数字表示要在表达式中使用该数字的次数。 您的程序应输出大小为10(或10个以空格分隔的数字)的数组,其中每个元素表示是否(index + 1)可以使用真/假值来计算(仅使用允许的运算符)得出该数字的数学表达式。 例如,如果输入是 1 3 然后输出应该是 [1, 1, 1, 0, 0, 0, 0, 0, 0, 1] 因为只能使用三个1来表示1、2、3和10。 得分了 这是一个代码高尔夫球,因此以字节为单位的最小代码长度为准。 奖金 …

7
倒计时和回收
倒数 您应对此代码高尔夫挑战的目标是倒数,同时回收数量。让我解释。 首先,您的应用程序读取数字,可以作为程序参数或使用stdin。接下来,您只需倒计时像这样: 10 9 8 7 6(以降序排列) 但是,等等,还有更多! 回收利用 在某些情况下,我们可以打印每个数字,但不列出每个数字,我们可以进行回收!让我举一个简单的例子: Input: 110 Output: 11091081071061051041031021010099... etc Recycled: 10 1 现在,我们仍然列出了所有数字110、109、108,但是我们回收了0和1。 另一个例子: Input: 9900 Output: 9900989989897989698959894... etc Recycled: 9 98 高尔夫挑战赛 读取数字(参数或标准输入) 以倒序输出倒计时,同时回收所有可能的数字(到标准输出或文件) 达到1或回收0到9的那一刻(无论先发生什么),请停止 一个简单的例子(直到达到1): Input: 15 Output: 15141312110987654321 (Notice the 110 instead of 1110) 更高级的示例(全部回收): Input: 110 Output: 110910810710610510410310210100998979695949392919089887868584838281807978776757473727170696867665646362616059585756554535251504948474645443424140393837363534332313029282726252423221 Recycled: …
14 code-golf  number 

3
等于长度的表达式
给定一个数字,找到一个等于该数字且长度等于该数字的表达式。 因此,对于的输入15,您可能会输出sixteen minus one,其中包含15个字符(不计算空格)。如果存在多个解决方案,请打印所需的任何内容。如果不存在,请打印impossible 只使用运营商plus,minus,times,和divided by。从左到右评估操作员。 将1234格式化为one thousand two hundred thirty four。请注意缺少“和”,并且没有破折号或逗号。 输入和输出中使用的所有数字必须是小于10,000的正整数。 输入将作为命令行参数给出。打印到标准输出。 例子 1: impossible 4: four 7: impossible 13: eight plus five (you could also output "five plus eight") 18: one plus two times six (note that operators are evaluated from left to right) 25: one thousand …
14 code-golf  math  string 

30
最小排除人数
这旨在成为一个简单的,可识别大小的代码高尔夫球。 所述MEX数字的有限集合(不包括最小数目)是最小的非负整数0, 1, 2, 3, 4, ...,它不出现藏。换句话说,这是补码的最小值。混合运算对于组合博弈论中公正博弈的分析至关重要。 您的目标是编写一个程序或命名函数以使用尽可能少的字节来计算mex。 输入: 任意顺序的非负整数列表。可能包含重复。为了具体起见,列表的长度和元素的允许范围将介于两者之间0(20包括两者之间)。 这里“列表”的定义是灵活的。代表数字集合的任何结构都可以,只要它具有固定的元素顺序并允许重复即可。除其长度外,它可能不包含任何辅助信息。 输入可以作为函数参数或通过STDIN进行。 输出量 最小排除数。输出或打印。 测试用例 [1] 0 [0] 1 [2, 0] 1 [3, 1, 0, 1, 3, 3] 2 [] 0 [1, 2, 3] 0 [5, 4, 1, 5, 4, 8, 2, 1, 5, 4, 0, 7, 7] 3 [3, …
14 code-golf  math 

7
摩尔质量的化合物
任务 编写一个程序,以吸收仅由原子序数小于或等于92(铀)的元素组成的化合物,并在中输出该化合物的摩尔质量grams/mole。 规则与限制 您可能无法使用直接为您计算摩尔质量的函数。 您的程序必须能够在脱机计算机上运行。 您可以使用一个单独的数据文件。必须提供此文件的内容。 如果选择使用1,则分数是程序的长度(以字节为单位)加上数据文件的长度(以字节为单位)。 这是代码高尔夫球,因此,最低分获胜。 输入值 包含该化合物的字符串。可以通读该字符串STDIN,将其作为参数传递或设置为变量(请指定哪个)。以下是所有有效输入: CH2 (一个碳,两个氢) (CH2)8 (8个碳,16个氢) U (1铀) 您的程序不需要对嵌入的括号(即((CH3)2N4)4)起作用,也不需要对包含原子序数大于92的元素的任何化合物起作用。如果您的程序在以上两种情况中的任何一种情况下均不起作用,则必须输出Invalid formula该情况-没有未定义的行为。 输出量 您应该STDOUT将中的化合物的摩尔质量输出到或输出到变量grams/mole。元素的原子质量列表可在此处找到(维基百科)。对于少于100个原子的化合物(四舍五入),您的答案应精确到小数位。 如果输入无效,则Invalid formula必须输出。 有关计算化合物的摩尔质量的信息,请参见grams/mole(Wikipedia)。 例子 Input Output H2O 18.015 O 15.999 (16 acceptable) C6H2(NO2)3CH3 227.132 FOOF 69.995 C6H12Op3 Invalid formula Np 237 (or Invalid formula) ((C)3)4 144.132 (or Invalid formula) CodeGolf …

2
高尔夫多米诺日
给定一组多米诺骨牌,您的任务是弄清楚哪些多米诺骨牌掉下而哪些不掉。 输入值 采取多米诺骨牌设置的矩形ASCII表示形式。以下字符用于ASCII网格: (空格):空单元格 |,-,/,\:多米诺骨牌 多米诺骨牌可以沿8个方向下落,这些方向由以下字母表示(类似于WASD方向): Q W E A D Z X C 一个或多个多米诺骨牌将被这些字母之一替换,以指示该多米诺骨牌一开始就被推了过来。这是一个例子: D||||/ - / - - - - /||||| 我不希望此挑战变成输入解析的练习,因此允许使用以下任何输入形式: 带有网格的字符串(如果有帮助,还可以在其前面加上尺寸) 每行包含一个字符串的数组/列表/元组(可选以及宽度和高度整数) 一个(嵌套的)数组/列表/元组,每个网格单元具有一个字符串/字符(可选以及宽度和高度变量) 您可以从STDIN读取或接受函数参数,甚至可以将输入存储在变量中。 输出量 以任何有效的输入格式写入STDOUT或返回(或将其保存在变量中)结果网格,以指示哪些多米诺骨牌下降了,哪些没有多米诺骨牌。也就是说,将每个下落的多米诺骨牌替换为,#并保持每个站立的多米诺骨牌的状态与输入相同。 规则 当然,多米诺骨牌会通过设置传播它们的下落。由于可能存在竞争条件,因此我们假设存在固定的时间步长,并且下降沿每个时间步长传播一个网格单元。 多米诺骨牌通常会像您直觉地期望的那样落伍,但是严格的常识规范却相当冗长。抱歉,希望这些示例对您有所帮助。这是具有所有独特的两图块组合(最多旋转和反射)的要点。请继续阅读以获取严格的规则。 每个多米诺骨牌只能落在两个方向上: W Q E A | D - / \ X C Z 每当多米诺骨牌掉落时,它都会在掉落方向上影响细胞。如果该单元格包含可沿相同方向或相差45度的方向落下的多米诺骨牌,则该多米诺骨牌将在下一个时间步中落下。 例子: D| -> …

11
让我成为字母树
介绍 在大多数字体中,除大写字母之外,所有大写字母字符BDO都有单行,大约接触到字符边界矩形的四个角中的一些:ACEFGHIJKLMNPQRSTUVWXYZ。 例如,两条腿A“触摸”角色的左下角和右下角。同样,C触摸其右上角和右下角(虽然有点弯曲但足够靠近)。L仅用单行触摸它的左上角和右下角。的左下角L是一个顶点,而不是单条线的末端。 这是一张表格,根据我(希望您)看到的Stack Exchange字体,字符触摸了哪些角落。1用于左上,2用于右上,3左下,4右下。 A: 3 4 C: 2 4 E: 2 4 F: 2 3 G: 2 H: 1 2 3 4 I: 1 2 3 4 J: 1 3 K: 1 2 3 4 L: 1 4 M: 3 4 N: 2 3 P: 3 Q: 4 …

3
让我成为窗口管理员!
我讨厌代码膨胀! 因此,我决定用高尔夫球版替换Windows 7系统。但是,我知道这并不容易,所以让我们首先构建一个原型。它将获取用户的窗口列表,并在标准输出上使用伪图形显示来显示它们。 例如:用户输入: 0,0,15,10 15,10,20,15 10,13,15,15 9,1,16,3 17,5,20,7 11,2,17,4 15,4,19,6 13,3,18,5 CodeGolf®Window Manager™输出: ────────────┐ │::::::::┌─────┴┐ │:::::::::││┌────┴┐ │::::::::└─┤:┌───┴┐ │:::::::::::└─┤::::├┐ │:::::::::::::└─┬──┘├┐ │:::::::::::::::├─┬─┘│ │:::::::::::::::│└──┘ │:::::::::::::::│ │:::::::::::::::│ └────────────┼ │::::│ │::::│ ┌────┤::::│ │::::││:::│ └────┴────┘ 输入: 来自标准输入(或者,如果您的系统没有stdin,那么任何可以提供多行输入的方法) 每行包含4个数字,以逗号分隔-窗口的坐标 前两个数字:左上角;最后两个数字:右下角 使用x,y符号 输出: 将其写入标准输出(或者,如果您的系统没有stdout,则显示等宽文本的任何内容) 使用代码页437中的单个框图绘制字符绘制窗口边界 稍后在输入中指定的Windows使先前指定的窗口模糊 用冒号填充窗口: : 开头和结尾的空格都可以,只要它们不中断窗口的对齐 笔记: 我要支持的最大分辨率:76(水平)乘57(垂直) 无需支持错误的输入 最大窗口数:255(如果需要限制) 我的Windows 7 cmdShell默认情况下显示代码页437个字符;如果有人可以在linux上(使用xterm或其他方式)执行此操作,请在此处进行描述 作为参考,字符代码为: …

9
模拟旋转板
介绍 您正在玩一个匹配的游戏,在该游戏中,硬币由于重力而插入顶部,然后跌至底部(位于顶部硬币上)。 所以这 O <- inserting this coin OO O OOOOO 会变成这个 O OO O OOOOO 现在想象有人顺时针旋转电路板。将发生以下情况: 1.旋转单板 OOO OO O OO O 2.硬币由于重力而掉落 O O OO OO OOO 你的任务 您的任务是通过编写程序或函数来模拟电路板的旋转。为了简单起见,我们只处理一种硬币(不是太刺激的配对游戏,是……)。您可以假定仅在旋转完成后才应用重力。电路板顺时针旋转。 输入值 输入将是一个字符串,其中包含3种类型的字符: O(大写o)或0(零)-一枚硬币(您决定解决方案支持的硬币) (空格)-空字段 \ n(新行)-行尾 输入代表板的状态。您可以假设输入格式正确,并且包含板的有效状态(没有硬币漂浮)。输入可以是功能参数,也可以从标准输入或文件中读取。 输出量 输出是旋转后板的新状态。输出包含与输入相同的3种字符。输出可以从函数中返回,也可以写入标准输出或文件中。 样品 输入1: O OO O OOOOO 输出1: O O OO …

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.