無関係な番号を見つける


20

入力として2つの非負整数が与えられた場合、2つの入力で数学演算子を使用して作成できない非負整数を出力します。

たとえば、与えられた入力2とは36, 0, 5, 1, 9, 8, 23, 2すべて無効な出力です。

考慮する必要がある操作は次のとおりです。

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

操作が整数以外(2/3など)になる場合は、常にフロアにします。そう2 / 3 = 0

無効な操作(0で除算するなど)が0になると仮定します。

入力

2つの非負整数。

標準I / O方式が受け入れられます

入力は常に特定の言語の処理可能な範囲内にあると想定できますが、標準の抜け穴が依然として適用されることに注意してください。

出力

2つの入力に対する上記の操作のいずれかを介して作成できない負でない整数。

テストケース

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

得点

これはので、バイト数が最も少なくなります。



私はこの問題を解決する一つの方法は、(+ bの)よりも大きくなっているいくつかの素数見つけることだと思う
デッドポッサム

1
@DeadPossumは間違いなく有効なソリューションになりますが、おそらく唯一ではありませんが、最もゴルファーです;)
Skidsdev

私はカップルでそれを行うことができますいくつかの空想の言語があることを賭けることバイト:D
デッドポッサム

回答:


20

網膜、3バイト

.
1

オンラインでお試しください!

スペース(または単一の非改行文字)で区切られた入力を受け取ります

すべての数字を1に置き換え、結果の数字を別の数字に結合します1

正当性の証明

礼儀マーティン・エンダー


技術的には、結果の数値を別の数値と結合するのではなく、1単にスペースで区切られた2つの数値の文字列として入力を取り、すべての文字を1に置き換えます。 ..まだ
Skidsdev

@Mayubeはもちろん機能します。そのため、1つのスペースで区切られた2つの数字で構成された文字列だけでなく、任意の文字列を処理できます。私の説明は、「2つの入力番号」の抽象化の観点からです。
レオ

2
「ベース10のレプユニットが完全な力になれないことはわかっている[...]。与えられたリスト内の累乗以外の演算は、入力桁数の合計よりも多い桁数になることはないため、これは有効なはずです。
マーティンエンダー

あなたは生意気な盗人!+1
ファンドモニカの訴訟

で作品QuadRも!
アダム

11

ゼリー、3バイト

+Æn

オンラインでお試しください!

説明:

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

私が考えて ...これが有効である
エリックOutgolfer

私はこれが入力を合計し、合計より大きい最初の素数を出力すると仮定しますか?
Skidsdev

1
@DeadPossum私はこれを書き込もうとしていました。うまくゴルフできたらいいなと思います。
エリックアウトゴルファー

1
Bertrandの仮定は、連結作業を証明するのにほぼ十分なはずです。右側の小さい数字bと連結するとa..b> = 10a> 4a> 2(a + b)となり、左側の小さい数字bと連結するとb..a>(b + 1)となりますa。ここで唯一の小さな非興味深いケースは、b = 1で、1..a> 2a = 2(a + b)-2です。この境界が最もタイトな場所は、a = 9 ....です。 9。これは、バートランドの仮定にとって問題となる可能性がある唯一の非小規模なケースです。ただし、mathoverflow.net
questions /

1
私は、すべてのために働くはずの証明n <p <2n-2のバートランドの仮定のバージョンがあると思います。私はn <p <2nを考えていました。
tehtmi

9

Python 2、8バイト

'1'.join

オンラインでお試しください!

2つの数値文字列のリストを入力として受け取り、単一の数値文字列を出力します。数字を1中央のaと連結します。

結果は、指数以外には桁が多すぎます。またはが0 でない限り、の出力(x,y)は1桁以上xあり、y結合されることに注意してください。exponentについては、これが決して一致しないことを確認します。xyx**y

  • もし xが0または1のはx**y、小さすぎます
  • の場合y<=1x**y<=x小さすぎる
  • の場合y==2、にx**2は2桁以上必要ですx。これは最大x=316、これらの作業をチェックすることはできません。
  • の場合y==3、にx**3は2桁以上必要ですx。これは最大x=21ます。これらが機能しないことを確認できます。
  • の場合3<y<13x**yすぐに長くなりすぎます。もっともらしい桁数があるのはもっともらしいx<=25これらを確認できます。
  • の場合y>=14x**y可能な限り最小でも長すぎますx==2

7

CJam(7文字)

{+))m!}

これは番号を作成します (a+b+2)!ほとんどすべての場合に関連する最大の数値よりも大きいが。

最も関連する番号のいずれかでなければならないということはかなり明白ですa ** bb ** aconcat(a, b)concat(b, a)

