Trouver un numéro sans rapport


20

Étant donné 2 entiers non négatifs en entrée, sortez un entier non négatif qui ne peut être créé par aucun opérateur mathématique sur les 2 entrées.

Par exemple, les entrées données 2et 3, 6, 0, 5, 1, 9, 8, 23, 2sont toutes les sorties non valides.

Les opérations à prendre en compte sont:

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

Dans les cas où une opération conduirait à un non-entier (tel que 2/3), toujours au sol. Donc2 / 3 = 0

Supposons que toute opération non valide (telle que la division par 0) donne 0.

Contribution

2 entiers non négatifs.

Les méthodes d'E / S standard sont acceptées

Vous pouvez supposer que l'entrée sera toujours dans une plage manipulable pour votre langue donnée, mais n'oubliez pas que les failles standard s'appliquent toujours.

Production

Tout entier non négatif qui ne peut pas être créé via l'une des opérations ci-dessus sur les 2 entrées.

Cas de test

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

Notation

C'est le donc le moins d'octets gagne!



Je pense que la seule façon de résoudre ce problème est de trouver un nombre premier supérieur à (a + b)
Dead Possum

1
@DeadPossum serait certainement une solution valable, mais peut-être pas la seule, ni la plus golfique;)
Skidsdev

Je parie qu'il existe un langage sophistiqué qui peut le faire en quelques octets: D
Dead Possum

16
Non
lié

Réponses:


20

Rétine , 3 octets

.
1

Essayez-le en ligne!

Prend les entrées séparées par un espace (ou n'importe quel caractère non nouveau de ligne)

Remplace tous les chiffres par 1et joint les numéros résultants par un autre 1.

Preuve d'exactitude

Avec l'aimable autorisation de Martin Ender


techniquement, ce n'est pas de joindre les nombres résultants avec un autre 1, c'est simplement de prendre l'entrée comme une chaîne de 2 nombres séparés par des espaces, et de remplacer chaque caractère par un 1. Mais cela étant dit, je ne trouve aucun exemple qui prouve que vous avez tort. .. pourtant
Skidsdev

@Mayube bien sûr, et en tant que tel, il pourrait fonctionner avec n'importe quelle chaîne, pas seulement une composée de deux nombres séparés par un seul espace. Mon explication est en termes d'abstraction des "deux nombres d'entrée".
Leo

2
"Il est connu [sic] [...] qu'un remboursement en base 10 ne peut pas [...] être un pouvoir parfait." Aucune opération dans la liste donnée autre que l'exponentiation ne peut entraîner plus de chiffres que le nombre total de chiffres en entrée, donc cela devrait être valide.
Martin Ender

Espèce de salaud effronté! +1
Fund Monica's Lawsuit

Fonctionne également dans QuadR !
Adám

11

Gelée , 3 octets

+Æn

Essayez-le en ligne!

Explication:

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

Je pense que c'est valable ...
Erik the Outgolfer

Je suppose que cela résume l'entrée et les sorties du premier nombre premier supérieur à la somme?
Skidsdev

1
@DeadPossum J'étais sur le point d'en écrire un. J'espère que je l'ai bien joué.
Erik the Outgolfer

1
Le postulat de Bertrand devrait être assez bon pour prouver les travaux de concaténation. En concaténant avec le plus petit nombre b à droite, nous avons a..b> = 10a> 4a> 2 (a + b), et en concaténant avec le plus petit nombre b à gauche, nous avons b..a> (b + 1) une. Le seul cas intéressant non petit devrait être b = 1, où nous avons 1..a> 2a = 2 (a + b) - 2. L'endroit où cette borne est la plus étroite est pour a = 9 .... 9. C'est le seul cas non petit qui pourrait poser problème au postulat de Bertrand. Cependant, il y a de meilleurs résultats comme mathoverflow.net/questions/2724
tehtmi

1
Je suppose qu'il existe une version du postulat de Bertrand, le prouve n <p <2n - 2 qui devrait fonctionner pour tout. Je pensais n <p <2n.
tehtmi

9

Python 2 , 8 octets

'1'.join

Essayez-le en ligne!

Prend une liste de deux chaînes de nombres comme entrées, sort une chaîne de nombres unique. Concatène les nombres avec un 1au milieu.

Le résultat a trop de chiffres pour autre chose que l'exposant. Notez que la sortie pour (x,y)a un chiffre de plus que xet ycombiné, sauf si xou yest 0. Pour l'exposant, nous vérifions que nous vérifions que cela x**yne correspond jamais.

  • Si xest 0 ou 1, alors c'est le cas x**y, ce qui est trop petit
  • Si y<=1, alors x**y<=xc'est trop petit
  • Si y==2, alors x**2doit avoir deux chiffres de plus que x. Cela arrive jusqu'à x=316, et nous ne pouvons vérifier aucun de ces travaux.
  • Si y==3, alors x**3doit avoir deux chiffres de plus que x. Cela arrive jusqu'à x=21. Nous pouvons vérifier qu'aucun de ces éléments ne fonctionne.
  • Si 3<y<13, puis x**ydevient rapidement trop long. Il n'est plausible que d'avoir le bon nombre de chiffres x<=25, et nous pouvons les vérifier.
  • Si y>=14, alors x**yc'est trop long même pour le plus petit possible x==2.

7

CJam (7 caractères)

{+))m!}

Cela crée un nombre (a+b+2)!qui est plus grand que le plus grand nombre apparenté dans presque tous les cas.

Il est assez évident que le plus grand nombre apparenté doit être l'un des a ** b , b ** a, concat(a, b), concat(b, a).

Si nous considérons les logarithmes, nous constatons que

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

