Za pomocą dwóch połączonych programów wypisz liczby porządkowe do n

19

... Liczby porządkowe (lub liczby porządkowe) to słowa reprezentujące pozycję lub pozycję w kolejności sekwencyjnej.

wprowadź opis zdjęcia tutaj

Z Wikipedii .

Twoim zadaniem jest, używając 2 oddzielnych programów (z których można utworzyć z 2 różnych języków), wygenerować sekwencję porządkową od pierwszego do nth. Będziesz wypisywać pełne słowo secondw przeciwieństwie do 2nd.

Kwestia liczb porządkowych była już podnoszona, szczególnie w tym wpisie . W tym wyzwaniu porządki zwykłe są jedynie narzędziem ułatwiającym unikalne warunki wyszczególnione poniżej.


Część 1

Musisz stworzyć program, który po podaniu nmusi wypisać cokolwiek .
nzawsze będzie dodatnią, niezerową liczbą całkowitą nie większą niż 999.

Prawidłowe dane wyjściowe obejmują między innymi :

  • Wszelkie dane wyjściowe do stdout/ stderr/ etc
  • Tworzenie plików / folderów / itp
  • Interfejs graficzny lub obrazy dowolnego rodzaju

Wszystko idzie.


Część 2

Musisz stworzyć program, który wykorzystuje dane wyjściowe programu części 1 do wyświetlania sekwencji liczb porządkowych, zaczynając od 1 (pierwsza), aż do wszystkiego, co nzostało przeanalizowane w części 1.

Ogólne warunki:

  • Suma bajtów dla części 2 nie może przekraczać całkowitej liczby bajtów dla części 1 (mniejszej lub równej).

Warunki wyjściowe:

  • Bez rozróżniania wielkości liter.
  • Dane wyjściowe muszą zawierać tylko sekwencję porządkową (tylko znaki aZ) i białe znaki (dozwolone nowe linie).
  • Może być wyprowadzany do dowolnego źródła, o ile jest on widoczny podczas lub po wykonaniu.
  • Program nie musi się kończyć, o ile jego dane wyjściowe są prawidłowe.
  • Dane wyjściowe nie muszą mieć żadnej gramatyki, ale opcjonalnie mogą ją zawierać (łączniki, przecinki, „i” itp.). nine hundred ninety ninthjest tak samo do przyjęcia jak nine hundred and ninety-ninth.

Przykładowe dane wyjściowe

Gdzie njest 8

FIRST SECOND THIRD FOURTH FIFTH SIXTH SEVENTH EIGHTH

Punktacja

Hierarchia warunków wygranych jest następująca:

  1. Najniższa liczba bajtów w części 1
  2. Najniższa liczba bajtów w części 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
BDM
źródło
5
Jaki jest sens w części 1 (jak w tym, dlaczego nie można było zdobyć tego wyzwania po najkrótszym zgłoszeniu do części 2)? Także w drugim przykładzie punktacji, czy pierwszy wpis nie jest nieprawidłowy (część 2> część 1), a jeśli nie, czy nie pobije drugiego wpisu? Ponadto polecam mieć przynajmniej link do formalnego zestawu reguł do definiowania porządków; na przykład, czy 111 ma powiedzieć one hundred and eleventhlub one hundred eleventh?
HyperNeutrino
3
@HyperNeutrino Myślę, że pomysł jest, aby spróbować podzielić pracę między nimi możliwie równomiernie podczas gry w golfa - jeśli zrobię p1 wyjście [30, 'second']dla 32ówczesnego p2 ma mniej do zrobienia, że gdyby miał wyjścia, po prostu 32.
Jonathan Allan
4
Może brakuje mi czegoś głupiego, ale z dwóch ostatnich wpisów w przykładach punktacji, dlaczego nie wygrywa 1 wpisu? część 1 ma te same bajty, część 2 jest mniejsza lub równa części 1 dla obu, a pozycja 1 część 2 ma mniej bajtów niż pozycja 2 część 2.
Patrick Roberts
@PatrickRoberts Ponieważ część 2 musi zawierać równe lub mniej bajtów niż część 1. Ponieważ część 1 ma 21 bajtów, ale część 2 ma 33 bajty, pozycja 1 jest zdyskwalifikowana. Niestety, ta informacja jest ukryta i nie jest obecnie wyraźnie określona w warunkach wygranej.
Chronocidal
@PatrickRoberts Jest to ważne, ponieważ w przeciwnym razie można użyć języka, który domyślnie przekazuje dane wejściowe jako dane wyjściowe po uruchomieniu programu 0-bajtowego dla części 1
Chronocidal

Odpowiedzi:

14

Młot 0.5.1 / Młot 0.5.1, 10 bajtów

Program 1 (10 bajtów):

⣘⢷⠾⣃⢖⣎⢅⡨⠱⢳

Dekompresuje się do tej funkcji języka Wolfram:

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

