İlişkisiz Bir Numara Bulma


20

Giriş olarak 2 negatif olmayan tamsayı verildiğinde, 2 girişteki herhangi bir matematiksel işleçle oluşturulamayan negatif olmayan bir tamsayı çıktılayın.

Örneğin, verilen girdiler 2ve 3, 6, 0, 5, 1, 9, 8, 23, 2hepsi geçersiz çıktılardır.

Dikkate alınması gereken işlemler:

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

Bir işlemin tamsayı olmayan bir duruma (2/3 gibi) yol açacağı durumlarda, her zaman zemine oturtun. Yani2 / 3 = 0

Geçersiz işlemlerin (0'a bölme gibi) 0 sonucuna yol açtığını varsayın.

Giriş

2 negatif olmayan tam sayı.

Standart I / O yöntemleri kabul edilir

Girdinin her zaman kendi diliniz için işlenebilir bir aralıkta olacağını varsayabilirsiniz, ancak standart boşlukların hala geçerli olduğunu unutmayın .

Çıktı

2 girişte yukarıdaki işlemlerden herhangi biri ile oluşturulamayan negatif olmayan herhangi bir tam sayı.

testcases

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

puanlama

Bu kadar az bayt kazanır!



Ben bunu çözmek için tek yolu (a + b) 'den daha büyük bir asal sayı bulmak olduğunu düşünüyorum
Dead Possum

1
@DeadPossum, belki de tek veya en golfçü olmasa da, kesinlikle geçerli bir çözüm olacaktır;)
Skidsdev

Bahse girerim bunu birkaç baytta yapabilen bazı süslü bir dil var: D
Dead Possum

Yanıtlar:


20

Retina , 3 bayt

.
1

Çevrimiçi deneyin!

Girdileri boşlukla (veya satırsonu olmayan herhangi bir karakterle) ayırarak alır

Tüm rakamları ile değiştirir 1ve elde edilen rakamları başka bir rakamla birleştirir 1.

Doğruluk kanıtı

Martin Ender'in izniyle


teknik olarak bu, elde edilen sayıları bir başkasıyla birleştirmez, 1sadece girdiyi 2 boşlukla ayrılmış sayılar dizesi olarak alır ve her karakteri 1 ile değiştirir. Ancak bunun yanlış olduğunu kanıtlayan herhangi bir örnek bulamadığım söyleniyor. .. henüz
Skidsdev

@Mayube elbette işe yarıyor ve bu nedenle sadece tek bir boşlukla ayrılmış iki sayıdan oluşan bir dize ile çalışamaz. Benim açıklamam "iki girdi numarası" soyutlamasıdır.
Leo

2
"Taban 10'daki bir birliğin [...] mükemmel bir güç olamayacağı [sic] [...] biliniyor." Verilen listede üs alma dışında hiçbir işlem, toplam giriş basamağı sayısından daha fazla basamağa neden olamaz, bu yüzden bu geçerli olmalıdır.
Martin Ender

Seni arsız adamım! +1
Monica'nın Davası

Çalışıyor QuadR de!
Adám

11

Jöle , 3 bayt

+Æn

Çevrimiçi deneyin!

Açıklama:

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

Ben düşünüyorum bu ... geçerlidir
Erik Outgolfer

Bu giriş ve çıkışları ilk asal toplamından daha büyük olduğunu varsayalım?
Skidsdev

1
@DeadPossum Bir tane yazmak üzereydim. Umarım iyi golf oynadım.
Outgolfer Erik

1
Bertrand'ın varsayımı, birleştirme çalışmalarını kanıtlayacak kadar iyi olmalıdır. Sağdaki küçük sayı b ile birleştirirken a..b> = 10a> 4a> 2 (a + b) var, soldaki küçük sayı b ile birleştirirken b..a> (b + 1) var a. Burada tek küçük ilginç olmayan durum b = 1 olmalı, burada 1..a> 2a = 2 (a + b) - 2. Bu bağın en dar olduğu yer a = 9 .... 9. Bu, Bertrand'ın postülası için sorun olabilecek tek küçük vaka. Ancak, mathoverflow.net/questions/2724
tehtmi

