编程拼图和代码高尔夫

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

3
I-Ching对二进制计算机
介绍 《易经》是一种古老的占卜文字,也是中国最古老的经典。它使用一种称为cleromancy的占卜类型,它会产生明显的随机数。 周易的基本单位是卦(卦),它由六叠水平线(stackedyáo)组成。每一行都已断开或未断开。收到的《周易》文本包含全部64种可能的卦 的文王序列呈现64个卦,分组为32对。对于28对,通过将第一个倒置(即旋转180°)来创建第二个卦。此规则的例外是对称六边形在旋转后相同。通过反转每条线来为它们提供合作伙伴:实体变为残破,而残破变为实体。 ▄▄▄▄▄▄▄ ▄▄▄ ▄▄▄ ▄▄▄ ▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄ ▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄ ▄▄▄ ▄▄▄ ▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄ ▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄ ▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄ ▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄ ▄▄▄ ▄▄▄ ▄▄▄ ▄▄▄ ▄▄▄ ▄▄▄ ▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄ ▄▄▄ ▄▄▄ ▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄ ▄▄▄ ▄▄▄ ▄▄▄ ▄▄▄ ▄▄▄ ▄▄▄▄▄▄▄ …

1
蚂蚁可以在立方体上行走拼写单词吗?
编写一个带有两个参数的函数:一个正整数n和一个单词列表。 给定一个n × n × n单位的立方体,请为每个表面单位分配一个随机字母(AZ)。(对于3x3x3立方体,每个面上将有9个表面单元。) 然后确定蚂蚁是否有可能沿着表面走动(具有横穿面孔的能力)拼写所提供的每个单词。假设要拼写一个单词,字母必须在上/下或左/右相邻,但不一定在同一面上。[ 编辑,为清楚起见:蚂蚁可以反转其路径并多次使用字母。每个表面单元都算作一个字符,因此要用重复的字母拼写一个单词(例如“ see”),蚂蚁将不得不访问三个相邻的单元。 该函数应该输出两件事: 1)每个面上的每个字母,以使得可以推断拓扑。例如,对于2x2x2多维数据集,可接受的输出如下所示: QW ER TY OP UI DF JK XC AS GH LZ VB 2)每个单词,以及一个表示布尔值的布尔值,表示蚂蚁是否有可能通过沿着立方体的表面行走来拼写单词。例如: 1 ask 0 practical 1 pure 0 full 奖金挑战(不会因素考虑比分,只是为了好玩):代替ñ仅代表立方体的大小,让ñ也代表了形状的维度。因此,n为2将产生2x2平方;一个Ñ的3将产生3x3x3的立方体; 和Ñ的4将产生的tesseract 4x4x4x4。
10 code-golf 

3
在联合间隔符号中找到2个集合的交点
在联合间隔符号中找到2个集合的交点 给定两组描述为间隔的并集的实数,请输出这两组集合的相交的描述作为相同类型的间隔的并集。 输入集将始终包含间隔的并集,以便每个间隔以不同的整数开始和结束(即,没有间隔的度量为零)。但是,同一集合中的不同间隔可能以相同整数或重叠开始或结束。 输出集还必须是以整数开头和结尾的间隔的并集,但是即使是单个整数,输出中的间隔也不能与其他任何间隔重叠。 输入可以采用任何适合您选择的语言的形式,只要它由两个成对的整数对组成。 例如,您可以将集合表示为: [-10,-4]u[1,5]u[19,20] 或作为: [[-10,-4],[1,5],[19,20]] 或作为: [-10,-4;1,5;19,20] 您的输出表示形式必须与输入表示形式相同(除了它只是间隔的一个列表,而不是两个)。 示例/测试用例: 输入: [[[-90,-4],[4,90]],[[-50,50]]] 输出: [[-50,-4],[4,50]] 换句话说,我们将包含-90和-4之间所有实数以及4和90之间所有实数的集合与包含-50和50之间所有实数的集合相交。交集是包含所有介于-50和-4之间的实数,以及所有介于4和50之间的实数。 -90~~~~~-4 4~~~~~90 intersected with -50~~~~~~~~50 yields: -50~-4 4~~50 输入: "[-2,0]u[2,4]u[6,8] [-1,1]u[3,5]u[5,9]" 输出: "[-1,0]u[3,4]u[6,8]" 输入: [-9,-8;-8,0;-7,-6;-5,-4] [-7,-5;-1,0;-8,-1] 输出: [-8,0] 无效的输出(即使它表示相同的集合): [-8,0;-7,-5;-5,0] 得分: 这是代码高尔夫球,因此以字节为单位的最短源代码获胜,可能会受到以下奖励的影响。 奖金: 如果您还支持正和负无穷大作为区间的边界,则为-15%。您可以选择代表这些数字的令牌。(是的,无穷大是超现实中的数字; P)