Ainsi, asymptotiquement, il est plus grand et nous n'avons à nous soucier que de quelques petits cas. En fait, le seul cas pour lequel la valeur de sortie n'est pas supérieure à tous les nombres associés est 0, 1(ou 1, 0), pour lequel il donne6 et le plus grand nombre lié est 10.


3

JavaScript (ES6), 15 octets

Prend une entrée dans la syntaxe de curry.

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

a² + b² + 1 échouerait pour de nombreuses entrées telles que 3² + 5² + 1 = 35 ou 7² + 26² + 1 = 726 (concaténation). a² + b² + 2 devrait être sûr. Ceci a été testé de manière exhaustive pour 0 ≤ a ≤ b ≤ 50000 .

Démo


1
Cela devrait être à l'abri de la concaténation. Soit b le nombre concaténé à droite. En fixant b, nous pouvons résoudre une équation quadratique pour a: a ^ 2 + b ^ 2 + 2 - 10 ^ k * a - b = 0. Le discriminant du quadratique doit être un carré parfait pour que cette équation ait une solution entière . Le discriminant est 10 ^ 2k - 4 (b ^ 2 - b + 2) = 10 ^ 2k - (2b - 1) ^ 2 - 7. Considérez modulo 9. k n'a pas d'importance et nous n'obtenons jamais de résidu quadratique pour aucun b.
tehtmi

3

Python, 115 95 79 octets

Solution simple stupide. N'hésitez pas à me surpasser.

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 octets à cause de stupide x/0.
-20 octets grâce à @RobinJames
-16 octets grâce à @tehtmi


x / y si y sinon 0 sera inférieur ou égal à x * y pour x, y non négatif, donc je pense que vous pouvez récupérer ces 12 octets plus 3
Robin James Kerrison

@RobinJames Ah oui, je suis stupide. Merci.
HyperNeutrino

1
Je pense que vous devriez pouvoir supprimer plus de cas: 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. (Pour ce dernier, XOR est comme ajouter sans porter, et ET trouve les bits qui porteraient. OU prend (1, 1) -> 1 au lieu de (1,1) -> 2 comme en réel.)
tehtmi

2

Python, 27 octets

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

Génère un nombre supérieur à tous les nombres associés.

Essayez-le en ligne!

-1 octet merci à Kevin Cruijssen.
-2 octets grâce à Dead Possum.


Votre lien TIO est vide. De plus, je pense que vous pouvez supprimer l'espace après :si je ne me trompe pas.
Kevin Cruijssen

@KevinCruijssen Oups, corrigé cela, merci!
Ankoganit

Vous pouvez supprimer f=- lambda sans nom est acceptable
Dead Possum

@DeadPossum Je ne le savais pas, merci!
Ankoganit

Vous pourriez probablement le faire en vous débarrassant d'au moins l'un des deux neuf (et le correspondant +), mais je ne suis pas totalement sûr.
Theo

2

Python 2, 25 octets

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

Concatène et ajoute 3

Essayez-le en ligne


Est-ce que cela fonctionne si x et y sont tous les trois 3?
Robert Benson

@RobertBenson Devrait le faire, afaik vous ne pouvez pas faire 36 de 3 et 3
Skidsdev

Cela me semble probablement correct. La concaténation inverse doit avoir un résidu modulo 9. Pour l'exponentiation, il n'y a qu'un nombre fini de cas à considérer avant que le résultat de l'exponentiation ait trop de chiffres le long des lignes de la réponse Python de xnor. Je n'ai vu aucun conflit (ni pour +1, bien que +2 ait 2 ** 6 = 62 + 2).
tehtmi

@tehtmi +1 échoue sur x = y = 0 Le test de lien en ligne pour toutes les combinaisons de x et y dans la plage [0,400]
TFeld

2

JS (ES6), 12 octets

x=>x.join`1`

Même algorithme que cette réponse python . Prend l'entrée comme un tableau d'entiers.


1

Braingolf , 4 octets

9&+^

Essayez-le en ligne!(L'en-tête et le pied de page sont interprètes, le code est le code braingolf réel, les arguments sont des entrées)

Les sorties (a+b+9)**(a+b+9)

D'après mes tests, je n'ai trouvé aucune paire sur laquelle cela ne fonctionne pas.


1

Python 2 , 19 octets

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

Essayez-le en ligne!

Je suis presque sûr que le décalage de bits fonctionne dans tous les cas, mais je ne suis pas à 100%. Quoi qu'il en soit, il enregistre quelques octets sur la version d'exponentiation.




1

QBIC , 8 octets

Man, tant de façons intéressantes de simplement prendre ces chiffres et d'obtenir un numéro sans rapport. Je devais juste en essayer quelques-uns, pour voir comment le QBIC allait suivre. Le plus court est un port de réponse Python de xnor, concaténant les nombres avec un 1 au milieu:

?;+@1`+;

Tous, un port de la rétine de Leo répond:

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

Trouver le prochain plus grand nombre premier:

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



1

05AB1E , 2 4 octets

+ØDm

Essayez-le en ligne!

Identique à la réponse Jelly, trouve un nombre premier après la somme. Un octet plus court :)

EDIT : le soulève maintenant à son propre pouvoir pour suffire à l'exception.


Pas le même algorithme en fait, cela trouve a+ble th premier, tandis que le mien trouve le plus petit premier plus grand que a+b.
Erik the Outgolfer

Quoi qu'il en soit, cela devrait fonctionner.
Neil A.

3
Échoue pour 6443, 3 (ce qui donne le premier 64433, la concaténation).
tehtmi

@tehtmi est correct, cela échoue.
Skidsdev

Voir mon montage, devrait fonctionner maintenant
Neil A.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.