编程拼图和代码高尔夫

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

12
沙米尔的秘密分享
给定n(玩家数量),t(阈值)和s(秘密),输出n由Shamir的秘密共享算法生成的秘密。 算法 出于这一挑战的目的,将在GF(251)(size的有限域251,也称为整数mod 251)中进行计算。通常,将选择该字段,使其大小比的素数大得多n。为了简化挑战,字段大小将保持不变。251选择它是因为它是8位无符号整数可以表示的最大质数。 生成t-1(包括)范围内的随机整数[0, 250]。标明这些一个1通过一个T-1 。 构造一个t-1使用次多项式s为恒定值,并从步骤1中的功率的系数的随机整数x:F(X)= S + X *一个1 + X 2 * A 2 + ... + X 叔1 * a t-1。 (含)范围内(f(z) mod 251)每个输出。z[1, n] 参考实施 #!/usr/bin/env python from __future__ import print_function import random import sys # Shamir's Secret Sharing algorithm # Input is taken …
17 code-golf  number-theory  random  cryptography  polynomials  code-golf  number  code-golf  math  number  sequence  code-golf  quine  code-generation  code-golf  arithmetic  set-theory  code-golf  sequence  code-golf  code-golf  string  math  fastest-code  optimization  code-golf  code-golf  internet  stack-exchange-api  code-golf  array-manipulation  code-golf  string  internet  string  code-challenge  internet  test-battery  code-golf  math  pi  code-golf  arithmetic  primes  code-golf  array-manipulation  code-golf  string  code-golf  string  palindrome  code-golf  sequence  number-theory  fastest-algorithm  code-golf  math  number  base-conversion  code-golf  number-theory  sorting  subsequence  search  code-golf  permutations  code-challenge  popularity-contest  code-generation 

3
计算扫雷板的3BV
该3BV一个的扫雷委员会代表解决了板,如果你已经知道了解决方案所需的左边点击的最低数量。它代表“ Bechtel的董事会基准价值”。这是他的网站对此进行解释。 以下是已解决的扫雷板。标记表示地雷;没有地雷的图块指示相邻地雷的计数,包括对角线,除非应将“ 0”的图块留为空白。该图显示了需要单击哪些瓷砖才能解决木板。 计入3BV的点击次数为: 对于每个空白区域(相邻的零个地雷)及其非空白邻居的洪水泛滥区域之一。 互为非地砖。 另一个例子(3BV = 39) 给定2D值数组,0以获取清晰1的地雷(或布尔值),返回3BV。 一块板的尺寸至少为8x8,最大为24x30(含)。您的程序应处理所有可能的电路板,而不仅仅是示例。 注意:板永远不会仅包含地雷。 I / O示例: [[0,0,0,0,0,0,0,0], [0,0,0,1,0,0,0,0], [0,0,0,1,0,0,1,0], [0,1,0,0,1,0,0,0], [0,0,1,0,0,0,0,1], [0,0,0,1,0,0,0,0], [0,0,0,0,0,0,1,0], [0,0,0,0,0,0,0,1]] 23 [[0,0,1,0,0,0,1,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0], [0,0,0,0,0,1,1,1,0,0,1,0,0,0,0,0,0,1,0,0,1,0,1,1,0,0,0,0,0,0], [0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,0,1,1,0,0,0,1,0,1,0,1,0], [0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0], [0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0], [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,1], [0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0], [0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0], [0,0,1,0,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0], [1,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,1,0,0], [0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,1,0,1,1,0,0,0,1,0,0,0,1,1,0,0], [0,1,1,1,0,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0], [0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0,0,0,1,0,0,0], [0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0]] 187

20
反向奇数运行
启示。 任务 在2到2 15个非负整数的给定列表中对奇数进行反向运算。 例子 0 1 →交通 0 1 1 3 →交通 3 1 1 2 3 →交通 1 2 3 1 3 2 →交通 3 1 2 10 7 9 6 8 9 →交通 10 9 7 6 8 9 23 12 32 23 25 27 →交通 23 …

