问题标签 [rosetta-stone]

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.

0 投票
15 回答
2863 浏览

language-agnostic - 代码高尔夫:猪拉丁

挑战:

输入一个任意长度的句子并将该句子中的所有单词转换为猪拉丁语。如果您不知道什么是猪拉丁语,请阅读维基百科:猪拉丁语

规格:

  1. 假设所有单词都用空格分隔,并且所有句子都以感叹号、问号或句点结尾。

  2. 不要使用维基百科中提到的元音变体。

  3. 对于诸如面包和测验之类的词,完全可以使用 readbay、uizqay 而不是 eadbray 和 izquay。

  4. 函数或方法是完全可以接受的。换句话说,您不需要接受用户输入,但您必须显示用户输出。

  5. 假设没有输入包含复合词。

例子:

如何取胜:

获胜者是能够编写程序以最少的字符完成挑战的人。

0 投票
30 回答
8394 浏览

language-agnostic - 代码高尔夫:四是魔术

谜题

我在高中时听到的一个小谜题是这样的......

  • 提问者会要求我给他一个数字;
  • 听到数字后,提问者会反复对其进行某种转换(例如,他可能会说10 是 3),直到最终到达数字 4 (此时他会以4 结束是魔术)。
  • 无论如何,任何数字似乎最终都可以变成四。

目标是尝试找出转换函数,然后自己能够可靠地监考这个谜题。

解决方案

任何一步的变换函数都是

  • 拿有问题的号码,
  • 计算其英文单词表示中的字母数量,忽略连字符或空格或“and”(例如,“ten”有 3 个字母,“thirty-34”有 10 个字母,“143”有20个字母)。
  • 返回该数量的字母。

对于我曾经关心过的所有数字,它都收敛到 4。由于“四”中也有四个字母,所以这里会有一个无限循环;相反,它只是按照惯例被称为魔术来结束序列。

挑战

您的挑战是创建一段代码,该代码将从用户那里读取一个数字,然后打印显示重复应用的转换函数的行,直到达到“四是魔术”。

具体来说:

  1. 解决方案本身必须是完整的程序。它们不能仅仅是在输入中接受数字因子的函数。
  2. 输入必须从标准输入中读取。(来自“echo”的管道或使用输入重定向很好,因为它也来自标准输入)
  3. 输入应该是数字形式。
  4. 对于转换函数的每次应用,都应打印一行:a is b.,其中 a 和 b 是转换中数字的数字形式。
  5. 需要句号(句号)!
  6. 最后一行自然应该说,4 is magic.
  7. 该代码应该为从0 到 99的所有数字产生正确的输出。

例子:

获胜者是源代码字符数最短的提交,这也是正确的。

奖金

您也可以尝试编写一个代码版本,在每次应用转换函数时打印出数字的英文名称。原始输入仍然是数字,但输出行应该具有数字的单词形式。

(使用您的代码绘制形状的双重奖励)

(编辑)一些澄清:

  1. 我确实希望这个词在所有适用的情况下都出现在两边,例如Nine is four. Four is magic.
  2. 不过,我不在乎大小写。而且我不在乎您如何分隔单词标记,尽管它们应该分开:ninety-nine可以,ninety nine可以,ninetynine不行。

我正在考虑将这些单独的类别用于挑战奖金竞争,所以如果你这样做,不要担心你的代码比数字版本长。

随意为每个版本提交一个解决方案。

0 投票
14 回答
1208 浏览

algorithm - Code Golf - 根据当前页面生成附近的页码

挑战在于创建一种算法,用于根据序列中的当前位置生成序列中特定大小的数字子集。

在浏览 Stack Overflow 或 Digg 等繁忙网站上的许多内容页面时,通常希望为用户提供一种快速跳转到第一页、最后一页或靠近当前页面的特定页面的方法。观看。

要求

  • 始终显示第一页和最后一页页码
  • 页码子集将包含当前页码以及它之前和/或之后的页码(取决于当前页)
  • 页码子集将始终是固定页数,并且永远不会超过或低于该固定页数,除非:
    • totalPages < fixedWidth
  • 当前页码在子集中的位置是固定的,除非:
    • 1 <= currentPage < (fixedWidth - defaultPostion) 或者
    • (totalPages - currentPage) < (fixedWidth - defaultPostion)
  • 输出应指示数据的第一页与子集的第一页之间以及子集的最后一页与数据的最后一页之间的差异何时大于 0 。该指标在任一位置最多应出现一次。

