Wyzwanie polega na stworzeniu programu lub funkcji, która wyprowadza GCD swoich danych wejściowych w jednym języku i LCM swoich danych wejściowych w innym języku. Wbudowane dla GCD lub LCM (patrzę na ciebie, Mathematica) są dozwolone, ale nie zachęcane. Będą 2 wejścia, które zawsze będą dodatnimi liczbami całkowitymi, nigdy nie większymi niż 1000.
Przypadki testowe
Każda linia to jeden przypadek testowy w formacie 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
Zobacz tę pastebin dla wszystkich możliwych danych wejściowych z 0 < x, y < 31
. Pamiętaj, że różne wersje tych samych języków są liczone jako różne języki.
if
oparty na wersji języka, jeśli jest przechowywany w zmiennej, jest dozwolony?Odpowiedzi:
Galaretka / Właściwie 2 bajty
To jest zrzut heksadecymalny (xxd) przesłanego programu. Nie można go przetestować online, ponieważ TIO nie obsługuje kodowania CP437. @Mego był na tyle uprzejmy, aby sprawdzić, czy to działa na Cygwin, który implementuje CP437 zgodnie z przeznaczeniem dla Faktycznie.
Galaretka: GCD
Galaretka używa strony kodowej Galaretka , więc widzi następujące znaki.
Wypróbuj online!
Jak to działa
œ
jest niekompletnym tokenem i dlatego jest ignorowany.g
jest wbudowany w GCD.Właściwie: LCM
Właściwie używa CP 437 , więc widzi następujące znaki.
Wypróbuj online!
Jak to działa
▲
to wejście LCM. Ponieważg
(GCD) wymaga dwóch liczb całkowitych, nie jest wykonywane.źródło
C / C ++,
797873 bajtówDzięki @ETHproductions za uratowanie bajtu!
C oblicza GCD: Wypróbuj online!
C ++ oblicza LCM: Wypróbuj online!
W C
auto e=.5
deklaruje zmienną całkowitą z klasą automatycznego przechowywania (która jest domyślną), która jest następnie inicjowana na 0, podczas gdy w C ++ 11 deklaruje podwójną, która jest inicjowana na 0,5. Tak więc wartość zmiennej będzie prawdziwa w C ++, a fałsz w C.Funkcja oblicza GCD z algorytmem Euclida i LCM, dzieląc iloczyn aib przez GCD.
Pominięcie instrukcji return działa przynajmniej w GCC. Poniższe 78-bajtowe rozwiązanie powinno działać z dowolnym kompilatorem:
źródło
for(;a;b=c)c=a,a=b%a;
for
zamiastwhile
;)Właściwie / galaretka , 3 bajty
To jest zrzut heksadecymalny (xxd) przesłanego programu.
Wypróbuj online! 1
Właściwie: GCD
Właściwie używa CP 437 , więc widzi następujące znaki.
Wypróbuj online!
Jak to działa
Galaretka: LCM
Galaretka używa strony kodowej Galaretka , więc widzi następujące znaki.
Wypróbuj online!
Jak to działa
Uwaga: Wzór GCD (a, b), LCM (a, b) = AB posiada ponieważ i b są dodatnie.
1 TIO faktycznie korzysta z UTF-8. Ponieważ zarówno znaki ASCII, jak i znaki CP437 0x11 i 0x1c są nieprzypisane, program działa mimo to.
źródło
Alice and Jelly , 9 bajtów
Alice oblicza LCM:
Wypróbuj online!
Co wygląda jak przestrzeń jest naprawdę
0x7F
TheDEL
znak kontrolny.Galaretka oblicza GCD. Ponieważ Jelly używa własnej strony kodowej, która jest kompatybilna tylko z drukowalnym ASCII, znaki linefeed i DEL zmieniają się odpowiednio w
½
linefeed i linefeed:Wypróbuj online!
Objaśnienia
Galaretka jest trywialna: pierwsza linia definiuje bezsensowne łącze pomocnicze, druga linia to rzeczywisty program i po prostu zawiera wbudowany GCD.
Alicja jest nieco trudniejsza, ale korzysta również z wbudowanego:
źródło
What looks like a space
tak naprawdę nie wygląda jak przestrzeń.Octave / MATLAB,
6661 bajtówZaoszczędź 5 bajtów dzięki Foon.
(x*y)^any()
był oczywiście krótszy niż1+(x*y-1)*any()
.Cóż, przynajmniej nie używa wbudowanego
lcm
.Wyjaśnienie:
Używa wbudowanego
gcd
do obliczania największego wspólnego dzielnika.W Octave jest to podniesione do potęgi
1-2*any(version==82)
.any(version==82)
jest0
w Octave, więc to jest po prostugcd(x,y)^1
. Mnoży się przez(x*y)^any(version==82)
lub(x*y)^0 = 1
.W przypadku MATLAB
gcd
jest podniesiony do potęgi1-2*any(version==82)
.any(version==82)
jest1
w MATLAB, więc tak jestgcd(x,y)^-1
. Pomnożono przez(x*y)^any(version==82)
, lub(x*y)^1 = x*y
. Daje to najmniejszą wspólną wielokrotność, ponieważlcm(x,y) == x*y/gcd(x,y)
dla liczb dodatnich.źródło
Galaretka i MATL ,
65 bajtówJest to pełny program w jednym z dwóch języków. Oblicza GCD w Jelly ( Wypróbuj online! ) I LCM w MATL ( Wypróbuj online! ). Program MATL kończy działanie z błędem (domyślnie dozwolonym) po wygenerowaniu prawidłowego wyniku.
Używane są tylko znaki ASCII, więc odpowiadają one tym samym bajtom zakodowanym w dwóch językach.
Objaśnienie GCD w galarecie
Objaśnienie LCM w MATL
źródło
Julia 0.4 / Julia 0.5 , 18 bajtów
Ocenia
gcd
w Julia 0.4 ( Wypróbuj online! )lcm
Oraz w Julia 0.5 ( Wypróbuj online! ).Jak to działa
W Julii 0.4
log.(1)
jest skrótemgetfield(log,1)
, który zwraca lokalizacjęlog
wbudowanej pamięci , npPtr{Void} @0x00007f2846cb6660
. Wskaźnika . Wynik jest zatem niezerowy, porównanie jest fałszywe, a wyrażenie ocenia nagcd
.W Julii 0.5 wprowadzono nową składnię wektoryzacji funkcji.
log.(1)
jest teraz skrótembroadcast(log,1)
, który - ponieważ1
nie jest iterowalny - po prostu ocenialog(1)
. Wynik jest zatem zerowy, porównanie jest prawdziwe, a wyrażenie ocenia nalcm
.źródło
Octave / MATLAB,
444241 bajtówDefiniuje to anonimową funkcję GCD (
@gcd
) w Octave i dla LCM (@lcm
) w MATLAB.Przykład w Octave (lub Wypróbuj online! ):
Przykład w MATLAB:
źródło
JS (ES6), CGL (CGL Golfing Language) , 31 bajtów (niekonkurencyjny)
Funkcja LCM CGL została dodana po tym wyzwaniu.
To, co wygląda na spację, to tak naprawdę spacja niełamliwa, komentarz CGL. JS oblicza GCD:
A CGL oblicza LCM:
Wypróbuj to:
źródło