Використовуючи дві пов'язані програми, виведіть порядкові числа до n


19

... Порядні числа (або порядкові цифри) - це слова, що представляють положення чи ранг у послідовному порядку.

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

З Вікіпедії .

Ваше завдання полягає в тому, щоб за допомогою двох окремих програм (з яких можна зробити дві різні мови) вивести порядкову послідовність від першого до 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']для 32то p2 має менше роботи , що якби він мав вихід, просто 32.
Джонатан Аллан

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

@PatrickRoberts Оскільки частина 2 повинна містити рівну або меншу кількість байтів до частини 1. Оскільки частина 1 - 21 байт, а частина 2 - 33 байти, запис №1 дискваліфікується. На жаль, ця інформація вичерпується та не прямо вказана в умовах виграшу.
Хроноцид

@PatrickRoberts Це важливо, оскільки в іншому випадку ви можете використовувати мову, яка неявно передає введення як вихід, коли програма запущена 0 байтами для частини 1
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.


@Giuseppe Звичайно. Хоча я б заперечував, що пакети CRAN є частиною R, і так слід дозволити, доки ми рахуємо символи, необхідні для їх завантаження та прикріплення.
Робін Райдер

Я вважаю, що мета-консенсус полягає в тому, що використання зовнішньої бібліотеки по суті вважається "іншою мовою"; див., наприклад, цю публікацію про прапори компілятора, але має примітку про зовнішні бібліотеки Python. Відповідь тут повчальна з багатьма прикладами, але я не можу використовувати функцію пошуку на мета для пошуку остаточного твердження.
Джузеппе


8

Мова Вольфрама (Mathematica) (обидві частини), 18 байт / 15 байт

-5 / -1 завдяки ліртосіасту

Частина 1, 18 байт

Range@#|"Ordinal"&

Частина 2, 15 байт

IntegerName@@#&

Спробуйте в Інтернеті!

Дві функції, які виводяться через повернене значення.


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

4

Пітон 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економить чотири байти у кожній частині.
Khuldraeseth na'Barya

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 байт

Отже, звичайний Лисп format має це як вбудований, тому що, звичайно, так і є.

Програма 1 (34 байти)

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

Perl робить усі повторення. Еквівалентний звичайний код Lisp ( (dotimes(i(read)) ...)) довший, ніж у гольфіста Perl... for 1..<> . Perl видає купу загального коду Lisp.

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

(loop(eval(read nil nil)))

Це REPL, мінус P. Він зчитує стандартний вхід і, ну, виконує його. Не припиняється, але правила прямо говорять, що це добре.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.