Fractions intermédiaires
Le défi:
Vous devrez créer du code qui prend au moins 3 entrées; 2 entiers et "une représentation de fraction" - quel que soit le type qui convient à votre langue pour représenter les incréments de fraction) ie. Si vous choisissez une chaîne, l'entrée serait "1/4" ou vous pourriez choisir 2 entrées entières supplémentaires ou un tuple ou w / e.
L'entrée peut être n'importe où raisonnable (STDIN, arguments de fonction, à partir d'un fichier, etc.), tout comme la sortie (STDOUT, valeur de retour de fonction, dans un fichier, etc.)
Règles:
- La "fraction" d'entrée sera toujours une fraction valide, inférieure à 1; exemple "1/4"
- Le deuxième entier d'entrée aura toujours une valeur plus élevée que le premier entier. IE, le premier entier d'entrée aura toujours une valeur inférieure à la seconde.
- Les entiers d'entrée peuvent être négatifs.
- Les fractions produites doivent être réduites autant que possible (simplifiées)
Le code devra sortir chaque "étape de fraction" entre les 2 nombres par incréments de la fraction d'entrée.
Le code doit être un programme ou une fonction comme indiqué ici
Exemple 1:
Contribution: -2,3,"1/2"
Production:
-2
-3/2
-1
-1/2
0
1/2
1
3/2
2
5/2
3
Exemple 2:
Contribution: 1,2,"2/3"
Production:
1
5/3
2
ou
1
4/3
2
Remarque: le comptage peut commencer dans les deux sens (merci @Mego)
Il s'agit de code-golf , donc la réponse la plus courte en octets l'emporte.
la source
Réponses:
Octave,
3430 octetsPrend maintenant la fraction comme une expression numérique plutôt que comme numérateur et dénominateur séparés.
Échantillon sur ideone
la source
@(a,b,c)rats(union([a:c:b],b))
?1/2
une entrée numérique plutôt que chaîne), mais ce n'est pas ainsi que j'ai interprété "une représentation de fraction". Si l'OP accepte, je serai heureux de raser 4 octets.Mathematica, 16 octets
Une fonction sans nom qui prend deux entiers et un nombre rationnel et renvoie une liste de nombres, par exemple:
Mathematica
Range
fait exactement ce que le défi demande, sauf qu'il omet la limite supérieure si la différence entre la limite inférieure et la limite supérieure n'est pas exactement un multiple de la taille du pas. Par conséquent, nous prenons leUnion
(en utilisant⋃
) avec la liste contenant uniquement la limite supérieure qui garantit qu'elle apparaît exactement une fois. Notez queUnion
cela triera le résultat mais nous voulons qu'il soit trié de toute façon, car la taille de l'étape est toujours positive. De plus, puisque nous travaillons avec des justifications, elles sont automatiquement réduites autant que possible.la source
T-SQL 2012+,
831535477270246240219 octetsVeuillez noter qu'il s'agit d'une doublure - sql n'a pas de fonction intégrée pour réduire la fraction. Peut ne pas être la meilleure langue pour ce type de question. Il est lisible par l'homme (en quelque sorte - par rapport à certaines autres langues).
Essayez-le en ligne
la source
@n
ou@d
à la plaine@
. Votre requête CTE pour N pourrait êtreN AS(SELECT N FROM(VALUES(1),(1),(1),(1),(1),(1),(1),(1),(1),(1))M(N))
ouN AS(SELECT 1N FROM sys.all_views)
. Étant donné qu'il est presque garanti qu'il y en ait quelques centaines dans cette vue, vous pouvez également réduire les jointures croisées.ISNULL
est plus court queCOALESCE
et devrait fonctionnerPython 2, 81 octets
Essayez-le en ligne
la source
Haskell,
3126 octetsÉvaluation paresseuse FTW! Démo:
(J'ai d'abord été tenté par la
[a,a+c..b]
notation de Haskell , mais elle a quelques bizarreries qui nécessitent quelque chose commef a b c|l<-[a,a+c..b-c/2]=l++[b|last l<b]
41 octets ouf a b c=[x|x<-[a,a+c..],x<b]++[b]
33.)la source
import Data.Ratio
dans votre nombre d'octets, je pense que vous ne pouvez pas l'utiliserf
sans cela, non?Data.Ratio
def
lui-même, car il est polymorphe pour tous les types numériques. Cependant, lorsque vous souhaitez l'appeler avec des valeurs de typeRatio
, vous avez besoin de l'importation. Le défi nécessite seulement de "créer du code qui ...", pas de l'utiliser. Je pense que c'est bien sans l'importation.%
opérateur crée les fractions de test1 % 2
et2 % 3
. Je ne triche pas ici: vous pouvez vraiment mettre ces 26 octets dans un fichier par eux-mêmes, exécuter l'interpréteur sur ce module et avoir l'interaction que j'affiche. (Vous pourriez même éviter de taperimport Data.Ratio
dans l'interaction de démonstration, si vous%
Data.Ratio.%
MATL ,
1615 octetsCela peut échouer pour les très grands dénominateurs. J'espère que le format de sortie est acceptable.
Essayez-le en ligne!
la source
Rubis ,
325448 octetsCette solution est basée sur la réponse Python de Mego et suppose que ce
c
sera toujours unRational
format de fraction de Ruby. Essayez-le en ligne!Edit: correction d'un bug où les entiers n'étaient pas présentés comme des entiers. -6 octets grâce à Not That Charles et MegaTom.
Les fonctions sont appelées de cette façon:
la source
Rational
forme la plus simple de3
Ruby est(3/1)
.step(b,c).map
devrait réduire le nombre d'octets ici(a==a.to_i)
peut êtrea%1==0
de -4 octets.-2,3,1/2r
(exemple 1) imprime le dernier3
deux fois.Julia, 14 octets
Ceci est similaire à la réponse Mathematica, sauf que les plages de Julia sont déjà au format souhaité, donc elles sont encore plus courtes. Renvoie également une collection de nombres. Exemple de sortie:
Notez que les entiers sont affichés avec 1 dans le dénominateur, et une double barre oblique est utilisée pour les fractions. Pour obtenir la sortie exactement telle que définie dans la question, il faut un peu plus de code:
la source
Matlab avec Symbolic Toolbox / Octave avec SymPy, 27 octets
Merci à @sanchises d'avoir signalé une erreur, maintenant corrigée
Il s'agit d'une fonction anonyme. Pour l'appeler, affectez-le à une variable ou utilisez
ans
.Exemple:
la source
c
vous pouvez utiliser, je cite, le type qui convient à votre langue pour représenter les incréments de fraction [...] ou w / e . Je pense qu'il est assez clair quesymbolic
c'est un choix logique et autorisé (@VisualBean pourrait vouloir le confirmer). Le résultat de l'opérateur deux-points est ensuite «mis à niveau» vers unsymbolic
tableau, ce qui signifie que vous pouvez vous débarrassersym()
complètement de l' appel.Javascript,
108 90 8681 octetsUne fonction anonyme. Après affectation à une variable nommée avec un espace blanc:
Exemples de tests:
Une approche impérative utilisant javascript, pas de récursivité, bibliothèque ou programmation fonctionnelle.
la source
Smalltalk - 89 octets
Pour une fois, Smalltalk est presque compétitif!
Appelez comme ceci:
la source
R - 71 octets
Suppose que vous avez déjà installé le
MASS
packagela source
Pyret, 56 octets
Prend le début (b), la fin (e), le numérateur (n) et le dénominateur (d). Crée une plage d'entiers, les divise et ajoute la fin à la liste (en liant puis en triant).
la source