Znajdź niepowiązany numer


20

Biorąc pod uwagę 2 nieujemne liczby całkowite jako dane wejściowe, wyprowadzaj nieujemną liczbę całkowitą, której nie można utworzyć za pomocą żadnego operatora matematycznego na 2 wejściach.

Na przykład, wprowadzone dane 2i 3, 6, 0, 5, 1, 9, 8, 23, 2są nieprawidłowe wyjścia.

Operacje, które należy wziąć pod uwagę to:

Addition        (a + b)
Subtraction     (a - b) and (b - a)
Multiplication  (a * b)
Division        (a / b) and (b / a)
Modulus         (a % b) and (b % a)
Exponentiation  (a ** b) and (b ** a)
Bitwise OR      (a | b)
Bitwise XOR     (a ^ b)
Bitwise AND     (a & b)
Concatenation   (a.toString() + b.toString()) and (b.toString() + a.toString())

W przypadkach, w których operacja prowadziłaby do liczby całkowitej (takiej jak 2/3), zawsze wartość floor. Więc2 / 3 = 0

Załóżmy, że wszelkie nieprawidłowe operacje (takie jak podzielenie przez 0) dają 0.

Wejście

2 nieujemne liczby całkowite.

Standardowe metody We / Wy są akceptowane

Możesz założyć, że dane wejściowe będą zawsze w zakresie możliwym do obsługi dla danego języka, jednak pamiętaj, że nadal obowiązują standardowe luki .

Wynik

Dowolna nieujemna liczba całkowita, której nie można utworzyć za pomocą żadnej z powyższych operacji na 2 wejściach.

Przypadki testowe

Input  -> Invalid outputs
2, 3   -> 0, 1, 2, 3, 5, 6, 8, 9, 23, 32
0, 0   -> 0
17, 46 -> 0, 2, 12, 17, 29, 63, 782, 1746, 4617, 18487710785295216663082172416, 398703807810572411498315063055075847178723756123452198369
6, 6   -> 0, 1, 6, 12, 36, 66, 46656
1, 1   -> 0, 1, 2, 11

Punktacja

To jest więc wygrywa najmniej bajtów!



Myślę, że jedynym sposobem na rozwiązanie tego jest znalezienie liczby pierwszej większej niż (a + b)
Dead Possum

1
@DeadPossum na pewno byłoby poprawnym rozwiązaniem, choć być może nie jedynym lub najbardziej golfowym;)
Skidsdev

Założę się, że istnieje jakiś wymyślny język, który może to zrobić w kilku bajtach: D
Dead Possum

Odpowiedzi:


20

Siatkówka , 3 bajty

.
1

Wypróbuj online!

Pobiera dane wejściowe oddzielone spacją (lub dowolnym pojedynczym znakiem innym niż znak)

Zamienia wszystkie cyfry na 1i łączy uzyskane liczby z innymi 1.

Dowód poprawności

Dzięki uprzejmości Martina Endera


technicznie rzecz biorąc, nie jest to łączenie wynikowych liczb z innymi 1, po prostu przyjmuje dane wejściowe jako ciąg 2 liczb oddzielonych spacją i zastępuje każdą postać liczbą 1. Ale powiedziawszy to, nie mogę znaleźć żadnych przykładów, które mogłyby udowodnić, że się mylisz. .. jeszcze
Skidsdev

@Mayube oczywiście, że tak, i jako taki może pracować z dowolnym ciągiem, nie tylko jednym złożonym z dwóch liczb oddzielonych pojedynczą spacją. Moje wyjaśnienie dotyczy abstrakcji „dwóch liczb wejściowych”.
Leo

2
„Wiadomo [sic] [...], że powrót w bazie 10 nie może [...] być doskonałą mocą.” Żadna operacja na podanej liście oprócz potęgowania nie może skutkować większą liczbą cyfr niż całkowita liczba cyfr wejściowych, więc powinno to być prawidłowe.
Martin Ender

Ty bezczelny robale! +1
Pozew Fund Moniki w

Działa również w QuadR !
Adám

11

Galaretka , 3 bajty

+Æn

Wypróbuj online!

Wyjaśnienie:

+Æn Arguments: x, y
+                            x + y.
 Æn Find a prime larger than

Myślę, że to jest ważne ...
Erik the Outgolfer

Zakładam, że sumuje to dane wejściowe i wyjściowe pierwszej liczby większej niż suma?
Skidsdev

1
@DeadPossum miałem właśnie napisać jeden. Mam nadzieję, że dobrze to grałem.
Erik the Outgolfer

