编程拼图和代码高尔夫

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

3
有损文本压缩
背景 一个字节可以表示的256个可能的字符中,大多数情况下仅使用其中的几个。我们不能以某种方式利用此优势,并通过消除对很少使用的字母的需要来使我们的文本文件更小? 在大多数情况下,许多字母没有任何价值,可以用更常见的字母代替。例如,在大多数情况下,小写字母“ L”,大写字母“ I”和数字“ 1”看起来几乎相同,因此可以对其进行合并。 几乎不需要大写字母,因此可以省去。解压缩/显示程序甚至可以自动将每个句子的首字母大写,常用名等。 规则 参赛作品的评选依据: 压缩率 解压缩后的可读性 将针对本文的纯文本版本测试条目:http://en.wikipedia.org/wiki/Babbage和随机选择的BBC新闻文章。 额外的分数将被授予;保留任何标记,解压后美化(即大写句子等)。 语言能力 您喜欢的任何对象,但必须在基本的* nix框上轻松编译(或解释)。

13
玩名字游戏
编写一个程序来玩名字游戏。 输入项 您的程序应以某种方式接受单个名称作为用户输入的名称(例如,从标准输入中读取或作为命令行参数)。您可以假定名称是一个单词,由一个大写字母和一个或多个小写字母组成。 输出量 您的程序必须通过填写以下模板,按照歌曲中的说明打印给定名称的押韵: (X), (X), bo-b(Y) Banana-fana fo-f(Y) Fee-fi-mo-m(Y) (X)! 在这里,(X)是原始名称,并且(Y)是小写的名称,其中删除了所有初始辅音。 但是,有一个例外。如果原始名称以或开头m,则应在相应的行上写上不带该字母的字母。例如,如果名称为,则“ b”行应以结尾。请注意,在这种情况下,任何其他辅音被保留,所以对于它的,不是。fbBobbo-obFredfo-redfo-ed 例子 雪莉: Shirley, Shirley, bo-birley Banana-fana fo-firley Fee-fi-mo-mirley Shirley! 阿诺德: Arnold, Arnold, bo-barnold Banana-fana fo-farnold Fee-fi-mo-marnold Arnold! 鲍勃: Bob, Bob, bo-ob Banana-fana fo-fob Fee-fi-mo-mob Bob! 弗雷德: Fred, Fred, bo-bed Banana-fana fo-red Fee-fi-mo-med Fred! 计分 最短的代码胜出。
9 code-golf 

2
浮点加法,无浮点!
您的任务是用任何一种语言编写一个程序,该程序无需使用任何分数或浮点数学运算即可将两个浮点数加在一起。允许使用整数数学。 格式 数字的格式是包含1和0的字符串,它们表示IEEE 754 32位float的二进制值。例如,数字2.54将由字符串“ 010000000010001010001000111101011100”表示。 目标 您的程序应以上述格式输入两个数字,将它们加在一起,然后以相同格式输出结果。任何语言中最短的答案都将赢得! 规则 绝对不允许使用浮点数,十进制或任何类型的非整数数学函数。 您可以假设输入是干净的(即仅包含1和0)。 您可以假定输入是数字,而不是Inf,-Inf或NaN或次正规量。但是,如果结果大于最大值或小于最小值,则应分别返回Inf和-Inf。异常(异常)结果可能会刷新为0。 您不必正确处理舍入。如果您的结果有些出众,请不要担心。 测验 要测试您的程序,您可以使用此工具在十进制和浮点二进制数之间转换。 1000 + 0.5 = 1000.5 01000100011110100000000000000000 + 00111111000000000000000000000000 = 01000100011110100010000000000000 float.MaxValue + float.MaxValue =无穷大 01111111011111111111111111111111 + 01111111011111111111111111111111 = 01111111100000000000000000000000 321.123 + -123.321 = 197.802 01000011101000001000111110111110 + 11000010111101101010010001011010= 01000011010001011100110101010000 祝好运!

