编程拼图和代码高尔夫

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

30
我女儿的字母
前几天,我们和我的女儿用冰箱贴写了一封句子。尽管我们能够制作一些(I love cat),但I love you too由于字母数量不足o(4),我们没有足够的字母来制作其他() 然后我发现,虽然一组包含3个e字母,但只有2个o字母。可能受到http://en.wikipedia.org/wiki/Letter_frequency的启发,这仍然不能反映“冰箱上”的实际情况。 问题 给定文本文件,其中每行包含一个“样本语句”,一个人想在冰箱上书写,建议使用字母数量最少的字母集,但仍足以单独书写每个句子。 注意:忽略大小写,无论如何所有大写字母都是大写。 输入项 该文件包含换行符分隔的句子: hello i love cat i love dog i love mommy mommy loves daddy 输出量 提供字母的倒排列表,其中每个字母仅出现多次,足以写出任何句子: acdddeghillmmmoostvyy (谢谢,isaacg!) 优胜者 最短的实现(代码) 更新:测试 我创建了一个额外的测试,并在这里尝试了各种答案: https://gist.github.com/romaninsh/11159751
65 code-golf 

15
9孔挑战赛[关闭]
9洞挑战赛 不同难度的9项代码挑战。 多次使用同一语言的处罚。 该问题将通过标准杆,洞冠军和奖杯得主进行更新。 这是我与一些朋友进行的比赛,不是通常的比赛形式,但是我希望你们中的一些人会喜欢它的不同之处。以下是挑战,规则和奖杯。 孔洞 格林威(24) f(c:string, n:integer) 打印包含的n实例的行c。 崎不平的地方(73) f(t:string, s:string, n:integer) -> iin中实例i的索引 在哪里?nthst 晚餐咖喱(6235) f(x:function, y: function) -> g 哪里g是将调用一个函数y,n时间; n的返回值在哪里x 喷(92) f(p:string) 写入文件,p并将其填充为随机大小的随机大小矩形(ascii)。 寻宝(75) f(p:string, c:char) -> (x, y) 读取p包含符号网格的文件,并假设该符号存在,则返回该符号在网格中的第一个实例的x和y坐标。 桂河大桥(179) f(l:list[int]) 打印的差异桥图l。例如[1,7,3,17,1] /+6\ /-4\ /+14\ /-16\ 1 7 3 17 1 确保根据上面数字的大小创建空格。对于3位长的数字,您将在下面一行的数字之间需要4个空格。 捕获:在某个地方,您的代码必须拼写裤子(必须至少具有1个非字母数字分隔符。例如 tr(ou,se)(rs) …

30
高尔夫黄鼠狼计划
理查德•道金斯(Richard Dawkins)在他的“ 盲人制表师”一书中描述了鼬鼠程序。该算法可以描述如下: 以28个字符的随机字符串开头。有效字符均为大写字母和空格。 制作该字符串的100个副本,每个字符的5%机会被随机字符替换。 将每个新字符串与目标“比较像是Weasel的单词”进行比较,并根据字符串中正确且位置正确的字母数给每个得分。 如果任何新字符串的得分都很高(28),请暂停。 从第3步中选择得分最高的字符串。如何决定平局取决于您,但是只能选择一个字符串。以所选的字符串并转到步骤2。 获胜者将是获得正确答案的最短代码段,同时以以下格式打印每一代得分最高的字符串: 如果人们可以通过检查其他人来帮助您,那么答案将非常有帮助!

30
99瓶啤酒[关闭]
在墙上重新创建“ 99瓶啤酒”。 所需的输出是这样的: 99 bottles of beer on the wall, 99 bottles of beer. Take one down and pass it around, 98 bottles of beer on the wall. 98 bottles of beer on the wall, 98 bottles of beer. Take one down and pass it around, 97 bottles of beer …

30
取消注释COBOL程序!
COBOL是一种非常古老的语言,在撰写本文时已经58岁了。实际上,它太老了,以至于它有一个非常有趣的怪癖:每行的前六个字符是注释。 你问为什么呢?好吧,那六个字符原本是要用作行号的,那是在程序不是完全数字化并在计算机上打字的那个日子。 此外,第七个字符只能是一个很小的集合的一部分(通常是 *是注释掉该行或一个空格以将行号与代码分开) 但是,如果您使用的是数字系统,并且只想要原始程序,该怎么办? 评论系统 COBOL中有两种类型的注释:行注释和前面提到的“行号”注释。 取消注释行号很简单:只需从每行中删除前七个字符(六个加一个空格)。 000000 apple 000001 banana celery donuts 会成为: apple banana donuts 行注释使它变得更加困难。行注释以星号开头,该星号*位于行的第七个字符位置,如下所示: 000323* this is a comment 这不是一行注释: *00000 this isn't a comment 要取消注释行注释,只需删除整行。 一个示例注释了“程序”: 000000 blah blah 000001* apples 000002 oranges? 000003* yeah, oranges. 000*04 love me some oranges 未注释的版本: blah blah …

11
只有偶数字节
场景 最近,您一直在使用自己喜欢的文本编辑器注意到一些奇怪的行为。最初,似乎在写入磁盘时会忽略代码中的随机字符。一段时间后,您注意到了一种模式。ASCII值奇数的字符将被忽略。经过进一步检查,您发现只有每八位为零时,才能正确写入文件。现在,您需要知道您的重要文件是否已受到此奇怪错误的影响。 任务 您必须编写一个完整的程序来确定文件是否包含奇数个字节(表明文件未损坏)。但是由于使用了文本编辑器,因此无法在源代码中写入任何奇数字节。您可以假定输入已经存在任何编码,但是您仍然必须检查每个字节,而不仅仅是字符。 输入项 您的程序将从stdin或命令行获取文件的内容或文件的路径。 输出量 如果给定文件包含一个奇数字节,则程序将向stdout输出一个真实值,而如果每八位为零,则该程序将向fsy输出一个stdout。 标准 这是代码高尔夫,是完成任务的最短程序。要成为有效提交,文件源代码中的每八位必须为零。我建议您在提交的文件中包含源代码二进制文件的副本。 有标准漏洞。 测试用例 (以ASCII编码)输入: "$&(*,.02468:<>@BDFHJLNPRTVXZ\^`bdfhjlnprtvxz|~ Output: falsy Input: !#%')+-/13579;=?ACEGIKMOQSUWY[]_acegikmoqsuwy{} Output: truthy Input: LOREMIPSVMDOLORSITAMETCONSECTETVRADIPISCINGELITSEDDOEIVSMODTEMPORINCIDIDVNTVTLABOREETDOLOREMAGNAALIQVA VTENIMADMINIMVENIAMQVISNOSTRVDEXERCITATIONVLLAMCOLABORISNISIVTALIQVIPEXEACOMMODOCONSEQVAT DVISAVTEIRVREDOLORINREPREHENDERITINVOLVPTATEVELITESSECILLVMDOLOREEVFVGIATNVLLAPARIATVR EXCEPTEVRSINTOCCAECATCVPIDATATNONPROIDENTSVNTINCVLPAQVIOFFICIADESERVNTMOLLITANIMIDESTLABORVM Output: truthy 提示 明智地选择语言并非每种语言都可能会遇到这种挑战 Unix命令xxd -b <file name>会将文件的二进制文件打印到控制台(以及一些其他格式化内容) 您可以使用ASCII以外的其他编码,例如UTF-8,只要遵守所有其他规则

9
以-1 + i为基数的加法
高斯整数是形式的复数,a+bi其中a和b都是整数。在基数-1 + i中,可以使用数字0和唯一地表示所有高斯整数1,而无需使用符号来表示符号。 例如,1100以-1 + i为基数代表十进制数字2,因为 1*(-1+i)^3 + 1*(-1+i)^2 + 0*(-1+i)^1 + 0*(-1+i)^0 = (2+2i) + (-2i) + 0 + 0 = 2 输入将是使用数字表示的以-1 + i为基数的两个高斯整数01。可以采用以下形式之一: 两个独立的数字字符串, 两个十进制整数,其中包括01代表基数-1 + i的数字(例如1100,基数-1 + i中的2表示), 代表基数-1 + i的两个二进制整数(例如,十进制12或0b1100基数-1 + i中的2) 单个字符串由单个非字母数字分隔符分隔两个数字字符串/二进制整数(例如1100 1100或12,122 + 2) 输出两个高斯整数的和,也以-1 + i为基数,并用数字表示01(以允许输入的一种格式,不一定是相同的选择)。输出允许包含有限数量的前导零。 输入最多30位数字的函数或程序必须在2秒内终止。 其他说明 您可以假定输入不包含无关的前导零。对于0的特殊情况,可以选择一个0或空字符串作为表示形式。 测试用例 0, 0 …

19
总而言之,这只是代码高尔夫中的另一个技巧
挑战的目的是为摇滚乐队Pink Floyd制作这张专辑的封面的ASCII版本。 砖路口由字母_和字母组成|。砖的宽度为7,高度为2,但不包括路口。因此,包括联结在内的基本单位是: _________ | | | | _________ 每行积木相对于上一行偏移一半积木宽度(4个字符): ________________________________________ | | | | | | | | | | ________________________________________ | | | | | | | | | | ________________________________________ | | | | | | | | | | 墙的参数设置如下。所有参数均以char度量,包括连接点: 第一行的水平偏移量F。这是左边缘与最上一行的第一个垂直交点之间的距离。(还要记住行之间的半砖相对偏移)。其可能值0,1,..., 7。 总宽度,W。这包括路口。其值为正整数。 总高度,H。这包括路口。其值为正整数。 墙的顶部始终与一行的顶部重合。底部可能参差不齐(如果总高度不是的倍数3)。例如,这里的输出6,44,11: ____________________________________________ …

23
小山之王-太空大战!
如果您曾经玩过《太空大战》!,您知道这是一个有趣的游戏。如果您还没有,那就知道这一点:它曾经是(也是现在)最重要,最重要的计算机游戏之一。而且还是很有趣的!我长大的克隆就是这个克隆,显然,不幸的是,它仅是Windows。所以我重新创建了它! KotH托管在这里:PPCG-太空大战!山丘之王。我鼓励您以人类的身份与至少另一个机器人进行对抗,以了解游戏的工作原理。 游戏 一帧为30毫秒(因此,约为每秒33帧)。 场宽为800像素,高为600像素。 该场是环形的,这意味着从场外移动的飞船和导弹会重新出现在相反的一侧。 有两个宇宙飞船,红色和蓝色。 红色位于x = 50,y随机位于50(场高-50)像素之间。 蓝色位于x =(视场宽度-50),y随机位于50(视场高度-50)像素之间。 双方x =(字段宽度)/ 2。 可用的控件有: 向左转-每帧逆时针旋转5度。 向右转-顺时针每帧5度。 射击导弹-除了舰船的速度外,还沿着舰船指向的方向每帧额外传播10个像素。 消防车-在飞船指向的方向上以每帧0.30像素的速度加速飞船。 超空间跳跃-传送到野外一些随机坐标,爆炸几率25%。这些随机坐标可能在太阳的顶部。 在发动机功率下,舰船的最大速度为每帧15像素,而重力提升时则为每帧40像素。 当行进速度超过每帧15像素时,引擎推力只能改变方向或放慢速度。 关于导弹: 导弹成一直线。 导弹可以每0.1秒发射1次。 导弹的寿命为2.25秒。 每艘船最多装有20枚导弹。 导弹内部是点粒子。 中心处有太阳,这对您的船极为危险。在轻微的接触是致命的。太阳也摧毁了导弹。 太阳有重力。结果加速度为5000 /(距离^ 2)像素/帧^ 2,其中距离以像素为单位。飞船和导弹受到影响。 两艘战舰都有三个打击区:机头,左翼和右翼。 鼻子上的一击就是立即死亡。 任一机翼受到撞击都会使飞船的转弯速度和发动机加速度降低一半。 如果两个机翼都被破坏,飞船将无法机动,只能发射导弹。 船可能会相互碰撞。 鼻鼻碰撞对两艘船都是致命的。 机翼撞击会破坏机翼。 机翼-机翼碰撞会毁坏两个机翼。 死船坚固并冻结,直到1秒后爆炸。 至少一艘船死亡后,该字段将在3秒后重置。在此之前,太阳和任何剩余的导弹仍然很危险。 原始游戏还具有致命且坚不可摧的小行星,但我将不包括它们。 规则 您的漫游器必须使用JavaScript编写。 您的漫游器应将其决定限制在10毫秒左右。如果由于您的漫游器而导致出现持续的滞后现象,我将取消其资格,并通知您,以便您进行修复。 机器人可以访问以下内容: 场宽和场高 …

13
计算最多n的素数
π(n)是小于或等于n的素数。 输入:自然数n。 输出: π(n)。 评分:这是最快的代码挑战。得分将是得分案例的时间总和。我将为计算机上的每个条目计时。 规则与细则 你的代码应工作的ň高达2十亿(20亿)。 不允许使用琐碎的内置函数。这包括内置的π函数或π(n)的值列表。 不允许测试素数或生成素数的内置函数。这包括素数的列表,除了下一个要点之外,可能无法从外部查找或在本地进行硬编码。 您可以硬编码最多为19的素数,且不能更高。 您对π的实现应是确定性的。这意味着给定特定的n,您的代码应在(大约)相同的时间内运行。 使用的语言必须在Linux(Centos 7)上免费可用。应包括有关如何运行代码的说明。如有必要,包括编译器/解释器的详细信息。 官方时间将通过我的计算机发送。 发布时,请在一些/所有测试/分数案例中包括一个自我评估的时间,以让我估算您的代码运行的速度。 提交的内容必须适合该问题的答案。 我正在运行64位centos7。我只有8GB的RAM和1GB的交换空间。CPU型号为:AMD FX(tm)-6300六核处理器。 测试用例(来源): Input Output 90 24 3000 430 9000 1117 4000000 283146 <--- input = 4*10^6 800000000 41146179 <--- input = 9*10^8 1100000000 55662470 <--- input = 1.1*10^9 得分案例(相同来源) 与往常一样,这些情况可能会发生变化。不允许针对得分情况进行优化。为了平衡合理的运行时间和准确的结果,我可能还会更改案例数。 Input Output 1907000000 …

20
重复自己
编写输出程序 Do not repeat yourself! 您的程序代码必须遵守以下约束: 它的长度必须是偶数 位置中的每个字符2n(其中n> 0的整数)必须等于位置中的字符2n-1。程序的第二个字符等于第一个字符,第四个等于第三个字符,依此类推。 换行符视为字符! 这是代码高尔夫球,所以最短的代码获胜! 例子 HHeellllooWWoorrlldd 是有效的程序 123或者AAABBB或者HHeello是不正确的 验证 您可以使用此CJam脚本来验证您的源代码有效。只需将代码粘贴到“输入”框中,然后运行脚本。

30
放大ASCII艺术
在此挑战中,您必须将多行ASCII文字作为输入,例如: OOOOOO OOOOOO OOOOOO OOOOOOO OOOOOO OOOOOO OO OOOOOOO OO OO OO OO OO OO OO OO OO OO OO OO OO OO OO OO OOOOO OO OOO OO OO OO OOOOO OO OO OO OO OO OO OO OO OO OO OO OO OOOOOO OOOOOO OOOOOO OOOOOOO OOOOOO OOOOOO …

30
做墨西哥波
用尽可能少的字节编写一个输出以下内容的程序或函数: Abcdefghijklmnopqrstuvwxyz aBcdefghijklmnopqrstuvwxyz abCdefghijklmnopqrstuvwxyz abcDefghijklmnopqrstuvwxyz abcdEfghijklmnopqrstuvwxyz abcdeFghijklmnopqrstuvwxyz abcdefGhijklmnopqrstuvwxyz abcdefgHijklmnopqrstuvwxyz abcdefghIjklmnopqrstuvwxyz abcdefghiJklmnopqrstuvwxyz abcdefghijKlmnopqrstuvwxyz abcdefghijkLmnopqrstuvwxyz abcdefghijklMnopqrstuvwxyz abcdefghijklmNopqrstuvwxyz abcdefghijklmnOpqrstuvwxyz abcdefghijklmnoPqrstuvwxyz abcdefghijklmnopQrstuvwxyz abcdefghijklmnopqRstuvwxyz abcdefghijklmnopqrStuvwxyz abcdefghijklmnopqrsTuvwxyz abcdefghijklmnopqrstUvwxyz abcdefghijklmnopqrstuVwxyz abcdefghijklmnopqrstuvWxyz abcdefghijklmnopqrstuvwXyz abcdefghijklmnopqrstuvwxYz abcdefghijklmnopqrstuvwxyZ abcdefghijklmnopqrstuvwxYz abcdefghijklmnopqrstuvwXyz abcdefghijklmnopqrstuvWxyz abcdefghijklmnopqrstuVwxyz abcdefghijklmnopqrstUvwxyz abcdefghijklmnopqrsTuvwxyz abcdefghijklmnopqrStuvwxyz abcdefghijklmnopqRstuvwxyz abcdefghijklmnopQrstuvwxyz abcdefghijklmnoPqrstuvwxyz abcdefghijklmnOpqrstuvwxyz abcdefghijklmNopqrstuvwxyz abcdefghijklMnopqrstuvwxyz abcdefghijkLmnopqrstuvwxyz abcdefghijKlmnopqrstuvwxyz abcdefghiJklmnopqrstuvwxyz abcdefghIjklmnopqrstuvwxyz abcdefgHijklmnopqrstuvwxyz abcdefGhijklmnopqrstuvwxyz abcdeFghijklmnopqrstuvwxyz abcdEfghijklmnopqrstuvwxyz abcDefghijklmnopqrstuvwxyz abCdefghijklmnopqrstuvwxyz …

19
破解银行帐户的密码!
介绍 为了防止键盘记录程序窃取用户密码,某些银行帐户系统已实施以下安全措施:每次仅提示输入某些数字。 例如,假设您的目标密码为89097,系统可能会提示他们输入第二,第四和第五位数字: 997 或者它可能提示他们输入第一,第三和第五位数字: 807 您所知道的只是您的目标按顺序输入了数字,但是您不知道它们在实际密码中属于哪个位置。您所知道的是有两个9,必须在7之前。并且8在0之前,而0在7之前。因此,有六个可能的密码: 80997 89097 89907 98097 98907 99807 目标计算机上的键盘记录程序已经收集了几个月的密码,所以让我们开始吧! 挑战 给定一个三位数的输入列表,输出对所有输入都有效的所有可能的密码。为了降低计算复杂度并减少可能的结果数量,请确保密码为数字且固定大小为5。每个输入中的数字顺序如下:如果是123,则目标首先键入1,然后2,然后3。 输入/输出示例 |----------------------|--------------------------------------------| | Input | Output | |----------------------|--------------------------------------------| | [320, 723, 730] | [37230, 72320, 73203, 73230] | | [374, 842] | [37842, 38742, 83742] | | [010, 103, 301] | [30103] | | …
64 code-golf 

18
最小的NetHack
NetHack是一款类似流氓的游戏,玩家必须从地牢的最低级别取回Yendor的护身符。通常通过telnet进行游戏,整个游戏均以ASCII图形表示。游戏非常具有挑战性,需要许多游戏技巧的知识才能成功。 出于此挑战的目的,假定整个地牢是一个单独的级别,并且只有5×16个字符。此外,假设这是一个“安全”地牢,或者您只是在实现一个原型-不会有怪物,对饥饿的担忧等。实际上,您只能跟踪角色,护身符和游戏的位置当玩家到达护身符的相同位置时,将有效结束。 挑战要求 将有一个5×16的地牢(单层)。 给玩家一个开​​始的位置(可以选择随机),而护身符一个单独的随机(每次运行该程序都不同)在地牢内的开始位置。即,不允许护身符与玩家在同一方块上开始。 接受四个输入键,这些输入键可一次将玩家移动一个方块(四个基本方向)。允许读取/处理其他输入(需要按下“ enter”等的readline()函数)。 禁止在地牢范围内旅行。例如,如果玩家在地牢的右边缘,则按向右不应该执行任何操作。 在初始生成之后和每次移动之后,请打印游戏的状态。由于这是代码打法,并且打印相当无趣,因此假设状态没有变化,请忽略打印函数和函数调用的字符数。空单元格应显示为句点(.),护身符应显示为双引号("),字符应显示为符号(@)。 当玩家“发现”护身符时游戏结束(到达同一方块) 获奖 这是高尔夫挑战赛的代码,从今天起一周内满足要求的最短代码将被宣布为获胜者。 例 这是C#(无溶剂)的示例解决方案,以显示基本要求和示例输出。 using System; namespace nh { class Program { static Random random = new Random(); // player x/y, amulet x/y static int px, py, ax, ay; static void Main(string[] args) { px = random.Next(0, 16); py = …
64 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.