1
Postulat Bertranda powinien być wystarczająco dobry, aby udowodnić prace konkatenacyjne. Łącząc się z mniejszą liczbą b po prawej mamy a..b> = 10a> 4a> 2 (a + b), a łącząc się z mniejszą liczbą b po lewej mamy b..a> (b + 1) za. Jedynym niemałym interesującym przypadkiem tutaj powinno być b = 1, gdzie mamy 1..a> 2a = 2 (a + b) - 2. Miejsce, w którym ta granica jest najściślejsza, to a = 9 .... 9 To jedyny niemały przypadek, który może stanowić problem dla postulatu Bertranda. Są jednak lepsze wyniki, takie jak mathoverflow.net/questions/2724
tehtmi

1
Wydaje mi się, że istnieje wersja postulatu Bertranda, który dowodzi, że n <p <2n - 2, który powinien działać na wszystko. Myślałem n <p <2n.
tehtmi

9

Python 2 , 8 bajtów

'1'.join

Wypróbuj online!

Pobiera na wejściu listę dwóch ciągów liczbowych, generuje pojedynczy ciąg liczbowy. Łączy liczby ze znakiem 1pośrodku.

Wynik ma zbyt wiele cyfr dla niczego poza wykładnikiem. Zauważ, że wyjście dla (x,y)ma jeszcze jedną cyfrę xi ypołączone, chyba że xlub ywynosi 0. W przypadku wykładnika, sprawdzamy, czy oznacza to, że x**ynigdy się nie zgadza.

  • Jeśli xwynosi 0 lub 1, to tak też jest x**y, co jest za małe
  • Jeśli y<=1to x**y<=xjest za małe
  • Jeśli y==2, to x**2musi mieć jeszcze dwie cyfry niż x. Tak się dzieje do x=316i nie możemy sprawdzić, czy żadna z nich nie działa.
  • Jeśli y==3, to x**3musi mieć jeszcze dwie cyfry niż x. Tak się dzieje do x=21. Możemy sprawdzić, czy żadna z nich nie działa.
  • Jeśli 3<y<13, to x**yszybko robi się za długo. Jest prawdopodobne tylko, że ma odpowiednią liczbę cyfr x<=25i możemy to sprawdzić.
  • Jeśli y>=14, to x**yjest za długi nawet na najmniejsze możliwe x==2.

7

CJam (7 znaków)

{+))m!}

Tworzy to liczbę (a+b+2)!większą od największej liczby pokrewnej w prawie wszystkich przypadkach.

Jest dość oczywiste, że największa liczba związany musi być jednym z a ** b, b ** a, concat(a, b), concat(b, a).

Jeśli weźmiemy pod uwagę logarytmy, znajdziemy to

  • log(a ** b) = b log a
  • log(concat(a, b)) ~= (log a) + log (b)
  • log((a + b + 2)!) ~= (a + b + 2) log (a + b + 2) - (a + b + 2)

Zatem asymptotycznie jest większy i musimy się martwić tylko o kilka małych przypadków. W rzeczywistości jedynym przypadkiem, dla którego wartość wyjściowa nie jest większa niż wszystkie powiązane liczby, jest 0, 1(lub 1, 0), dla którego daje, 6a największą liczbą pokrewną jest 10.


3

JavaScript (ES6), 15 bajtów

Pobiera dane wejściowe w składni curry.

a=>b=>a*a+b*b+2

a² + b² + 1 nie powiedzie się w przypadku wielu wpisów, takich jak 3² + 5² + 1 = 35 lub 7² + 26² + 1 = 726 (konkatenacja). a² + b² + 2 powinny być bezpieczne. Zostało to gruntownie przetestowane pod kątem 0 ≤ a ≤ b ≤ 50000 .

Próbny


1
To powinno być bezpieczne od konkatenacji. Niech b będzie liczbą skonkatenowaną po prawej stronie. Naprawiając b, możemy rozwiązać równanie kwadratowe dla a: a ^ 2 + b ^ 2 + 2 - 10 ^ k * a - b = 0. Wyróżnik kwadratowy musi być idealnym kwadratem, aby to równanie miało rozwiązanie liczby całkowitej . Dyskryminacja wynosi 10 ^ 2k - 4 (b ^ 2 - b + 2) = 10 ^ 2k - (2b - 1) ^ 2 - 7. Rozważ modulo 9. k nie ma znaczenia i nigdy nie otrzymamy kwadratowej pozostałości dla żadnego b.
tehtmi

3

Python, 115 95 79 bajtów

Głupie proste rozwiązanie. Zapraszam do mnie obezwładnienia

x,y=input()
f=lambda x,y:[x+y,x*y,x**y,int(`x`+`y`)]
print max(f(x,y)+f(y,x))+1

+12 bajtów z powodu głupoty x/0.
-20 bajtów dzięki @RobinJames
-16 bajtów dzięki @tehtmi


x / y, jeśli y 0 będzie mniejsze lub równe x * y dla x, y nieujemne, więc myślę, że możesz mieć te 12 bajtów z powrotem plus kolejne 3
Robin James Kerrison

