Vous pouvez créer une liste de tous les rationnels 0 <r ≤ 1 en les répertoriant d'abord par dénominateur puis par numérateur:
1 1 1 2 1 3 1 2 3 4 1 5 1 2 3 4 5
- - - - - - - - - - - - - - - - -
1 2 3 3 4 4 5 5 5 5 6 6 7 7 7 7 7
Notez que nous ignorons tout nombre rationnel qui s'est déjà produit auparavant. Par exemple, 2/4 est ignoré car nous avons déjà répertorié 1/2.
Dans ce défi, nous nous intéressons uniquement aux numérateurs. En regardant la liste ci-dessus, écrivez une fonction ou un programme prenant un entier positif n qui renvoie le nième numérateur de la liste.
Testcases:
1 -> 1
2 -> 1
3 -> 1
4 -> 2
5 -> 1
6 -> 3
7 -> 1
8 -> 2
9 -> 3
50 -> 4
80 -> 15
(0,1]
Réponses:
MATL ,
1713 octetsEssayez-le en ligne! Ou vérifiez tous les cas de test .
La taille d'entrée peut être limitée par la précision en virgule flottante. Tous les cas de test donnent le résultat correct.
Explication
Cela génère toutes les fractions
k/m
aveck
,m
dans[1 2 ...n]
, comme une matricen
×n
. La ligne indique le numérateur et la colonne le dénominateur. En fait, l'entrée de la matrice contient la fraction inversem/k
, au lieu dek/m
, mais cela n'est pas pertinent et peut être ignoré dans le reste de l'explication.Les entrées de matrice sont implicitement considérées comme triées par ordre de colonne. Dans ce cas, cela correspond à l'ordre requis: dénominateur, puis numérateur.
Trois types d'entrées doivent être ignorés de cette matrice:
k/m
,k>m
qui ont la même valeur que d' une entrée précédente (par exemple,2/4
est ignoré parce qu'il est le même que1/2
)k/k
,k>1
. Entrées dont le numérateur dépasse le dénominateurk/m
,k<m
(elles ne font pas partie du problème).Ignorer les entrées se fait avec une
unique
fonction qui supprime de manière stable les valeurs en double et génère les indices des entrées survivantes. Avec cela, les entrées de type 1 ci-dessus sont automatiquement supprimées. Pour gérer les types 2 et 3, les entrées de matrice en diagonale et en dessous sont définies sur0
. De cette façon, toutes les entrées nulles seront supprimées sauf la première (correspondant à la fraction valide1/1
).Considérez la saisie
4
comme exemple.la source
Gelée ,
119 octetsEssayez-le en ligne! ou vérifiez tous les cas de test .
Comment ça marche
la source
Mathematica, 53 octets
la source
Haskell, 40 octets
Une fonction anonyme. Assez simple: utilise une compréhension de liste pour générer une liste infinie, en boucle sur tous les numérateurs
n
et dénominateurs relativement premiersd
. Pour convertir un index nul en un indexé, nous ajoutons a0
, qui prend des4
octets.la source
n<-[0..d]
ajoute le zéro de manière plus courte et enregistre les 4 octetsPyth, 13 octets
Essayez-le en ligne. Suite de tests.
la source
Pyth, 11 octets
Essayez-le en ligne: Démonstration
Explication:
la source
En fait , 15 octets
Cette réponse est basée sur la réponse Jelly de Dennis . J'utilise
HN
à la fin pour éviter les problèmes avec l'indexation 0 et avoir besoin de décrémenter n et de permuter au début ou à la fin.H
obtient les premiersn
membres de la liste des numérateurs qui en résulte etN
obtient le dernier membre de cette sélection, c'est-à-dire len
e numérateur, le tout sans tripoter les opérations de pile. Suggestions de golf bienvenues. Essayez-le en ligne!Ungolfing
la source
Python,
111110 octetsLa fraction est représentée par
x/y
. L'argumentn
est décrémenté quand une nouvelle fraction de raccord se trouve (legcd
defractions
chèques peut être réduite de la fraction). À chaque itération de la boucle,x
est incrémenté, puis, six>=y
, une nouvelle série de fractions avecy+1
est démarrée, en>
raison du "cas spécial"(x,y)=(2,1)
, joué au golfx>y
.Je suis sûr que cela peut être joué davantage, mais je ne sais pas où je pourrais l'améliorer.Je l'ai trouvé.Lien vers le code et les cas de test
la source
JavaScript (ES6), 95 octets
Fonctionne en générant toutes les
n²
fractions avec des numérateurs et dénominateurs de1
pourn
et en filtrant ceux supérieure1
ou vu précédemment, en prenant alors len
th.la source
Perl, 82 + 2 (
-pl
indicateur) = 84 octetsNon golfé:
la source
JavaScript (ES6), 76
Moins golfé
Tester
la source
Clojure, 85 octets
Utilise la compréhension de liste pour générer la liste de toutes les justifications, puis la filtre pour n'en obtenir que des distinctes. Prend un
nth
élément de la liste et retourne son numérateur. Une condition distincte est également nécessaire pour le premier élément car Clojure n'est pas en mesure de prendre le numérateur d'un entier. (pour une raison quelconque, considérant qu'un entier n'est pas rationnel - https://goo.gl/XETLo2 )Voir en ligne - https://ideone.com/8gNZEB
la source