対数を考慮すると、

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

したがって、漸近的にそれは大きくなり、いくつかの小さなケースを心配するだけです。実際、値の出力が関連するすべての数値より大きくない唯一のケースは0, 1(または1, 0)であり、そのため6、最大の関連する数値は10です。


3

JavaScript(ES6)、15バイト

カリー化構文で入力を受け取ります。

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

a²+b²+ 1は、3²+5²+ 1 = 35または7²+26²+ 1 = 726(連結)などの多くのエントリで失敗します。a²+b²+ 2は安全なはずです。これは、0≤a≤b≤50000について徹底的にテストされました

デモ


1
これは連結から安全でなければなりません。bを右側に連結された数とします。bを修正すると、a ^ 2 + b ^ 2 + 2-10 ^ k * a-b = 0の2次方程式を解くことができます。この方程式が整数解を得るには、2次方程式の判別式が完全な正方形でなければなりません。 。判別式は10 ^ 2k-4(b ^ 2-b + 2)= 10 ^ 2k-(2b-1)^ 2-7です。モジュロ9を考慮してください。kは重要ではなく、2次剰余を取得することはありませんb。
tehtmi

3

Python、115 95 79バイト

愚かな簡単なソリューション。気軽にアウトゴルフしてください。

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バイトx/0
@RobinJamesのおかげで-20バイト@tehtmiのおかげで
-16バイト


x / y y y 0がx、y非負のx * y以下の場合、これらの12バイトとさらに3バイトを戻すことができると思います
ロビンジェームズ

@RobinJamesああ、私は馬鹿だ。ありがとう。
-HyperNeutrino

1
もっと多くのケースを削除できるはずだと思います: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 (その最後の場合、XORはキャリーなしの加算に似ており、ANDはキャリーのビットを見つけます。ORは、実際の加算のように(1,1)-> 2ではなく(1、1)-> 1を取ります。)
tehtmi

2

Python、27バイト

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

関連するすべての数値よりも大きい数値を出力します。

オンラインでお試しください!

-1バイト、Kevin Cruijssenに感謝します。
Dead Possumのおかげで-2バイト。


TIOリンクが空です。また、私が:間違えなければ、スペースを削除できると思います。
ケビンCruijssen

@KevinCruijssenおっと、それを修正、ありがとう!
アンコガニット

あなたは削除することができますf=-無名のラムダが許容される
デッドポッサム

@DeadPossumそれを知らなかった、ありがとう!
アンコガニット

おそらく、2つのナインのうち少なくとも1つ(および対応する+)を削除することで対処できますが、私には完全にはわかりません。
テオ

2

Python 2、25バイト

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

3を連結して追加します

オンラインで試す


これは、xとyが両方とも3の場合に機能しますか?
ロバートベンソン

@RobertBensonすべきです、3と3から36を作ることはできません
-Skidsdev

これはおそらく私には問題ないようです。逆連結には、9を法とする異なる剰余が必要です。べき乗の場合、xnorのPythonの回答の行に沿って累乗の結果が多すぎる桁になる前に考慮すべきケースは限られています。競合は見られませんでした(+1ではなく、2には2 ** 6 = 62 + 2があります)。
tehtmi

@tehtmi +1がx = y = 0で失敗するTry itオンラインリンクは、範囲[0,400]のxとyのすべての組み合わせをテストします
-TFeld

2

JS(ES6)、12バイト

x=>x.join`1`

このpython answerと同じアルゴリズム。入力をintの配列として受け取ります。






1

QBIC、8バイト

男、これらの数字を取得して無関係な数字を取得するための非常に多くのクールな方法。QBICがどのように対応しているかを確認するために、いくつか試してみました。最短のものはxnorのPythonの回答の移植版で、数字を中央に1で連結します。

?;+@1`+;

すべてのもの、レオの網膜のポートの答え:

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

次の大きな素数を見つける:

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



1

05AB1E2 4バイト

+ØDm

オンラインでお試しください!

ゼリーの答えと同じ、合計の後に素数を見つけます。1バイト短く:)

編集:例外に十分対応できるように、独自のパワーに上げます。


実際には同じアルゴリズムではありませんが、これはa+b'th個の素数を見つけますが、私のアルゴリズムはを超える最小の素数を見つけa+bます。
エリックアウトゴルファー

どちらにしても、うまくいくはずです。
ニールA.

3
6443、3で失敗します(これは、素数64433、連結を与えます)。
tehtmi

@tehtmiは正しいですが、これは失敗します。
Skidsdev

私の編集を参照してください、今すぐ動作するはずです
ニールA.

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.