Program 2 (7 bajtów):

⡾⡁⢚⣷⣬⠤⣾

Dekompresuje się do tej funkcji języka Wolfram:

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

Wypróbuj online!

lirtosiast
źródło
9

R (z englishpakietem), 16 bajtów / 16 bajtów

 Część 1, 16 bajtów

f=function(n)1:n

Część 2, 16 bajtów

english::ordinal

Wymaga englishpakietu (niestety nie jest zainstalowany na TIO).

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

Oczywiście, część 1 może być znacznie krótsza (3 bajty:) seq, ale byłoby to sprzeczne z ograniczeniem, że część 2 musi być nie dłuższa niż część 1.

Robin Ryder
źródło
@Giuseppe Sure. Chociaż argumentowałbym, że pakiety CRAN są częścią R i dlatego powinny być dozwolone, o ile policzymy znaki potrzebne do ich załadowania i dołączenia.
Robin Ryder
Uważam, że meta konsensus polega na tym, że korzystanie z zewnętrznej biblioteki zasadniczo liczy się jako „inny język”; zobacz na przykład ten post, który dotyczy flag kompilatora, ale zawiera notatkę o zewnętrznych bibliotekach Pythona. Odpowiedź tutaj jest pouczająca z wieloma przykładami, ale nie mogę użyć funkcji wyszukiwania w meta, aby znaleźć definitywną instrukcję.
Giuseppe
@Giuseppe Ciąg dalszy na czacie: chat.stackexchange.com/transcript/message/51052875#51052875
Robin Ryder
8

Wolfram Language (Mathematica) (obie części), 18 bajtów / 15 bajtów

-5 / -1 dzięki lirtosiast

Część 1, 18 bajtów

Range@#|"Ordinal"&

Część 2, 15 bajtów

IntegerName@@#&

Wypróbuj online!

Dwie funkcje, które są wysyłane przez wartość zwracaną

attinat
źródło
2
Range@#|"Ordinal"&jest krótszy i IntegerNamewektoryzuje pierwszy argument. Myślę jednak, że może być wymagane wyjście rozdzielone spacjami.
lirtosiast
4

Python 3 (część 1 i część 2)

Niestety Nodebox jest bardzo pracowity ... nie ma wiele miejsca na grę w golfa.

Część 1 76 bajtów

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

Część 2 (wykorzystuje bibliotekę NodeBox ) 76 bajtów

import en.number as n
for i in input().split():print(n.ordinal(n.spoken(i)))
ZA
źródło
5
Twoja odpowiedź musi być ważna; w takim przypadku Twoja część 2 jest dłuższa niż Twoja część 1, która jest nieważna. Nie można oznaczyć odpowiedzi jako „niekonkurującej” i przesłać nieprawidłowej odpowiedzi; etykieta „niekonkurująca” jest przestarzałą etykietą dla zgłoszeń zgłaszanych w językach lub wersjach językowych, które są datowane po konkursie, co zwykle było niedozwolone, ale dozwolone pod statusem „niekonkurującym” w przypadku interesujących zgłoszeń.
HyperNeutrino
1
@HyperNeutrino Niestety, myślałem, że reguły wymagały, aby Część 1 była krótsza niż Część 2. Oznacziłem to jako niekonkurujące, ponieważ wykorzystało bibliotekę do rozwiązania tego problemu.
2
Technicznie rzecz biorąc, używanie zewnętrznych bibliotek wydaje się być w porządku: codegolf.meta.stackexchange.com/q/188
Jono 2906
1
import en.number as noszczędza cztery bajty w każdej części.
Khuldraeseth na'Barya
1

JavaScript (Node.js), 47 bajtów / 47 bajtów

Dwie funkcje w tym samym środowisku Node.js, wywołane podobnie g(f(n)). Używa pakietu npm numer do słów .

Część 1, 47 bajtów (40 bajtów + 7 spacji)

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

Część 2, 47 bajtów

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

Wypróbuj na Runkit!


JavaScript (Node.js), 48 bajtów / 43 bajtów

Część 1, 48 bajtów

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

Część 2, 43 bajty

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

Wypróbuj na Runkit!

darrylyeo
źródło
1

Perl 5.10 / Common Lisp, 34/26 bajtów

Tak więc Common Lisp formatma to wbudowane, bo oczywiście tak.

Program 1 (34 bajty)

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

Perl wykonuje całą iterację. Równoważny kod Common Lisp ( (dotimes(i(read)) ...)) jest dłuższy niż bardziej golfowy Perl ... for 1..<>. Perl wypuszcza sporo wspólnego kodu Lisp.

Program 2 (26 bajtów)

(loop(eval(read nil nil)))

Jest to REPL, pomniejszone o P. Czyta standardowe wejście i, cóż, wykonuje je. Nie kończy się, ale zasady wyraźnie mówią, że to w porządku.

Silvio Mayolo
źródło