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!



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

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


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

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.

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.


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


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


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.


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


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.


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.


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.




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



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.


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 ...

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.