Temukan Nomor yang Tidak Terkait

20

Diberikan 2 bilangan bulat non-negatif sebagai input, menghasilkan bilangan bulat non-negatif yang tidak dapat dibuat melalui operator matematika pada 2 input.

Misalnya, input yang diberikan 2dan 3, 6, 0, 5, 1, 9, 8, 23, 2semua output tidak valid.

Operasi yang harus diperhitungkan adalah:

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

Dalam kasus di mana operasi akan mengarah ke non-integer (seperti 2/3), selalu lantai. Begitu2 / 3 = 0

Asumsikan setiap operasi yang tidak valid (seperti membaginya dengan 0) menghasilkan 0.

Memasukkan

2 bilangan bulat non-negatif.

Metode I / O standar diterima

Anda dapat berasumsi bahwa input akan selalu berada dalam rentang yang dapat ditangani untuk bahasa Anda, namun ingat celah standar masih berlaku.

Keluaran

Setiap bilangan bulat non-negatif yang tidak dapat dibuat melalui salah satu dari operasi di atas pada 2 input.

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

Mencetak gol

Ini adalah sehingga byte paling sedikit menang!

Skidsdev
sumber
Terkait
Skidsdev
Saya pikir satu-satunya cara untuk menyelesaikan ini adalah dengan menemukan beberapa bilangan prima yang lebih besar dari (a + b)
Dead Possum
1
@DeadPossum pasti akan menjadi solusi yang valid, meskipun mungkin bukan satu-satunya, atau golfiest;)
Skidsdev
Saya bertaruh bahwa ada beberapa bahasa mewah yang dapat melakukannya dalam beberapa byte: D
Dead Possum
16
Tidak terkait
HyperNeutrino

Jawaban:

20

Retina , 3 byte

.
1

Cobalah online!

Membawa input yang dipisahkan oleh spasi (atau karakter non-baris tunggal)

Ganti semua digit dengan 1, dan gabungkan angka yang dihasilkan dengan yang lain 1.

Bukti kebenaran

Atas perkenan Martin Ender

Leo
sumber
secara teknis ini tidak bergabung dengan angka yang dihasilkan dengan yang lain 1, itu hanya mengambil input sebagai string dari 2 angka yang dipisahkan ruang, dan mengganti setiap karakter dengan 1. Tapi itu dikatakan saya tidak dapat menemukan contoh yang membuktikan Anda salah. .. yet
Skidsdev
@ Mayube tentu saja bisa, dan karena itu bisa bekerja dengan string apa pun, tidak hanya satu yang disusun oleh dua angka yang dipisahkan oleh satu spasi. Penjelasan saya dalam hal abstraksi "dua nomor input".
Leo
2
"Sudah diketahui [sic] [...] bahwa repunit di base 10 tidak bisa [...] menjadi kekuatan yang sempurna." Tidak ada operasi dalam daftar yang diberikan selain eksponensial yang dapat menghasilkan lebih banyak digit daripada total jumlah input input, jadi ini harus valid.
Martin Ender
Anda bugger nakal! +1
Dana Gugatan Monica
Bekerja di QuadR juga!
Adám
11

Jelly , 3 byte

+Æn

Cobalah online!

Penjelasan:

+Æn Arguments: x, y
+                            x + y.
 Æn Find a prime larger than
Erik the Outgolfer
sumber
Saya pikir ini valid ...
Erik the Outgolfer
Saya berasumsi ini menjumlahkan input dan output perdana pertama lebih besar dari jumlah?
Skidsdev
1
@DeadPossum saya akan menulis satu. Semoga saya bermain golf dengan baik.
Erik the Outgolfer
1
Postulat Bertrand seharusnya hampir cukup baik untuk membuktikan karya gabungan. Menggabungkan dengan angka b yang lebih kecil di sebelah kanan kita memiliki a..b> = 10a> 4a> 2 (a + b), dan menggabungkan dengan angka yang lebih kecil b di sebelah kiri kita memiliki b..a> (b + 1) Sebuah. Satu-satunya kasus menarik non-kecil di sini harus b = 1, di mana kita memiliki 1..a> 2a = 2 (a + b) - 2. Tempat di mana ikatan ini paling ketat adalah untuk = 9 .... 9. Ini adalah satu-satunya kasus non-kecil yang mungkin menjadi masalah bagi dalil Bertrand. Namun, ada hasil yang lebih baik seperti mathoverflow.net/questions/2724
tehtmi
1
Saya kira ada versi postulat Bertrand yang membuktikan n <p <2n - 2 yang seharusnya bekerja untuk semuanya. Saya sedang berpikir n <p <2n.
tehtmi
9

