问题标签 [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 - 代码高尔夫:谢尔宾斯基三角
挑战
最短的代码,按字符计数输出由以下 ASCII 三角形组成的 N 次迭代的谢尔宾斯基三角形的 ASCII 表示:
输入是单个正数。
测试用例
代码计数包括输入/输出(即完整程序)。
java - 运行最快的算法竞赛
我想举办代码高尔夫比赛之类的比赛,但获胜者将拥有最快的算法,而不是最小的代码。
- 衡量算法速度的一种公平方法是使用中立的虚拟机,例如 Java 的 JVM。有没有一种简单的方法可以知道执行的 JVM 指令总数?(如果条目使用多个线程,则 JVM 指令的总数将跨所有线程求和。)
例如,代码
生成 JVM 代码
并且它需要(如果我计算正确的话)18 条 JVM 指令来运行。
我希望人们能够在家中运行他们的参赛作品,并看看评委会看到什么。显然,如果我向程序提供输入,最快的解决方案是吐出记忆的、预先计算的答案。有什么方法可以客观地让人们在家里运行程序并且看不到记忆的答案?
还有哪些其他问题阻止了非正式的“最快代码竞争”的发生?
谢谢!
python - oneliner scramble 程序
又到了一年中的那个时候,程序员想要重新排列一个列表,使得没有任何元素位于其原始位置(至少在荷兰,我们庆祝Sinterklaas并挑选吸管来决定谁写谁一首诗)。有没有人有一个很好的 Python单一语句?
因此,输入示例:range(10)
输出示例:[2,8,4,1,3,7,5,9,6,0]
错误的输出将是[2,8,4,1,3,5,7,9,6,0]
因为5
在其原始位置。这将意味着第 5 个人必须为自己写一首诗,这不那么有趣。
编辑许多人只要需要就可以重复分配任务,并发现实际上解决方案是令人满意的。这是一种不好的方法,因为理论上这可能需要无限长的时间。Bart 确实提出了更好的方法,但出于某种原因,我无法将其纳入单线...
编辑oneliner,我的意思是single statement。看起来,Python 还能够在一行中压缩多个语句。我不知道。目前有非常好的解决方案,仅使用分号来模拟单行上的多行行为。因此:“你能在一个语句中做到这一点吗?”
code-golf - 代码高尔夫:Fractran
挑战
编写一个充当Fractran解释器的程序。在任何语言中,按字符数计算最短的口译员获胜。您的程序必须有两个输入:要执行的 fractran 程序和输入整数 n。该程序可以是任何对您的程序方便的形式——例如,2 元组列表或平面列表。输出必须是单个整数,即执行结束时寄存器的值。
分形
Fractran 是John Conway发明的一种微不足道的深奥语言。fractran 程序由正分数列表和初始状态 n 组成。解释器维护一个程序计数器,最初指向列表中的第一个部分。Fractran 程序按以下方式执行:
- 检查当前状态与当前程序计数器下的分数的乘积是否为整数。如果是,则将当前状态乘以当前分数并将程序计数器重置到列表的开头。
- 推进程序计数器。如果到达列表的末尾,则停止,否则返回步骤 1。
有关 Fractran 工作方式和原因的详细信息,请参阅esolang 条目和关于好数学/坏数学的这个条目。
测试向量
程序: [(3, 2)]
输入: 72 (2 3 3 2 )
输出: 243 (3 5 )
程序: [(3, 2)]
输入: 1296 (2 4 3 4 )
输出: 6561 (3 8 )
程序: [(455, 33), (11, 13), (1, 11), (3, 7), (11, 2), (1, 3)]
输入: 72 (2 3 3 2 )
输出: 15625 (5 6 )
奖金测试向量:
您的提交不需要正确执行最后一个程序即可成为可接受的答案。但如果是这样,那就太棒了!
程序: [(455, 33), (11, 13), (1, 11), (3, 7), (11, 2), (1, 3)]
输入: 60466176 (2 10 3 10 )
输出: 7888609052210118054117285652827862296732064351090230047702789306640625(5 100)
提交和评分
程序严格按字符长度排列 - 最短最好。随意提交布局合理且文档化的代码以及“缩小”版本的代码,这样人们就可以看到发生了什么。
语言“J”是不可接受的。这是因为在其中一个链接页面上 J 中已经有一个众所周知的解决方案。如果你是J迷,对不起!
然而,作为额外奖励,任何可以在 fractran 中提供工作的 fractran 翻译的人都将获得 500 声望点奖励。万一出现多个自托管口译员,分数最少的口译员将获得赏金。
优胜者
在提交了一个包含 1779 个分数的自托管 fractran 解决方案后,官方获胜者是Jesse Beder 的解决方案。但是,实际上,即使执行 1+1,该解决方案也太慢了。
令人难以置信的是,这已经被另一种分形解决方案打败了——阿玛迪乌斯的解决方案只有 84 个分数!在我的参考 Python 解决方案上运行时,它能够在几秒钟内执行前两个测试用例。它对分数使用了一种新颖的编码方法,这也值得仔细研究。
荣誉提及:
- Stephen Canon 的解决方案,165 个字符的 x86 程序集(28 个字节的机器码)
- Jordan 的52 个 ruby 字符解决方案 - 处理长整数
- Useless 的87 个 Python 字符的解决方案,虽然不是最短的 Python 解决方案,但它是为数不多的非递归解决方案之一,因此可以轻松处理更难的程序。它的可读性也很强。
language-agnostic - 代码高尔夫:自来水
挑战
按字符计数的最短代码,用于识别和标记输入中土地的 ASCII 表示中的水洼。
输入将是景观的 ASCII 表示,包括丘陵、山谷和平坦的土地。该程序应该模拟如果被洪水淹没的景观会是什么样子 - 用水填充所有山谷(字符x
)。
景观总是以字符开始和结束,_
并且至少有 2 个字符长,是最短的输入__
。
小山被定义为高地,不应充满水:
山谷被定义为洼地,将充满水,直到遇到平地:
可以假定输入是干净的,并且仅由字符空格 ( )、换行符 (
\n
)、下划线 ( _
) 以及正斜杠和反斜杠 ( /
and \
) 组成。输入可以看作是一条连续的线,任何包含模糊线输入的输入,例如_/_
或
被视为无效。
对于水下洞穴,如果洞穴水位高于水位,则应保持水位。
测试用例
代码计数包括输入/输出(即完整程序)。
programming-languages - Code-Golf:编译和崩溃的最短程序是什么?
这有点有趣。你能设计出最短的程序,它可以编译,但在执行时会立即崩溃?因此,“崩溃”是指程序因错误情况而停止(例如核心转储)。
使用 gcc 编译器,有没有一种语言比 C 崩溃得更快(7 个字符)?[我把这个答案留给别人找。]
(应该允许使用编译器标志。否则现在 7 将无法工作,编译器检查变得更好。)
[结果评估] 我无法标记一个答案,因为多种语言有多个正确答案。取消一个答案的资格是不公平的。请使用投票来选择最佳答案。
interpreter - 图灵机代码高尔夫
好的,今天的目标是构建一个图灵机模拟器。对于那些不知道它是什么的人,请参阅Wikipedia 文章。我们今天使用的状态表位于作为该页面一部分的正式定义的末尾。
该代码将采用“0”和“1”字符串字符的序列,一个表示机器开始的字符的整数,以及一个表示程序状态的整数(无特定顺序),并输出最终结果对字符串的操作,以及最终位置。例子:
示例 1:
示例 2:
杂项:
- 您的代码必须通过根据需要扩展字符串来正确处理写入磁带上“空格”的尝试。
- 由于指定的状态机未指定任何类型的“空白磁带”操作,因此将所有空白值视为 0。
- 您必须仅计算处理具有初始状态的字符串的评估的方法,如何输出该数据取决于您。
- 在磁带上向右移动是递增的(字符串位置 0 一直在左侧),状态 0 是 A,状态 1 是 B,状态 2 是 C。
(希望)最终编辑: 我对这个问题造成的混乱和麻烦表示最诚挚的歉意:我误读了我列出的提供的状态表,并将其倒退。我希望你能原谅我浪费你的时间;这完全是无意的!
python - 使用 string.translate() 将不可打印的字符转换为点
所以我以前做过这个,对于这样一个看似简单的任务,这是一个令人惊讶的丑陋代码。
目标是将任何不可打印的字符转换为. (点)。出于我的目的,“可打印”确实从string.printable
(换行符、制表符等)中排除了最后几个字符。这是用于打印诸如旧的 MS-DOS 调试“十六进制转储”格式之类的东西......或任何类似的东西(额外的空白将破坏预期的转储布局)。
我知道我可以使用string.translate()
,并且要使用它,我需要一个翻译表。所以我用string.maketrans()
它。这是我能想到的最好的:
...这是一个难以理解的混乱(尽管它确实有效)。
从那里你可以调用使用类似的东西:
... 而且要快乐。(只要你不看引擎盖)。
现在,如果我将那个可怕的表达式分解成单独的语句,它会更具可读性:
仅仅为了易读性而这样做是很诱人的。
但是,我一直认为必须有一种更优雅的方式来表达这一点!
language-agnostic - 代码高尔夫:乌拉姆螺旋
挑战
按字符计数输出Ulam 螺旋的最短代码,螺旋尺寸由用户输入给出。
乌拉姆螺旋线是绘制素数的一种方法。螺旋从中心的数字 1 开始(1 不是素数)并围绕它生成一个螺旋,将所有素数标记为字符 ' *
'。非素数将打印为空格 '
'。
替代文字 http://liranuna.com/junk/ulam.gif
测试用例
代码计数包括输入/输出(即完整程序)。
language-agnostic - 代码高尔夫:钻石二十一点
挑战
从给定的数字卡列表中输出最佳情况二十一点手的按字符计数的最短代码。
输入是从 1 到 10(含)的数字列表,由空格分隔。
输出将是从该卡片列表中形成的最佳二十一点手 - 最接近的可用组合,通过所有卡片值的总和达到 21 而不超过它。卡片可以移除但不能添加。
如果需要移除两张或更多卡片以支持一张卡片以达到相同的结果(移除 5 或 4,1 以获得 21)需要移除最少的卡片。如果要移除相同数量的牌(移除 1,4 或 3,2),则将移除最小值中的最小值的组(在前面的示例中,将移除min(min(3,2), min(1,4))
属于该对的 1,4)。在重复卡的情况下,应删除第一次遭遇。
输出将形成钻石卡,并保留输入顺序:
测试用例
代码计数包括输入/输出(即完整程序)。