编程拼图和代码高尔夫

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

6
二进制搜索的步骤数
给定正整数输入,输出通过从1开始的二进制搜索找到输入所需的步数。 我们正在模拟对作为输入的整数的二进制搜索,其中模拟的搜索者可以反复猜测一个整数,并告知该整数是太高,太低还是正确。查找整数的策略如下: 令n为我们要查找的输入整数。 从1的猜测开始。(对于每个猜测,请增加步数(无论是否正确),如果猜测正确,则立即停止并输出总步数。) 反复将猜测加倍,直到猜测大于n(目标数字)。(或者,如果它是正确的,但是上面已经提到的我们的正确猜测规则已经涵盖了这一点。) 现在,设置大于n的2的幂的上限(即,刚猜到的数字),并在其正下方设置2的幂的下限。 反复猜测上限和下限的平均值(四舍五入)。如果它太高,则将其设置为上限。如果它太低,则将其设置为下限。此过程可确保最终导致正确的猜测。 这是一个示例,输入n = 21: 1 -> 2 -> 4 -> 8 -> 16 -> 32 -> 24 -> 20 -> 22 -> 21 \__________________________/ repeated doubling \________________________/ repeated averaging 由于这是code-golf,因此以字节为单位的最短代码将获胜。 以下是从n = 1到n = 100的所有输出: 1 2 4 3 6 5 6 4 8 …

21
顺序乘法
您的目标是编写一个接受输入的程序,并在将其链接在一起时N执行“顺序乘法”。您可能会问,什么是顺序乘法?这是一个序列,其种子a定义如下: f(0) = a f(n+1) = f(n)*(f(n)-1) 因此,让a = 5。因此,f(0) = 5,f(1) = f(0)*(f(0)-1) = 5*4 = 20,和f(2) = f(1)*(f(1)-1) = 20*19 = 380。 如果您的程序是ABC,则ABC应该接受输入a和输出f(1)。程序ABCABC应该输出f(2),等等。您的程序系列应该只输入一次,只输出一次。 这是一个代码高尔夫球,因此以字节为单位的最短程序获胜。禁止出现标准漏洞。

4
帮助重新计算您的代表!
几个月前,我们在meta上进行了讨论,讨论如何提高因问题投票而获得的声誉。这是我们目前的投票信誉系统的基础:1 问题投票U值得5个声望。 回答投票u值得10个声誉。 问题或答案不满意d的人值得-2声望。 对于新系统,已经有许多不同的建议,但是当前最受欢迎的与上面的相同,但是问题投票的比例扩大到+10个代表。这项挑战是要计算出安装该系统后您将获得多少代表。 让我们来看一个例子。如果投票活动为UUUUuuuuUUUUUduuudUU,则在当前系统下,您的收入为121: U x 4 x 5 = 20 = 20 u x 4 x 10 = 40 = 60 U x 5 x 5 = 25 = 85 d x 1 x -2 = -2 = 83 u x 3 x 10 = 30 = …

