Trzy dodatnie liczby całkowite A, B, C są potrójne ABC, jeśli są koprime, z A <B i spełniające relację: A + B = C
Przykłady:
1, 8, 9
jest trzykrotnością ABC, ponieważ są one pierwszymi, 1 <8 i 1 + 8 = 96, 8, 14
nie dlatego, że nie są chronione prawem autorskim7, 5, 12
nie dlatego, że 7> 5
Możesz zobaczyć tę prezentację Frits Beukers 2005, aby uzyskać więcej informacji na temat trójki ABC.
Wejście wyjście
Trzy liczby całkowite, zapisane dziesiętnie. Mogą być oddzielone wartości lub lista. Wyjście musiało być wartością prawda / fałsz, niezależnie od tego, czy trzy liczby całkowite są potrójne ABC.
Uwaga: Ważne jest przestrzeganie kolejności liczb całkowitych na liście, na przykład: 1, 8, 9
nie jest uważana za tę samą listę, 9, 1, 8
ani żadną inną kombinację. Więc pierwszy to potrójne ABC, a drugi nie.
Zatem A jest pierwszym elementem listy, B drugim, a C trzecim.
Przypadki testowe
Każda z poniższych list powinna wyświetlać prawdziwą wartość
[1, 8, 9]
[2, 3, 5]
[2, 6436341, 6436343]
[4, 121, 125]
[121, 48234375, 48234496]
Każda z poniższych list powinna wyświetlać wartość falsey
[1, 1, 2]
[1, 2, 5]
[1, 9, 8]
[4, 12872682, 12872686]
[6, 8, 14]
[7, 5, 12]
[A,B,C]
, czy też możemy również przyjmować dane wejściowe w kolejności[C,B,A]
lub[C,A,B]
?Odpowiedzi:
Galaretka ,
109 bajtówWypróbuj online!
Jak to działa
źródło
Haskell ,
48 3829 bajtów-10 bajtów powodu TFeld „s
gcd
-trick!-7 bajtów dzięki HPWiz za ulepszenie testu współ-pierwotności i wykrycie zbędnej przestrzeni!
-2 bajty dzięki Nimi do sugeruje Infix Operator!
Wypróbuj online!
Wyjaśnienie
Pierwsze dwa warunkigcd(a,b)=gcd(a,c)=gcd(b,c) :
a < b
ia + b == c
są dość oczywiste, trzeci wykorzystuje tePisaniegcd(a,c)=U⋅a+V⋅c przy użyciutożsamości Bézoutai podstawieniec=a+b daje:
Od czasugcd jest minimalna pozytywne rozwiązanie tego wynika, że identyczności gcd(a,b)=gcd(a,c) . Drugi przypadek jest symetryczny.
źródło
gcd a b==1
. Ponieważgcd a b
dzielia+b=c
. to znaczygcd(gcd a b)c=gcd a b
Perl 6 ,
3332 bajty-1 bajt dzięki nwellnhof
Wypróbuj online!
Anonimowy blok kodu, który pobiera listę trzech liczb i zwraca wartość True lub False.
Wyjaśnienie
źródło
Excel, 33 bajty
źródło
bash, 61 bajtów
Wypróbuj online!
Dane wejściowe jako argumenty wiersza poleceń, dane wyjściowe w kodzie wyjścia (powoduje również wyjście na wyjściu jako efekt uboczny, ale można to zignorować).
Druga część (od początku
&&((
) jest dość standardowa, ale interesującym bitem jest test coprime:źródło
&&
można zmienić na&
ze względu na pierwszeństwoJava 10,
6564 bajtów-1 bajt dzięki @Shaggy .
Wypróbuj online.
Wyjaśnienie:
źródło
a==1
->,a<2
aby zapisać bajt.05AB1E ,
121110 bajtówZaoszczędził 1 bajt dzięki Kevinowi Cruijssenowi
Wypróbuj online! lub jako pakiet testowy
Wyjaśnienie
źródło
RÆ_*`\‹*¿Θ
Test Suite .Python 2 ,
6967636255 bajtówWypróbuj online!
Python 3 ,
5851 bajtówWypróbuj online!
-7 bajtów, dzięki H.PWiz
źródło
gcd
wgcd
lewie ważne? Co jeślia
nie jest chroniony prawem autorskimc
?gcd(a,b)
gcd(a,b)
a+b
Japt ,
16141311 bajtówSpróbuj
źródło
>
następujący sposób©
.JavaScript (ES6),
54 43 4240 bajtówWypróbuj online!
źródło
gcd(c,a)
.Wolfram Language
24 30 2826 bajtówZ 2 bajtami ogolonymi przez Doorknob. Śpiewane przez @jaeyong kolejne 2 bajty
źródło
CoprimeQ@##
zaoszczędzić 2 bajty.GCD@##==1
że zaoszczędziłbym 2 bajtyC # (interaktywny kompilator Visual C #) , 90 bajtów
Działa dla liczb do 1e8, zajmuje około 35 sekund na moim komputerze. Zamiast obliczać gcd jak inni, funkcja tworzy po prostu ogromną tablicę i filtruje indeksy, które nie są dzielnikami a lub b, i sprawdza, ile elementów pozostało. Następnie sprawdza, czy element jeden plus element drugi równa się elementowi trzeciemu. Na koniec sprawdza, czy pierwszy element jest mniejszy niż drugi.
Wypróbuj online!
źródło
C # (interaktywny kompilator Visual C #) , 59 bajtów
Wypróbuj online!
źródło
Reguła ECMAScript, 34 bajty
Dane wejściowe są jednostkowe, w domenie
^x*,x*,x*$
(powtórzonex
są ograniczone przez,
).^(?!(xx+)\1*,\1+,)(x*)(,\2x+)\3\2$
Wypróbuj online! (Silnik regex .NET)
Wypróbuj online! (Silnik regex SpiderMonkey)
Pytanie brzmi: „Trzy liczby całkowite, zapisane dziesiętnie ”, więc to może się nie kwalifikować (ponieważ wymaga wprowadzenia danych jednostronnych), ale tworzy tak elegancki, czysty wyrażenie regularne, że mam nadzieję, że przynajmniej zostanie to docenione.
Należy jednak zauważyć, że jeśli frazowanie ma być dosłownie interpretowane, przesłania funkcji lambda i funkcji, które przyjmują argumenty całkowite, również powinny zostać zdyskwalifikowane, aby ściśle przestrzegać specyfikacji pytania, musiałyby przyjąć dane wejściowe w postaci łańcucha.
źródło
J , 27 bajtów
Wypróbuj online!
Zainspirowany rozwiązaniem Jo Kinga Perla
źródło
C # (.NET Core) , 68 bajtów
Bez Linq.
Wypróbuj online!
źródło
Stax , 12 bajtów
Uruchom i debuguj
źródło
Czysty , 43 bajty
Wypróbuj online!
Podobnie jak w zasadzie wszystko inne, ponieważ test bezpośredni jest taki sam.
źródło
Pari / GP , 30 bajtów
Zaoszczędź 2 bajty dzięki @Shaggy .
Wypróbuj online!
źródło
Befunge-98 (FBBI) , 83 bajty
Wypróbuj online!
Dane wejściowe, które są potrójnymi liczbami całkowitymi,
[A,B,C]
są wprowadzane do Befunge jako liczby całkowite rozdzielone spacjamiC B A
.źródło
Mathematica 35 bajtów
jeśli kolejność jest ważna:
lub...
źródło
Retina 0.8.2 ,
4241 bajtówWypróbuj online! Link zawiera przypadki testowe. Edycja: Zapisano 1 bajt dzięki @Deadcode. Wyjaśnienie:
Konwertuj na unary.
Sprawdź, czy A i B nie mają wspólnego czynnika.
Sprawdź, czy A <B i A + B = C.
źródło
^(1+),(1+\1),\1\2$
na^(1+)(,1+\1)\2\1$
.A
tak naprawdę nie oszczędza mi żadnych bajtów.Common Lisp, 51 bajtów
Wypróbuj online!
źródło