2
破解保险柜!
受/puzzling/24334/to-catch-a-thief的启发 将为您提供一个n由s和s(或您选择的任何其他字符)填充的by n(n本身是可选输入)网格。您的目标是使每个单元格相同(或)。您可以按照以下定义进行一系列移动(注意与“ Puzzling SE”链接有所不同):0101 选择一个单元格。 同一行和同一列中的每个单元格(单元格本身除外)都变为相反。0到1和1到0。 输出完成任务所需的最少移动次数。如果无法解决,则输出除非负整数以外的任何内容。最短的代码获胜。 样本数据 1 0 0 0 0 0 0 0 0 -1 1 1 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 …

3
画一个圣诞星/星状十二面体
在圣诞节,纸星星是我家庭中的一件大事,所以我认为虚拟的星星会很酷。 下面是常规十二面体的图像(来自https://en.wikipedia.org/wiki/Dodecahedron,归因于此处提到的作者。) 当应用于多面体时,星状过程(维基百科)涉及到扩展这些面直到它们与其他面交叉。因此,从常规十二面体开始,我们获得以下形状: 小星状十二面体,大十二面体和大星状十二面体 图片来自http://jwilson.coe.uga.edu/emat6680fa07/thrash/asn1/stellations.html 这是十二面体(Wolfram)的三个可能的星状。当我们将面孔延伸得越来越远时,它们从十二面体自然过渡到小型星状十二面体,大十二面体和大星状十二面体。 任务 您的程序或函数应显示以下多面体之一或将其输出到图像文件:常规十二面体,小星状十二面体,大十二面体或大星状十二面体。 配色方案应为上面的第二张图像。六对相对的面中的每一个均应为红色,黄色,绿色,青色,蓝色和洋红色六种颜色之一。您可以在您的语言或其文档中使用带有这些名称的默认颜色,也可以使用FF0000,FFFF00、00FF00、00FFFF,0000FF和FF00FF的颜色(如果需要,可以通过将强度降低到至少75%来降低这些颜色,例如将F减为C。) 请注意,我们将“面”定义为同一平面上的所有区域。因此,在上面的图像中,正面为黄色(平行的背面也将为黄色)。 背景应为黑色,灰色或白色。边缘可以省略,但如果绘制则应为黑色。 规则 显示的多面体的宽度必须在500到1000像素之间(宽度定义为任意两个显示的顶点之间的最大距离。) 显示的多面体必须是透视投影(视点距离多面体至少5个宽度)或正射投影(实际上是视点在无穷远处的透视投影)。 多面体必须可以从任何角度显示。(选择最简单的角度并制作硬编码的2D形状是不可接受的。)用户可以通过以下两种方式指定角度: 从标准输入或作为函数或命令行参数输入对应于三个旋转的三个角度。这些角度可以是欧拉角(第一个和最后一个旋转都围绕同一轴)或泰特布赖恩角(其中每个绕x,y和z轴旋转一个角度)https://en.wikipedia.org/ wiki / Euler_angles(简单地说,只要每次旋转均围绕x,y或z轴且连续旋转均围绕垂直轴,任何事情都会发生。) 用户可以任意多倍地绕x和y轴旋转多面体10步,并刷新显示(假定z轴垂直于屏幕)。 多面体必须是实体,而不是线框。 不允许用于绘制多面体的内置函数(我在看着你,Mathematica!) 计分 这是代码高尔夫。以字节为单位的最短代码获胜。 奖金 如果您不将内置函数用于3D绘图,则将您的分数乘以0.5。 如果可以显示十二面体的所有三个星号,则将分数乘以0.7,用户可以通过从stdin输入的整数1-3或函数或命令行参数来选择十二面体。 如果您同时获得这两个奖金,您的分数将乘以0.5 * 0.7 = 0.35 有用的信息(来源如下) https://zh.wikipedia.org/wiki/Regular_dodecahedron https://zh.wikipedia.org/wiki/Regular_icosahedron 十二面体有20个顶点。它们中的8个形成具有以下笛卡尔(x,y,z)坐标的立方体的顶点: (±1,±1,±1) 其余的12个如下(phi是黄金比例) (0,±1 /φ,±φ) (±1 /φ,±φ,0) (±φ,0,±1 /φ) 小星状十二面体和大十二面体的凸包显然是规则的十二面体。外部顶点描述一个二十面体。 根据维基百科,可以以与(0,±1,±φ)的循环置换类似的方式描述二十面体的12个顶点。小星状十二面体和大十二面体的外部顶点(与上面的十二面体的比例相同)形成一个较大的二十面体,其中顶点的坐标是(0,±φ^ 2,±φ)的循环排列。 十二面体和二十面体的面之间的角度分别为2 arctan(phi)和arccos(-(√5)/ 3)。 …

4
上下文中的标题关键字
这个挑战是基于D.Parnas中描述的问题,该问题基于将系统分解为模块所用的标准,并且在J.Morris的《功能语言的实际编程》中进行了阐述。 stdin以一种合理,方便的语言格式编写一个程序或函数,该程序或函数以或从中获取书名列表作为参数。例如, Green Sleeves Time Was Lost 要么 ("Green Sleeves";"Time Was Lost") 返回或打印到stdout按字母顺序排列的关键字列表,通过将每个关键字括在尖括号(<和>)中,显示其在原始标题中的上下文。与输入一样,输出可以采用合理的格式,这对于您的语言非常方便-换行符分隔的行,字符串列表等: <Green> Sleeves Time Was <Lost> Green <Sleeves> <Time> Was Lost Time <Was> Lost 标题将由一系列用单个空格分隔的关键字组成。关键字将仅包含字母字符。关键字应按字典顺序排序。标题将是唯一的,并且关键字在每个标题内将是唯一的,但是在多个标题中可能存在相同的关键字。如果一个关键字存在多个标题,则输出应以任意顺序列出每个外观。例如,给定此输入: A Dugong A Proboscis 有效的输出将是: <A> Proboscis <A> Dugong A <Dugong> A <Proboscis> 要么: <A> Dugong <A> Proboscis A <Dugong> A <Proboscis> 这是代码问题 …

9
别名还是N8?
甲numeronym(也称为“数字收缩”)是当一个字使用数字缩短。一种常见的收缩方法是使用替换后的子字符串的长度来替换除第一个和最后一个字符以外的所有字符。例如,使用i18n的代替internationalization或,L10n而不是localization。(L大写字母是因为小写字母看起来与相似1)。 当然,同一个词组中的几个词可能具有相同的缩写形式,因此您的工作是将一组词转换为它们的别名,或者,如果存在一些具有相同词名的不同词,则程序应给出一个的A7s R4t缩写,Ambiguous Result是的(是的,我知道这个结果本身就是模棱两可的结果。) 规则: 使用程序或功能,然后打印或返回结果。 输入被视为单个字符串。 输出是由空格分隔的单词的单个字符串。 您的程序无需转换长度为3的单词,也不必转换较短的单词。 如果l(小写的ell)将在1(一个)之前出现,则应将其设置为大写。 如果I(一只大写的眼睛)出现在1(一只)之前,则应将其设为小写。 输入将是可打印的ASCII和空格。单词之间用空格隔开。 最短的代码获胜。 例子: A7s R4t -> A7s R4t (OR: A1s R1t, etc) Ambiguous Result -> A7s R4t Billy goats gruff -> B3y g3s g3f Thanks for the Memories -> T4s f1r the M6s (one possible answer, NOT: Thnks fr …
10 code-golf  string 

3
Euchre机器人(纸牌游戏)
这个挑战的想法很简单:创建一个机器人来玩纸牌游戏Euchre。 对于那些还不了解它们的人,我在这里向Euchre列出了规则,因为它们与这项挑战有关。 我建议使用python或类似的东西,但唯一真正的限制是它必须与控制器代码兼容 输入: 根据游戏或回合的当前阶段,您的euchre机器人将获得不同种类的输入。一般而言,您将在第一行进入游戏阶段,然后是逗号和团队所拥有的积分数量,然后在接下来的几行获得相关数据。 按时间顺序,您的漫游器将按以下顺序获取输入: Ordering Trump: js,ah,qc,ts,jc // the cards in your hand 2 // number of points your team has 0 // number of tricks your team has taken ordering // the phase of the game th // the turned up card p,p // each previous player’s …

1
黑色星期五队列管理
介绍 您是一家大型零售商店中电子部门的经理,一年中最大的销售日是本星期五。为了帮助管理人群,您的商店正在实施最大交易的票务系统,客户必须在购买商品之前出示票证。您的工作是编写一个程序来验证票证。 由于商店中唯一可用的计算机(由于预算削减)是一台损坏了键盘的恐龙(而且您所拥有的都是USB键盘,这些键盘不兼容),因此您必须用鼠标输入程序。因此,您的程序应尽可能短。 产品展示 您的商店正在使用以下五种不同的产品进行销售。每个产品都有一个全小写的名称,以及在一天中的什么时候可以购买多少个不同的规则。 television:有5库存的平板电视可能从00:00:00(午夜)到采购00:59:59。 smartphone:有10智能手机库存,但从00:00:00(午夜)起排队的所有客户在00:59:59用完时会收到一张代金券。 tablet:有些10平板电脑可以随时购买。 laptop:从00:00:00(午夜)到可以购买数量不限的笔记本电脑07:59:59。 lightbulb:随时可以购买无限数量的灯泡。 输入值 多行字符串,每行采用以下格式。行按时间戳排序。 <time stamp> <product name> <ticket number> 票证号码为8位数字。最后一位数字是一个校验位,等于前七个数字模10的总和。要生效,票证号必须具有正确的校验码,并且必须严格大于所有先前的票证号。 产品名称是上面列出的字符串之一。 时间戳是一天中的格式的时间HH:MM:SS,其中HH是从00-23两位数小时,MM并且SS是两位数分钟和秒分别。 输出量 输出是以下字符串之一,每张票证一行。必须按顺序应用条件。 Expired offer (适用于电视,智能手机和笔记本电脑。)门票的时间戳是在购买产品的截止日期之后。 Invalid ticket 票证号小于或等于前一张票证的号,或者校验位无效。 Give voucher (适用于智能手机。)该产品缺货,但是在报价过期之前排队的所有客户都可以进行雨淋检查。 Out of stock(适用于电视和平板电脑。)所有产品均已售出。抱歉,数量有限。 Accepted满足所有条件,所以给他们产品。请注意,只有接受的票证才能减少库存的物品数量。 例 Input Output ---------------------------- -------------- 00:00:00 television 00010001 Accepted 00:00:25 smartphone 00011697 Accepted 00:01:25 …

3
生成牙签序列
什么是牙签序列? 根据维基百科 在几何形状中,牙签序列是一个二维图案序列,可以通过将线段(“牙签”)重复添加到序列中的先前图案来形成。 设计的第一阶段是单个“牙签”或线段。第一阶段之后的每个阶段均采用先前的设计,并针对每个裸露的牙签末端,在该末端以直角居中放置另一个牙签。 此过程导致增长的模式,其中阶段n的段数以分形模式在0.45n2和0.67n2之间振荡。如果T(n)表示阶段n的段数,则当n接近2的幂时,出现T(n)/ n2接近其最大值的n值。发生在大约是2的幂的1.43倍的数字附近。牙签序列中各阶段的结构通常类似于T平方形或Ulam-Warburton细胞自动机中的细胞排列。 该图案中所有被牙签包围的边界区域(但不能被牙签交叉)必须是正方形或矩形。据推测,牙签图案中的每个开放矩形(即,一个完全被牙签包围但内部没有牙签的矩形)的边长和面积为2的幂,其中边长之一最多两个。 任务 您必须制作一个程序或函数,使其从STDIN,函数自变量或命令行自变量中获取输入,并在该阶段进行嘟嘟分形。除不可避免的情况外,禁止在行尾使用换行符。边界框必须最小,包括前导和尾随空间。对于初始线,我们\在空间中设置两个对角线。输入保证小于2000。至少一行具有非空格字符。允许尾随空格。 测试用例 1 \ \ 5 \ /\ /\ / /\ \/\/\ \ \ \ \ \/\/\ \/ / \/ \/ \

8
感恩节火鸡
(希望它仍然是您的感恩节) 您在感恩节晚餐上得到了火鸡,但您不知道如何均匀分配。问题是,有些人比其他人吃得更多,所以您需要找到解决方案 输入值 将有两个输入。首先将是各种人的ASCII艺术。 o o \|/ \|/ | | | / \ / \ 技术规格 每个人占用3列的宽度。每个人都由一列空格分隔。每个人的最上层是一个o。在下方,分别o以1和偏移-1x \和/。从输入o到的第二行到最后一行,|每人这些的数量即为它们的“高度”。您需要从每个人中提取的唯一数据是他们的“身高”。 总会有至少一个人。每个人的身高至少为 2。程序应处理的最大高度至少为64。 如果您想用空格填充输入以形成矩形,请在答案中指定。 第二个输入是土耳其。火鸡并不是真正的火鸡,而是更大的NxM火鸡尺寸。如果第二个输入为3x2,则土耳其的尺寸为3 * 2,总面积为6。 输出量 输出可能是列表,或者是您语言最接近的替代项(例如Array)。您也可以输出一个字符串,其值之间用空格分隔。 每个人的值应按输入顺序输出。 挑战 您的目标是在人们之间划分火鸡的面积。 一个示例场景: 假设他们是两个人,身高分别为3和6。如果有火鸡5x3。土耳其需要分配的总面积为15。 现在,您将如何在所有人之间分配它?就是这样: the_persons_height TurkeyForAPerson = -------------------- * turkey_area sum_of_all_heights 这意味着,对于第一个身高为的人3,他们将得到3/9*15火鸡,或5,对于第二个身高为的人,6他们将获得6/9*15或10火鸡。 输出量 输出必须仅由数字和组成.,除非您选择获得奖金。在这种情况下,它只能由数字,空格()和斜杠(/)组成。 完整的例子 输入: 6x5 o | o \|/ \|/ …

1
设置理论算术(+和*)
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为Code Golf Stack Exchange 的主题。 4年前关闭。 集合理论算术 前提 已经存在涉及不使用乘法运算符的乘法(这里和此处)的几个挑战,并且这个挑战是相同的(最类似于第二个链接)。 与以前的挑战不同,此挑战将使用自然数(N)的一组理论定义: 和 例如, 等等。 挑战 我们的目标是使用集合运算(请参见下文),以对自然数进行加法和乘法。为此,所有条目将使用其解释器在下面的相同“设置语言”。这将提供一致性并简化评分。 该解释器允许您将自然数作为集合进行操作。您的任务是编写两个程序主体(请参见下文),其中一个加上自然数,另一个自然将它们相乘。 集合的初步说明 集合遵循通常的数学结构。以下是一些要点: 集不排序。 没有集合包含自身 元素是否在集合中,这是布尔值。因此,集合元素不能具有多重性(即元素不能多次出现在集合中。) 口译员和细节 用于此挑战的“程序”以“设置语言”编写,并且由两部分组成:标题和正文。 标头 标头非常简单。它告诉解释器您正在解决什么程序。标题是程序的开始行。它以+or *字符开头,后跟两个以空格分隔的整数。例如: + 3 5 要么 * 19 2 是有效的标头。第一个表明您正在尝试解决3+5,这意味着您的答案应该是8。除了乘法之外,第二个相似。 身体 正文是您对口译员的实际指示所在。这才是真正构成您的“加法”或“乘法”程序的要素。您的答案将包含两个程序主体,每个任务主体一个。然后,您将更改标题以实际执行测试用例。 语法及指示 指令由一个命令后跟零个或多个参数组成。为了以下演示的目的,任何字母字符都是变量的名称。回想一下,所有变量都是集合。label是标签的名称(标签是单词,后跟分号(即main_loop:),int是整数。以下是有效的说明: 流量控制: jump label无条件跳转到标签。标签是一个“单词”,后跟一个分号:例如,main_loop:是一个标签。 je A label 如果A为空则跳转到标签 jne A label …

7
在下雨吗?我不知道
这些是雨滴: ! | . " : 这些是云粒子: ( ) _ @ $ & 我想让您验证一下,是否有文本在下雨。如果在每个雨滴上方都存在一个云团,则在下雨。每个雨滴都必须有一个云粒子。输出表示您的结论的真实或虚假值。 有效的例子 (@@@@@@) ( $ & ) Q ( ) .. . ! : . |" ! . ()()() ...... @_$ & errrr h_r-5 .:. . " 无效的例子 ! () $$$$$ ( ) ::::: ..... 这是一个代码高尔夫球,因此最短的字符程序胜出。

8
四舍五入之前需要加1的小数位数是多少?
当四舍五入一个数字时,如果下一位数字是>= 5您加1。例如: 3.1415926535 rounded to 1dp is 3.1 3.1415926535 rounded to 4dp is 3.1416 <-- Note the 5 changed to 6 3.1415926535 rounded to 5dp is 3.14159 3.1415926535 rounded to 9dp is 3.141592654 <-- Note the 3 changed to 4 您面临的挑战是接收一个整数作为输入并输出小数位数,然后在该位数之前四舍五入该数字的平方根-即出现的数字位数之前的小数位数>= 5。 整数将在0到100,000之间(含0和100,000),因此对于59752的边缘情况,您需要支持17个小数点(以检查第17位)。 如果您的编程语言无法更改小数点位数,则可以显示“?” 给用户的信息。 例: Input Root Output 5 …
10 code-golf  math 

4
重排不等式
背景 该排序不等式是基于重排数的不平等。如果我有两个长度相同的数字列表,则x 0,x 1,x 2 ... x n-1和y 0,y 1,y 2 ... y n-1相同长度,其中I允许重新排列列表中的数字,最大化和x 0 y 0 + x 1 y 1 + x 2 y 2 + ... + x n-1 y n-1的一种方法是对2个列表进行排序非递减顺序。 在此处阅读Wikipedia文章。 任务 您将编写一个从STDIN接受输入的程序,或者接受2个数字(长度相同)的数组(或相关容器)的函数。 假设您编写了一个接受两个数组(a和b)的函数,您将找到重新排列第二个数组(b)中的数字以最大化的方法: a[0]*b[0]+a[1]*b[1]+a[2]*b[2]+...+a[n-1]*b[n-1] 在这种情况下,如果阵列b为[1 0,2 1,2 2,3 3,3 4 ](指数为清楚起见), [1 0,2 1,2 2,3 …

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.