Python 2 , 8 byte

'1'.join

Cobalah online!

Mengambil daftar dua string angka sebagai input, menghasilkan string angka tunggal. Menggabungkan angka dengan 1di tengah.

Hasilnya memiliki terlalu banyak digit untuk apa pun kecuali eksponen. Perhatikan bahwa output untuk (x,y)memiliki satu digit lebih banyak dari xdan ydigabungkan, kecuali xatau yadalah 0. Untuk eksponen, kami memeriksa kami memeriksa bahwa ini berarti x**ytidak pernah cocok.

  • Jika x0 atau 1, maka begitu juga x**y, yang terlalu kecil
  • Jika y<=1, maka x**y<=xitu terlalu kecil
  • Jika y==2, maka x**2harus memiliki dua digit lebih banyak daripada x. Ini terjadi hingga x=316, dan kami tidak dapat memeriksa semua itu bekerja.
  • Jika y==3, maka x**3harus memiliki dua digit lebih banyak daripada x. Ini terjadi hingga x=21. Kami dapat memeriksa bahwa tidak ada yang berfungsi.
  • Jika 3<y<13, maka x**ycepat terlalu lama. Itu hanya masuk akal memiliki jumlah digit yang tepat untuk x<=25, dan kita dapat memeriksanya.
  • Jika y>=14, maka x**yterlalu lama bahkan untuk yang sekecil mungkin x==2.
Tidak
sumber
7

CJam (7 karakter)

{+))m!}

Ini menciptakan angka (a+b+2)!yang lebih besar dari angka terkait terbesar di hampir semua kasus.

Itu cukup jelas bahwa jumlah terkait terbesar harus menjadi salah satu a ** b, b ** a, concat(a, b), concat(b, a).

Jika kita mempertimbangkan logaritma, kita menemukannya

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

Jadi asimptot lebih besar, dan kita hanya perlu khawatir tentang beberapa kasus kecil. Bahkan, satu-satunya kasus di mana nilai output tidak lebih besar dari semua angka terkait adalah 0, 1(atau 1, 0), yang diberikannya 6dan angka terkait terbesar adalah 10.

Peter Taylor
sumber
3

JavaScript (ES6), 15 byte

Mengambil input dalam sintaks currying.

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

a² + b² + 1 akan gagal untuk banyak entri seperti 3² + 5² + 1 = 35 atau 7² + 26² + 1 = 726 (gabungan). a² + b² + 2 harus aman. Ini diuji secara mendalam untuk 0 ≤ a ≤ b ≤ 50000 .

Demo

Arnauld
sumber
1
Ini harus aman dari penggabungan. Biarkan b menjadi angka yang disatukan di sebelah kanan. Memperbaiki b, kita dapat menyelesaikan persamaan kuadrat untuk a: a ^ 2 + b ^ 2 + 2 - 10 ^ k * a - b = 0. diskriminan kuadrat harus menjadi kuadrat sempurna untuk persamaan ini untuk memiliki solusi integer . Diskriminan adalah 10 ^ 2k - 4 (b ^ 2 - b + 2) = 10 ^ 2k - (2b - 1) ^ 2 - 7. Pertimbangkan modulo 9. k tidak masalah dan kami tidak pernah mendapatkan residu kuadratik untuk setiap b.
tehtmi
3

Python, 115 95 79 byte

Solusi sederhana dan bodoh. Jangan ragu untuk mengalahkan saya.

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 byte karena bodoh x/0.
-20 byte terima kasih kepada @RobinJames
-16 byte terima kasih kepada @tehtmi

HyperNeutrino
sumber
x / y jika y lain 0 akan kurang dari atau sama dengan x * y untuk x, y non-negatif jadi saya pikir Anda dapat memiliki 12 byte kembali ditambah 3
Robin James Kerrison
@RobinJames Ah ya, saya bodoh. Terima kasih.
HyperNeutrino
1
Saya pikir Anda harus dapat menghapus lebih banyak kasus: 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. (Untuk yang terakhir, XOR seperti menambahkan tanpa membawa, dan DAN menemukan bit yang akan membawa. ATAU mengambil (1, 1) -> 1 bukannya (1,1) -> 2 seperti dalam penambahan nyata.)
tehtmi
2

Python, 27 byte

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

Menghasilkan angka yang lebih besar dari semua angka terkait.

Cobalah online!

-1 byte terima kasih kepada Kevin Cruijssen.
-2 byte berkat Dead Possum.

