问题标签 [code-golf]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
language-agnostic - 代码高尔夫:电话号码到单词
我们都见过用文字表达的电话号码:1-800-BUY-MORE 等。
您可以编写的最短代码量是多少,它将为 7 位美国电话号码生成所有可能的单词组合。
输入将是一个七位数的整数(或字符串,如果更简单的话),并假设输入格式正确。
输出将是一个由七个字符组成的字符串列表,
例如,数字 428-5246 将产生
GATJAGM
GATJAGN
GATJAGO
GATJAHM
GATJAHN
GATJAGO
GATJAIM
GATJAIN
GATJAIO 等等.....
获胜标准将是来自任何语言的代码,该代码具有最少的字符,可以产生所有可能的字母组合。
补充笔记:
- 为了使其更有趣,单词只能使用北美经典键盘手机上的字母组成,每个数字三个字母,如此处定义。这意味着 Z 和 Q 被排除在外。
- 对于数字“1”,请放置一个空格。
- 对于数字“0”,请输入连字符“-”
将输出识别为真正的英语单词可获得奖励积分。好吧,不是真的。;-)
补充:好的,让我们使用“Nick's Modified North American Classic Key Pad”,它在 6 键上有一个“O”(哦,不是零)。
language-agnostic - 代码高尔夫:钻石图案
挑战
根据输入,按字符计数的最短代码输出一个菱形图案。
输入由 3 个正数组成,分别代表菱形的大小和网格的大小。
菱形由 ASCII 字符/
和\
空格组成。尺寸为 1 的钻石是:
网格的大小由菱形数量的宽度和高度组成。
测试用例
代码计数包括输入/输出(即完整程序)。
language-agnostic - Code Golf - 横幅生成
当感谢某人时,你不想只是给他们发一封电子邮件说“谢谢!”,你想要一些 FLASHY 的东西:
编写程序来生成横幅。您只需要生成大写的 AZ 以及空格和感叹号(什么是没有感叹号的横幅?)。所有字符都由相同字符的 3x5 网格组成(因此 S 是由 S 组成的 3x5 网格)。所有输出都应该在一行上(所以没有换行符)。以下是您需要的所有字母:
获胜者是最短的源代码,按以utf-8 编码存储文件所需的字节数计算。源代码应该从标准输入读取输入,输出到标准输出。您可以假设输入将仅包含[A-Z! ]
. 如果您因输入错误而侮辱用户,您将获得 10 个字符的折扣 =P。
我本来需要这 28 个字符,但为了让它更有趣,你可以选择你希望它们的外观 - 让你的代码更短!为了证明您的字母确实看起来像普通字母,请显示最后三个运行的输出。
迄今为止最短的代码,以字符为单位(如果存在非 ASCII 编码,则为 utf8 编码):
133 焦
205 蟒蛇
209 红宝石
313 哈斯克尔
345 C89
第382章
language-agnostic - Code-Golf:模数除法
挑战:
在不使用您的语言已经提供的模除运算符的情况下,编写一个程序,该程序将接受来自用户的两个整数输入,然后显示第一个数模除数除以第二个数的结果。假设所有输入都是正数。
例子:
谁赢:
如果您不知道 Code Golf 是如何工作的,那么获胜者就是以最少的字符编写此程序的人。
php - Code-Golf:一行 PHP 语法
解释
PHP 在其语法中存在一些漏洞,在开发过程中,程序员偶尔会介入其中。这可能会导致很多挫败感,因为这些语法漏洞似乎无缘无故地存在。例如,不能轻易地创建一个数组并在同一行访问该数组的任意元素(func1()[100]
不是有效的 PHP 语法)。此问题的解决方法是使用临时变量并将语句分成两行,但有时这会导致非常冗长、笨拙的代码。
挑战
我知道其中一些漏洞(我相信还有更多)。甚至很难想出一个解决方案,更不用说代码高尔夫风格了。获胜者是所有四个语法孔中字符总数最少的人。
规则
- 语句必须是这种形式的一行:
$output = ...;
,其中...
不包含任何;
's。 - 只使用标准库函数(不允许自定义函数
eval
) - 语句的工作方式与假定的非工作语法的功能相同(即使在它失败的情况下)。
- 语句必须在没有任何类型的语法错误的情况下运行
E_STRICT | E_ALL
。
语法漏洞
$output = func_return_array()[$key];
- 访问函数返回数组的任意偏移量(string
或)integer
$output = new {$class_base.$class_suffix}();
- 用于创建新类的任意字符串连接$output = {$func_base.$func_suffix}();
- 任意字符串连接被称为函数$output = func_return_closure()();
- 调用从另一个函数返回的闭包
language-agnostic - 代码高尔夫:旋转迷宫
代码高尔夫:旋转迷宫
制作一个程序,接收一个由迷宫组成的文件。迷宫的墙壁由#
. 迷宫必须包括一个由 a 给出的球和由 a 给出的o
任意数量的洞@
。迷宫文件既可以通过命令行输入,也可以通过标准输入作为一行读入。请在您的解决方案中指定哪个。
然后您的程序执行以下操作:
您可以假设所有输入迷宫都已关闭。注意:在这方面,孔有效地充当墙壁。
您可以假设所有输入迷宫都没有多余的空格。
按字符数计算最短的源代码获胜。
用 javascript 编写的示例:http: //trinithis.awardspace.com/rotatingMaze/maze.html
迷宫示例:
language-agnostic - 构建给定文本中最常用单词的 ASCII 图表
挑战:
构建给定文本中最常用单词的 ASCII 图表。
规则:
- 只接受
a-z
和A-Z
(字母字符)作为单词的一部分。 - 忽略大小写(
She
==she
我们的目的)。 - 忽略以下词语(我知道这很武断):
the, and, of, to, a, i, it, in, or, is
澄清:考虑到
don't
:这将被视为范围a-z
和A-Z
: (don
和t
) 中的 2 个不同的“单词”。或者(现在正式更改规范为时已晚)您可以选择删除所有单字母“单词”(这也可能导致忽略列表的缩短)。
解析给定的text
(读取通过命令行参数指定的文件或通过管道输入的文件;假定us-ascii
)并构建word frequency chart
具有以下特征的我们:
- 显示 22 个最常见单词的图表(也参见下面的示例)(按频率降序排列)。
- 条形
width
表示单词的出现次数(频率)(按比例)。追加一个空格并打印单词。 - 确保这些条(加上空格-单词-空格)始终适合: ++
bar
应该始终是 <=[space]
字符(确保您考虑到可能不同的条和单词长度:例如:第二个最常见的单词可能会更长第一个虽然频率差异不大)。在这些约束范围内最大化条形宽度并适当地缩放条形(根据它们所代表的频率)。word
[space]
80
一个例子:
示例文本可在此处找到(刘易斯卡罗尔的《爱丽丝梦游仙境》)。
该特定文本将产生以下图表:
供您参考:这些是上述图表所依据的频率:
第二个示例(检查您是否实现了完整的规范):you
将链接的爱丽丝梦游仙境文件中的
每个出现替换为superlongstringstring
:
获胜者,冠军:
最短的解决方案(按字符数,每种语言)。玩得开心!
编辑:总结迄今为止结果的表格(2012-02-15)(最初由用户 Nas Banov 添加):
数字代表特定语言中最短解的长度。“严格”是指完全实现规范的解决方案(绘制|____|
条形图,用一条线关闭顶部的第一个条形图____
,考虑高频长词的可能性等)。“放松”意味着采取了一些自由来缩短解决方案。
仅包含少于 500 个字符的解决方案。语言列表按“严格”解决方案的长度排序。'Unix Toolchain' 用于表示使用传统 *nix shell和混合工具(如 grep、tr、sort、uniq、head、perl、awk)的各种解决方案。
string - 代码高尔夫:重复文本的“颜色突出显示”
(感谢下面的 greg0ire 对关键概念的帮助)
挑战:构建一个程序来查找所有子字符串并用颜色属性“标记”它们(有效地在 XML 中突出显示它们)。
规则:
- 这只应该对长度为 2 或更长的子字符串进行。
- 子字符串只是连续字符的字符串,其中可能包括非字母字符。请注意,空格和其他标点符号不会分隔子字符串。
- 字符大小写不能忽略。
- “突出显示”应该通过在 XML 中标记子字符串来完成。您的标记应采用该子字符串和相同子字符串唯一的正数的
<TAG#>theSubstring</TAG#>
形式#
。 - 该算法的优先级是找到最长的子字符串,而不是在文本中匹配多少次。
注意:下面示例中显示的标记顺序并不重要。为了清楚起见,它只是由 OP 使用。
示例输入:
部分正确的输出(在此示例中,OP 可能没有完全替换)
您的代码应该能够处理边缘情况,例如:
示例输入 2:
示例输出 2:
获胜者,冠军:
- 最优雅的解决方案获胜(根据其他评论、赞成票来判断)
- 使用 shell 脚本的解决方案的奖励积分/注意事项
小说明:
- 输入可以硬编码或从文件中读取
- 标准仍然是“优雅”,诚然有点模糊,但它也封装了简单的字符/行数。其他人的评论和/或赞成票也表明 SO 社区如何看待挑战
language-agnostic - 代码高尔夫:2D 平台游戏
挑战
- 到达关卡的尽头!
- 如果您准确地击中每个 (C)oin 块 2 次,则可获得奖励积分。
不允许
- 以任何方式对命令序列进行硬编码。
- 你最喜欢的“一个字符语言”恰好做了一件事,那就是解决这个高尔夫问题。
如何
您的程序通过标准输入接收以下级别(没有换行符)。
然后它必须打印出成功完成关卡所需的命令。
等级
- S是你的起始位置。
- E完成关卡所需的位置。
- C是一个硬币块,里面有 2 个硬币,你永远不必跳过其中一个才能完成关卡。
- C和_都算地,只有实地没有浮动平台。
- | 是一堵墙,为了完成关卡,你需要跳上的所有墙最多只有 1 堵墙高,所有更高的墙都可以认为是你无法以任何方式摆脱的深渊。
- x是尖峰,猜猜如果你触摸它们会发生什么。尖峰总是在它们周围的地面以下一层。
所有级别都是 4 行高,每行 63 个字符宽。这使得每个级别总共有 252 个字符。
注意: >< 只是为了说明边界,它们不包含在程序的输入中。还要注意你的文本编辑器,因为我的空格多次搞砸了
命令
- M = 将你向右移动 1,如果你下方没有地面,你会跌倒直到你撞到它。坠落时 不能移动。
- J = 跳跃,在接下来的 3 个命令中将您向上移动 1 或直到您击中 (C)oin 块。在那之后,你会跌倒直到你到达地面。你只能在地面上跳跃。如果 M 将您带到与地面相同的高度,则跳跃将被取消。
- O = NOP,会让你等待/什么都不做。这样你就可以跳过只有 1 个街区宽的洞和尖峰(你不需要这个对于上面的水平,但如果你能解决需要这个的水平,你会获得额外的积分)。
解决方案(带硬币块)
连续的命令堆叠在一起。
F表示您将跌倒的位置(请记住,跌倒时您不能做任何事情),
生成的命令序列,75 个字符长:
希望这会产生一些有趣的结果......而不是大量的火焰:O
编辑
好的,有比我最初想象的更多的可能性,我为所有的编辑道歉。