编程拼图和代码高尔夫

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

4
Pure Sourcery-整形程序,输出0到9的数字
这是数字0到9的像素化5 x 7字体: .███. █...█ █...█ █...█ █...█ █...█ .███. ..█.. ███.. ..█.. ..█.. ..█.. ..█.. █████ .███. █...█ ....█ ...█. ..█.. .█... █████ .███. █...█ ....█ ..██. ....█ █...█ .███. █..█. █..█. █..█. █████ ...█. ...█. ...█. █████ █.... █.... .███. ....█ █...█ .███. .███. █...█ █.... ████. █...█ …

30
打印3x3网格的所有颜色
您有一个3x3的网格。每个单元格可以染成黑色或白色。显示所有512种颜色。最少的字节数获胜。 您可以以任何形式显示网格,只要它们在视觉上分开并且间距看起来规则即可。您可以使用ASCII艺术作品或图像。黑色和白色可以使用任何两种不同的可见符号或颜色。只要结果在视觉上正确,任何空格都可以。 输出示例: ... ... ... ... ... ..X ... ... .X. ... ... .XX ... ... X.. ... ... X.X ... ... XX. ... ... XXX ... ..X ... ... ..X ..X ... ..X .X. ... ..X .XX ... ..X X.. ... ..X X.X ... ..X XX. ... ..X …

3
我该如何制作?
有21个项目在我的世界,你可以手艺只使用木材和木材制作的物品: 斧头 船 碗 扣 胸部 各具特色表 门 栅栏 门 锄头 梯 镐 木板 压盘 铲 标志 板 楼梯 坚持 剑 暗门 此列表假定使用6种不同类型的木板/平板/门/等。全部算作同一个项目。另一种思考的方式是假设您只能使用一种木材。 这21种物品都有不同的制作配方。我们将这些食谱中的每一个都表示为2×2或3×3的字符网格.WPS。该.是空各具特色插槽,W是木材,P是木板,并且S是枝。这些特殊项目不需要其他字符。 例如,这是用于胸部的食谱: PPP P.P PPP 挑战 编写一个程序,使用我们21个项目之一的名称,与上面显示的完全一样,并为该项目打印有效的制作配方。 工艺配方是翻译不变的,因此,如果输入为fence,则这两个都是有效的: PSP PSP ... ... PSP PSP 如果配方适合2×2网格,则可以将其输出为2×2或3×3网格。例如stick: .P .P ... .P. .P. 食谱也可以水平镜像(围绕垂直对称线),尽管这只会对斧头,头和楼梯产生影响。例如hoe: .PP .S. .S. PP. .S. .S. …

8
魔方争夺战
您的任务是创建随机移动序列,该序列可用于加扰魔方。这样的争夺是由25个动作组成的。每个动作都由字母组成,UDRLFB可选地后跟一个后缀'2。 该表示法称为Singmaster表示法。UDRLFB表示6个面之一,可选的后缀'2表示转角。此信息对于解决任务绝对不是必需的。 为了确保争夺是“高质量”,必须遵循以下两个规则: 两个连续的动作不能使用相同的字母。这禁止连续移动UU,DD,RR,LL,FF和BB和使用可选的后缀像所有的组合U2U或U'U'。 禁止使用这些移动对,因为它们很容易减少为1或0个移动。U2U具有相同的效果U',R'R相同的效果。 三个连续的动作不能属于同一字母组。该信集团是UD,RL和FB。这条规则还禁止连续移动UDU,DUD,RLR,LRL,FBF,BFB和使用可选的后缀像所有的组合U2DU,RL'R或B2FB'。 这些组按其移动轴对面进行排序。U并且D位于同一组中,因为它们都围绕相同的轴旋转。因此,U移动不会影响D面部,D也不会影响U面部。因此,两个动作可以互换,UDU并且具有与相同的效果UUD,并且可以减小为U2D。 挑战 编写脚本或函数,以生成一个随机加扰。没有输入。脚本/功能必须打印25个动作,而不能分开或用一个空格隔开,或者返回相应的字符串。 您的程序必须能够创建满足上述规则的每个加扰。当然,假设随机数生成器是真实随机的,而不是伪随机的。 这是代码高尔夫球。最短的代码(以字节为单位)获胜。 示例输出: 调用脚本/函数3次应打印/返回如下内容: R'B2R2F2R2FB'R2DR2ULFB2RB'U2B'FL'BR'U'RB' U'DBR'B2U'B'U'RUF'B'RDR2U'B'LR'B'F2D2UF2L' BR2F'B'R'D'R'U2B'F2D2R'F2D'F'D2R2B'L2R'UB'R2L'D 如果将每个动作分开一个空格: R2 L' F2 U2 D' R2 L2 F L' D2 U R B D' U2 L B2 L U B2 D U2 R' D2 U' B R D2 F U2 B' R2 F2 …