4
所有适合字符串的数字
编写一个使用正整数N的程序或函数。输出所有可以使用数字(),小数点()和负号()精确写成N个字符的十进制数的列表。0123456789.- 例如,一些数字,这将是在N = 4输出列表是1337,3.14,.999,-789,-2.7,和-.09。 数字应以正常方式书写,但应尽可能短。这表示: 如果数字不是整数,则仅应包括小数点。 例如45.0,45.应该写成普通的45 -45.00 应该写成 -45 小数点左边不应有前导零。 03并003应为书面3,但30并300都很好,因为它们是 0.3并且00.3应该写成刚.3 -03 应该写成 -3 -0.3 应该写成 -.3 小数点右边不应有尾随零 .50并且.500应写为.5 900.090 应该写成 900.09 最后两个规则的例外是零本身,应始终将其写为plain0。 +请勿使用正号(),因为它们会不必要地加长数字。 另请注意,负号(-)不应用作减号。它只能作为小于零的数字的第一个字符出现。 格式化 数字输出列表的顺序无关紧要。它可以是上升,下降或完全混合。仅存在所有可以用N个字符写入的不同数字的问题。 列表可以使用空格,换行符,逗号或数字之间的其他某种形式的合理格式设置,只要条件保持一致即可。前括号和后括号(或类似的括号)都可以,但数字引号之类的东西却不是。(即,不要在输出中明显混淆字符串和整数/浮点数。) 例如,当N = 1时,一些有效输出将是: 0 1 2 3 4 5 6 7 8 9 [1, 2, 3, 4, 5, 6, 7, …

5
高效的科学计数法
前几天,我的化学老师向我们解释了科学记数法(使用小数并乘以十的幂可以更轻松地表达大数),这使我回到了几年前。在学习了基础知识之后,我们做了很多典型的数学问题,其中一些问题如下: 用科学计数法表示以下内容: a)50000000 b)120000000000000 c)90000000000000000000000000000000000000 d)pi ^ e ^ i ^ j ^ k ^ std :: vector ... z)200 ... 我想:“什么?我们被告知,科学记数法被用来提高书写效率,但是某些情况下根本没有效率!” 考虑数字 300 及其科学表示法: 3x10^2 什么,科学标记的版本实际上会占用更多空间?现在我们不能拥有它了吗?(屏幕空间是宝贵的。) 我们可以确定自己是否可以用科学计数法写数字更节省空间,或者... 任务 您的程序或函数应输入n任意大小的正数(取决于语言所支持的大小),并输出科学编号的数字。 但是,如果n在删除尾随零和尾随小数位后,原始数字显示的字符数少于或等于其科学标记版本的字符数,则必须输出该原始数字n。 您的代码必须尽可能短,因为输出也必须尽可能短。 技术指标 高效科学计数法定义如下: bx10^e b是输入数除以10的幂以得出的值1 <= b < 10。该数字必须删除所有结尾的零(如果需要,还包括小数点),但必须具有原始数字的精度(当然,要达到您语言中的小数点限制)。也就是说,90000变成9,13.500变成1.35,0.000675变成6.75等。如果该数字最终包含的小数位数超出了您的语言所能处理的范围,则应四舍五入到最大小数位数。 e是将十提高到的指数n = b x 10^e(请记住,如果n小于1 ,则此数字必须为负)。此数字不应有任何尾随零或小数点(主要是因为如果它不是整数,那是错误的...)。 字符x10^ 必须保留在b和之间的字符串中e。 测试用例 Input …
12 code-golf  string  math 

14
准备多项选择测试
介绍 注意:这不是鼓励作弊的方法。正如C'O'Bʀɪᴇɴ所说的那样,学习是通过测试的最佳解决方案:3。 考虑对多项选择测试的以下答案: ABCBCAAB 下表说明了答案是否匹配: A B C B C A A B A 1 0 0 0 0 1 1 0 B 0 1 0 1 0 0 0 1 C 0 0 1 0 1 0 0 0 这给了我们以下数字: 10000110, 01010001, 00101000 挑战是打印这些二进制数字。但是,重要的是要查看在选择题测试中使用了哪些字母。例如: ABCDCDBCDABC 这个最高字母是字母表中D的第4个字母。因此,我们需要输出4个不同的二进制数。即: 100000000100, 010000100010, 001010010001, …

4
选择电影场景
介绍 最后,电影公司为您的电影筹集资金。他们给了您最大的预算,还设置了电影的放映时间。 现在,您可以开始进行预生产。您已经计划了一堆场景,但是并非所有场景都适合预算,因此电影的拍摄时间也会太长。您知道每个场景的重要性。您的目标是选择场景,使电影不会太贵,太长而平庸。 输入值 您得到了,running time并且budget工作室已经批准: [25, 10] 您具有的场景列表包括running time,costs以及importance每个场景的: [ [5, 2, 4], [7, 1, 3] ] 如果阵列不适合您,请选择另一种最适合您的输入格式。时间以分钟为单位。预算和成本以数百万随机货币计。重要性在到的范围内[1–9]。所有数字均为整数。 输出量 在以下情况下,输出要包括在影片中的场景列表: 的总和importance最大。 费用不超过预算。 长度在允许的运行时间的±5分钟范围内。 场景的顺序无关紧要,不需要保留。 您可以输出数字列表或数组。您的输出可以具有从零开始或从一开始的索引: [0,2,5] – 0, 2, 5 – 0 2 5 [1,3,6] – 1, 3, 6 – 1 3 6 可能有多种解决方案适用于任何给定的输入。您只需要找到一个。 约束条件 场景不能缩短,也不能便宜。 每个场景只能包含一次。 要求 您的程序必须在电影的实际长度之内完成。 …