@RobinJames Ah tak, jestem głupi. Dzięki.
HyperNeutrino,

1
Myślę, że powinieneś być w stanie usunąć więcej przypadków: 1) x - y <= x <= x + y; 2) x% y <= y <= x + y; 3,4,5) x | y = x ^ y + x & y <= x ^ y + 2 * (x & y) = x + y. (W tym ostatnim XOR jest jak dodawanie bez przenoszenia, a AND znajduje bity, które mogłyby przenosić. OR przyjmuje (1, 1) -> 1 zamiast (1,1) -> 2 jak w prawdziwym dodatku).
tehtmi

2

Python, 27 bajtów

lambda a,b:(a+b+9)**(a+b+9)

Zwraca liczbę większą niż wszystkie powiązane liczby.

Wypróbuj online!

-1 bajt dzięki Kevin Cruijssen.
-2 bajty dzięki Dead Possum.


Twój link TIO jest pusty. Myślę też, że możesz później usunąć tę przestrzeń, :jeśli się nie mylę.
Kevin Cruijssen

@KevinCruijssen Ups, naprawiłem to, dzięki!
Ankoganit

Możesz usunąć f=- nienazwana lambda jest dopuszczalna
Dead Possum

@DeadPossum Nie wiedziałem o tym, dzięki!
Ankoganit

Prawdopodobnie możesz zrobić z pozbyciem się co najmniej jednego z dwóch dziewiątek (i odpowiadających im +), ale nie jestem do końca pewien.
Theo

2

Python 2, 25 bajtów

lambda x,y:int(`x`+`y`)+3

Łączy i dodaje 3

Wypróbuj online


Czy to działa, jeśli xiy są równe 3?
Robert Benson

@RobertBenson Powinieneś zrobić, jeśli nie możesz zrobić 36 z 3 i 3
Skidsdev

Wydaje mi się to prawdopodobnie w porządku. Odwrotna konkatenacja musi mieć inny modulo pozostałości 9. W przypadku potęgowania istnieje tylko skończona liczba przypadków do rozważenia, zanim wynik potęgowania będzie miał zbyt wiele cyfr wzdłuż linii odpowiedzi Python xnor. Nie widziałem żadnych konfliktów (ani dla +1, chociaż +2 ma 2 ** 6 = 62 + 2).
tehtmi

@tehtmi +1 kończy się niepowodzeniem w dniu x = y = 0 Wypróbuj test linków online dla wszystkich kombinacji xiy w zakresie [0,400]
TFeld

2

JS (ES6), 12 bajtów

x=>x.join`1`

Ten sam algorytm, co w tej pythonowej odpowiedzi . Pobiera dane wejściowe jako tablicę liczb całkowitych.


1

Braingolf , 4 bajty

9&+^

Wypróbuj online! (Nagłówek i stopka są tłumaczami, kod jest rzeczywistym kodem braingolfa, argumenty są danymi wejściowymi)

Wyjścia (a+b+9)**(a+b+9)

Z moich testów nie mogłem znaleźć żadnych par, na których to nie działa.


1

Python 2 , 19 bajtów

lambda x,y:x+9<<y+9

Wypróbuj online!

Jestem prawie pewien, że zmiana bitów działa we wszystkich przypadkach, ale nie jestem w 100% na tym. W każdym razie oszczędza kilka bajtów w stosunku do wersji potęgującej.




1

QBIC , 8 bajtów

Człowieku, tyle fajnych sposobów, aby po prostu wziąć te liczby i uzyskać niepowiązaną liczbę. Musiałem tylko spróbować kilku, aby zobaczyć, jak QBIC nadąży. Najkrótszy to port odpowiedzi xnor w Pythonie, łączący liczby z 1 w środku:

?;+@1`+;

Wszyscy, port odpowiedzi Leo's Retina:

[0,_l;|+_l;||Z=Z+@1

Znalezienie następnej większej liczby pierwszej:

c=:+:+1≈µc|+1|c=c+1]?c



1

05AB1E , 2 4 bajty

+ØDm

Wypróbuj online!

Taki sam jak odpowiedź Jelly, znajduje liczbę pierwszą po sumie. Jeden bajt krótszy :)

EDYCJA : Teraz podnosi ją do własnej mocy, aby wystarczyć na wyjątek.


Właściwie to nie ten sam algorytm, to znajduje a+bpierwszą liczbę pierwszą, podczas gdy moja uważa najmniejszą liczbę pierwszą większą niż a+b.
Erik the Outgolfer

Tak czy inaczej, powinno działać.
Neil A.

3
Nie można uzyskać 6443, 3 (co daje liczbę pierwszą 64433, konkatenację).
tehtmi

@tehtmi jest poprawne, to się nie udaje.
Skidsdev,

Zobacz moją edycję, powinna już działać
Neil A.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.