11
我的表情符号干燥了吗?
这是我的宠物表情,比利: -_- 表情符号不喜欢在雨中,所以比利很伤心……让我们给他戴上雨伞让他感觉好些! /\ / \ / \ -_- 很好,他完全被伞遮住了!这是仅覆盖他的一部分的示例: /\ / \ / \ -_- 在这种情况下,他身体的第2部分和第3部分暴露在雨中。 伞有多种形状和大小,但总是由一系列的斜杠/和一系列的反斜杠组成\。例如,这些都是有效的保护伞: /\ / \ / \ /\ /\ / \ / \ / \ / \ 这些不是: / \ \/ \ / \ / \ 0\ / \ //\\ / \ 您需要确定表情符号的哪些部分暴露在雨中。 澄清说明 …

22
独特的筛子
给定一个整数列表,请创建一个布尔掩码,以便可以使用真实索引来过滤列表中的不同值。只要为对应于相同值的每组索引选择一个索引,选择哪个索引才是真正的索引就没有关系。 输入将是适合您的语言的格式的非负整数的非空列表,而输出将是遵循上述规范的布尔值列表。您可以在输出列表中使用自己的真实值和虚假值定义。 在下面的示例中,我定义1为真实且0为虚假。 [5, 4, 7, 1] Input [1, 1, 1, 1] Output Select only the values with with true indicies in the sieve [5 4 7 1] Contains zero duplicate values [5, 9, 7, 5, 6, 0, 5] [0, 1, 1, 1, 1, 1, 0] [ 9, 7, 5, …

7
正常和可视字符串还原
编写一些充当cat程序的代码。即,输入字符串并按原样输出。但是代码的正常还原必须输出输入字符串的正常还原。并且代码的可视化还原必须输出输入字符串的可视化还原。 正常的反转是字符串的反转字符序列。视觉还原是正常的还原,字符分别()[]{}<>替换)(][}{><为。 您可以使用任何包含字符()[]{}<>且在此挑战之前发布的代码页来定义字符。您必须对所有代码使用相同的代码页。您的原始代码在此代码页中必须是有效的,并且将您的任何反向代码应用于该代码页都会产生效果。 这是代码高尔夫,以字节为单位的最短代码获胜。 例 对于字符串AB(XY),其正常和视觉还原分别为)YX(BA和(YX)BA。 如果您的代码(使用假设语言)为AB(XY),则代码)YX(BA和(YX)BA应该分别输出输入字符串的正常和视觉转换。并且AB(XY)应该充当猫的程序。

1
比scanf更好的在C中读取多个int的方法
我试图在高尔夫挑战赛中以C语言读取4个整数,但我为解决该问题所需的代码长度感到困扰: scanf("%d%d%d%d",&w,&x,&y,&z) 那是29个字符,考虑到我的总代码大小是101个字符,这是巨大的。我可以摆脱第一个int,因为我真的不需要它,所以我得到了以下代码: scanf("%*d%d%d%d",&x,&y,&z) 这是27个字符,但仍然很长。 所以我的问题是,还有其他方法(技巧,函数,K&R东西)可以读取我不知道的整数,这可以帮助我减少这段代码吗? 非常感谢。 编辑:一些用户报告说我的问题类似于C中打高尔夫球的技巧 尽管本主题包含许多有助于缩短C代码的有用信息,但它与我的实际用例无关,因为它没有提供更好的读取输入的方法。 我不知道是否有比scanf更好的方法来读取多个整数(这就是为什么我首先要问这个问题的原因),但是如果有的话,我认为我的问题是相关的,并且与全局问题完全不同技巧和窍门。 如果没有更好的方法,那么如果有人找到更好的解决方案,那么我的问题在不久的将来仍然有用。 EDIT2:我正在寻找一个完整的程序(因此没有功能把戏)和所有可能的库。它必须是C,而不是C ++。目前,我的整个程序如下所示: main(w,x,y,z){scanf("%*d%d%d%d",&x,&y,&z)} 只要能缩短代码(这是代码golf :))并且只要它不是c ++,任何技巧都可以接受
17 code-golf  tips 