1
建立一个简单的代理
制作最短的代理服务器。 输入/输出规格 客户: 输入:端口号(32位整数)(,)或(空格) URL(请参见测试用例) 输出:URL的html源 服务器: 输入:要侦听的端口(32位整数) 输出:从客户端接收到输入时为REC,在将html源发送给客户端后为OK。 规则 您可以使用解释语言制作完整的程序或功能。 输入通过stdin或作为参数给出。 您的代码仅适用于给定的测试用例(更多是可选的,更少是无效的)。 客户端输出必须与从浏览器“查看源代码”获得的输出相同。 服务器可以在每个已处理的请求之后退出(即不必是持久的/守护程序) (编辑)禁止指定以外的任何其他输入/输出。 测试用例(客户输入) N 1 https://stackoverflow.com/ N 2 http://en.wikipedia.org/wiki/Proxy_server N 3 http://stackexchange.com/search?q=code+golf 其中N i是1到2048之间的随机整数。

5
高尔夫定点组合器
用您选择的语言编写尽可能少的字符的定点组合器。 自由形式(即最短的形式):整个程序,实际功能,代码段 如果您有一个标准库,则可能无法使用 但是,您可能希望从其他高级函数中提取它,而不是从基础上构造它 请包括将其用作演示的递归阶乘或斐波那契。 在这个问题中,自引用是可以接受的,其目的仅仅是将其从递归函数中删除。

3
物理高尔夫:倾斜射击
“而现在,完全不同。” 一个愤怒的小鸟以一个角度β开枪水平的速度ü。地面陡峭,倾斜角度为α。在鸟撞到地面之前找到它行进的水平距离q。 制作一个函数f(α,β,u),该函数返回长度q:鸟在撞到地面之前所经过的水平距离。 约束和注意事项: -90 <α<90。 0 <β<180。 α总是小于β。 0 <= u <10 ^ 9。 假设由于重力g = 10而产生的加速度。 对于α,β,可以使用弧度而不是度。 u的尺寸无关紧要,只要它们与g和q一致即可。 没有空气阻力或任何花哨的东西。 最短的代码胜出。 有关某些方程式,请参见维基百科有关弹丸运动的文章。 样品: f(0, 45, 10) = 10 f(0, 90, 100) = 0 f(26.565, 45, 10) = 5 f(26.565, 135, 10) = 15
9 code-golf  math 

1
为迷宫游戏构建引擎
这是“ 打印迷宫问题” 的后续内容。如果您喜欢这个问题,请添加更多迷宫生成算法;)。 对于此任务,您将必须为一个必须在迷宫中找到宝藏并离开地牢的玩家实现游戏引擎。 引擎首先从标准输入中.读取迷宫,然后在一行中包含(点)命令行中作为参数指定的文件。接下来,将玩家@放置在地图上的随机位置。然后引擎开始通过标准io与播放器进行交互: 从引擎到播放器的命令: continue:游戏未完成。印刷环境,后跟.。玩家由@角色代表。不可观察的细胞用表示?。 finished:游戏结束。打印步骤数,游戏停止。 从播放器到引擎的命令: north:将玩家上移。 south:将玩家下移。 west:向左移动播放器。 east:向右移动播放器。 来自播放器的任何无效命令(例如撞墙)都将被忽略,但仍会计数。您可以自由定义自己喜欢的环境。 点最短的代码。 复杂环境的点(例如打印大区域并替换看不见的单元格?)。 没有不遵守io格式的代码没有意义 范例: 在此示例中,周围环境定义为3x3单元,播放器位于中间。 $ cat maze +-+-+ |#| | | +---+ $ python engine.py maze |# @ --- . east |#| @| --+ . north +-+ |@| | . south |#| @| --+ . …
9 code-golf  maze 