6
时间旅行股票交易者
故事 很久以前,鲍比(Bobby)用1个中本聪(1e-8 BTC,最小货币单位)创建了一个比特币钱包,却忘了它。像许多其他人一样,他后来也说“该死,如果我再投资更多……”。 他不停地做白日梦,他将所有的时间和金钱都献给了建造时光机。他将大部分时间都花在车库里,没有意识到世俗的事情和关于他的谣言。由于缺电,他将在即将关闭电源的前一天完成样机。从工作台上抬起头来,他看到一辆警车驶向他的房子,看上去像个爱管闲的邻居,以为他在自己的车库里经营一个冰毒实验室,并叫警察。 由于没有时间进行测试,他用过去几年的汇率数据获取USB记忆棒,将Flux电容器连接到Quantum Discombobulator,并发现自己回到了创建钱包的那一天 任务 根据汇率数据,找出鲍比能赚多少钱。他遵循一个非常简单的规则:“低买高卖”,并且由于他以无限小的资金开始,所以我们认为他的行为不会对未来的汇率产生影响。 输入 浮点数> 0的列表,可以是用单个字符(换行符,制表符,空格,分号,可以根据需要选择的任何字符)分隔的字符串,作为命令行参数传递给程序,从文本文件或STDIN中读取或作为参数传递功能。您可以使用数字数据类型或数组而不是字符串,因为它基本上只是带括号的字符串。 输出 Bobbys资本乘以交易结束所乘的因子。 例 Input: 0.48 0.4 0.24 0.39 0.74 1.31 1.71 2.1 2.24 2.07 2.41 汇率:0.48 $ / BTC,因为它即将下降,所以我们以4.8纳元的价格出售所有比特币。因子= 1汇率:0.4,不执行任何操作 汇率:0.24 $ / BTC并上涨:将所有$转换为2 Satoshis。因子= 1(美元价值仍然保持不变) 汇率:0.39-2.1 $ / BTC:不做任何事情 汇率:2.24 $ / BTC:在下跌之前卖出所有东西。44.8纳米美元,系数= 9.33 汇率:2.07美元/ BTC:买入2.164聪,系数= 9.33 汇率:2.41美元/ …

3
区分法语中的男性名词和女性名词(不超过100个字符)
您要编写一个不超过100个字符的小程序。您的程序必须区分男性和女性法语名词。输出应该un是男性的une还是女性的。通常,您可以遵循某些统计规则(例如,如果以“ e”结尾,则女性化的可能性要大于男性)。 输入: 法语单词;它可以包含任何小写字母和破折号,包括带重音符号的小写字母。 输入示例: ami 输出: un如果这个词是男性的,une如果这个词是女性的。 输出示例: un 您不必每个单词都正确;您的目标是尽可能准确。 评分:您的答案必须在100个字符以内。语句如print或console.log或alert根本不指望作为你的总字节数的一部分。您也可以编写执行此任务的函数或方法,在这种情况下,f=x=>属于函数声明的前几个字节(例如)不会计入总数。您的总分数是不正确答案的数量。领带因代码大小而中断。 要测试的名词: un ami un café un chapeau un concert un crayon un garage un garçon un lit un livre un mari un musée un oncle un ordinateur un pantalon un piano un pique-nique un portable un père un …

10
0-1最大相位计数器
考虑一下一个位数组 1 1 1 0 0 0 0 1 0 0 1 0 1 1 1 1 1 0 1 0 如果至少85%的位相同且前/后位都等于多数位,则将长度≥5的连续子数组称为相位。此外,如果它不是某个其他阶段的严格子数组,则将其称为最大阶段。 这是以上示例的最大阶段: 1 1 1 0 0 0 0 1 0 0 1 0 1 1 1 1 1 0 1 0 ------------- ------------- ------------- 如您所见,存在3最大阶段。另一方面,这 1 1 1 …