19
减去其素因子的平方和的范围内的最大数
公式 以数字300为例 300的素数是[2, 3, 5](作为300和素数的唯一数) 对这些数字进行平方会给你 [4, 9, 25] 汇总清单将为您提供 4 + 9 + 25 = 38 最后从原始数字中减去该总和(38)300-38 = 262(这是结果) 输入项 您的输入将是一个大于2的正整数。您必须检查从2到输入值(包括该值)的所有数字,并使用上述公式找到产生最大结果的数字。 输出量 您的输出将是两个数字,中间用空格,逗号,换行符或任何您允许的语言分隔(必须分开才能区分这两个数字)。这些可以输出到文件,stdout或任何您使用的语言。您的目标是找到在通过上述公式运行时产生最大输出的范围内的数字。显示的第一个数字应该是起始数字(例如300),第二个数字应该是公式生成的输出(例如262) 测试用例 Input: 3 Output: 2, -2 Input: 10 Output: 8, 4 Input: 50 Output: 48, 35 Input: 1000 Output: 1000, 971 Input: 9999 Output: 9984, 9802 …

10
压缩图像中的代码
这是奎因变化。 介绍 我们都编写了短代码,因为一些晦涩的原因,但是无论我们做什么,都会占用至少144像素/字节(使用12px字体)。但是,如果我们将图像编码为图像,将会发生什么?这是您今天的任务。 挑战 您的任务是读取自己的源代码(允许使用非正确的quines,例如,从字面上读取源文件),并通过基于ASCII设置像素的红色,绿色和蓝色分量来从中创建图像角色的价值。 例: 我们有字符串“ Hello world!”。 Hello world! 让我们将其转换为ASCII值: 72 101 108 108 111 32 119 111 114 108 100 33 将RGB值映射到它(如果源代码的长度不能被3整除,请使用0s作为剩余字符): __________________________________________________ | R | G | B || R | G | B || R | G | B || R | G | B …

10
受污染的方块
介绍 让我们观察以下仅由数字组成的正方形0 - 9: 1034 4167 8414 3542 这个正方形的外壳是: 1034 4 7 8 4 3542 它包含零,因此我们需要剥去外壳,留下: 16 41 这个正方形的外壳是: 16 41 它不包含任何零,因此是一种无污染的正方形。因此,基本上,无污染正方形的定义是正方形的外壳不包含零时。 任务 给定任意合理格式的数字平方(仅包含非负整数),请通过不断剥离任意合理格式的外壳来输出最大的无污染平方。 测试用例 测试用例1: Input Output 1234 1234 2345 2345 3456 3456 4567 4567 测试案例2: Input Output 123 123 204 204 346 346 测试案例3: Input Output 101 1 …
17 code-golf  number 

1
Symme-尝试此三角试用
通过添加一些空格和换行符(并使其保持相同的阅读顺序),可以将长度为正三角数(1、3、6、10、15 ...)的字符串排列为“等边文字三角形”。 例如,长度为10的字符串ABCDEFGHIJ变为: A B C D E F G H I J 编写一个包含这样的字符串的程序或函数,只包含字符0和1。(您可以假定输入有效。) 对于所得的“等边文字三角形”,输出(打印或返回)表示对称类型的四个数字之一: 2如果三角形具有双边对称性,则输出。也就是说,它从任意一个角到另一侧的中点都有一条对称线。 例子: 0 1 1 1 0 1 0 0 1 0 1 0 1 1 1 1 0 1 0 1 1 1 3如果三角形具有旋转对称性,则输出。也就是说,它可以旋转120°而没有视觉变化。 例子: 0 1 0 0 1 1 0 1 0 …

7
不同底数的素数
挑战: 您将获得以10为底的数字。对于从10倒数到2的每个基数: 以原始输入数字为基数10的字符串,并删除该数字中对基数无效的所有数字。 解释在该基数中得到的数字字符串。如果给出1或0,则终止整个过程。 输出或打印其最大质数,以十进制数表示。 输出可以是最大素数的数组。 示例案例: 输入: 987654321 输出: 379721 10593529 1091 179 1493 293 19 7 交替: [379721,10593529,1091,179,1493,293,19,7] 这将打印的987654321最大素数因子,87654321 9 = 42374116 10,7654321 8 = 2054353 10,依此类推,直到其达到1 2,在那里它停止。