1
Sanırım Bertrand'ın her şey için çalışması gereken kanıtlar n <p <2n - 2'nin bir versiyonu var. N <p <2n düşünüyordum.
tehtmi

9

Python 2,8 bayt

'1'.join

Çevrimiçi deneyin!

Girdi olarak iki sayı dizesinin listesini alır, tek bir sayı dizesi çıkarır. Sayıları 1ortada a ile birleştirir.

Sonuçta üs dışında herhangi bir şey için çok fazla basamak vardır. Not için çıkış olduğunu (x,y)bir daha fazla basamak vardır xve ykombine sürece xveya yüs 0 olduğunda, biz bu araçları kontrol kontrol x**ymaçları olmadı.

  • Eğer x0 veya 1, daha sonra böyledir x**yçok küçük olan
  • Eğer y<=1o zaman, x**y<=xçok küçük
  • Eğer y==2öyleyse x**2, iki basamaktan fazla olmalıdır x. Bu gerçekleşir x=316ve bu çalışmaların hiçbirini kontrol edemeyiz.
  • Eğer y==3öyleyse x**3, iki basamaktan fazla olmalıdır x. Bu kadar olur x=21. Bunların hiçbirinin işe yarayıp yaramadığını kontrol edebiliriz.
  • Eğer 3<y<13, o zaman x**yhızla çok uzar. Sadece mantıklı doğru rakamlara sahip x<=25ve bunları kontrol edebiliriz.
  • Eğer y>=14, o zaman x**ymümkün olan en küçük için bile çok uzun x==2.

7

CJam (7 karakter)

{+))m!}

Bu, (a+b+2)!hemen hemen tüm durumlarda ilgili en büyük sayıdan daha büyük bir sayı oluşturur .

Bu büyük İlgili numara biri olması gerektiğini oldukça açıktır a ** b, b ** a, concat(a, b), concat(b, a).

Logaritmaları düşünürsek,

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

Böylece asimptotik olarak daha büyüktür ve sadece birkaç küçük vaka hakkında endişelenmemiz gerekir. Aslında, değer çıktısının ilgili tüm sayılardan daha büyük olmadığı tek durum 0, 1(veya 1, 0), verdiği 6ve ilgili en büyük sayıdır 10.


3

JavaScript (ES6), 15 bayt

Körili sözdiziminde girdi alır.

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

a² + b² + 1 gibi çok sayıda girişleri için başarısız olur 3² + 5² + 1 = 35 veya 7² + 26² + 1 = 726 (birleştirme). a² + b² + 2 güvenli olmalıdır. Bu, 0 ≤ a ≤ b 50000 için kapsamlı bir şekilde test edilmiştir .

gösteri


1
Bu birleştirme işleminden güvenli olmalıdır. B sağda sıralanan sayı olsun. B'yi düzelterek, a için ikinci dereceden bir denklemi çözebiliriz: a ^ 2 + b ^ 2 + 2 - 10 ^ k * a - b = 0. Bu ikinci dereceden ayırıcı, bu denklemin bir tamsayı çözümüne sahip olması için mükemmel bir kare olmalıdır. . Diskriminant 10 ^ 2k - 4'tür (b ^ 2 - b + 2) = 10 ^ 2k - (2b - 1) ^ 2 - 7. Modulo 9'u düşünün. K önemli değil ve herhangi biri için asla ikinci dereceden bir kalıntı almıyoruz b.
tehtmi

3

Python, 115 95 79 bayt

Aptalca anlaşılır çözüm. Beni geride bırakmaktan çekinmeyin.

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

Aptal yüzünden +12 bayt x/0.
@RobinJames sayesinde -20 bayt @tehtmi
sayesinde -16 bayt


x / y y y 0 ise x için x * y'den küçük veya eşit olacaksa, y negatif olmaz, bu yüzden bu 12 bayt artı başka bir 3 olabilir
Robin James Kerrison

@RobinJames Ah evet, aptalım. Teşekkürler.
HyperNeutrino

1
Daha fazla vakayı kaldırabileceğinizi düşünüyorum: 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. (Bu sonuncusu için, XOR taşımadan eklemeye benzer ve AND taşıyabilecek bitleri buluyor. VEYA (1, 1) -> 1 yerine gerçek 1,1 gibi - 1 alıyor.)
tehtmi

