Finden Sie eine unabhängige Nummer


20

Bei 2 nicht negativen Ganzzahlen als Eingabe wird eine nicht negative Ganzzahl ausgegeben, die durch keine mathematischen Operatoren für die 2 Eingaben erstellt werden kann.

Zum Beispiel, da Eingaben 2und 3, 6, 0, 5, 1, 9, 8, 23, 2sind alle ungültigen Ausgänge.

Zu berücksichtigende Vorgänge sind:

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())

In Fällen, in denen eine Operation zu einer Nicht-Ganzzahl (wie z. B. 2/3) führen würde, immer floor. So2 / 3 = 0

Angenommen, ungültige Operationen (z. B. Teilen durch 0) führen zu 0.

Eingang

2 nicht negative ganze Zahlen.

Standard-E / A-Methoden werden akzeptiert

Sie können davon ausgehen, dass die Eingabe für Ihre Sprache immer in einem handhabbaren Bereich liegt. Beachten Sie jedoch, dass weiterhin Standardlücken gelten.

Ausgabe

Jede nicht negative Ganzzahl, die nicht über eine der oben genannten Operationen an den 2 Eingängen erstellt werden kann.

Testfälle

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

Wertung

Dies ist so dass die wenigsten Bytes gewinnen!



Ich denke, der eine Weg, dies zu lösen, besteht darin, eine Primzahl zu finden, die größer ist als (a + b)
Dead Possum

1
@DeadPossum wäre auf jeden Fall eine gültige Lösung, obwohl vielleicht nicht die einzige oder golfenste;)
Skidsdev

Ich wette, dass es eine ausgefallene Sprache gibt, die das in paar Bytes kann: D
Dead Possum

Antworten:


20

Netzhaut , 3 Bytes

.
1

Probieren Sie es online!

Übernimmt Eingaben, die durch ein Leerzeichen (oder ein einzelnes Zeichen ohne Zeilenumbruch) getrennt sind

Ersetzt alle Ziffern durch 1und verbindet die resultierenden Zahlen miteinander 1.

Beweis der Richtigkeit

Mit freundlicher Genehmigung von Martin Ender


Technisch gesehen verbindet dies die resultierenden Zahlen nicht mit anderen Zahlen 1, sondern verwendet die Eingabe einfach als eine Folge von 2 durch Leerzeichen getrennten Zahlen und ersetzt jedes Zeichen durch eine 1. Trotzdem kann ich keine Beispiele finden, die Ihnen das Gegenteil beweisen. .. noch
Skidsdev

@ Mayube natürlich, und als solches könnte es mit jeder Zeichenkette funktionieren, nicht nur mit einer, die aus zwei Zahlen besteht, die durch ein einzelnes Leerzeichen getrennt sind. Meine Erklärung bezieht sich auf die Abstraktion "Zwei Eingangszahlen".
Leo

2
"Es ist bekannt, [...] dass eine Repunit in Basis 10 keine perfekte [...] Kraft sein kann." Keine andere Operation in der angegebenen Liste als die Potenzierung kann zu mehr Stellen als der Gesamtzahl der Eingabestellen führen, daher sollte dies gültig sein.
Martin Ender

Du frecher Mistkerl! +1
Fund Monica's Lawsuit

Funktioniert auch in QuadR !
Adám

11

Gelee , 3 Bytes

+Æn

Probieren Sie es online!

Erläuterung:

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

Ich denke, das ist gültig ...
Erik der Outgolfer

Ich nehme an, dies summiert die Eingabe und gibt die erste Primzahl größer als die Summe aus.
Skidsdev

1
@DeadPossum Ich wollte gerade einen schreiben. Hoffe, ich habe es gut gespielt.
Erik der Outgolfer

1
Bertrands Postulat sollte beinahe gut genug sein, um Verkettungsarbeiten zu beweisen. Wenn wir mit der kleineren Zahl b rechts verketten, haben wir a..b> = 10a> 4a> 2 (a + b), und wenn wir mit der kleineren Zahl b links verketten, haben wir b..a> (b + 1) ein. Der einzige nicht kleine interessante Fall sollte hier b = 1 sein, wobei wir 1..a> 2a = 2 (a + b) - 2 haben. Der Ort, an dem diese Grenze am engsten ist, ist für a = 9 .... 9. Dies ist der einzige nicht geringe Fall, der für Bertrands Postulat ein Problem darstellen könnte. Es gibt jedoch bessere Ergebnisse wie mathoverflow.net/questions/2724
tehtmi

