異なる合計の作成


10

整数を入力として受け取り、合計が最初の整数である2つの整数を出力または返すプログラムまたは関数を作成する必要があります。

さらに1つの要件があります。2つの異なる入力の出力に数値を含めることはできません

細部

  • 少なくとも範囲-32768 .. 32767(両端を含む)の入力を処理できる必要があります。
  • データ型が任意の整数を処理できない場合は問題ありませんが、理論上はアルゴリズムが任意の大きい数と小さい数で機能するはずです。

各ブロックは、正しいまたは正しくないソリューションの一部をの形式で示していinput => outputます。

1 => 6 -5
2 => -2 4
15 => 20 -5

Incorrect, as `-5` is used in two outputs.

-5 => -15 10
0 => 0 0
1 => 5 6
2 => -5 7

Incorrect, as `5 + 6` isn't `1`.

-1 => -1 0
0 => 6 -6
2 => 1 1

Can be correct if other outputs doesn't collide.

これはコードゴルフなので最短のエントリーが勝ちます。


入力範囲を-32768 .. 32767に制限して、17ビット整数を使用する必要がないようにすることはできますか?
FUZxxl

@FUZxxl私の悪い、それは意図でした。修繕。
randomra

出力は、2つの整数を含むリスト/配列/タプル/セット/その他にすることができますか?(たとえば、f(1)=> [2、-1])
モノポール

基本的に制限された整数サイズに依存するいくつかのソリューションがあるようです-たとえば、入力に大きな正の数と大きな負の数を乗算することによって。そのような解決策は「あなたのアルゴリズムは理論的には任意の大きな数と小さな数に対して機能するべきである」という要件に失敗しているように思えます。質問を誤解していますか?
Mathmandan 2015

回答:


9

Pyth、8バイト

_J^Q3+QJ

デモンストレーション。Python 2コードに相当:

Q=input()
J=Q**3
print -J
print Q+J

したがって、出力は次の形式になります (-n**3, n+n**3)

一部の出力:

-5 (125, -130)
-4 (64, -68)
-3 (27, -30)
-2 (8, -10)
-1 (1, -2)
 0 (0, 0)
 1 (-1, 2)
 2 (-8, 10)
 3 (-27, 30)
 4 (-64, 68)
 5 (-125, 130)

キューブが十分加えることが離れているため、これらは別個のものであるnとするn**3:次のキューブにギャップを横断するのに十分ではないn**3 < n+n**3 < (n+1)**3正のためにn、そして対称負ためn


,最初はは必要ありません。2行が許可されているようです。
Maltysen、2015

@マルティセン私はそれを削除しようとしましたが、2番目の数字のみが印刷されます。たぶんJ割り当ては、印刷を抑制しますか?
xnor 2015

ああそうだね、すみません。
Maltysen、2015

-pythは単項否定演算子であるits _ではないため_J^Q3+QJ、期待どおりに機能します。
Maltysen 2015

@Maltysen実際には、それはうまくいきます、私Jは外にいないことが必要です。これについて私を突っついてくれてありがとう。
xnor 2015

8

雪だるま0.1.0、101文字

}vg0aa@@*45,eQ.:?}0AaG0`NdE`;:?}1;bI%10sB%nM2np`*`%.*#NaBna!*+#@~%@0nG\]:.;:;bI~0-NdEnMtSsP" "sP.tSsP

STDINでの入力、STDOUTでのスペース区切りの出力。

これは、isaacgの回答と同じ方法を使用します。

「読みやすさ」のために改行付きのコメント付きバージョン:

}vg0aa          // get input, take the first char
@@*45,eQ.       // check if it's a 45 (ASCII for -) (we also discard the 0 here)
// this is an if-else
:               // (if)
  ?}0AaG        // remove first char of input (the negative sign)
  0`NdE`        // store a -1 in variable e, set active vars to beg
;
:               // (else)
  ?}1           // store a 1 in variable e, set active vars to beg