如果您还无法想象这一点,请查看问题/答案下的 Stack Overflow 个人资料。如果其中任何一个都超过 10 个,您应该会在底部看到以这种方式生成的分页链接。那,或者滚动到http://digg.com的底部并观察他们的分页控制。

例子

所有示例都假定子集大小为 5,当前页面位于位置 3,但这些应该可以在您的解决方案中进行配置。...表示页码之间的间隔,[x]表示当前页。


当前页面:第 1 个,共 30 个

输出: [x][2][3][4][5]...[30]


当前页面:第 2 个,共 30 个

输出: [1][x][3][4][5]...[30]


当前页面:第 13 页,共 30 页

输出: [1]...[11][12][x][14][15]...[30]


当前页面:第 27 页,共 30 页

输出: [1]...[25][26][x][28][29][30]


当前页面:第 30 页,共 30 页

输出: [1]...[26][27][28][29][x]


当前页面:第 3 页,共 6 页

输出: [1][2][x][4][5][6]


当前页面:第 4 个,共 7 个

输出: [1][2][3][x][5][6][7]


附加说明

  • 第一页和最后一页不计入, numberOfPages除非它们是顺序的一部分,numberOfPages[1][x][3][4][5]...[30][1]...[26][27][28][x][30],但不是 [1]...[8][9][x][11][12]...[30]
  • 如果子集的任一端与第一页或最后一页之间的距离小于 1,则不应包含间隙指示符。因此,可以有一个不中断的页面序列, fixedWidth + 2直到[1][2][3][x][5][6]...[15][1][2][3][x][5][6][7]

欢迎使用任何和所有语言的解决方案。

祝你好运!

0 投票
6 回答
2866 浏览

language-agnostic - Code Golf:谁的牌手最好?

我喜欢这样的挑战,我希望尽快提交我的答案。

哪位玩家拥有最好的 7 张牌?

给定 9 张牌的无序列表(用空格分隔),找出哪个玩家的牌手最好。 这是扑克手排名列表。示例输入:

数组中的前 2 张牌代表玩家 1 的手牌,数组中的第二张牌代表玩家 2 的手牌。最后 5 张牌代表公共牌,双方玩家共用的牌。实际上,两位玩家都有 7 张牌,您必须确定哪位玩家拥有最好的 5 张牌。

一张牌被定义为一个字符串,第一个字符代表牌面值,第二个值代表花色。总是大写。没有卡片可以出现两次。

该函数将计算这手牌对任一玩家来说是平局还是获胜。它将在输入结束时输出总数。输出格式将在本文后面定义。

例子

更多信息

感谢 mgroves 提供以下指向具有类似问题的 Project Euler 的链接: http ://projecteuler.net/index.php?section=problems&id=54

测试数据

我们将使用 Project Euler 测试数据:

http://projecteuler.net/project/poker.txt

您的解决方案应该接受该文本文件作为输入,并输出总的赢和平局。

示例输出

输出必须采用以下格式:

玩家 1 赢了 45 手,玩家 2 赢了 32 手,共有 12 局平局。(非实际结果)

规则

  • 不必返回获胜的手型,如果有人赢了,只有谁赢了
  • 卡片列表输入没有特定顺序
  • 没有卡片在输入中出现两次
  • 输入总是大写
  • 将 Project Euler 测试数据作为输入
  • 输出一个计数,在上面给定的格式中,哪个玩家赢得最多的手和总平局
0 投票
12 回答
1791 浏览

language-agnostic - Code Golf:为我打造一条弧线

挑战

接受格式标准输入的按字符计数最短的程序X-Y R,具有以下保证:

  • R是小于或等于 8 的非负十进制数
  • X并且Y是以十进制形式给出的非负角度,以 45° 的倍数(04590135等)
  • X小于Y
  • Y不是360如果X0

并在标准输出上产生一个从半径的起始角度X到结束角度的 ASCII“弧” ,其中:YR

  • 弧的顶点表示为o
  • 的角度0180表示为-
  • 的角度45225表示为/
  • 的角度90270表示为|
  • 的角度135315表示为\
  • 由两条线包围的多边形区域用非空白字符填充。

如果给定无效输入,则程序不需要产生有意义的输出。任何语言的解决方案都是允许的,当然除了专门为此挑战编写的语言,或者不公平地使用外部实用程序的语言。如果输出格式保持正确,则输出允许存在无关的水平和垂直空格。

打高尔夫球快乐!

许多例子

输入:

输出:

输入:

输出:

输入:

输出:

输入:

输出:

输入:

输出:

0 投票
40 回答
3600 浏览

language-agnostic - Code-golf:将乘法表输出到控制台

我最近向一位从事工作经验的学生介绍了一篇关于将乘法表转储到控制台的文章。它使用嵌套的 for 循环并将每个循环的步长值相乘。

这看起来像是一种 .NET 2.0 方法。我想知道,使用 Linq 和扩展方法,例如,需要多少行代码才能达到相同的结果。

stackoverflow 社区能应对挑战吗?

挑战:在控制台应用程序中,编写代码以生成如下示例所示的表:

由于这变成了与语言无关的代码高尔夫之战,我将与社区一起决定哪个是公认答案的最佳解决方案。

有很多关于表格应该采用的规范和格式的讨论,我故意添加了 00 格式但双换行符最初只是在那里,因为我在创建帖子时不知道如何格式化文本!

0 投票
9 回答
1741 浏览

language-agnostic - 代码高尔夫:Frobenius 号码

编写最短的程序,计算给定正数集的 Frobenius 数。Frobenius 数是不能写成集合中数字的正倍数之和的最大数。

示例:对于 Chicken McNugget TM尺寸 [6,9,20] 的集合,Frobenius 数为 43,因为方程 a*6 + b*9 + c*20 = 43没有解(其中 a,b ,c >= 0),并且 43 是该属性的最大值。

可以假设给定集合存在 Frobenius 数。如果不是这种情况(例如,对于 [2,4]),则不会出现特定行为。

参考:

[编辑] 我决定接受 GolfScript 版本。虽然 MATHEMATICA 版本可能被认为是“技术上正确的”,但它显然会让比赛失去乐趣。也就是说,其他解决方案也给我留下了深刻的印象,尤其是 Ruby(它对于通用语言来说非常短)。

0 投票
24 回答
18728 浏览

language-agnostic - 代码高尔夫:康威的人生游戏

挑战:编写实现 John H. Conway 的生命游戏细胞自动机的最短程序。[链接]

编辑:经过大约一周的比赛,我选择了一个胜利者:pdehaan ,用 perl 以一个字符击败了 Matlab 解决方案。

对于那些还没有听说过生命游戏的人,您可以使用一个网格(理想情况下是无限的)方形单元格。细胞可以是活的(填充的)或死的(空的)。我们通过应用以下规则确定哪些细胞在下一步中是活着的:

  1. 任何少于两个活邻居的活细胞都会死亡,好像是由于人口不足造成的。
  2. 任何有超过三个活邻居的活细胞都会死亡,就好像过度拥挤一样。
  3. 任何有两三个活邻居的活细胞都可以活到下一代。
  4. 任何只有三个活邻居的死细胞都会变成活细胞,就像通过繁殖一样。

您的程序将读取指定为命令行参数的 40x80 字符 ASCII 文本文件,以及要执行的迭代次数 (N)。最后,它会将 N 次迭代后的系统状态输出到一个 ASCII 文件 out.txt。

这是一个使用相关文件运行的示例:

在.txt:

迭代 100 次:

结果输出(out.txt)

规则:

  • 您需要使用文件 I/O 来读取/写入文件。
  • 您需要接受输入文件和迭代次数作为参数
  • 需要生成指定格式的out.txt(如果存在则覆盖)
  • 不需要处理电路板的边缘(环绕、无限网格等)
  • 编辑:您确实需要在输出文件中有换行符。

获胜者将由字符数决定。

祝你好运!

0 投票
7 回答
8751 浏览

regex - 代码高尔夫:正则表达式解析器

目标

今天的 Code Golf 挑战是用尽可能少的字符创建一个正则表达式解析器。

语法

不,我不是要你匹配 Perl 风格的正则表达式。毕竟,已经有一个非常可靠的口译员了!:-)

以下是您需要了解的有关此挑战的正则表达式语法的所有信息:

  • 术语被定义为单个文字字符,或分组括号内的正则表达式()
  • *星号)字符表示上一个 TERM 上的Kleene 星号操作。这意味着前一个术语的零个或多个,连接在一起。
  • +加号)字符代表一个方便的快捷方式:a+相当于aa*,表示一个或多个前一个术语。
  • ?问号)字符表示前一个术语的零个或一个。
  • |竖线)字符表示交替,这意味着任何一方的正则表达式都可以在匹配中使用。
  • 所有其他字符都假定为文字。您可以假设所有其他字符都在其中[0-9A-Za-z](即所有英文字母数字)。