Ankoganit
sumber
TIO-link Anda kosong. Juga, saya pikir Anda dapat menghapus ruang setelah :jika saya tidak salah.
Kevin Cruijssen
@KevinCruijssen Whoops, perbaiki itu, terima kasih!
Ankoganit
Anda dapat menghapus f=- lambda tanpa nama dapat diterima
Dead Possum
@DeadPossum Tidak tahu itu, terima kasih!
Ankoganit
Anda mungkin bisa menghapus setidaknya satu dari dua sembilan (dan yang sesuai +), tapi saya tidak sepenuhnya yakin.
Theo
2

Python 2, 25 byte

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

Menggabungkan dan menambahkan 3

Cobalah online

TFeld
sumber
Apakah ini berfungsi jika x dan y keduanya 3?
Robert Benson
@RobertBenson Harusnya, afaik Anda tidak dapat membuat 36 dari 3 dan 3
Skidsdev
Ini mungkin terlihat baik bagi saya. Rangkaian terbalik harus memiliki modulo residu yang berbeda 9. Untuk eksponensial, hanya ada sejumlah kasus yang terbatas untuk dipertimbangkan sebelum hasil eksponensial memiliki terlalu banyak digit di sepanjang baris jawaban Python xnor. Saya tidak melihat konflik apa pun (tidak untuk +1, meskipun +2 memiliki 2 ** 6 = 62 + 2).
tehtmi
@tehtmi +1 gagal pada x = y = 0 Link uji coba online untuk semua kombinasi x dan y dalam kisaran [0,400]
TFeld
2

JS (ES6), 12 byte

x=>x.join`1`

Algoritma yang sama dengan jawaban python ini . Mengambil input sebagai array int.


sumber
1

Braingolf , 4 byte

9&+^

Cobalah online! (Header & Footer adalah Penerjemah, kode adalah kode braingolf aktual, args adalah input)

Keluaran (a+b+9)**(a+b+9)

Dari pengujian saya, saya tidak dapat menemukan pasangan yang tidak berfungsi.

Skidsdev
sumber
1

Python 2 , 19 byte

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

Cobalah online!

Saya cukup yakin bit shift bekerja untuk semua kasus, tapi saya tidak 100% melakukannya. Bagaimanapun, ini menghemat beberapa byte dari versi eksponensial.

KSmarts
sumber
1

QBIC , 8 byte

Man, begitu banyak cara keren untuk hanya mengambil angka-angka ini dan mendapatkan nomor yang tidak terkait. Saya hanya perlu mencoba beberapa, untuk melihat bagaimana QBIC bisa bersaing. Yang terpendek adalah port jawaban Python xnor, merangkai angka dengan 1 di tengah:

?;+@1`+;

Semua yang ada, sebuah port dari jawaban Retina Leo:

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

Menemukan prime lebih besar berikutnya:

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

sed , 6 byte

s/ /1/

Cobalah online!

Input melalui stdin dalam bentuk "x y", output adalah ke stdout.

Port jawaban python ini , yang meliputi bukti kebenaran. Terima kasih banyak kepada xnor untuk metode sederhana ini.

Kevin
sumber
1

Java 8, 15 byte

a->b->a*a+b*b+2

Port dari jawaban JavaScript menakjubkan (ES6) @Arnauld .
Coba di sini.

Pendekatan straight-forward ( 177 170 bytes ):

a->b->{int r=1;for(;a+b==r|a-b==r|a*b==r|(b>0?a/b==r|a%b==r:0>1)|Math.pow(a,b)==r|(a|b)==r|(a^b)==r|(a&b)==r|new Integer(""+a+b)==r|new Integer(""+b+a)==r;r++);return r;}

Coba di sini.

Kevin Cruijssen
sumber
1

05AB1E , 2 4 byte

+ØDm

Cobalah online!

Sama seperti jawaban Jelly, menemukan bilangan prima setelah penjumlahan. Satu byte lebih pendek :)

EDIT : Sekarang naikkan ke kekuatannya sendiri untuk mencukupi sebagai pengecualian.

Neil A.
sumber
Bukan algoritma yang sama sebenarnya, ini menemukan a+bprime, sedangkan saya menemukan prime terkecil lebih besar dari a+b.
Erik the Outgolfer
Either way, itu harus bekerja.
Neil A.
3
Gagal untuk 6443, 3 (yang memberikan prima 64433, rangkuman).
tehtmi
@tehtmi benar, ini gagal.
Skidsdev
Melihat edit, harus bekerja sekarang
Neil A.
1

Brachylog , 3 byte

+<ṗ

Cobalah online!

Tidak ada yang baru di sini.

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

Sekarang, untuk mencari tahu bagaimana menemukan string yang tidak terkait ...

String yang tidak terkait
sumber