使用两个链接的程序,输出最大为n的序数


19

...序号(或序数)是按顺序表示位置或等级的单词。

在此处输入图片说明

来自维基百科

您的任务是使用2个单独的程序(可以用2种不同的语言制作)来输出从first到的序数序列nth。您将输出完整的单词second,而不是2nd

序数的挑战以前曾提出过,特别是在本条目中。在这一挑战中,普通物品仅仅是促进下文详述的独特条件的一种手段。


第1部分

您必须编写一个程序,当输入时n必须输出任何东西
n始终是一个不大于999的正非零整数。

有效输出包括但不限于

  • 任何输出到stdout/ stderr/等
  • 创建文件/文件夹/等
  • 图形界面或任何类型的图像

什么都可以。


第2部分

您必须创建一个程序,该程序使用第1部分的程序的输出来输出序数序列,从1(第一个)到n第1部分中分析的序数。

大体情况:

  • 第2部分的总字节数不得超过第1部分的总字节数(小于或等于)。

输出条件:

  • 不区分大小写。
  • 输出必须仅包含序数序列(仅包含字符aZ)和空格(允许换行)。
  • 可以输出到任何源,只要在执行期间或执行之后可见即可。
  • 只要程序输出正确,就不需要终止程序。
  • 输出不需要具有任何语法,但可以选择包含它(连字符,逗号,“和”等)。nine hundred ninety ninth和一样可以接受nine hundred and ninety-ninth

样本输出

n8 在哪里

FIRST SECOND THIRD FOURTH FIFTH SIXTH SEVENTH EIGHTH

计分

获胜条件的层次结构为:

  1. 第1部分中的最低字节数
  2. 第2部分中的最低字节数
Entry #1 | Part 1 = 32 bytes, Part 2 = 22 bytes
Entry #2 | Part 1 = 31 bytes, part 2 = 30 bytes

Entry #2 wins - Part 1 contains 31 bytes vs 32 bytes

---

Entry #1 | Part 1 = 21 bytes, Part 2 = 33 bytes
Entry #2 | Part 1 = 80 bytes, Part 2 = 70 bytes

Entry #2 wins - Entry #1 disqualified (Part 2 contains more bytes than Part 1)

---

Entry #1 | Part 1 = 50 bytes, Part 2 = 49 bytes
Entry #2 | Part 1 = 50 bytes, Part 2 = 50 bytes

Entry #1 wins - Part 1 is equal, Part 2 contains 49 bytes vs 50 bytes

5
第1部分有什么意义(例如,为什么不能仅在第2部分的最短提交中就获得这个挑战)?另外,在您的第二个得分示例中,第一个条目不是无效的(第2部分>第1部分),如果不是,那么它不会击败第二个条目吗?另外,我建议至少具有一个用于定义序数的正式规则集的链接;例如,111应该说one hundred and eleventh还是one hundred eleventh
HyperNeutrino

3
@HyperNeutrino我认为这个想法是尝试在打高尔夫球时将工作尽可能地平均分配-如果我将p1输出[30, 'second']32p2 ,那么如果输出p2 ,那么p2的工作就更少了32
乔纳森·艾伦

4
也许我缺少一些愚蠢的东西,但是在得分示例的最后两个条目中,为什么条目1不赢?部分1具有相同字节,第2部分是小于或等于第1部分为两个,和项1部2具有比条目2部件2少的字节
帕特里克罗伯茨

@PatrickRoberts因为第2部分必须包含与第1部分相同或更少的字节。由于第1部分为21个字节,但第2部分为33个字节,因此条目#1不合格。不幸的是,这些信息被藏起来了,目前没有在获胜条件中明确说明。
杀人

@PatrickRoberts这很重要,因为否则,您可以使用一种语言,当为第1部分运行0字节程序时,隐式将输入作为输出传递
Chronocidal

Answers:


14

大锤0.5.1 /大锤0.5.1,10字节

程式1(10个位元组):

⣘⢷⠾⣃⢖⣎⢅⡨⠱⢳

解压缩到此Wolfram语言函数:

{Range[#1], "Ordinal"} &

程序2(7个字节):

⡾⡁⢚⣷⣬⠤⣾

解压缩到此Wolfram语言函数:

StringRiffle[IntegerName @@ #1, " "] &

在线尝试!


9

R(带english包装),16字节/ 16字节

 第1部分,16个字节

f=function(n)1:n

第2部分,16个字节

english::ordinal

需要english软件包(不幸的是未安装在TIO上)。

english::ordinal(f(22))输出first second third fourth fifth sixth seventh eighth ninth tenth eleventh twelfth thirteenth fourteenth fifteenth sixteenth seventeenth eighteenth nineteenth twentieth twenty first twenty second

当然,可以将第1部分做得更短(3个字节:)seq,但这与第2部分必须不超过第1部分的约束背道而驰。


@Giuseppe好的。尽管我认为CRAN包是R的一部分,所以只要我们计算加载和附加它们所需的字符,就应该允许它。
罗宾·赖德

我相信,元共识是使用外部库本质上可以算作“另一种语言”。例如,请参阅这篇关于编译器标志的文章,但是有关于Python外部库的说明。这里的答案有很多示例,对我很有帮助,但我似乎无法在meta上使用搜索功能来找到确定的语句。
朱塞佩



4

Python 3(第1部分和第2部分)

不幸的是,Nodebox非常罗word……打高尔夫球的空间不大。

第1部分76字节

for  i  in  range  (  1 ,  int  (  input  (  ) ) + 1 ) : print ( i ,end=" ")

第2部分(使用NodeBox库)76个字节

import en.number as n
for i in input().split():print(n.ordinal(n.spoken(i)))

5
您的答案必须有效;在这种情况下,您的第2部分比第1部分长,这是无效的。您不能将答案标记为“不竞争”并提交无效的提交;“非竞争”标签是不赞成使用以挑战后的语言或语言版本提交的挑战的标签,该挑战通常是不允许的,但在“非竞争”状态下仍允许进行有趣的提交。
HyperNeutrino

1
@HyperNeutrino抱歉,我认为规则要求第1部分要比第2部分短。我将其标记为不竞争,因为它使用库来解决此问题。
A̲̲

2
从技术上讲,使用外部库似乎没问题:codegolf.meta.stackexchange.com/q/188
Jono 2906

1
import en.number as n在每个部分中节省四个字节。
Khuldraeseth na'Barya

1

JavaScript(Node.js),47字节/ 47字节

在同一Node.js环境中的两个函数的调用方式为g(f(n))。使用npm软件包number-to-words

第1部分,47个字节(40个字节+ 7个空格)

n=>H=>{for(i=0;i<n;)console.log(H(++i))}       

第2部分,47个字节

F=>F(require("number-to-words").toWordsOrdinal)

在Runkit上尝试!


JavaScript(Node.js),48字节/ 43字节

第1部分,48个字节

n=>[n,require("number-to-words").toWordsOrdinal]

第2部分,43个字节

([n,F])=>{for(i=0;i<n;)console.log(F(++i))}

在Runkit上尝试!


1

Perl 5.10 / Common Lisp,34/26个字节

因此,Common Lisp format内置了此功能,因为它确实内置了此功能。

程式1(34个位元组)

say"(format t\"~:r \"$_)"for 1..<>

Perl进行所有迭代。等效的Common Lisp代码((dotimes(i(read)) ...))比高尔夫球手Perl长... for 1..<>。Perl输出一堆Common Lisp代码。

程式2(26个位元组)

(loop(eval(read nil nil)))

它是一个REPL,减去P。它读取标准输入,然后执行它。不会终止,但是规则明确表示可以。

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.