;bI             // active variables are now guaranteed to be beg
%10sB           // parse input as number (from-base with base 10)
%nM             // multiply by either 1 or -1, as stored in var e earlier
2np`*`          // raise to the power of 2 (and discard the 2)
%.              // now we have the original number in b, its square in d, and
                //   active vars are bdg
*#NaBna!*+#     // add abs(input number) to the square (without modifying the
                //   input variable, by juggling around permavars)
@~%@0nG\]       // active vars are now abcfh, and we have (0>n) in c (where n is
                //   the input number)
:.;:;bI         // if n is negative, swap d (n^2) and g (n^2+n)
~0-NdEnM        // multiply d by -1 (d is n^2 if n is positive, n^2+n otherwise)
tSsP            // print d
" "sP           // print a space
.tSsP           // print g

PPCGに関する最初のスノーマンソリューションの解説:私の言語をできるだけ混乱させるという私の設計目標は達成されたと思います。

これは実際にはもっと短かったかもしれませんが、私はばかで、文字列->数値解析に負の数を実装するのを忘れていました。その-ため、最初の文字としてが存在するかどうかを手動で確認し、存在する場合は削除する必要がありました。


1
Brainfuckよりずっと良い。

1
ダチョウはこれについてどのように感じていますか?;)
2015

6

Pyth、15 11バイト

@Jakubeのおかげで4バイト

*RQ,hJ.aQ_J

デモンストレーション。

これは次のようにマッピングされます。

0  -> 0, 0
1  -> 2, -1
-1 -> -2, 1
2  -> 6, -4
-2 -> -6, 4

したがって、常に、n^2およびを含みn^2 + n、プラスまたはマイナスです。




2

O17 15 9バイト

Oのいくつかの新機能を使用します。

Q3 ^ .Q + p_p

古いバージョン

[i#.Z3 ^ * \ Z3 ^)_ *] o

1
私はこれらのOの回答を楽しみ始めていますが、インタプリタがJavaで記述されていない場合はもっと望んでいます...;)
kirbyfan64sos

@ kirbyfan64sos Pythほど小さくありませんが、場合によってはCJamとGolfScriptに勝ることがあります。非常に強力なため、配列に関係するあらゆることを無視できます。

1

Pythonの3、29 27

編集:2番目の「詳細」の箇条書きの要件を満たしていません

ボーナス:-99998から99998までの範囲で機能します


lambda n:[99999*n,-99998*n]

これにより、無名関数*が作成されます。これは、角かっこで囲み、後で次のように引数を角かっこで囲むことで使用できます。

(lambda n:[99999*n,-99998*n])(arg)

*これを示唆してくれた@ vioz-に感謝します。


入力/出力の例:

>>> (lambda n:[99999*n,-99998*n])(1)
[99999, -99998]
>>> (lambda n:[99999*n,-99998*n])(2)
[199998, -199996]
>>> (lambda n:[99999*n,-99998*n])(0)
[0, 0]
>>> (lambda n:[99999*n,-99998*n])(-1)
[-99999, 99998]
>>> (lambda n:[99999*n,-99998*n])(-2)
[-199998, 199996]
>>> (lambda n:[99999*n,-99998*n])(65536)
[6553534464, -6553468928]

1
いいポスト!ご存知のように、を削除f=して無名関数のままにすることができますが、これは依然として有効な回答です。その後、バイト数を27に減らすことができます:)
Kade

1
「...あなたのアルゴリズムは理論的には任意の大きな数と小さな数で機能するはずです。」明らかに(lambda n:[99999*n,-99998*n])(99999)し、(lambda n:[99999*n,-99998*n])(-99998)理論的に衝突する(実際には)。
Mathmandan

@mathmandanそうですね、投稿を編集して、要件を満たしていないことを明確にします。私は新しいコードを書いてテストしようとしていますが、私のコンピューターから離れたモバイルにいます。
モノポール2015

0

Haskell、16バイト

@xnorのメソッドを恥知らずにコピーしました。おそらくこれよりもはるかに良いものはありません。

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