Bei Verwendung von zwei verknüpften Programmen werden Ordnungszahlen bis zu n ausgegeben

19

... Ordnungszahlen (oder Ordnungszahlen) sind Wörter, die Position oder Rang in einer sequentiellen Reihenfolge darstellen.

Bildbeschreibung hier eingeben

Aus Wikipedia .

Ihre Aufgabe ist es, mit Hilfe von 2 separaten Programmen (von denen aus 2 verschiedene Sprachen erstellt werden können) die Ordnungsreihenfolge von der ersten bis zur letzten auszugeben nth. Sie geben secondim Gegensatz zu das vollständige Wort aus 2nd.

Die Herausforderung der Ordnungszahlen wurde vor allem in diesem Beitrag angesprochen . Bei dieser Herausforderung sind Ordnungszahlen lediglich ein Hilfsmittel, um die nachstehend beschriebenen besonderen Bedingungen zu erfüllen.


Teil 1

Sie müssen ein Programm erstellen, das bei Eingabe von irgendetwasn ausgeben muss .
nwird immer eine positive ganze Zahl ungleich Null sein, die nicht größer als 999 ist.

Die gültige Ausgabe umfasst, ist aber nicht beschränkt auf :

  • Beliebige Ausgabe nach stdout/ stderr/ etc
  • Erstellung von Dateien / Ordnern / etc
  • Eine grafische Oberfläche oder Bilder jeglicher Art

Alles geht.


Teil 2

Sie müssen ein Programm erstellen, das die Ausgabe des Programms von Teil 1 verwendet, um eine Folge von Ordnungszahlen auszugeben, beginnend mit 1 (zuerst) bis zu dem, was nin Teil 1 analysiert wurde.

Allgemeine Bedingungen:

  • Die Gesamtzahl der Bytes für Teil 2 darf die Gesamtzahl der Bytes für Teil 1 (kleiner oder gleich) nicht überschreiten.

Ausgabebedingungen:

  • Groß- und Kleinschreibung wird nicht berücksichtigt.
  • Die Ausgabe darf nur die Ordnungszahl (nur die Zeichen aZ) und das Leerzeichen (Zeilenumbruch zulässig) enthalten.
  • Kann an jede Quelle ausgegeben werden, solange sie während oder nach der Ausführung sichtbar ist.
  • Das Programm muss nicht beendet werden, solange die Ausgabe korrekt ist.
  • Für die Ausgabe ist keine Grammatik erforderlich, sie kann jedoch optional enthalten sein (Bindestriche, Kommas, "ands" usw.). nine hundred ninety ninthist genauso akzeptabel wie nine hundred and ninety-ninth.

Beispielausgabe

Wo nist 8

FIRST SECOND THIRD FOURTH FIFTH SIXTH SEVENTH EIGHTH

Wertung

Die Hierarchie der Gewinnbedingungen lautet:

  1. Die niedrigste Anzahl von Bytes in Teil 1
  2. Die niedrigste Anzahl von Bytes in Teil 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
quelle
5
Was ist der Punkt in Teil 1 (wie in, warum konnte diese Herausforderung nicht einfach bei der kürzesten Einreichung für Teil 2 erzielt werden)? Ist in Ihrem zweiten Bewertungsbeispiel der erste Eintrag nicht ungültig (Teil 2> Teil 1), und wenn nicht, würde er den zweiten Eintrag nicht schlagen? Außerdem empfehle ich, mindestens einen Link zu einem formalen Regelsatz für die Definition von Ordnungszahlen zu haben. Soll ich zum Beispiel sagen, one hundred and eleventhoder one hundred eleventh?
HyperNeutrino
3
@HyperNeutrino Ich denke , die Idee , zu versuchen, die Arbeit zwischen den beiden so gleichmäßig wie möglich zu verteilen , während Golf spielen - wenn ich p1 Ausgang machen [30, 'second']für 32dann p2 weniger Arbeit zu tun hat , wenn er ausgegeben hatte, nur 32.
Jonathan Allan
4
Vielleicht fehlt mir etwas Dummes, aber von den letzten beiden Einträgen in den Bewertungsbeispielen, warum gewinnt Eintrag 1 nicht? Teil 1 hat die gleichen Bytes, Teil 2 ist kleiner oder gleich Teil 1 für beide, und Teil 2 von Eintrag 1 hat weniger Bytes als Teil 2 von Eintrag 2.
Patrick Roberts
@PatrickRoberts Da Teil 2 bis Teil 1 gleich oder weniger Bytes enthalten muss . Da Teil 1 21 Bytes umfasst, Teil 2 jedoch 33 Bytes, wird Eintrag Nr. 1 disqualifiziert. Leider sind diese Informationen versteckt und werden derzeit nicht explizit in den Gewinnbedingungen angegeben.
Chronocidal
@PatrickRoberts Dies ist wichtig, da Sie andernfalls eine Sprache verwenden könnten, die implizit die Eingabe als Ausgabe übergibt, wenn ein 0-Byte-Programm für Teil 1
Chronocidal,

Antworten:

14

Vorschlaghammer 0.5.1 / Vorschlaghammer 0.5.1, 10 Byte

Programm 1 (10 Bytes):

⣘⢷⠾⣃⢖⣎⢅⡨⠱⢳