或者,换一种说法://*具有最高优先级,然后是串联,然后是交替。由于交替的优先级低于串联,因此在不带括号的正则表达式中使用它会导致它被绑定到每一侧的完整正则表达式。另一方面,and仅适用于前一个术语。+?*+?

挑战

您的挑战是编写一个程序来编译或解释正则表达式(如上定义),然后针对它测试一些字符串。

我把输入留给你。我的建议是,正则表达式可能应该首先出现,然后是任意数量的要对其进行测试的字符串;但如果你想坚持下去,那很好。如果您想将所有内容放入命令行参数或标准输入中,或者将正则表达式放入命令行中,将字符串放入标准输入中,或者其他任何东西,那很好。只需显示一个或两个使用示例。

输出应该是trueor false,每行一个,以反映正则表达式是否匹配。

笔记:

  • 我不应该这么说......但不要在你的语言中使用任何正则表达式库!您需要自己编译或解释模式。(编辑:如果需要拆分或连接字符串,您可以使用正则表达式。您不能使用它直接解决问题,例如,将输入正则表达式转换为语言正则表达式并使用它。)
  • 正则表达式必须完全匹配此质询的输入字符串。(等效地,如果您熟悉类似 Perl 的正则表达式,假设所有匹配项都具有字符串的开始和结束锚定)
  • 对于这个挑战,所有特殊字符()*+?|都不会按字面意思出现。如果输入中出现一个,可以安全地假设没有模式可以匹配所讨论的字符串。
  • 应以区分大小写的方式评估要测试的输入字符串。

例子

对于示例,我假设一切都在命令行参数中完成,首先是正则表达式。(正如我上面所说,输入取决于您。)myregex这里代表您对程序的调用。

注意:抱歉,忘记创建社区 wiki!:-(

0 投票
33 回答
7117 浏览

language-agnostic - 代码高尔夫:快乐总理!

今天是星期天,是时候进行一轮代码高尔夫了!

挑战

按字符数编写最短的源代码,以确定输入数字是“快乐素数”、“悲伤素数”、“快乐非素数”还是“悲伤非素数”。

输入

输入应该是来自命令行参数或标准输入的整数。不要担心处理大数字,但如果你可以/想要的话就这样做。对于小于 1 的输入值,行为将是未定义的,但 1 具有明确的结果。

输出

输出应该打印数字的类型:“快乐素数”、“悲伤素数”、“快乐非素数”或“悲伤非素数”。尾随换行符是可选的。

例子

定义

以防你的大脑需要复习。

快乐号

来自维基百科,

快乐数由以下过程定义。从任何正整数开始,将数字替换为其数字的平方和,然后重复该过程直到数字等于 1(它将保持不变),或者它在不包括 1 的循环中无限循环。那些数字对于这个过程以 1 结尾的数字是快乐的数字,而那些不以 1 结尾的数字是不快乐的数字(或悲伤的数字)。

例如,

  • 139
  • 1^2 + 3^2 + 9^2 = 91
  • 9^2 + 1^2 = 82
  • 8^2 + 2^2 = 68
  • 6^2 + 8^2 = 100
  • 1^2 + 0^2 + 0^2 = 1

质数

素数是大于 1 的整数,并且正好有两个除数:1 和它自己。

快乐总理

因此,快乐素数是一个既快乐又素数的数。

答案选择

显然,答案将是按字符数计算的最短源代码,它在我测试的所有情况下都输出指定的结果。一旦下一个(社区决定的)代码高尔夫挑战出现,我将标记答案,这样我们就可以将所有精力集中在那个挑战上。:)

决定

好吧,看起来城里有一个新的代码 Golf,自从这个问题发布以来已经过去了大约一周,所以我将最短的源代码标记为答案(gnibbler 的 64 字符Golfscript解决方案)。也就是说,我喜欢belisarius 的99 个字符的Mathematica解决方案和Nabb 的神秘的107 个字符的dc解决方案。

对所有其他人来说,伟大的工作!我的计算机上从未有过如此多的编程语言环境。我希望每个人都为自己喜欢的语言学到了一些新的、肮脏的技巧。

重用

我重新发布了本次比赛产生的一些代码,作为我编写的脚本的示例,该脚本用于针对自动评分的参考实现测试各种程序。该目录中的自述文件解释了源代码的来源,并声明所有代码都在 CC BY-SA 2.5 许可下重复使用(如 SO 的法律部分所述)。每个目录在提交时都标有您的显示名称。

如果您对以这种方式或归属方式重复使用的代码有疑问,请告诉我,我会纠正错误。