12
以8种方式读取代码以输出8个数字
英语和大多数编程语言都是从左到右,从上到下编写和读取的,但并非必须如此。 实际上对于文本块 ABC DEF 我可以想到八种相关的阅读方式: 从左到右,从上到下(LTR-TTB): ABCDEF 从上到下,从左到右(TTB-LTR): ADBECF 从左到右,从下到上(LTR-BTT): DEFABC 从下到上,从左到右(BTT-LTR): DAEBFC 从右到左,从上到下(RTL-TTB): CBAFED 从上到下,从右到左(TTB-RTL): CFBEAD 从右到左,从下到上(RTL-BTT): FEDCBA 从下到上,从右到左(BTT-RTL): FCEBDA 挑战 编写一个矩形的文本块,以您选择的语言将其作为八个单行程序以上述八种方式读取。这些程序中的每一个都应输出一个从1到8的不同整数。 哪个读取方向输出哪个数字都没有关系,它们不必与上面的数字匹配。例如,如果您的文本块仍然 ABC DEF 然后该程序ABCDEF可能输出5和FEDCBA力量输出2,而其他六个方案将输出1,3,4,6,7,和8一些秩序。 文本块可以包含除行终止符之外的任何字符。 如果您的语言没有正确的标准输出,则输出应转到标准输出或类似的替代方法。没有输入。您可能会假定程序在REPL环境中运行。 Pietu1998慈善地编写了一个JSFiddle,当给出一段文本时,它给出了8种不同的单行程序。我已经将其放入堆栈片段中: <script>function f(n){n=n.split("\n");var e=n.map(function(n){return n.length}).sort()[n.length-1];n=n.map(function(n){return(n+Array(e+1).join(" ")).substring(0,e)});var t=n[0].split("").map(function(e,t){return n.map(function(n){return n[t]}).join("")});n=[n.join(""),n.reverse().join(""),t.join(""),t.reverse().join("")],n=n.concat(n.map(function(n){return n.split("").reverse().join("")})),document.getElementById("a").innerHTML=n.map(function(n,e){return document.getElementById("b").checked?n+" "+"LLTTRRBB"[e]+"T"+"RRBBLLTT"[e]+"-"+"TBLRBTRL"[e]+"T"+"BTRLTBLR"[e]:n}).join("\n")}</script><textarea onkeyup="f(this.value)" id="c" placeholder="Code"></textarea><br/><input type="checkbox" id="b" onchange="f(document.getElementById('c').value)" checked/> <label for="b">Show directions</label><br/><pre …

9
堆放圣诞礼物
有人急忙堆放圣诞节礼物,真是一团糟: ======================== | | ======================== ============= | | | | | | | | | | | | ============= ======= | | | | | | ======= =================== | | | | | | =================== ================= | | | | | | | | ================= ======= | | | | …