Dekomprimiert in diese Wolfram Language-Funktion:

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

Programm 2 (7 Bytes):

⡾⡁⢚⣷⣬⠤⣾

Dekomprimiert in diese Wolfram Language-Funktion:

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

Probieren Sie es online!

Lirtosiast
quelle
9

R (mitenglish Paket), 16 Bytes / 16 Bytes

 Teil 1, 16 Bytes

f=function(n)1:n

Teil 2, 16 Bytes

english::ordinal

Benötigt das englishPaket (das leider nicht auf TIO installiert ist).

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

Natürlich könnte Teil 1 viel kürzer gemacht werden (3 Bytes:) seq, aber das würde der Einschränkung zuwiderlaufen, dass Teil 2 nicht länger als Teil 1 sein darf.

Robin Ryder
quelle
@ Giuseppe Sicher. Obwohl ich behaupten würde, dass CRAN-Pakete Teil von R sind und daher zulässig sein sollten, solange wir die Zeichen zählen, die zum Laden und Anhängen dieser Zeichen erforderlich sind.
Robin Ryder
Ich glaube, Metakonsens ist, dass die Verwendung einer externen Bibliothek im Wesentlichen als "eine andere Sprache" gilt. Siehe zum Beispiel diesen Beitrag, der sich mit Compiler-Flags befasst, aber einen Hinweis zu externen Python-Bibliotheken enthält. Die Antwort hier ist mit vielen Beispielen aufschlussreich, aber ich kann die Suchfunktion auf Metas scheinbar nicht verwenden, um die endgültige Aussage zu finden.
Giuseppe
@ Giuseppe Fortsetzung im Chat: chat.stackexchange.com/transcript/message/51052875#51052875
Robin Ryder
8

Wolfram-Sprache (Mathematica) (beide Teile), 18 Bytes / 15 Bytes

-5 / -1 danke an lirtosiast

Teil 1, 18 Bytes

Range@#|"Ordinal"&

Teil 2, 15 Bytes

IntegerName@@#&

Probieren Sie es online!

Zwei Funktionen, die über den Rückgabewert ausgegeben werden.

attinat
quelle
2
Range@#|"Ordinal"&ist kürzer und IntegerNamevektorisiert über das erste Argument. Ich denke jedoch, dass eine durch Leerzeichen getrennte Ausgabe erforderlich sein könnte.
Lirtosiast
4

Python 3 (Teil 1 und Teil 2)

Leider ist Nodebox sehr wortreich ... es gibt nicht viel Platz zum Golfen.

Teil 1 76 Bytes

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

Teil 2 (verwendet die NodeBox- Bibliothek) 76 Byte

import en.number as n
for i in input().split():print(n.ordinal(n.spoken(i)))
EIN
quelle
5
Ihre Antwort muss gültig sein; In diesem Fall ist Ihr Teil 2 länger als Ihr Teil 1, was ungültig ist. Sie können eine Antwort nicht als "nicht konkurrierend" markieren und eine ungültige Einreichung einreichen. Das Label "Nicht konkurrierend" ist ein veraltetes Label für Herausforderungen, die in Sprachen oder Sprachversionen eingereicht wurden, die die Herausforderung nachträglich datieren. Bisher war dies in der Regel nicht zulässig, bei interessanten Einsendungen ist es jedoch im Status "Nicht konkurrierend" zulässig.
HyperNeutrino
1
@HyperNeutrino Tut mir leid, ich dachte, die Regeln erforderten, dass Teil 1 kürzer als Teil 2 ist. Ich habe dies als nicht konkurrierend markiert, weil es eine Bibliothek verwendet hat, um dieses Problem zu lösen.
A
2
Technisch gesehen scheint die Verwendung externer Bibliotheken in Ordnung zu sein: codegolf.meta.stackexchange.com/q/188
Jono 2906
1
import en.number as nspart Ihnen vier Bytes in jedem Teil.
Khuldraeseth na'Barya
1

JavaScript (Node.js), 47 Bytes / 47 Bytes

Zwei Funktionen in derselben Node.js-Umgebung, die wie folgt aufgerufen werden g(f(n)). Verwendet das npm-Paket von Nummer zu Wort .

Teil 1, 47 Bytes (40 Bytes + 7 Leerzeichen)

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

Teil 2, 47 Bytes

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

Probieren Sie es auf Runkit!


JavaScript (Node.js), 48 Bytes / 43 Bytes

Teil 1, 48 Bytes

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

Teil 2, 43 Bytes

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

Probieren Sie es auf Runkit!

darrylyeo
quelle
1

Perl 5.10 / Common Lisp, 34/26 Bytes

Also, Common Lisp formathat dies als eingebaut, weil es natürlich tut.

Programm 1 (34 Bytes)

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

Perl macht den ganzen Durchlauf. Der entsprechende Common-Lisp-Code ( (dotimes(i(read)) ...)) ist länger als der viel Golfspieler Perl ... for 1..<>. Perl gibt eine Reihe von Common Lisp-Code aus.

Programm 2 (26 Bytes)

(loop(eval(read nil nil)))

Es ist eine REPL, abzüglich des P. Es liest die Standardeingabe und führt sie aus. Wird nicht beendet, aber die Regeln besagen ausdrücklich, dass das in Ordnung ist.

Silvio Mayolo
quelle