2

Python, 27 bayt

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

İlgili tüm numaralardan daha büyük bir sayı verir.

Çevrimiçi deneyin!

Kevin Cruijssen sayesinde -1 bayt.
Dead Possum sayesinde -2 bayt.


TIO bağlantınız boş. Ayrıca, :yanılmıyorsam sonra alanı kaldırabilirsiniz düşünüyorum .
Kevin Cruijssen

@KevinCruijssen Hata! Bunu düzelttim, teşekkürler!
Ankoganit

Sen kaldırabilirsiniz f=- isimsiz lamda kabul edilebilir
Ölü Possum

@DeadPossum Bunu bilmiyordum, teşekkürler!
Ankoganit

Muhtemelen iki dokuzdan (ve karşılık gelen +) en az birinden kurtulmakla başarabilirsiniz , ama tam olarak emin değilim.
Theo

2

Python 2, 25 bayt

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

Birleştirir ve 3 ekler

Çevrimiçi deneyin


X ve y'nin ikisi de 3 ise bu işe yarar mı?
Robert Benson

@RobertBenson Yapmalı, afaik 3 ve 3'ten 36 yapamazsın
Skidsdev

Bu muhtemelen benim için iyi görünüyor. Ters birleştirmenin farklı bir kalıntı modulo 9 olması gerekir. Üstelleştirme için, üstelleştirmenin sonucunun xnor'un Python cevap çizgileri boyunca çok fazla basamağı bulunmadan önce dikkate alınması gereken sadece sınırlı sayıda vaka vardır. Herhangi bir çatışma görmedim (+2 için 2 ** 6 = 62 + 2 olmasına rağmen + 1 için de).
tehtmi

@tehtmi + 1 başarısız x = y = aralığında x ve y tüm kombinasyonları için çevrimiçi bağlantı testleri 0 deneyin [0,400]
TFeld

2

JS (ES6), 12 bayt

x=>x.join`1`

Bu python cevabı ile aynı algoritma . Girdileri bir dizi olarak alır.


1

Braingolf , 4 bayt

9&+^

Çevrimiçi deneyin! (Üstbilgi ve Altbilgi Yorumlayıcıdır, kod gerçek braingolf kodudur, argümanlar girişlerdir)

çıktılar (a+b+9)**(a+b+9)

Testlerimden, bunun üzerinde çalışmadığı hiçbir çift bulamadım.


1

Python 2 , 19 bayt

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

Çevrimiçi deneyin!

Bit kaydırmasının tüm durumlar için çalıştığından eminim, ancak% 100 değilim. Her neyse, üssü versiyonu üzerine birkaç bayt kaydeder.




1

QBIC , 8 bayt

Dostum, bu sayıları almanın ve ilgisiz bir sayı almanın pek çok harika yolu. QBIC'in nasıl devam edeceğini görmek için birkaç tane denemek zorunda kaldım. En kısa olanı xnor'ın Python cevabının bir portudur ve sayıları ortada 1 ile birleştirir:

?;+@1`+;

Hepsi, Leo'nun Retina limanından bir cevap:

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

Bir sonraki büyük prime'ı bulmak:

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



1

05AB1E , 2 4 bayt

+ØDm

Çevrimiçi deneyin!

Jelly cevabı gibi, toplamdan sonra bir ana bulur. Bir bayt daha kısa :)

EDIT : Şimdi istisna için yeterli kendi gücüne yükseltir.


Aslında aynı algoritma değil, bu a+b benim için en önemli olanı bulurken, benimki ise en küçük olanı bulur a+b.
Outgolfer Erik

Her iki durumda da, işe yaramalı.
Neil A.

3
6443, 3 (başarısız 64433, birleştirme verir) başarısız.
tehtmi

@tehtmi doğrudur, bu başarısız olur.
Skidsdev

Benim düzenlemeyi Bak, şimdi çalışmalıdır
Neil A.

1

Brachylog , 3 bayt

+<ṗ

Çevrimiçi deneyin!

Burada yeni bir şey yok.

       The output
  ṗ    is a prime number
 <     which is strictly greater than
+      the sum of the elements of
       the input.

Şimdi, ilgisiz bir dizenin nasıl bulunacağını bulmak için ...

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.