2
书库排序
堆放书籍时,通常需要将最大的书籍放在底部,最小的书籍放在顶部。但是,如果我有两本书,其中一本短(高)但比另一本宽,那么我潜在的OCD会让我感到非常不安。无论我按什么顺序放置它们,顶层的书都会在一侧超出底层的书。 例如,假设一本书具有尺寸(10,15),另一本书具有尺寸(11,14)。不管我以哪种方式放置它们,我都会伸出来。但是,如果我有尺寸为(4,3)和的书(5,6),则可以通过将书本放在书本下面来避免悬垂。 出于此挑战的目的,我们将仅考虑与紧随其后的书有关的突出部分。例如,如果我有一个堆栈(5,5),(3,3),(4,4)(没有任何理智的人会这么做),顶书算是悬垂,虽然它不超出底部的书。同样地,堆栈(3,3),(3,3),(4,4)也只有一个悬,尽管超出底部一个顶部的书。 挑战 给定用于书籍尺寸的整数对列表,请对这些对/书籍进行排序,以使突出的数量最少。您不能旋转书本-我希望所有的脊椎都朝向相同的方向。如果存在多个具有相同悬垂数的解决方案,则可以选择任何此类顺序。您的排序算法不一定是稳定的。您的实现可能假设每本书的尺寸小于2 16。 时间复杂度:为了使这一点更有趣,算法的渐近最坏情况复杂度必须是堆栈大小的多项式。因此,您不能仅仅测试所有可能的排列。请提供算法最佳性和复杂性的简短证明,并提供一个可选的图表,以显示大型随机输入的比例。当然,您不能使用输入的最大大小作为代码在O(1)中运行的参数。 您可以编写程序或函数,通过STDIN,ARGV或函数参数以任何方便的(未经预处理的)列表格式进行输入,然后打印或返回结果。 这是代码高尔夫球,因此最短的答案(以字节为单位)获胜。 我相信存在多项式解,但是如果您可以证明我错了,则可以提交这样的证明,而不是打高尔夫球。在这种情况下,您可以假设P≠NP。我将接受第一个正确的此类证明,并给予悬赏。 例子 In: [[1, 1], [10, 10], [4, 5], [7, 5], [7, 7], [10, 10], [9, 8], [7, 5], [7, 5], [3, 1]] Out: [[10, 10], [10, 10], [9, 8], [7, 7], [7, 5], [7, 5], [7, 5], [4, 5], [3, …

9
在不使用“素数字符”的情况下查找素数
您的任务(如果选择接受)是编写一个接受整数N作为输入的程序/函数。程序/功能应输出/返回前N个质数的列表。但是这里有个要点:不允许在代码中使用质数字符。素数字符是指其Unicode代码点是素数的字符。在可打印的ASCII范围内,这些是: %)+/5;=CGIOSYaegkmq 但是,如果您的代码使用非ASCII字符,则该规则也适用于非ASCII字符。 有效的输入是一个整数Ñ其中0 <N <= T,其中,可以选择Ť,但它必须大于或等于10000。Ť不必是有限的。 对于无效输入(非整数,超出范围的整数),抛出异常或输出/不返回任何结果/为空。 以前导/结尾空白为输入的整数被认为是无效的。 +以符号字符作为输入的整数被视为无效。 以前导零作为输入的整数被视为有效。 如果您的语言允许您传递已经解析的整数作为输入,则上述解析规则(范围1除外)将不适用,因为int已被解析。 输入始终为10。 不允许使用内置的素数生成器和素数测试器(包括素数分解函数)。 源限制是对Unicode字符强加的,但是如果需要,可以对分数的字节计数进行其他编码。 输出可以包含单个尾随换行符,但这不是必需的。 如果您以字符串形式输出/返回素数列表,则每个素数必须由一个或多个非数字字符定界。您可以选择使用哪个定界符。 这是一个代码高尔夫挑战,最短的代码以字节为单位获胜。 堆栈代码片段以验证您的代码 您可以使用下面的堆栈片段来验证您的代码不包含素字符: var primes=[],max=10000;for(var i=2;i<=max;i++){primes.push(i);}for(var N=2;N<Math.sqrt(max);N++){if(primes.indexOf(N)===-1){continue;}primes=primes.filter(function (x){return x===N||x%N!==0;});}function setText(elem,text){var z=('innerText' in elem)? 'innerText' : 'textContent';elem[z]=text;}function verify(inputCode,resultSpan){var invalidChars=[];var success=true;for(var i=0;i<inputCode.length;i++){var cc = inputCode.charCodeAt(i);if (cc>max){setText(resultSpan,"Uh oh! The char code was bigger than the max. …

14
纳米核心战争
这是对《核心战争》的改编,《核心战争》可追溯到20世纪。更具体地说,它使用的是一种非常简化的指令集,主要是基于原始提案。 背景 在《核心战争》中,有两个程序争夺对计算机的控制权。每个程序的目标是通过定位和终止相反的程序来取胜。 战斗发生在计算机的主内存中。该内存称为核心,它包含8192个地址。当战斗开始时,每个竞争对手(称为战士)的代码都会放在随机的内存块中。程序执行在战士之间交替,每个战士执行一条指令。每条指令都可以修改Core的一部分,从而有可能自行修改程序。 目的是终止相反的程序。程序在尝试执行无效指令(即任何DAT指令)时会终止。 指令集 每个程序由一系列低级指令组成,每个指令都有两个字段,称为A和B字段。 该指令集极大地借鉴了原始规范。主要的更改是1)澄清了添加/减去命令的问题,以及2)更改了#寻址模式以使其可以在任何地方使用。Core Wars的大多数完整版本都有20多个操作码,8种寻址模式和一组“指令修饰符”。 操作码 每个指令必须具有七个不同的操作码之一。 DAT A B-(数据)-仅保存数字A和B。重要的是,进程在尝试执行DAT指令时会死掉。 MOV A B-(移动)-将存储位置的内容移动A到存储位置B。这是前后的演示: MOV 2 1 ADD @4 #5 JMP #1 -1 MOV 2 1 JMP #1 -1 JMP #1 -1 ADD A B-(添加)-将存储位置的内容添加A到存储位置B。两者的前两个​​字段被添加,第二个字段被添加。 ADD 2 1 MOV @4 #5 JMP #1 -1 ADD 2 1 …

2
图上的张力,第一部分:波浪线
让我们在域[ -3,3 ]上绘制函数f(x)= sin(πx)+ 0.5 sin(3πx)。我们可以将其解释为躺在板上的松散字符串。现在,让我们驱动Ñ指甲到板在位置(X 1,Y 1)到(X Ñ,Y Ñ),其中X 我 ∈(-3,3)和ÿ 我 ∈[-1,1] 。想象一下,在字符串的末尾有两个孔眼,分别位于位置(-3,0)和(3,0)。现在,我们可以将绳子的末端拉过孔眼,直到绳子拉紧为止。这会将我们的图形变形为分段线性函数。 一些图片可能会有所帮助。在(-2.8,-0.7),(-2.5,-0.9),(-1.2,.2),(-0.5,.8),(0.5,.4),(1.2,-0.9), (1.5,-0.6),(1.8,-0.8)。以下三个图显示了上述过程: 对于较大的版本:右键单击->在新选项卡中打开 这是一个字符串收紧的动画,如果您在可视化上有一些困难的话: 挑战 给定“指甲”列表(不一定要排序),如果它们从上述函数f的形状开始,则绘制这些指甲和绷紧的线。 您可以编写程序或函数,然后通过STDIN,ARGV或函数参数接受输入。您可以在屏幕上显示结果,也可以将图像保存到文件中。 如果将结果栅格化,则其宽度必须至少为300像素,高度至少为100像素。从(-3,-1.1)到(3,1.1)的坐标范围必须至少覆盖图像水平和垂直范围的75%。x和y的长度比例不必相同。您需要显示指甲(至少使用3x3像素)和细绳(至少1像素宽)。您可以包括或不包括轴。 颜色是您的选择,但您至少需要两种可区分的颜色:一种用于背景,一种用于指甲和细绳(尽管这些颜色可能有不同)。 您可以假设所有的钉子都距离f至少10 -5个单位(这样就不必担心浮点误差了)。 这是代码高尔夫球,因此最短的答案(以字节为单位)获胜。 更多例子 这是另外两个(更简单的)示例: {{-2.5, 1}, {-1.5, -1}, {-0.5, 1}, {0.5, -1}, {1.5, 1}, {2.5, -1}} (字符串与x轴重合。) {{-2.7, -0.5}, {-2.3, -0.5}, {-1.7, 0.5}, {-1.3, 0.5}, …

3
二维碰撞检测
这个挑战基于我最近不得不为一个简单的游戏编写的实际碰撞检测。 编写一个程序或函数,给定两个对象,该程序或函数将根据两个对象是否发生碰撞(即相交)来返回真实值或虚假值。 您需要支持三种类型的对象: 线段:由4个浮点数表示,指示两个端点,即(x 1,y 1)和(x 2,y 2)。您可以假定端点不相同(因此线段不会退化)。 圆盘:即实心圆,以3个浮点表示,两个为中心(x,y),一个为(正)半径r。 腔:这些是光盘的补充。也就是说,除了由中心和半径指定的圆形区域之外,空腔会填充所有2D空间。 您的程序或函数将以标识整数(您选择的形式)及其3或4个浮点的形式接收两个此类对象。您可以通过STDIN,ARGV或函数参数接受输入。您可以使用任何未经预处理的方便形式来表示输入,例如8到10个单独的数字,两个以逗号分隔的值列表或两个列表。结果可以返回或写入STDOUT。 您可以假设对象至少为10相隔 -10个长度单位或相交那么多,因此您不必担心浮点类型的局限性。 这是代码高尔夫球,因此最短的答案(以字节为单位)获胜。 测试用例 使用基于列表的输入格式,用表示线段,用表示0圆盘,用表示1空洞2,以下内容均应产生真实的输出: [0,[0,0],[2,2]], [0,[1,0],[2,4]] # Crossing line segments [0,[0.5,0],[-0.5,0]], [1,[0,0],1] # Line contained in a disc [0,[0.5,0],[1.5,0]], [1,[0,0],1] # Line partially within disc [0,[-1.5,0.5],[1.5,0.5]], [1,[0,0],1] # Line cutting through disc [0,[0.5,2],[-0.5,2]], [2,[0,0],1] # Line outside cavity …

6
寻找最大的脆弱素数
考虑一下从位置处的数字开始从数字Remove(n, startIndex, count)中删除count数字的功能。例子:nstartIndex Remove(1234, 1, 1) = 234 Remove(123456, 2, 3) = 156 Remove(1507, 1, 2) = 07 = 7 Remove(1234, 1, 4) = 0 如果所有可能的Remove操作将其设为非素数,我们将称素数X易碎。例如,80651是易碎的素数,因为以下所有数字都不是素数: 651, 51, 1, 0, 8651, 851, 81, 8, 8051, 801, 80, 8061, 806, 8065 目标 编写一个找到最大的易碎素数的程序。编辑:删除了时间限制,因为有一种相对公平的方法可以规避它。 分数是程序发现的易碎素数。如果出现平局,则较早的提交者获胜。 规则 您可以使用任何语言和任何第三方库。 您可以在自己的硬件上运行该程序。 您可以使用概率素数测试。 一切都在基数10中。 领先的作品 Qualtagh(Java)6629位 …

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.