1
Ich denke, es gibt eine Version von Bertrands Postulat, die beweist, dass n <p <2n - 2 für alles funktionieren sollte. Ich dachte n <p <2n.
Tehtmi

9

Python 2 , 8 Bytes

'1'.join

Probieren Sie es online!

Nimmt eine Liste von zwei Zahlenfolgen als Eingaben und gibt eine einzelne Zahlenfolge aus. Verkettet die Zahlen mit einem 1in der Mitte.

Das Ergebnis enthält zu viele Ziffern für alles andere als einen Exponenten. Beachten Sie, dass die Ausgabe für (x,y)eine Ziffer mehr als xund ykombiniert ist, es sei denn, xoder yist 0. Für den Exponenten überprüfen wir, ob dies bedeutetx**y niemals übereinstimmt.

  • Wenn x0 oder 1 ist, ist dies auch x**y, was zu klein ist
  • Wenn ja y<=1, dann x**y<=xist es zu klein
  • Wenn y==2, dann x**2müssen zwei Ziffern mehr als x. Dies geschieht bis zu x=316und wir können keine dieser Arbeiten überprüfen.
  • Wenn y==3, dann x**3müssen zwei Ziffern mehr als x. Das passiert bis zu x=21. Wir können überprüfen, dass nichts davon funktioniert.
  • Wenn ja 3<y<13, dann wird es x**yschnell zu lang. Es ist nur plausibel, dass es die richtige Anzahl von Stellen hat x<=25, und wir können diese überprüfen.
  • Wenn ja y>=14, dann x**yist das auch für die kleinstmöglichen zu lang x==2.

7

CJam (7 Zeichen)

{+))m!}

Dies erzeugt eine Nummer (a+b+2)! in fast allen Fällen die größer ist als die größte zugehörige Zahl.

Es ist ziemlich offensichtlich, dass die größte verwandte Zahl eine von sein muss a ** b , b ** a, concat(a, b), concat(b, a) .

Wenn wir Logarithmen betrachten, finden wir das

  • 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)

Somit ist es asymptotisch größer und wir müssen uns nur um ein paar kleine Fälle kümmern. Tatsächlich ist 0, 1(oder 1, 0) der einzige Fall, in dem der ausgegebene Wert nicht größer als alle zugehörigen Zahlen ist, derjenige , für den er angegeben wird, 6und der größte zugehörige Wert ist10 .


3

JavaScript (ES6), 15 Byte

Übernimmt Eingaben in der Currying-Syntax.

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

a² + b² + 1 würde bei vielen Einträgen fehlschlagen, z. B. 3² + 5² + 1 = 35 oder 7² + 26² + 1 = 726 (Verkettung). a² + b² + 2 sollte sicher sein. Dies wurde ausführlich auf 0 ≤ a ≤ b ≤ 50000 getestet .

Demo


1
Dies sollte vor Verkettung sicher sein. Sei b die rechts verkettete Zahl. Mit b können wir eine quadratische Gleichung für a lösen: a ^ 2 + b ^ 2 + 2 - 10 ^ k * a - b = 0. Die Diskriminante des Quadrats muss ein perfektes Quadrat sein, damit diese Gleichung eine ganzzahlige Lösung hat . Die Diskriminante ist 10 ^ 2k - 4 (b ^ 2 - b + 2) = 10 ^ 2k - (2b - 1) ^ 2 - 7. Betrachten Sie modulo 9. k ist egal und wir erhalten für keines einen quadratischen Rest b.
Tehtmi

3

Python, 115 95 79 Bytes

Dumme unkomplizierte Lösung. Fühlen Sie sich frei, mich zu überraschen.

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 bytes wegen doof x/0.
-20 Bytes dank @RobinJames
-16 Bytes dank @tehtmi


x / y wenn y sonst 0 ist kleiner als oder gleich x * y für x, y nicht negativ, also denke ich, dass Sie diese 12 Bytes plus weitere 3 zurück haben können
Robin James Kerrison

