Votre défi consiste à créer un programme ou une fonction qui génère le GCD de ses entrées dans une langue et le LCM de ses entrées dans une autre. Les builtins pour GCD ou LCM (je vous regarde, Mathematica) sont autorisés mais pas encouragés. Il y aura 2 entrées, qui seront toujours des entiers positifs, jamais supérieurs à 1000.
Cas de test
Chaque ligne est un cas de test au format x y => GCD(x,y) LCM(x,y)
:
1 1 => 1 1
1 2 => 1 2
4 1 => 1 4
3 4 => 1 12
7 5 => 1 35
18 15 => 3 90
23 23 => 23 23
999 1000 => 1 999000
1000 999 => 1 999000
1000 1000 => 1000 1000
Voir cette boîte à pâte pour toutes les entrées possibles avec 0 < x, y < 31
. Notez que différentes versions des mêmes langues comptent comme des langues différentes.
if
basé sur une version du langage, s'il est stocké dans une variable, est-il autorisé?Réponses:
Gelée / En fait , 2 octets
Il s'agit d'un hexdump (xxd) du programme soumis. Il ne peut pas être testé en ligne car TIO ne prend pas en charge le codage CP437. @Mego a eu la gentillesse de vérifier que cela fonctionne sur Cygwin, qui implémente CP437 comme prévu pour Actually.
Gelée: GCD
Jelly utilise la page de codes Jelly , donc il voit les caractères suivants.
Essayez-le en ligne!
Comment ça marche
œ
est un jeton incomplet et donc ignoré.g
est le GCD intégré.En fait: LCM
Utilise en fait le CP 437 , il voit donc les caractères suivants.
Essayez-le en ligne!
Comment ça marche
▲
est l'entrée LCM. Puisqueg
(GCD) nécessite deux entrées entières, il n'est pas exécuté.la source
C / C ++,
797873 octetsMerci à @ETHproductions pour avoir sauvé un octet!
C calcule le GCD: Essayez-le en ligne!
C ++ calcule le LCM: essayez-le en ligne!
En C,
auto e=.5
déclare une variable entière avec la classe de stockage automatique (qui est la valeur par défaut), qui est ensuite initialisée à 0, tandis qu'en C ++ 11, elle déclare un double, qui est initialisé à 0,5. Ainsi, la valeur de la variable sera véridique en C ++ et fausse en C.La fonction calcule le GCD avec l'algorithme d'Euclide et le LCM en divisant le produit de a et b par le GCD.
L'omission de la déclaration de retour fonctionne au moins sur GCC. La solution de 78 octets ci-dessous devrait fonctionner avec n'importe quel compilateur:
la source
for(;a;b=c)c=a,a=b%a;
for
place dewhile
;)En fait / Jelly , 3 octets
Il s'agit d'un hexdump (xxd) du programme soumis.
Essayez-le en ligne! 1
En fait: GCD
Utilise en fait le CP 437 , il voit donc les caractères suivants.
Essayez-le en ligne!
Comment ça marche
Gelée: LCM
Jelly utilise la page de codes Jelly , donc il voit les caractères suivants.
Essayez-le en ligne!
Comment ça marche
Remarque: La formule gcd (a, b) lcm (a, b) = ab est valable car a et b sont positifs.
1 TIO utilise réellement UTF-8 pour Actually. Étant donné que les caractères ASCII et les caractères CP437 0x11 et 0x1c ne sont pas attribués, le programme fonctionne néanmoins.
la source
Alice et Jelly , 9 octets
Alice calcule le LCM:
Essayez-le en ligne!
Ce qui ressemble à un espace, c'est vraiment
0x7F
leDEL
personnage de contrôle.Jelly calcule le GCD. Étant donné que Jelly utilise sa propre page de codes qui n'est compatible qu'avec l'ASCII imprimable, les caractères de saut de ligne et DEL se transforment respectivement en
½
saut de ligne:Essayez-le en ligne!
Explications
Jelly est trivial: la première ligne définit un lien auxiliaire absurde, la deuxième ligne est le programme réel et contient simplement le GCD intégré.
Alice est un peu plus délicate, mais elle utilise également une fonction intégrée:
la source
What looks like a space
ne ressemble pas vraiment à un espace.Octave / MATLAB,
6661 octetsEnregistré 5 octets grâce à Foon.
(x*y)^any()
était bien sûr plus court que1+(x*y-1)*any()
.Eh bien, au moins, il n'utilise pas la fonction intégrée pour
lcm
.Explication:
Celui-ci utilise la fonction intégrée
gcd
pour calculer le plus grand diviseur commun.Dans Octave, cela est élevé au pouvoir de
1-2*any(version==82)
.any(version==82)
est0
à Octave, c'est tout simplementgcd(x,y)^1
. Il est multiplié par(x*y)^any(version==82)
ou(x*y)^0 = 1
.Pour MATLAB,
gcd
est élevé au pouvoir de1-2*any(version==82)
.any(version==82)
est1
dans MATLAB, c'est doncgcd(x,y)^-1
. Il s'est multiplié par(x*y)^any(version==82)
ou(x*y)^1 = x*y
. Cela donne le plus petit multiple commun, carlcm(x,y) == x*y/gcd(x,y)
pour les nombres positifs.la source
Gelée et MATL ,
65 octetsIl s'agit d'un programme complet dans l'une des deux langues. Il calcule le GCD dans Jelly ( Essayez-le en ligne! ) Et le LCM dans MATL ( Essayez-le en ligne! ). Le programme MATL se termine avec une erreur (autorisée par défaut) après avoir produit la sortie correcte.
Seuls les caractères ASCII sont utilisés, ils correspondent donc aux mêmes octets codés dans les deux langues.
Explication de GCD dans Jelly
Explication de LCM dans MATL
la source
Julia 0,4 / Julia 0,5 , 18 octets
Évalue à
gcd
dans Julia 0.4 ( Essayez-le en ligne! ) Et àlcm
dans Julia 0.5 ( Essayez-le en ligne! ).Comment ça marche
Dans Julia 0.4,
log.(1)
est un raccourci pourgetfield(log,1)
, qui renvoie l'emplacement de mémoire de la commandelog
intégrée, par exemple, le pointeurPtr{Void} @0x00007f2846cb6660
. Le résultat est donc non nul, la comparaison est fausse et l'expression est évaluée àgcd
.Dans Julia 0.5, une nouvelle syntaxe de vectorisation de fonctions a été introduite.
log.(1)
est maintenant un raccourci pourbroadcast(log,1)
, qui - puisqu'il1
n'est pas itérable - évalue simplementlog(1)
. Le résultat est donc nul, la comparaison est vraie et l'expression est évaluée àlcm
.la source
Octave / MATLAB,
444241 octetsCeci définit une fonction anonyme pour GCD (
@gcd
) dans Octave et pour LCM (@lcm
) dans MATLAB.Exemple dans Octave (ou essayez-le en ligne! ):
Exemple dans MATLAB:
la source
JS (ES6), CGL (CGL Golfing Language) , 31 octets (hors compétition)
La fonction LCM de CGL a été ajoutée après ce défi.
Ce qui ressemble à un espace est en fait un espace insécable, un commentaire pour CGL. JS calcule le GCD:
Et CGL calcule le LCM:
Essaye le:
la source