2つのリンクされたプログラムを使用して、最大nまでの序数を出力します


19

...序数(または序数)は、順番に位置またはランクを表す単語です。

ここに画像の説明を入力してください

ウィキペディアから。

タスクは、2つの異なるプログラム(そのうち2つの異なる言語から作成可能)を使用して、最初からの順序シーケンスを出力しnthます。secondではなく、完全な単語を出力し2ndます。

序数の課題は、特にこのエントリで以前に取り上げられました。この課題では、序数は、以下で詳述する固有の条件を促進するための手段にすぎません。


パート1

の入力が与えられたときに何かをn出力する必要があるプログラムを作成する必要があります。常に999以下の正のゼロ以外の整数になります。
n

有効な出力には次のものが含まれますが、これらに限定されません

  • stdout/ stderr/などへの出力
  • ファイル/フォルダー/などの作成
  • あらゆる種類のグラフィカルインターフェイスまたは画像

何でもあり。


パート2

パート1のプログラムの出力を使用して、1(最初)から始まりn、パート1で解析されたものまでの順序数のシーケンスを出力するプログラムを作成する必要があります。

一般的な条件:

  • パート2の合計バイトは、パート1の合計バイト(以下)を超えてはなりません。

出力条件:

  • 大文字と小文字を区別しません。
  • 出力には、順序シーケンス(a〜zの文字のみ)と空白(改行が許可されている)のみが含まれている必要があります。
  • 実行中または実行後に表示される限り、任意のソースに出力できます。
  • 出力が正しい限り、プログラムを終了する必要はありません。
  • 出力には文法は必要ありませんが、オプションでそれを含めることができます(ハイフン、コンマ、「ands」など)。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番目のスコアリングの例では、最初のエントリは無効ではありません(パート2>パート1)。そうでない場合は、2番目のエントリに勝っていませんか?また、序数を定義するための正式なルールセットへのリンクを少なくとも持つことをお勧めします。たとえば、111が言うのですか、one hundred and eleventhそれともone hundred eleventh
ハイパーニュートリノ

3
私が作る場合は、P1出力-私はアイデアがゴルフをしながら、均等にできるだけ両者の間に作業を分割しようとすることだと思う@HyperNeutrino [30, 'second']ため32、それが出力を持っていたならば、p2がいることを行うには以下の作業を持っているだけで、32
ジョナサンアラン

4
たぶん私は何か愚かなことを見逃していますが、採点の例の最後の2つのエントリのうち、エントリ1が勝てないのはなぜですか?パート1は、同じバイトを有し、その2未満であるか、または両方のために部分1に等しく、エントリ1部2は、エントリ2部2よりも少ないバイトを有する
パトリック・ロバーツ

@PatrickRobertsパート2にはパート1 と同じかそれ以下のバイトが含まれている必要があるため、パート1は21バイトですが、パート2は33バイトなので、エントリ#1は失格となります。残念ながら、その情報は隠されており、現時点で勝利条件に明示的に記載されていません。
11

@PatrickRobertsこれは重要です。そうしないと、パート1で0バイトのプログラムが実行されたときに入力を暗黙的に出力として渡す言語を使用できるためです
Chronocidal

回答:



9

Renglishパッケージ付き)、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より長くなければならないという制約に反するでしょう。


@ジュゼッペ CRANパッケージはRの一部であり、ロードおよびアタッチに必要な文字を数える限り許可されるべきだと主張しますが。
ロビンライダー

メタコンセンサスは、外部ライブラリを使用することは本質的に「別の言語」としてカウントされるということです。たとえばコンパイラフラグに関するこの投稿を参照してください。ただし、Python外部ライブラリに関するメモがあります。ここの答えは多くの例で有益ですが、決定的なステートメントを見つけるためにメタの検索機能を使用することはできません。
ジュゼッペ


8

Wolfram言語(Mathematica)(両方)、18バイト/ 15バイト

-5 / -1 リルトシアストのおかげ

パート1、18バイト

Range@#|"Ordinal"&

パート2、15バイト

IntegerName@@#&

オンラインでお試しください!

戻り値を介して出力する2つの関数。


2
Range@#|"Ordinal"&は短く、IntegerName最初の引数でベクトル化します。ただし、スペースで区切られた出力が必要になると思います。
リトシアスト

4

Python 3(パート1およびパート2)

残念ながら、Nodeboxは非常に冗長です...ゴルフをする余地はあまりありません。

パート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より長く、無効です。回答を「非競合」としてマークし、無効な送信を送信することはできません。「非競合」ラベルは、チャレンジをポストデートする言語または言語バージョンで送信されたチャレンジの非推奨ラベルであり、通常は禁止されていましたが、興味深いサブミッションでは「非競合」ステータスで許可されていました。
ハイパーニュートリノ

1
@HyperNeutrino申し訳ありませんが、ルールはパート1をパート2よりも短くする必要があると考えました。この問題を解決するためにライブラリを使用したため、これを非競合としてマークしました。
A̲̲

2
技術的には、外部ライブラリを使用しても問題ないようです:codegolf.meta.stackexchange.com/q/188
Jono 2906

1
import en.number as n各部分で4バイト節約できます。
Khuldraeseth na'Barya

1

JavaScript(Node.js)、47バイト/ 47バイト

同じNode.js環境にある2つの関数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)))

Pを除いたREPLです。標準入力を読み取り、実行します。終了しませんが、ルールは明示的にそれでいいと言っています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.