1
是否有变相括号?
有人给了我们一个字符串,但所有类似方括号的字符都已更改为普通字符,我们不知道是哪一个,甚至不知道有多少个。我们所知道的是,如果L1,L2,L3,...,LN是不同种类的左括号和R1,R2,R3,...,RN不同种类的相应右括号,它们都是不同的(2N个不同的括号字符),则字符串是有效的,前提是它是其中的一个(+是普通字符串串联): L1+X+R1,,L2+X+R2...,,LN+X+RN哪里X是有效的字符串, X+Y,其中X和Y是有效字符串, 不是方括号字符的任何单个字符。 空字符串 我们知道,在更改括号之前,它们以有效的字符串开头,并且没有将其更改为字符串中已经存在的任何字符。每个支架也至少存在一对。您可以重构哪些字符最初是左括号和右括号对(找到Li和Ri遵循给定条件)? 输出括号内的字符对。例如,如果(){}[]实际上是方括号字符,则可能输出(){}[]或{}[]()或[](){}等。对于字符串,可能有多种方式执行此操作,您只需要返回一个,这样就不会有带有更多对的方括号分配(请参见示例)。请注意,输出字符串应始终具有偶数长度。 例子: abcc- c不能为方括号,因为没有其他字符出现两次,但ab可以为方括号对,因此您将精确输出ab。 fffff -任何最多包含一个字符的字符串都不能带有方括号,因此您将返回空字符串或不输出任何内容。 aedbedebdcecdec -该字符串不能有任何括号,因为有1 a,2 bs,3 cs,4 ds和5 es,因此两个字符不会出现相同的次数,这是必须有括号的。 abcd-可能的分配是ab,cd,abcd,cdab,adbc,bcad,ac,ad,bc和bd,(以及空分配,其中所有的人都有),但你必须返回最长的任务之一,所以你必须返回abcd,cdab,adbc,或bcad。 aabbcc,abc-这些都有ab,ac和bc为有效对。您必须返回这些对中的一个,无论哪一个都没有关系。 abbac-a和b具有相同的字符数,但是它们实际上不能工作,因为其中一个出现在所有其他出现的左侧和右侧。什么也没返回。 aabcdb- cd和ab是精确的两个括号对,因此输出cdab或abcd。 abcdacbd-只有一对可以立即实现,但是ab,ac,bd,cd,和ad都可能对你可以退货。无论选择哪个对,都有一个实例,其中有一个其他字符,它禁止任何其他对,除非是的情况下ad,其中的其他对bc和cb也不能单独出现,因此不可能与ad。 这是代码高尔夫,因此以字节为单位的最短代码获胜。如果可能的话,来自STDIN的输入。如果不可能,请在答案中指出输入法。

1
绘制并标记ASCII六角形网格
在上一个挑战中,我主要是手工绘制了第一张图(借助vim的可视块模式)。但是肯定有更好的方法... 给定一个二维输入(宽度和高度),则输出具有这些尺寸的六边形网格(在ASCII艺术中)。 这是在简介中引用的图表(进行少量修改),它应该是输入的输出width=7, height=3: _____ _____ _____ / \ / \ / \ _____/ -2,-1 \_____/ 0,-1 \_____/ 2,-1 \_____ / \ / \ / \ / \ / -3,-1 \_____/ -1,-1 \_____/ 1,-1 \_____/ 3,-1 \ \ / \ / \ / \ / \_____/ -2,0 \_____/ 0,0 \_____/ …

3
帮我关上箱子
在发布时,这一挑战的灵感应该非常明显。 任务 您必须创建一个Shut the Box样式程序(不是功能程序)。关闭盒子的基本知识是: 玩家尝试通过转动一组标有1-9的杠杆来关闭盒子。他们必须通过翻转操纵杆来这样做。每个回合的事件顺序如下: 显示了杠杆的当前位置。 在新游戏中,操纵杆的位置应显示为123456789。 在带有关闭杆的游戏中,所有关闭杆均显示为-。例如,在关闭了1、5和9的游戏中,输出为-234-678-。 di(c)e被滚动。 如果杠杆7、8和9都断开,则仅抛出一个六面模。否则,将抛出2个六面骰子。 提示玩家选择他们希望翻转的杆数。 如果玩家选择数字> 9或<0,则游戏结束。 如果玩家选择了已经关闭的手柄,则游戏结束。 玩家选择那么多杠杆。 如果杠杆总和不等于掷出的di(c)e的值,则游戏结束。 如果所有杠杆都关闭,那么恭喜您,您赢了。否则,请返回步骤1。 计划规则 在每一转,您都应该输出控制杆的当前位置。 您必须输出带有短语的纸卷值You rolled:(注意空格)。 您必须提示(并等待)要使用短语切换的操纵杆数量How many levers to flip:(请注意空格)。 您必须提示(并等待)与短语指定的播放器一样多的操纵杆Which lever to flip:(注意空格)。 您必须翻转指定的控制杆。 如果游戏结束,您必须输出Game Over。 如果玩家在没有拉杆的情况下完成转弯,则必须输出 You win! 游戏范例 123456789 You rolled: 5 How many levers to flip: 5 Which lever …
12 code-golf  game  random 

