Réduire les fractions dans le mauvais sens
Dans ce défi de code-golf, vous devez trouver des fractions qui peuvent être réduites dans le mauvais sens mais qui se retrouvent toujours dans le même nombre.
Remarque: la réduction des fractions dans le mauvais sens a ici une définition exacte, voir les détails.
Exemple:
64/16 = 6 4/1 6 = 4/1 = 4
Bien sûr, vous ne pouvez pas simplement frapper les deux 6 mais ici vous vous retrouvez toujours avec la bonne valeur. Dans ce défi, vous devez trouver des exemples comme celui-ci.
Détails
Vous devez écrire une fonction / programme qui accepte un entier positif n
en entrée et génère / renvoie une liste / tableau des fractions au format
numerator1,denominator1,numerator2,denominator2,...
Le programme doit trouver pour chaque fraction a/b
avec a+b=n
et a,b>0
si elle peut être réduite dans le mauvais sens . (Peu importe si elle peut être réduite de manière conventionnelle ou s'il existe de nombreuses possibilités de réduction, il doit simplement être possible de la réduire de la mauvaise manière d'au moins une manière.)
Définition de la mauvaise façon: Une fraction peut être réduite de la mauvaise façon si et seulement si la même séquence de chiffres successifs apparaît dans a et b et si la valeur de la fraction reste la même si vous supprimez la sous-chaîne.
Exemple: 1536/353 peut être «réduit» à 16/3 mais ces deux valeurs ne sont pas égales, vous ne pouvez donc pas réduire cette fraction dans le mauvais sens .
Notez que cette définition de la réduction de la mauvaise façon peut également inclure des fractions qui sont réduites de la bonne façon: 110/10 = 11/1
est dans la définition de la réduction de la mauvaise façon même si c'est une étape valide.
Notation
Le moins d'octets gagne. Vous pouvez écrire une fonction ou un programme qui accepte un entier et renvoie un tableau ou un programme qui utilise stdin / stdout ou vous pouvez considérer n enregistré dans une variable et à la fin du programme, la liste doit être enregistrée dans une autre variable.
Cas de test
Veuillez inclure les tests suivants (dites-moi lesquels je dois ajouter, je n'ai aucune idée du nombre de ces fractions / du nombre d'exemples à prévoir)
n=80 (64/16 should be in this list)
n=147 (98/49 should be in this list)
n=500 (294/196 should be in this list) WRONG since 294+196 != 500 Thanks Falko
1010/10 = 101/1 && 1010/10 /= 110/1
n=147
) est incorrect:49/89 != 4/8
.Réponses:
Python 2 -
183180l'entrée doit être stockée dans
n
, la sortie sera stockée dansl
.Cas de test:
n = 80:
n = 147:
n = 490:
Si les doublons dans la sortie sont interdits, il obtient 10 caractères de plus:
la source
Haskell,
207206 (209?) CaractèresS'il n'est pas permis de renvoyer le même rapport plusieurs fois (400/400 = 40/40 = 4/4), utilisez
f n=nub[...
pour les filtrer.Renvoie une liste de paires. Une liste de paires à deux éléments coûte la même chose. Une liste de fractions réelles nécessiterait une importation
Data.Ratio
ou une qualification complèteData.Ratio.%
(qui entre également en collision avec la%
fonction définie ici)cas de test (avec
nub
):non golfé et commenté :
la source
Python 2 - 236
la source
Python 3 - 302
Remarque: En raison de difficultés d'analyse, il n'y a pas de fractions avec le nombre 0 (donc aucune fraction n'est calculée en utilisant la bonne méthode).
Avec n = 80:
Avec n = 147
Avec n = 500
la source
n=80
cela imprime[[64, 16], [65, 26]]
, mais évidemment65 + 26 = 91 > 80
.if
s en un seul grandif
avecand
s reliant toutes les conditions? Enregistre pas mal de caractères, je pense.10/70
-ils20/60
et30/50
?