À l'aide de deux programmes liés, affichez des nombres ordinaux jusqu'à n

19

... Les nombres ordinaux (ou nombres ordinaux) sont des mots représentant la position ou le rang dans un ordre séquentiel.

entrez la description de l'image ici

De Wikipédia .

Votre tâche consiste, à l'aide de 2 programmes distincts (qui peuvent être créés à partir de 2 langues différentes), à sortir la séquence ordinale du premier au nth. Vous sortirez le mot complet secondpar opposition à 2nd.

Le défi des nombres ordinaux a été soulevé auparavant, en particulier dans cette entrée . Dans ce défi, les ordinaux sont simplement un véhicule pour faciliter les conditions uniques détaillées ci-dessous.


Partie 1

Vous devez créer un programme qui, une fois donné, ndoit produire n'importe quoi .
nsera toujours un entier positif non nul ne dépassant pas 999.

Une sortie valide comprend, mais sans s'y limiter :

  • Toute sortie vers stdout/ stderr/ etc
  • Création de fichiers / dossiers / etc
  • Une interface graphique ou des images de toute nature

Tout va.


Partie 2

Vous devez créer un programme qui utilise la sortie du programme de la partie 1 pour sortir une séquence de nombres ordinaux, à partir de 1 (premier), jusqu'à ce qui a nété analysé dans la partie 1.

Conditions générales:

  • Le nombre total d'octets pour la partie 2 ne doit pas dépasser le nombre total d'octets pour la partie 1 (inférieur ou égal à).

Conditions de sortie:

  • Pas sensible à la casse.
  • La sortie doit contenir uniquement la séquence ordinale (uniquement les caractères aZ) et les espaces (sauts de ligne autorisés).
  • Peut être émis vers n'importe quelle source, tant qu'il est visible pendant ou après l'exécution.
  • Le programme n'a pas besoin de s'arrêter tant que sa sortie est correcte.
  • La sortie n'est pas requise pour avoir une grammaire, mais peut éventuellement l'inclure (tirets, virgules, "ands", etc.). nine hundred ninety ninthest tout aussi acceptable que nine hundred and ninety-ninth.

Exemple de sortie

nest 8

FIRST SECOND THIRD FOURTH FIFTH SIXTH SEVENTH EIGHTH

Notation

La hiérarchie des conditions de victoire est la suivante:

  1. Le plus petit nombre d'octets de la partie 1
  2. Le plus petit nombre d'octets dans la partie 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
