Используя две связанные программы, выведите порядковые номера до n


19

... Порядковые числа (или порядковые номера) - это слова, представляющие положение или ранг в последовательном порядке.

введите описание изображения здесь

Из Википедии .

Ваша задача состоит в том, чтобы с помощью 2 отдельных программ (из которых можно сделать два разных языка) вывести порядковый номер от первого до nth. Вы будете выводить полное слово, secondа не 2nd.

Проблема порядковых чисел уже поднималась, особенно в этой записи . В этой задаче ординалы - это просто средство для облегчения уникальных условий, подробно описанных ниже.


Часть 1

Вы должны создать программу, которая при вводе nдолжна выводить что угодно .
nвсегда будет положительным, ненулевым целым числом, не превышающим 999.

Действительный вывод включает, но не ограничивается :

  • Любой вывод в stdout/ stderr/ etc
  • Создание файлов / папок / и т. Д.
  • Графический интерфейс или изображения любого вида

Все идет.


Часть 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']для 32тогда, у p2 будет меньше работы, чтобы сделать это, если бы он имел выход, просто 32.
Джонатан Аллан

4
Может быть, я упускаю что-то глупое, но из последних двух записей в примерах выигрыша почему запись 1 не побеждает? часть 1 имеет одинаковые байты, часть 2 меньше или равна части 1 для обоих, а запись 1, часть 2 имеет меньше байтов, чем запись 2, часть 2.
Патрик Робертс

@PatrickRoberts Поскольку часть 2 должна содержать равные или меньшие байты для части 1. Поскольку часть 1 имеет длину 21 байт, а часть 2 составляет 33 байта, запись № 1 дисквалифицируется. К сожалению, эта информация скрыта и прямо не указана в условиях победы на данный момент.
хроноцид

@PatrickRoberts Это важно, потому что в противном случае вы могли бы использовать язык, который неявно передает ввод как вывод, когда 0-байтовая программа запускается для части 1
Chronocidal

Ответы:


14

Кувалда 0.5.1 / Кувалда 0.5.1, 10 байт

Программа 1 (10 байт):

⣘⢷⠾⣃⢖⣎⢅⡨⠱⢳

Распаковывает в эту функцию Wolfram Language:

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

Программа 2 (7 байт):

⡾⡁⢚⣷⣬⠤⣾

Распаковывает в эту функцию Wolfram Language:

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

Попробуйте онлайн!


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 Language (Mathematica) (обе части), 18 байт / 15 байт

-5 / -1 благодаря lirtosiast

Часть 1, 18 байт

Range@#|"Ordinal"&

Часть 2, 15 байт

IntegerName@@#&

Попробуйте онлайн!

Две функции, которые выводят через возвращаемое значение.


2
Range@#|"Ordinal"&короче, и IntegerNameвекторизуется по первому аргументу. Я думаю, что разделенный пробелом вывод может потребоваться, хотя.
lirtosiast

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, что недействительно. Вы не можете пометить ответ как "неконкурентный" и отправить неверную заявку; ярлык «неконкурентный» является устаревшим ярлыком для заявок, представленных на языках или в языковых версиях, которые устаревают к конкурсу, который обычно был запрещен, но в любом случае разрешен в статусе «не конкурирующий» для интересных заявок.
HyperNeutrino

1
@HyperNeutrino Извините, я думал, что правила требуют, чтобы Часть 1 была короче, чем Часть 2. Я отметил это как неконкурентный, потому что для решения этой проблемы использовалась библиотека.

2
Технически, использование внешних библиотек кажется нормальным: codegolf.meta.stackexchange.com/q/188
Jono 2906

1
import en.number as nэкономит четыре байта в каждой части.
Хулдрасет на'Барья

1

JavaScript (Node.js), 47 байт / 47 байт

Две функции в одной и той же среде Node.js, вызываемые как g(f(n)). Использует номер пакета в слова npm .

Часть 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. Он читает стандартный ввод и, ну, в общем, выполняет его. Не заканчивается, но правила явно говорят, что все в порядке.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.