5
实施网址缩短器
网址太长。因此,您必须实现一种缩短URL的算法。 一世。URL的结构 URL有两个主要部分:域和路径。域是第一个斜杠之前的URL的一部分。您可以假定URL不包含协议。道路就是一切。 ii。领域 URL的域将类似于:xkcd.com meta.codegolf.stackexcchhannnge.cooom。每个部分都是按周期分隔的,例如在中blag.xkcd.com,这些部分是“ blag”,“ xkcd”和“ com”。这是您将要执行的操作: 如果它包含两个以上的部分,则将最后两部分放在一边,并连接其余部分的第一个字母。 然后,将其连接到第一个字母到倒数第二个字母。 添加句号以及倒数第二部分的第二个和第三个字母。 丢弃最后一部分。 iii。路径 路径将类似于:/questions/2140/ /1407/。和以前一样,“部分”由斜杠分隔。对于路径中的每个部分,请执行以下操作: 加上斜线 如果它完全由十进制数字组成,则将其解释为数字并转换为36进制整数。 否则,添加零件的第一个字母。 最后,添加一个斜线。 iv。杂项 这是代码高尔夫球,因此最短的代码获胜。 路径可以为空,但URL始终以斜杠结尾。 不会有一个协议(例如http://,file:///) 域中永远不会少于两个部分。 有标准漏洞。 例子 进:xkcd.com/72/ 出:x.kc/20/ 进:math.stackexchange.com/a/2231/ 出:ms.ta/a/1pz/ 进:hello.org/somecoolcodeintrepreteriijjkk?code=3g3fzsdg32,g2/ 出:h.el/s/

4
使用“与非”门构建一个4-vertex Connectedness Tester
阿连接图形是包含任意两个顶点之间的路径的曲线图。 挑战 建立一个[2-input NAND-gate]电路,确定是否连接了4-vertex图。 (一个门的2个输入可以是相同的输入位或另一个门。) 如果已连接图形,则输出True,否则输出False。 输入值 具有4个顶点的简单图的六个可能的边: [ 0 ë 1,0 ë 2,1 ë 2,0 ë 3,1 ë 3,2 ë 3 ] 其中, e b表示顶点a和b之间是否存在边 连接等于以下条件: 如果少于3个输入为True,则输出False。 如果三个以上输入为True,则输出True。 如果恰好3个输入为True,并且它们形成一个三角形,则输出False。 否则,输出True。 使用最少门的答案将获胜。结将被 最低的电路深度(从输入到输出的最长路径的长度)破坏 。

2
注册计算器挑战
一个简单的注册计算器 这个挑战涉及一个简单的注册计算器,该计算器的工作方式如下: 它有一些名为的寄存器A,B,C,...,Z,每个寄存器可以包含一个整数,它们都被初始化为0。 它执行3个字符的指令:任何指令的第一个字符是+,-,*,/,=(加,减,乘,除,复制)之一,第二个字符是寄存器的名称,第三个字符是寄存器的名称或一个的0,1。指令的含义应该很清楚,这里有一些例子: +AB表示“将寄存器的值设置A为的结果A + B”,对于,类似-AB,*AB,/AB。除法A / B与C中相同。 +A1手段“递增寄存器A的1”,并且类似地-A1递减A的1。 =AB装置“的值复制B到寄存器A,类似地=A0,=A1套A到0,1分别。 它以一串连续的指令作为输入,并返回上一个操作的结果,例如: 鉴于=A1+A1*AA它返回4。 鉴于+A1+A1=BA+A1*AB它返回6。 鉴于+A1+A1+A1*AA=BA-B1*AB它返回72。 用您喜欢的编程语言编写这样的计算器很容易,这里是Python的示例: def compute(cmd): opr = {"=": lambda x, y: y, "+": lambda x, y: x + y, "-": lambda x, y: x - y, "*": lambda x, y: x * y, "/": lambda x, y: …

4
平滑vs.矮胖vs.断花体
基于块状vs.平滑字符串。 /\_/\/\__/\/\/\/\_/\_/\当您真的很无聊时,在键盘上制作花粉很有趣。但是,并非所有的花鼓都是一样的。有些花鼓是光滑的,例如\___/,而有些是矮胖的,例如/\/\/\/\。其他人则完全崩溃,例如////_\\\ 在每个N字形字符中,都有字形N-1连接点。每个弯头连接点分为以下三种类型之一: 平滑(角度>“ 90度”): \_ __ _/ 矮胖(角度=“ 90度”) /\ \/ 坏了(没有连接的任何东西) // \\ /_ _\ 让我们来定义的平滑度是那些光滑,结的比例chunkiness和破碎类似定义。每个值的范围在0和之间1。花样的光滑度,粗大度和断裂度之和始终等于1。 例如,该花体/\/\\_//\_具有3个平滑结,4个块状结和2个折断结。因此0.3333,它是光滑,0.4444厚实和0.2222破碎的。 空字符串和只有一个字符的字符串具有未定义的值,所有输入的长度至少为2个字符。 挑战 编写一个程序,接受任意长度的花样,并输出其平滑度,块度和破损值中的任意两个。 您可以编写程序或函数,并通过STDIN,命令行或字符串参数输入。 您可以假定输入的长度至少为> = 2,并且仅由/\_带有可选尾随换行符的字符组成。 打印(或返回一个函数)两个浮点数的精度至少为四舍五入,四舍五入或截断。如果真实值为2/3,可接受的值包括0.6666和之间的任何值0.6667,甚至是诸如0.666637104。如果确切值为1/3,则任何包含的答案0.3333都是有效的。如果值小于1,则可以省略尾随零,也可以省略前导零。 根据需要输出三个值中的任意一对,只需确保说明两个值和顺序。 以字节为单位的最短代码获胜。 例子 /\/\\/\//\\→平滑0,Chunkiness 0.7,残破0.3 _/\\_/\\/__/\\\//_→平滑0.29411764705,Chunkiness 0.29411764705,残破0.41176470588 //\\__/_\/→平滑0.3333333,Chunkiness 0.2222222,残破0.4444444 奖励问题:您更喜欢哪个,平滑的,粗大的或折断的花形?

4
构建非地理幅度优化器™
非图是日本的益智游戏,其目标是根据连续区域的列表绘制黑白图片,如下所示: 将行或列的非地理大小定义为该行或列中连续黑色区域的数量。例如,第一行的非地理大小为1,因为该行中有一个2平方的区域。第8行的非地理大小为3,因为它的第2行,第2行,第1行。 空行或列的非地理大小为0。 您的任务是编写一个程序,使用一个非图的解决方案网格,并生成一个具有尽可能小的填充正方形的解决方案网格,其中每一行和每一列与给定的解决方案网格具有相同的非成像性。 例如,填充了所有正方形的非图格网在每行或每列上的非图量级为1: 只需在网格上有一条对角线条纹,就可以大大减少实心方块的数量,从而达到相同的非影像大小: 您的程序将从该文件中接收到50,000行的输入(1.32 MB tar.gz文本文件; 2.15 MB未压缩),每行代表一个16×16非图解决方案网格,其中随机填充(80%黑色)正方形。输出另外50,000行,每行包含对应输入网格的优化解决方案网格。 每个网格都表示为具有43个字符的base64字符串(从左到右,然后从上到下编码正方形),您的程序将需要以相同格式返回其输出。例如,文件中的第一个网格为E/lu/+7/f/3rp//f799xn/9//2mv//nvj/bt/yc9/40=,并呈现为: 网格从其开始E映射到000100,因此第一行的前六个单元格除第四个单元格外均为白色。下一个字符是/映射到的字符111111,因此接下来的6个单元格全为黑色-依此类推。 您的程序实际上必须为50,000个测试用例中的每一个返回一个具有正确的非地理大小的解决方案网格。如果没有发现更好的结果,则可以返回与输入相同的网格。 返回最少填充总数(以任何语言显示)的程序是赢家,而较短的代码是决胜局。 当前记分牌: 3,637,260 —爪哇Sleafar 7,270,894 -Matlab瑕疵 10,239,288 —乔·Z·巴什(Bash)

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.