4
N皇后问题[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为Code Golf Stack Exchange 的主题。 5年前关闭。 已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 在国际象棋中,女王可以移动到棋盘水平,垂直或对角线延伸的程度。 给定NxN大小的棋盘,请打印出N个皇后可以在棋盘上放置多少个位置,并且一举步就不能互相击中。

9
将单词分成相等分数的部分
假设A = 1,B = 2 ... Z = 26,并且一个单词的值是这些字母值的总和,则可以将某些单词分为两部分,使它们具有相等的值。 例如,“ wordsplit”可以分为两部分:ordsl wpit,因为o + r + d + s + l = w + p + i + t。 这是我的计算机老师给我们的挑战-显然,这是Lionhead Studios的旧挑战。我已经在Python中解决了该问题,并将很快发布我的答案。 挑战:最短的程序,可以列出所有具有相等分数的拆分。请注意,它仅需为每个字母组列出一个字母-例如,ordsl wpit与rdosl wtip相同。按照它们出现的顺序列出它们会更容易。 奖金: 如果您在两个单词都是有效的英语单词(或字母的某种排列形式)上突出显示对,请使用某种单词列表。(这可以通过在每个方法或其他方法旁边放置一个星号来完成,但要明确说明。) 添加用于删除重复项的选项(这不是默认选项。) 支持两个以上的拆分,例如三个,四个甚至n路拆分。
9 code-golf  word 

4
快速画线算法
任务是找到一种在16位整数数组中绘制水平线的方法。 我们假设一个256x192像素的数组,每个单词16个像素。一条线是一组(1)位的连续运行。行可以在任何单词的中间开始,也可以与任何其他单词重叠,并在任何单词之后结束;它们也可以以相同的词开头和结尾。它们可能不会继续到下一行。提示:中间单词很容易-只需写0xffff,但是边缘会比较棘手,因为处理同一单词的开头和结尾时会很麻烦。函数/过程/例程必须采用x0和x1坐标(指示水平起点和终点)以及y坐标。 我将自己排除在外是因为我自己为嵌入式处理器设计了几乎相同的算法,但是我很好奇其他人会如何处理它。使用相对较快的操作的加分点(例如,嵌入式计算机上64位乘法或浮点运算不是很快,但简单的移位就可以了。)

15
输出附近的素数
编写一个接受输入(可能是也可能不是素数)的程序,并列出紧随其后的立即质数。 输入示例: 1259 输出示例: 1249 1277 最短的程序获胜。必须在现代台式机上在10秒内执行。输入上限为10,000。

10
填字游戏编号
生成一个程序以正确地编号填字游戏网格。 输入项 输入将是代表填字游戏网格的文件的名称。输入的文件名可以作为参数传递给标准输入,也可以通过硬编码以外的其他常规方式传递。 网格文件格式:文本文件。第一行由两个空格分隔的整数常量M和组成N。在该行之后是M 各行,各行由N从中选择的字符(加上新行)组成[#A-Z ]。这些字符被解释为'#' 指示方块被遮挡,' '拼图中没有已知内容的空心方块以及任何字母是包含该字母的空心方块。 输出量 输出将是一个编号文件,并且可以发送到标准输出,从输入文件名派生名称的文件,用户指定的文件或其他常规目标。 编号文件格式文本文件。以“#”开头的行将被忽略,并可用于注释。所有其他行包含一个制表符分隔三重峰i,m,n其中i表示在网格上要打印的数,m和n表示在它应该被打印的方块的行和列。行数和列数均从1开始。 编号方案 正确编号的网格具有以下属性: 编号从1开始。 没有任何列或正方形的范围是未编号的。(您可以假设问题中将不存在单个字符的答案。) 通过从上到下扫描(从左到右),将按计数顺序遇到数字。(因此,每个水平跨度都在其最左边的正方形处编号,并且每一列都在其最上面的正方形处编号。) 测试输入和预期输出 输入: 5 5 # ## # # # ## # 输出(忽略注释行): 1 1 2 2 1 3 3 2 2 4 2 4 5 2 5 6 3 1 7 3 4 8 …

14
数字,总和,产品
给定20×20的非负整数网格,请找到3×3子网格,其中各个行的总和的乘积达到最大值。讲的公式: 给定3×3子网格 最大化的功能是 每行计算总和,然后将各个总和相乘。 一个例子(只有5×5): 红色突出显示的部分是函数值在整个网格中最大的部分 : (35 + 272 + 167)⋅(163 + 270 + 242)⋅(216 + 68 + 266)= 175972500 输入项 输入在标准输入上给出,由20行组成,每行包含20个数字,并用空格字符(U + 0020)分隔。数字足够小,以至于32位有符号整数足以计算结果。 您可以假定输入将从文件重定向。 输出量 输出是3×3子网格的函数结果,其结果最大。在上面的示例中,应该是 175972500。 样品输入1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 …

3
部分可观察的Connect-4
游戏 您将玩(几乎)Connect-4的标准游戏。不幸的是,这是一个对应游戏,有人从底部开始在第二行上放了黑色胶带,因此您在这些行中看不到对手的任何举动。 在已经满满的栏中进行的任何移动都将视为您的回合,如果游戏进行的时间超过6 * 7回合,则将其视为平局。 挑战规格 您的程序应实现为Python 3函数。第一个参数是棋盘的“视图”,代表已知棋盘的状态,是从下到上的2D行列表,其中1第一个玩家2移动,第二个玩家移动,0空位置或隐藏被你的对手移动。 第二个参数是从索引的转码0,其奇偶性告诉您您是哪个玩家。 最后一个参数是任意状态,初始化为None每个游戏开始时的状态,您可以使用该状态来保留回合之间的状态。 您应该返回要播放的列索引的2元组,并在下一轮返回新状态。 计分 胜利计为+1,平局计为,0损失计为-1。您的目标是在循环锦标赛中获得最高的平均分数。我会尝试根据需要进行尽可能多的比赛,以确定明确的获胜者。 规则 任何竞争者一次最多只能拥有一个竞争机器人,但是如果您进行了改进,可以更新您的参赛作品。请尝试将您的漫游器限制为每转大约1秒的思考时间。 测试中 这是控制器的源代码,以及一些非竞争性示例bot供参考: import itertools import random def get_strides(board, i, j): yield ((i, k) for k in range(j + 1, 7)) yield ((i, k) for k in range(j - 1, -1, -1)) yield ((k, j) for …

2
Python:我希望我是PHP [关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为Code Golf Stack Exchange 的主题。 3年前关闭。 有一个关于a夫的老故事,他从未对自己的外貌感到满意。他希望自己能成为太阳,所以他做到了。在云层的阻挡下,他希望成为-并且变成-云层。风吹起时,他希望自己成为风。在山上停下来之后,他希望成为一座山,因此成为了一座山。但是不久,他就被by夫砍死,并希望成为stone夫。 同样,您的任务是编写一个对其使用的语言永远不满意的程序。您的程序必须输出一组正则表达式替换项,才能将其转换为另一种语言。等等。 规则 用您选择的语言编写程序。 该程序应输出一系列至少两个部分。段是一堆文本,用分号分隔。但是,如果将一个分号包含在正则表达式中,则将其拆分会导致语法无效,因此不会分隔段。参见示例。 第一部分是要查找的正则表达式模式,第二部分是替换模式。第三个是另一个“查找”模式,第四个是“替换”模式,依此类推。 将正则表达式模式应用于程序。将第一段上的图案替换为第二段上的图案;将第三个模式替换为第四个模式,依此类推。 结果应该是使用其他语言的程序,该程序本身遵循规则2至4。 使用的语言必须形成无限的重复循环。 例如,Python-> PHP-> C ++-> Python-> PHP-> C ++-> Python-> ... 您的分数是周期的周期。领带被最短的初始代码长度打断。 在上面的示例中,分数为3。 在该循环的每个迭代中,不得使用任何语言多次。 对于规则5和7,兼容语言(C和C ++)以及同一语言的不同版本(Python 2和Python 3)被视为相同。 程序本身不需要重复。 在上面的示例中,第一程序和第四程序可能不同。 可以使用任何版本的regex,但所有程序都必须使用相同的版本。 每个程序的总输出不得超过100个字符。 每个输出必须包含实际更改程序的指令。即,循环中没有两个连续的程序可以相同。 例 Python-> Ruby-> Python-> ... print "uts;Z;rint;uts;Z(?=;Z);rint" 输出: uts;Z;rint;uts;Z(?=;Z);rint 这些段是: FIND …
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.