4
实际上是整数Metagolf
背景 实际上(Seriously的后继者)是我在2015年11月创建的基于堆栈的命令式高尔夫球语言。像许多其他高尔夫球语言一样,它具有一字节的命令,这些命令根据堆栈的内容执行不同的功能。它的特色之一是数学-它具有多种基于数学的命令。但是,为了执行数学运算,您必须将(一个或多个)数字放在堆栈上。因为有许多不同的选项,所以以尽可能少的字节来推送特定值是很棘手的。在此挑战中,您将确切地做到这一点:用尽可能少的字节数表示“数字”(特别是整数)。 挑战 给定一个整数N作为输入,输出有效的“实际”代码,导致N被压入堆栈。 输入将在32位有符号二进制补码整数(即包含在内的整数[-2147483648, 2147483647])范围内。 结果必须是整数(不是浮点数,字符串,列表或函数),并且必须在堆栈的顶部。 您可能不对堆栈的内容做任何假设(例如堆栈是否为空)。堆栈上的任何现有值都不得修改或重新排列。 实际上,在我撰写此挑战时,我使用了最新的提交。如果我进行了错误修复或性能增强(或任何其他不删除或更改允许的命令功能的较小更改),则将更新此版本。 您的解决方案必须至少与平凡的解决方案一样好(:在输入之前加上数字数值)。 您的分数将是平凡解的长度之和减去用于选择1000个32位带符号二进制补码整数(用于评分)的输出长度的总和,可以在下面找到。我保留在必要时随时更改得分整数的权利(例如针对测试用例进行优化或测试用例不够彻底)。 解决方案必须在30秒内为每个输入输出有效答案。定时将在标准的免费Cloud9工作区上完成。 指令 为简单起见,(当前)208个命令中仅可以使用141,并且那些与数字运算无关的141的许多重载已被删除。以下是允许的命令列表(格式为<hex code> (<symbol>): <descriptions of functions based on stack values and types>: 0B (♂): take the next command and map it over the top of the stack (for example, ♂A is equivalent to `A`M) 1F (▼): pop …

5
在所有方向上转到矩形的对角-更硬
这与这个问题本质上是一样的,只是难度更大。您将再次编写一个从矩形的左下角到右上角的程序。但是,这次允许对角线移动。 该程序将接受一个有序对(width, height),并将其用作矩形的尺寸。然后,您的程序将创建该解决方案的ASCII艺术形式(.用于一个空的正方形,#该解决方案的一部分以及X用于开始的正方形),并计算到达终点所需的移动次数。 例 输入: (5, 6) 输出: ....# ....# ...#. ..#.. .#... X.... Move count: 5 以字节为单位的最短答案胜出!

5
桥梁和火炬问题
高尔夫难题代码的灵感来自桥梁和火炬问题,其中d的人们必须在最短的时间内跨过桥梁的起点。 要注意的是,最多两个人可以一次过桥,否则桥将因他们的重量而压碎,这群人只有一根火炬可以通过桥。 整个拼图中的每个人都有指定的时间走过桥。如果两个人交叉在一起,那对人和最慢的人一样慢。 没有一定数量的人必须过桥。您的解决方案必须适用于d的任何值。 您无需为此问题使用标准输入,但是为了解释该问题,我将使用以下输入和输出格式进行解释。第一个数字d是桥梁开始处的人数。然后,代码将扫描d个数字,每个数字代表一个人的速度。 代码输出将是从桥的起点到桥的终点穿越每个人,同时满足前面说明的标准所需的最少时间。 以下是一些输入案例和输出案例以及第一个输入案例的说明。您可以根据这些信息派生算法,以尽可能少的代码字节来解决问题。 输入 4 1 2 5 8 输出 15 为了达到这一目标,人民必须以下列方式进行交往。 A and B cross forward (2 minutes) A returns (1 minute) C and D cross forward (8 minutes) B returns (2 minutes) A and B cross forward (2 minutes) 这是另一个测试用例,可以指导您逐步进行。 输入 5 3 1 …
17 code-golf 

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.