@ RobinJames Ah ja, ich bin dumm. Vielen Dank.
HyperNeutrino

1
Ich denke, Sie sollten in der Lage sein, weitere Fälle zu entfernen: 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. (Für das letzte ist XOR wie Addieren ohne Übertragen, und AND findet die Bits, die Übertragen würden. OR nimmt (1, 1) -> 1 anstelle von (1,1) -> 2 wie bei der reellen Addition.)
Tehtmi

2

Python, 27 Bytes

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

Gibt eine Nummer aus, die größer ist als alle zugehörigen Nummern.

Probieren Sie es online!

-1 Byte dank Kevin Cruijssen.
-2 Bytes dank Dead Possum.


Ihr TIO-Link ist leer. Außerdem denke ich, dass Sie das Leerzeichen danach entfernen können, :wenn ich mich nicht irre.
Kevin Cruijssen

@ KevinCruijssen Whoops, behoben, danke!
Ankoganit

Sie können entfernen f=- unbenanntes Lambda ist akzeptabel
Dead Possum

@DeadPossum Wusste das nicht, danke!
Ankoganit

Sie könnten wahrscheinlich damit fertig werden, mindestens eine der beiden Neunen (und die entsprechende +) loszuwerden , aber ich bin mir nicht ganz sicher.
Theo

2

Python 2, 25 Bytes

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

Verkettet und addiert 3

Probieren Sie es online aus


Funktioniert das, wenn x und y beide 3 sind?
Robert Benson

@RobertBenson Sollte tun, afaik Sie können nicht 36 von 3 und 3 machen
Skidsdev

Dies scheint mir wahrscheinlich in Ordnung zu sein. Die umgekehrte Verkettung muss ein anderes Residuum Modulo 9 haben. Für die Exponentiation gibt es nur eine begrenzte Anzahl von Fällen, die berücksichtigt werden müssen, bevor das Ergebnis der Exponentiation zu viele Ziffern im Sinne der Python-Antwort von xnor enthält. Ich habe keine Konflikte gesehen (weder für +1, obwohl +2 2 ** 6 = 62 + 2 hat).
Tehtmi

@tehtmi +1 schlägt fehl bei x = y = 0 Der Online-Verbindungstest von try it für alle Kombinationen von x und y im Bereich [0,400]
TFeld

2

JS (ES6), 12 Bytes

x=>x.join`1`

Gleicher Algorithmus wie diese Python-Antwort . Nimmt Eingaben als Array von Ints.


1

Braingolf , 4 Bytes

9&+^

Probieren Sie es online! (Header & Footer sind Interpreter, Code ist der aktuelle Braingolf-Code, Argumente sind Eingaben)

Ausgänge (a+b+9)**(a+b+9)

Bei meinen Tests konnte ich keine Paare finden, bei denen dies nicht funktioniert.


1

Python 2 , 19 Bytes

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

Probieren Sie es online!

Ich bin mir ziemlich sicher, dass die Bitverschiebung in allen Fällen funktioniert, aber ich bin nicht zu 100% damit einverstanden. Auf jeden Fall werden gegenüber der Exponentiationsversion einige Bytes gespart.




1

QBIC, 8 bytes

Man, so many cool ways to just take these numbers and get an unrelated number. I just had to try a few, to see how QBIC'd keep up. The shortest one is a port of xnor's Python answer, concatenating the numbers with a 1 in the middle:

?;+@1`+;

All ones, a port of Leo's Retina answer:

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

Finding the next bigger prime:

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



1

05AB1E, 2 4 bytes

+ØDm

Try it online!

Same as the Jelly answer, finds a prime after the sum. One byte shorter :)

EDIT: Now raises it to its own power to suffice for the exception.


Dies ist nicht derselbe Algorithmus, er findet a+bdie erste Primzahl, während meine die kleinste Primzahl größer als findet a+b.
Erik the Outgolfer

Either way, it should work.
Neil A.

3
Schlägt für 6443, 3 fehl (wodurch die Verkettung zur Primzahl 64433 wird).
tehtmi

@tehtmi ist korrekt, dies schlägt fehl.
Skidsdev

Siehe meine Bearbeitung, sollte jetzt funktionieren
Neil A.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.