la source
5
Quel est le point dans la partie 1 (comme dans, pourquoi ce défi n'a-t-il pas pu être noté sur la plus courte soumission pour la partie 2)? De plus, dans votre deuxième exemple de notation, la première entrée n'est-elle pas invalide (partie 2> partie 1), et sinon, ne battrait-elle pas la deuxième entrée? Aussi, je recommande d'avoir au moins un lien vers un ensemble de règles formelles pour définir les ordinaux; par exemple, 111 est-il censé dire one hundred and eleventhou one hundred eleventh?
HyperNeutrino
3
@HyperNeutrino Je pense que l'idée est d'essayer de diviser le travail entre les deux aussi uniformément que possible pendant le golf - si je fais une sortie p1 [30, 'second']pour 32alors p2 a moins de travail pour le faire s'il avait une sortie, juste 32.
Jonathan Allan
4
Peut-être que je manque quelque chose de stupide, mais des deux dernières entrées dans les exemples de notation, pourquoi l'entrée 1 ne gagne-t-elle pas? la partie 1 a les mêmes octets, la partie 2 est inférieure ou égale à la partie 1 pour les deux, et l'entrée 1 la partie 2 a moins d'octets que l'entrée 2 la partie 2.
Patrick Roberts
@PatrickRoberts Parce que la partie 2 doit contenir des octets égaux ou inférieurs à la partie 1. Puisque la partie 1 est de 21 octets, mais la partie 2 est de 33 octets, l'entrée n ° 1 est disqualifiée. Malheureusement, ces informations sont cachées et ne sont pas explicitement énoncées dans les conditions de victoire pour le moment.
Chronocidal
@PatrickRoberts Ceci est important, car sinon vous pourriez utiliser un langage qui passe implicitement l'entrée en sortie lorsqu'un programme de 0 octet est exécuté pour la partie 1
Chronocidal

Réponses:

14

Sledgehammer 0.5.1 / Sledgehammer 0.5.1, 10 octets

Programme 1 (10 octets):

⣘⢷⠾⣃⢖⣎⢅⡨⠱⢳

Décompresse dans cette fonction Wolfram Language:

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

Programme 2 (7 octets):

⡾⡁⢚⣷⣬⠤⣾

Décompresse dans cette fonction Wolfram Language:

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

Essayez-le en ligne!

lirtosiast
la source
9

R (avecenglish package), 16 octets / 16 octets

 Partie 1, 16 octets

f=function(n)1:n

Partie 2, 16 octets

english::ordinal

Nécessite le englishpackage (qui n'est pas installé sur TIO, malheureusement).

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

Bien sûr, la partie 1 pourrait être beaucoup plus courte (3 octets:) seq, mais cela irait à l'encontre de la contrainte que la partie 2 ne doit pas être plus longue que la partie 1.

Robin Ryder
la source
@Giuseppe Sure. Bien que je soutienne que les packages CRAN font partie de R, et devraient donc être autorisés tant que nous comptons les caractères nécessaires pour les charger et les attacher.
Robin Ryder
Je crois que le méta consensus est que l'utilisation d'une bibliothèque externe compte essentiellement comme "une autre langue"; voir par exemple ce post qui traite des drapeaux du compilateur, mais contient une note sur les bibliothèques externes Python. La réponse ici est instructive avec de nombreux exemples mais je n'arrive pas à utiliser la fonction de recherche sur meta pour trouver la déclaration définitive.
Giuseppe
@Giuseppe Suite dans le chat: chat.stackexchange.com/transcript/message/51052875#51052875
Robin Ryder
8

Wolfram Language (Mathematica) (les deux parties), 18 octets / 15 octets

-5 / -1 grâce au lirtosiast

Partie 1, 18 octets

Range@#|"Ordinal"&

Partie 2, 15 octets

IntegerName@@#&

Essayez-le en ligne!

Deux fonctions qui sortent via la valeur de retour.

attinat
la source
2
Range@#|"Ordinal"&est plus court et IntegerNamevectorise le premier argument. Je pense que la sortie séparée par l'espace pourrait être nécessaire, cependant.
lirtosiast
4

Python 3 (partie 1 et partie 2)

Malheureusement, Nodebox est très verbeux ... il n'y a pas beaucoup de place pour le golf.

Partie 1 76 octets

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

Partie 2 (utilise la bibliothèque NodeBox ) 76 octets

import en.number as n
for i in input().split():print(n.ordinal(n.spoken(i)))
UNE
la source
5
Votre réponse doit être valide; dans ce cas, votre partie 2 est plus longue que votre partie 1, qui n'est pas valide. Vous ne pouvez pas marquer une réponse comme "non concurrente" et soumettre une soumission invalide; le label "non concurrent" est un label déconseillé pour les défis soumis dans des langues ou des versions linguistiques postérieures au défi, qui était généralement interdit, mais autorisé sous le statut "non concurrent" pour les soumissions intéressantes de toute façon.
HyperNeutrino
1
@HyperNeutrino Désolé, je pensais que les règles exigeaient que la partie 1 soit plus courte que la partie 2. J'ai marqué cela comme non concurrent car il utilisait une bibliothèque pour résoudre ce problème.
Un
2
Techniquement, l'utilisation de bibliothèques externes semble correcte: codegolf.meta.stackexchange.com/q/188
Jono 2906
1
import en.number as nvous enregistre quatre octets dans chaque partie.
Khuldraeseth na'Barya
1

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

Deux fonctions dans le même environnement Node.js, invoquées comme g(f(n)). Utilise le paquet npm nombre à mots .

Partie 1, 47 octets (40 octets + 7 espaces)

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

Partie 2, 47 octets

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

Essayez-le sur Runkit!


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

Partie 1, 48 octets

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

Partie 2, 43 octets

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

Essayez-le sur Runkit!

darrylyeo
la source
1

Perl 5.10 / Common Lisp, 34/26 octets

Donc, Common Lisp formata cela comme intégré, car bien sûr, il le fait.

Programme 1 (34 octets)

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

Perl fait tout l'itération. Le code Common Lisp équivalent ( (dotimes(i(read)) ...)) est plus long que le Perl beaucoup plus golfeur ... for 1..<>. Perl génère un tas de code Common Lisp.

Programme 2 (26 octets)

(loop(eval(read nil nil)))

C'est un REPL, moins le P. Il lit l'entrée standard et, bien, l'exécute. Ne se termine pas, mais les règles disent explicitement que ça va.

Silvio Mayolo
la source