2 + 2 = 5になるプログラムを書く[終了]


393

数字2と2を追加し、5を出力するように見えるプログラムを作成します。これは、人手不足のコンテストです。

プログラムはエラーを出力できません。メモリホールに注意してください!入力はオプションです。

2 + 2を5として再定義するのあまり創造的ではありません!それを二重に考えないで、他のことを試してください。


48
これはジョージ・オーウェルの本「1984」の質問です。
バッカスビール

97
なぜこれが下手なのですか?2プラス2 5です。
ジオビット

79
そこ!あります!四!ライト!
ニックT

105
@Geobits-私は同意します:2 + 2 = 5 この計算機で見ることができます。
MT0

47
echo "2+2=5";
user3459110

回答:


669

Java

リフレクションは、Javaを乱用する正しい方法です。しかし、単にいくつかの値を微調整するより深くする必要があります。

import java.lang.reflect.Field;

public class Main {
    public static void main(String[] args) throws Exception {
        Class cache = Integer.class.getDeclaredClasses()[0];
        Field c = cache.getDeclaredField("cache");
        c.setAccessible(true);
        Integer[] array = (Integer[]) c.get(cache);
        array[132] = array[133];

        System.out.printf("%d",2 + 2);
    }
}

出力:

5

説明:

通常アクセスできるよりもさらに深く変更する必要があります。これは、Java 6用に設計されていることに注意してください。そうしないと、IntegerCacheを変更するような、ファンキーなパラメーターがJVMに渡されません。

整数クラスの奥深くには、整数のフライウェイトがあります。これは、-128〜+127の整数の配列です。 cache[132]通常は4になる場所です。5に設定します。

警告:実際のコードでこれを行うと、人々は非常に不幸になります。

ideoneのコードデモ


5
私は質問を見てすぐにこの1つの考え:)
オクタヴィア

306
それ。です 悪の。絶対に悪。+1
ジョンドヴォルザーク

75
@JanDvorakはでチャットことが示唆された Integer[] array = (Integer[]) c.get(cache); fisherYatesShuffle(array); と想像するだけ破るどのように多くの事...

30
このような答えは、このサイトをSOよりも好きにします。
ソンゴ

35
zomg、javaの回答は決して上位票を獲得できません!ジャバをトップに持ってくるための+1 :)
ランチャー14年

297

ハスケル

私はあなたがghciで何かを投げることができるのが大好きで、それは完全にロールバックします。

λ> let 2+2=5 in 2+2
5

36
何をlet 2+2=5 in 5+5するの?ಠ_ಠ
ジョンドヴォルザーク

22
@JanDvorak- Non-exhaustive patterns in function +私はここで新しい関数(+)を2+2定義しています。そうでない場合は何もプラグインするとエラーが発生します。
フランク

27
@SHiNKiROUシャドウ、再定義なし
ジョンドヴォルザーク

96
「そして、神は2 + 2で2 + 2 = 5を2 + 2で聞かせたと言った」))
OutFall

11
@ user3217013 Haskellを学んでください、それはあなたの心に良いことです。
靴14年

294

C

かなり安いトリックですが、私はあなたのほとんどを捕まえると確信しています。

int main() {
    int a = 2 + 2;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     a++;
    printf("%d",a);
    return 0;
}

ここで試してみてください

コードを右にスクロールします。
Windows / Linuxではわかりませんが、OSXではスクロールバーが表示されません。
とにかく、これはお気に入りのコードエディターで「スペースの視覚化」を有効にする正当な理由です。


96
スクロールバーはChromiumに表示されますが、最初は誰がそれに注意を払っていますか?:)
ルスラン

172
人々を混乱させるために、スクロールバーの存在を「説明」するのに十分な長さであるが、だれもそれを読むことを気にしない(スクロールする)ために十分に鈍いコメント行を追加するかもしれません。
ハーゲンフォンアイゼン

22
OS Xでは、デフォルトでのスクロールバーの可視性は、マウスが接続されているかどうかによって異なります。タッチパッドだけがある場合、スクロールバーはオーバーレイされ、使用されていないときにフェードアウトします。マウスが接続されている場合、スクロールバーはコンテキストボックスからスペースを盗み、常に表示されます。これをテストするには、USBマウスを抜き、MacBookに差し込みます。もちろん、これはシステム環境設定で設定できます。
アンドレア

49
賢いですが、モバイルでは単にワードラップします:)
ローガン14年

31
これは、SEコードウィンドウをスクロールしても、誰かの指を壊したくないというときだけです。
ObscureRobot 14年

184

GolfScript

4:echo(2+2);

印刷し5ます。

もちろん、GolfScriptには他の言語とは著しく異なる構文があり、このプログラムはたまたまBasicまたはC風のように見えます。

4  -スタックに4番を置きます。スタックの内容:4-スタック
:echoの一番上の値を変数echoに保存します。スタックの内容:4-スタック
(  の一番上の値を1減らします。スタックの内容:3-
2  スタックの一番上に2を置きます。スタックの内容:3 2-
+  スタックの上に2つの数字を追加します。スタックの内容:5-スタックの
2  一番上に2を置きます。スタックの内容:5 2-スタック
)  の一番上の値を1増やします。スタックの内容:5 3-
;  スタックから一番上の要素を削除します。スタックの内容:5

GolfScriptはデフォルトで、実行が終了した後にスタックに残っているものをすべて印刷します。


3
GolfScriptを話さない人のためにそれを説明できますか?
MadTux 14年

1
@MadTuxどうぞ。
aaaaaaaaaaaa

1
ありがとう。(1日の制限に達したため、
後で投票し

5
シンプルでチート、大好きです。+1
seequ 14年

9
私はそれが数学やセマンティクスであなたをだましているようには思えない、それbecausそれが好き、それはとても簡単なようで、まだ5 ^^
dwana

145

Java

常にダブルスを丸める必要があります

public class TwoPlusTwo {
  public static void main(String... args) {
    double two = two();
    System.out.format("Variable two = %.15f%n", two);
    double four = Math.ceil(two + two); // round just in case
    System.out.format("two + two = %.15f%n", four);
  }

  // 20 * .1 = 2
  private static double two() {
    double two = 0;
    for(int i = 0; i < 20; i++) {
      two += .1;
    }
    return two;
  }
}

出力:

Variable two = 2.000000000000000
two + two = 5.000000000000000

説明:

いいえ、真剣に、あなたは常にあなたのダブルスを丸める必要があります。15は、two()メソッドが実際に生成することを示すのに十分な数字ではありません2.0000000000000004(ただし、16で十分です)。

数値の生の16進表現では、1〜4 ビットではなく、5ビットを返すのに十分な1ビットの差(40000000000000014000000000000000)だけMath.ceilです。


61
Math.ceil(two + two); // round just in case私はあなたがそこで何をしたかを見る
ティムS.

17
同じ名前の関数と変数の両方を作成しています...わあ。
コンフィギュレー

107
@configuratorは何でもありませんtwo。という名前のクラスすらありません。製品グレードのjavaはTwo two = Two.two.two();、Two.twoがTwoFactory型である。
ジャニス・フローズ14

36
Two.Infinity.And.Beyond()
CincauHangus 14年

7
私はあなたがそこに何をしたかはceil @TimS
thenaglecode

135

BBC BASIC

編集:Andrea FauldsとSqueamish Ossifrageの場合、別のインタープリターを使用したより説得力のあるバージョン:http : //sourceforge.net/projects/napoleonbrandy/

  MODE 6
  VDU 23,52,254,192,252,6,6,198,124,0
  PRINT
  PRINT "2+2=";2+2
  PRINT "2+3=";2+3

ここに画像の説明を入力してください

これは実際に数字4を印刷しますが、VDU 23ASCII 52のフォントを再定義して、4ではなく5のように見えるようにします。

http://bbcbasic.co.uk/bbcwin/bbcwin.htmlのエミュレーターを使用した元のイメージ。(わずかに異なるコードで)編集履歴で見ることができます。


8
ただし、これらのフォントは異なって見えます。正しいフォントを使用できると思いますか?
アンドレア

私はからエミュレータを使用してい@AndreaFaulds bbcbasic.co.uk/bbcwin/bbcwin.html。8x8グリッドでの元のBBC Basicのフォント再定義をサポートします。しかし、エミュレータのデフォルトのフォントは明らかに8x8よりも高い解像度です。だから私はおそらくもっと良い仕事をすることができたが、それは完璧ではないだろう。5と4のすべてに対してフォントを再定義できたとしたら、それらは同じように見えるでしょう。
レベルリバーセント14年

5
@AndreaFaulds質問は、結果が他の5と区別できないはずだと言っていませんでした。これは実際には機能だと思います。 2+3=5および2+2=5'
ベンジャクソン14年

1
:これはBBCマイクロにおける元のフォントと一致するVDU 23,52,126,96,124,6,6,102,60,0
うるさいossifrage

@squeamishossifrage情報をありがとう。ただし、エミュレータのフォントとは一致しません。あなたの例は、私のように高さ7ピクセルです。また、私のものと同じように、下部にゼロがありますが、少し下に移動する必要があるようです(つまり、下部ではなく上部にゼロがあります)。重要な違いは、126,64一方、126,96があり、私の2ではなく6があります。これは、元のBBCフォントの縦線が太いため、標準のテレビ画面で80桁形式で簡単に読み取れるためです。
レベルリバーセント14年

134

ブレインファック

+++++           +++++
    +               +    
    +     +         +     +++++
+++++    +++    +++++     
+         +     +         +++++
+               +
+++++           +++++.

出力:

5

ここで試してみてください

これは少し単純に聞こえるかもしれませんが、元の投稿で示唆されているように、創造的にしようとしました。


1
私はブレインファックを知りません、これを理解するのに数分かかりました。ASCII 53、そうですか?
レベルリバーセント14年

4
持っている限り、+++++.何でもペイントできます。
エデュアルドフロリネスク14

1
@steveverrill:はい、そうです。(これがBFでASCII文字を出力する唯一の方法です)。
tigrou 14


105

バッシュ

これはので、私は長い方法を使用する必要があると思います...

Bashを知らない人向け:$((...expr...))算術式を評価する構文です。コマンドライン電卓$(bc<<<...expr...)を使用して同じことを行いbcます。

v=2                     #v is 2
v+=2                    #v is 4
v=$(($v*5))             #v is 20
v=$(($v-16))            #v is 4
v=$(bc<<<"sqrt($v)+2")  #v is 4 (sqrt(4) is 2)
v=$(bc<<<"$v/4+3")      #v is 4 (4/4 = 1)
echo '2+2=' $v          #So v is 4...?

出力

2+2= 5

説明

2行目では、vと2を追加する代わりに連結して22にします。
実際の説明:
v=2 #v is 2 v+=2 #v is 22 v=$(($v*5)) #v is 110 v=$(($v-16)) #v is 94 v=$(bc<<<"sqrt($v)+2") #v is 11 (by default, bc rounds to integers) v=$(bc<<<"$v/4+3") #v is 5 (11/4 is 2 with rounding) echo '2+2=' $v #TADAAAM


8
素敵な数学のトリックがそこに起こっています!
tomsmeding

5
半分ほど私は入れていたことに気づいても、それは非常に楽しかった@tomsmeding 15するのではなく、16幸いにもライン4で、それはまだ理由で働いていたbcの丸め

2
有効なBashであるこのスタイルの外観が好きかどうかを確認します(ドル記号を削除し、等号の周りにスペースを許可し、結合演算子を許可します):((v = v * 5))または((v *= 5))
デニスウィリアムソン14年

2
良いものですが、私は+=すぐにそれを見つけました。
nyuszika7h 14

2
@ardnewはい。最初の2行(v=2およびv+=2):Bash変数の処理に不慣れな人2+2には、これはに相当しますが、実際に"2"+"2""22"です。このため、コード内の他のコメントは間違っています。私は誰もが、これはおかしい見つけ、知らない

101

Python

Javaの答えに触発された:

>>> patch = '\x312\x2D7'
>>> import ctypes;ctypes.c_int8.from_address(id(len(patch))+8).value=eval(patch)
>>> 2 + 2
5

Javaと同様に、CPythonは最初の数個の小さな整数(メモリが提供される場合は0〜255)のコピーに同じメモリ位置を使用します。これにより、そのメモリ位置がを介して直接編集されますctypespatchは難読化された"12-7"len4 evalから5の文字列です。

より難読化されたバージョン

exec("\x66\x72\x6f\x6d\x20c\x74\x79\x70e\x73\x20\x69\x6d\x70\
\x6f\x72\x74\x20c\x5f\x69\x6e\x748\x20a\x73\x20x\x3bf\x72\x6f\
\x6d\x20\x73\x74\x72\x75c\x74\x20\x69\x6d\x70\x6f\x72\x74\x20\
ca\x6cc\x73\x69\x7ae\x20a\x73\x20x0\x3bx\x2ef\x72\x6f\x6d\x5f\
a\x64\x64\x72e\x73\x73\x28\x69\x64\x284\x29\x2bx0\x28\x27\x50\
\x50\x27\x29\x29\x2e\x76a\x6c\x75e\x3d5")

2 + 2を超えて

OPが述べたように、2 + 2はちょっとつまらないことがあります。だからここでは、不当な虐待のためのいくつかのよりクリーンで、マルチプラットフォーム、マルチ幅のコードがあります。

from __future__ import division, print_function
import struct
import ctypes
import random

# Py 2.7 PyIntObject:
# - PyObject_HEAD
#     - PyObject_HEAD_EXTRA [usually nothing unless compiled with DEBUG]
#     - (Py_ssize_t) ob_refcnt
#     - (_typeobject) *ob_type
# - (long) ob_ival

# two platform-sized (32/64-bit) ints (ob_refcnt and *ob_type from above)
offset = struct.calcsize('PP')

num = 60
nums = list(range(num))
addresses = [id(x) + offset for x in nums]
random.shuffle(nums)

for a, n in zip(addresses, nums):
    ctypes.c_ssize_t.from_address(a).value = n

print('2 + 2 =', 2+2)
print('9 - 4 =', 9-4)
print('5 * 6 =', 5*6)
print('1 / 0 =\n', 1/0)
print('(1 + 2) + 3 = ', (1+2)+3)
print('1 + (2 + 3) = ', 1+(2+3))
print('(2 + 3) + 1 = ', (2+3)+1)
print('2 + (3 + 1) = ', 2+(3+1))

Python 2.7で実行しています...最後の行は無視してください。私が簡単にアクセスできる2つのシステムであるWindows 64ビットとUbuntu 32ビットで動作します。

$ python awful.py 
2 + 2 = 24
9 - 4 = 49
5 * 6 = 55
1 / 0 = 0.76

(1 + 2) + 3 =  50
1 + (2 + 3) =  68
(2 + 3) + 1 =  50
2 + (3 + 1) =  61
Segmentation fault (core dumped)

当然、我々はここで(添加の連想性を破ることができるA + B)+ C = A +(B + C 1番目と2番目に見られるように、)1+2+3ここで、(行が、どういうわけか我々はまた、可換性を破る+ B = b + a ; 2行目と3行目)。Pythonインタープリターは、加算式の周りの余分な括弧を無視するだけなのでしょうか。


96
はい、私たちは間違いなくすべてのちょうど何気なく...セグメンテーションフォールトを無視

10
これは実際にはPythonのトリックではなく、PythonのC実装にのみ固有のものです。
xApple 14年

1
@NickTああ!はい。私はあなたが同じ64ビットの窓、32ビットのUbuntuの設定の下で、元をしようとした印象の下にあった
DavidJFelix

22
exec('\x66\x72\x6f\x6d\x20\x63\x74\x79\ \x70\x65\x73\x20\x69\x6d\x70\x6f\ \x72\x74\x20\x63\x5f\x69\x6e\x74\ \x38\x3b\x20\x69\x6d\x70\x6f\x72\ \x74\x20\x73\x74\x72\x75\x63\x74\ \x3b\x20\x63\x5f\x69\x6e\x74\x38\ \x2e\x66\x72\x6f\x6d\x5f\x61\x64\ \x64\x72\x65\x73\x73\x28\x69\x64\ \x28\x34\x29\x20\x2b\x20\x73\x74\ \x72\x75\x63\x74\x2e\x63\x61\x6c\ \x63\x73\x69\x7a\x65\x28\x27\x50\ \x50\x27\x29\x29\x2e\x76\x61\x6c\ \x75\x65\x3d\x35')変更された最初のバージョンです。これは、ハッキング競技のレッドチームとして/ etc / profileの$ PYTHONSTARTUPにドロップできるように作成しました。
DavidJFelix

2
うん。補足説明として、1、0、-1は、Pythonがすぐにセグメンテーション違反を起こす数値の一部であるようです。pythonプログラムの動作を台無しにするのは最悪だと思っていました。fuckitpyを利用してこれらのエラーを封じ込めることができます。
DavidJFelix 14年

86

JavaScript:

g = function () {
  H = 3
  return H + H
}

f = function () {
  Η = 2
  return Η + H
}

// 3 + 3 = 6
alert(g())
// 2 + 2 = 5
alert(f())

http://jsfiddle.net/qhRJY/で確認してください

H(ラテン文字大文字h)とΗ(ギリシャ文字大文字eta)は、varキーワードを使用して関数に対してローカルとして定義されていないため、グローバルスコープに設定されます。似ていますが、実際には2つの異なる値を持つ2つの異なる変数です。ブラウザでCtrl + Fを使用すると、このページではΗ(eta)がH(h)よりも大幅に少なく表示されます。


4
@Samは2つの 'H'が同じに見えても、実際には2つのまったく異なる文字です。Unicodeでは、同じように見えてもコードポイントが異なるさまざまな文字が存在する場合があります。この特定のケースでは。他の「H」は実際にはギリシャ文字Etaです。
d3dave

79
ホモグリフを使用して読者を「混乱させる」ことは今では公式には面白くない
ジョンドヴォルザーク14年

29
ホモグリフは、javascriptのとんでもないグローバル変数と組み合わせて面白いものになります。
コンスタンチンワイツ14年

3
「UnicodeΗ文字」ではなく、ラテン語Hとギリシャ語Eta(Η)です。
フィゾーム14年

4
@Vorticoうーん...よくある質問の質問では不十分な場合、何を望みますか?ヘルプセンターからリンクされているよくある質問 faqタグを適用できるのはモデレーターのみです。答えに関しては-質問は「得点+5以上であり、少なくとも2倍のアップ投票をダウン投票の数」と述べています。回答には27のアップ投票があり、ダウン投票はありません。回答に記載されている基準を満たしているように思えますが、10回以上投票したのは124人しかいないサイトのメタサイトでの質問の2番目に古い回答では、賛成票の数が非常に印象的です。何個欲しいですか?全員?
ジョンドヴォルザーク14年

72

JavaScript

function addDecibels(){return (10*Math.log10([].reduce.call(arguments,(p,c)=>p+Math.pow(10,c/10),0))).toFixed(1);}

alert( addDecibels(2,2) );

下手なビットは、実際には下手ではないということです-2dBの音源を別の2dBの音源に追加すると、結果の結合ノイズはログスケールで測定される5dBになります(2つの30dBの音源を追加すると33dB)。

別の計算機で見ることができます


まあそれは実際には5.01デシベルのようですが、数えるには4から十分離れています。
ジョーZ.

68

PHP

echo '2 + 2 = ' . (2 + 2 === 4 ? 4 : 2 + 2 === 5 ? 5 : 'dunno');

生成するもの:

2 + 2 = 5

これは、PHPでは3項が左から右に計算されるため、実際には
(2 + 2 === 4 ? 4 : 2 + 2 === 5) // 2 + 2 is == 4, and 4 == true, therefore echo 5 ? 5 : 'dunno';


35
必須のphpsadness
wchargin

1
私は別のPHP例を持っています:$a=2;echo "2+2=".$a++ + $a++;
avall 14年

$ a ++が3になり、結果が6になることは明らかです。あなたが考えていることはわかりません。
オズ14年

1
@Janus PHPsadnessの#30は、それをうまく説明
wchargin


66

JavaScript

var total = 2 + 2;

if(total = 5)
{
    alert('I guess 2 + 2 = 5');
}
else
{
    alert('The universe is sane, 2 + 2 = 4');
}

73
=の代わりに==、見やすく、率直に言って、インスパイアされていません。
ApproachingDarknessFish

19
私はその間違いをたくさん作り、とにかくupvoteを持っている

6
私はまだこの答えが好きです
サムクリーマー14年

5
私も好きです。必ずしもすべての言語が使用する=だけでなく、割り当てと比較演算子(例えばパスカル、SQL、VBは)
avall

私はそれを非常に明白だと思う
オリバーNi

57

C#

    static void Main(string[] args)
    {
        var x = 2;
        var y = 2;

        if (1 == 0) ;
        {
            ++x;
        }

        Console.WriteLine(x + y);
    }

7
ああ、不正なキャラクターの古き良きトリック。そのため、どこでも1TBSを使用する必要があります。
ジョンドヴォルザーク

11
@JanDvorak ifステートメントの後のセミコロンのため、これは機能しますか?私はC#を知らないが、私はC ++を使用していた

5
@professorfishそれは私が推測するものです。また、ランダムな中括弧FTWを挿入できない言語。
ジョンドヴォルザーク

12
「;」なしで、ifステートメントはコードブロックを実行するかどうかを制御します。とともに ";" そこでは、ifは評価されますが、結果は何も実行されません。それに関係なく、コードブロックは毎回実行されます。C#では、ランダムなコードブロックを使用しても問題ありません。
Grax32

2
先日、私はこれを手に入れました。;空ループを使用してカーソルを進めるため、forループとafter ループがありました。セミコロンを誤って削除したので、すべてが爆発し、その理由がわかりませんでした。
mpen 14年

56

JavaScriptをASCIIアートで装飾するのは危険です。

  -~// JS  \\~-
 ~-// Maths \\-~
-~// Madness \\~-

     (2 + 2)

コメントが削除されると、残りのシンボルと演算子は
-~~--~(2 + 2) 、JSのBitwise Not演算子(〜)を使用し、途中で値を無効にする少数のマイナス記号を使用します。


3
--エラーが発生するはずなので、オペレータはどのように受け入れられるのかと思っていましたInvalid left-hand side expression in prefix operation。ただし、それらの間に空白文字があることに気付きました。
-usandfriends

53

バッシュ

#!/bin/bash

# strings of length 2
x="ab"
y="cd"

# add lengths by concatenation
c="$(cat<<<$x; cat<<<$y)"

# display the lengths of the parts and the sum
echo "${#x} + ${#y} = ${#c}"

出力:

2 + 2 = 5

それぞれからの出力にcatは暗黙的な改行が含まれますが、コマンドの置換によって最終的な改行は削除されます$( )


ここに別のものがあります:

#!/bin/bash

# Create an array of ascending integers
a=({1..10})

# Use the sum to index into the array
s="2 + 2"
i=$(($s))
echo "$s = ${a[$i]}"

Bash配列にはゼロのインデックスが付けられます


3
私は実際に最初のものをキャッチしました。Bashでゴルフをするとき、そのようなことで多くの問題を抱えていたからです。2番目の配列については、配列のインデックスがゼロではありませんか?

3
@professorfish Applescript、たとえば:set a to {1, 2, 3, 4, 5, 6, 7, 8} item 4 of a
デジタル外傷

12
@DigitalTrauma AppleScriptは奇妙である

5
zshオプションが設定されてい$arr[0]ない限り、1インデックス付き配列を使用します(単純に未設定または未定義などです)KSH_ARRAYS。この場合、配列は0インデックス付きです。
chepner

4
@professorfush:LuaとFortranは1インデックス付きです。いつでも私がいない0、私は常に1から始まり、10まで数える:D
カイルKanos

49

Perl

# Generic includes
use strict;
use warnings;
use 5.010;
use Acme::NewMath;

# Ok, time to begin the real program.
if (2 + 2 == 5) {
    say 5;
}
else {
    say "Dunno...";
}

Acme :: NewMathというCPANモジュールに依存します。モジュール内のファイル名が間違っているため、これは大文字と小文字を区別しないファイルシステム(WindowsやMac OS Xなど)でのみ機能しますが、ここで元のモジュールの作成者を非難します。Acme :: NewMathは、Ingsocイデオロギーに従って数学を実装します。


16
これは非常にずるいです。誰もあなたのインポート/インクルードを見ません。

44

R

# add the mean of [1,3] to the mean of [4,0] (2 + 2)
mean(1,3) + mean(4,0)

出力:

5

コードは実際に[1]の平均を[4]の平均に加算します。Rの平均関数を使用する正しい方法は次のようになります。 mean(c(1,3)) + mean(c(4,0))これは、次のようなRでいくつかの他の数学関数、とは違ってsummaxおよびmin、ここsum(1,3)で、、、max(1,3)およびmin(3,1)すべてが予想される答えを提供します。


7
悪くない、少しだまされた。
qwr 14年

37

Java

public class Five {
    public static void main(final String... args) {
        System.out.println(256.0000000000002 + 256.0000000000002);
    }
}

出力:

512.0000000000005

おそらく、同じ種類のdoubleを使用するすべての言語で動作します。


7
それは非常に奇妙な主な署名です。
バーティ

10
Javaは、可変引数を内部の配列として実装します。
CodaFi 14年

4
あなたがおそらくダブルスの最後の数字について話していることに気付くために少し時間を取りました。私は(最初の数字が正しく追加することを見ました_2_56 + _2_56 = _5_12)、それはあなたが意味することを可能性が高いと思われる256.000000000000_2_ + 256.000000000000_2_ = 512.000000000000_5_ノート(:数字「太字」に使用強調している。
ジャスティン

35

ベファンジ

これはBefungeで書かれていますが、Pythonのように見えるように設計されています。

#>>>>>>>>>>>>>>>>>v
# Calculate 2 + 2 v
#>>>>>>>>>>>>>>>>>v
def add(v,w):
    return v+w
 # I rewrote this 5 times and it still doesn't work

print add(2,2) #... Still not working

# email: MarkSmith@example.com

(正しいインタープリターで)実行すると、プログラムが印刷されます5

説明:

Befungeプログラムは、1文字のコマンドのグリッドで構成されています。最初のコマンドは左上隅にあり、コマンドの読み取りは右に進みます。ただし、プログラムの実行中に方向が変わる可能性があります。

文字の最初の行と、最初の行で始まる文字のv列のみが実行されます。問題の文字は:

#-次のコマンドをスキップします-
>これから、コマンドは現在のコマンドの右側に読み込まれます
v-これから、コマンドは現在のコマンドの下に読み込ま
5れます
.- スタックに5をプッシュします-番号をポップして印刷しますスタックの一番上
@-プログラムを終了
<space>-何もしない

Befungeでプログラミングしていることがわかっていれば、だれもだましません。しかし、もしあなたがこれに出くわし、それがBefungeであることに気づかなかったなら、おそらくそうでしょう。


11
+1、これは非常に不正です。なぜなら、デバッグ時にソースコードを実行するプログラムを誰が見るのでしょうか。
MrLore 14

33

JavaScript

コード:

var a = 3;
а = 2;
a + а;

出力:

5

コンソールで自分でテストするか、このフィドルを確認できます


6
リソースを教えてくれたり、これがなぜ機能するのか説明してくれますか。Fiddleをチェックアウトしたので機能することはわかっていますが、その理由はわかりません。
家族

29
「a」変数は両方とも同じではありません(これを間違えた場合は申し訳ありません)。卑劣なユニコード
サムクリーマー

6
私は、次のキャラクターがどのようにU+0431б であるかが大好きです。
wchargin

73
ホモグリフを使用して読者を「混乱させる」ことは今では公式には面白くない
ジョン・ドヴォルザーク

40
@JanDvorakその答えはこの後に投稿されました。ここでは適用されません。
ドアノブ

30

C(Linux、gcc 4.7.3)

#include <stdio.h>

int main(void)
{
    int a=3, b=2;

    printf("%d + %d = %d", --a, b, a+b);  
}

2 + 2 = 5を出力します

a = 2ですか?

gcc-4.7.3は、関数パラメーターを右から左に評価します。a + bが評価されるとき、aはまだ3です。


16
不特定の動作の良い使用
chbaker0 14年

24

FORTRAN 77

       program BadSum
       integer i,a,j
       common i,a
       a = 1
       i = 2
       call addtwo(j) 
       print *,j
       end

       subroutine addtwo(j)
       integer a,i,j
       common a,i
c since a = 1 & i = 2, then 2 + 1 + 1 = 2 + 2 = 4
       j = i + a + a
       end

commonブロックの標準的な乱用:順序の問題。サブルーチン内のブロックの順序を入れ替えたので、本当に追加してい1 + 2 + 2ます。


6
@JanDvorak:ハハ、私は例えば、私はリテラルを再定義することがあったFORTRAN IVを使用することもできました2=3
カイルKanos

1
@KyleKanos、それは私があなたの投稿がFORTRANで書かれているのを見たときにこれがそうなると思っていたものです。
danmcardle

@KyleKanosやれ
クリックリック14年

1
@KyleKanos:整数リテラルまたは浮動小数点のみで動作しましたか?その時代のマシンでは、整数リテラルとアドレスは同じサイズで、フロートより小さいので、フロートリテラルをプールするとスペースを節約できますが、intリテラルをプールするとは考えられませんでした。
supercat

2
@KyleKanos:私の理解では、コンパイラはリテラルへの直接割り当てを許可しませんが、関数呼び出しは参照渡しで使用され、関数に浮動小数点リテラルを渡すと、通常、浮動のプール内の値のアドレスが渡されますポイントリテラル。関数に整数値を渡すとプールされますが、整数を使用するほとんどのコードには値が直接含まれます。
supercat 14年

24

Python

コードは、このタスクの正解である5を出力します。

def int(a):
    return ~eval(a)

def add(a,b):
    return int(a)+int(b)

print ~add("2","2")

編集:これは、文字列化された2ではなく整数を追加する代替バージョンです。

def int(a): return ~eval(`a`)
def add(a,b): return int(a)+int(b)
print ~add(2,2)

Tildeはを返す単項逆演算子である-x-1ため、最初のステップはgetで-6、次にprint関数getの別の演算子を使用します5


なぜ~eval(`a`)ただの代わりに~a
アンドレアコルベリーニ14年

2
入力が文字列化された整数である場合、int()機能の一部を残しeval()、仕事をしたかった:)
avall

24

ルビー

class Fixnum
    alias plus +

    def + (other)
        plus(other).succ
    end
end

puts 2 + 2

これにより、最初の引数がFixnum(少なくともMRIでは2)であるすべての加算の結果が1増加します。

この副作用は、Javaバージョンよりもさらに悪いものです。


23

ルビー

Rubyにはファーストクラスの環境があります。これは多くのことを意味します。それはまた、多くのことができるということを意味します。

def mal(&block)
    block.call
    for v in block.binding.eval("local_variables");
      block.binding.eval('if ' + v.to_s + ' == 4 then ' + v.to_s + ' = 5 end')
    end 
end

a = 2 + 2;
b = 2 + 4;
puts "2 + 2 = ", a
puts "2 + 4 = ", b

mal do
  puts "But in 1984..."
end

puts "2 + 2 = ", a
puts "2 + 4 = ", b

これの出力は次のとおりです。

2 + 2 = 
4
2 + 4 = 
6
しかし、1984年に...
2 + 2 = 
5
2 + 4 = 
6

この喜びと危険性についてさらに理解したい場合は、Ruby Conf 2011 Keeping Ruby Reasonableをお読みください。AbstractHeresiesブログからファーストクラスの環境をお読みください。


また:class Fixnum; def +(n) 5 end end; 2 + 2 # => 5
film42 14年

1
特定の場合にのみ行うには:class Fixnum; alias_method :orig_plus, :+; protected :orig_plus; def +(n) self == 2 && n == 2 ? 5 : self.orig_plus(n) end end
ゲイリーS.ウィーバー14年

21

スキーム

(define 2+2 5)
2+2 ;=> 5

9
おい!2+2Lispで追加する方法ではありません!
ジョンドヴォルザーク

1
だから何?タスクのように2から2を追加するようです。
ハウレス

119
@JanDvorak Lispを使用したことはありませんが、理解しているように、のようなものです((((2))(()()))()()(()((((+))))()(((()(())((((2)))))()))(())))
地下

2
「2 + 2を5として再定義することはあまり創造的ではありません!考え直さないで、他のことを試してください。」---まあ、R5RSでは2 + 2または2の代わりに+を再定義できます。答えはここにあります:pastebin.com/KHtm9Jmv
フェリペ14年

1
@FelipeMicaroniLalli注釈は私の答えの後に行われたので、カウントされません。
ハウレス14年

20

C#

var c = Enumerable.Range(2, 2).Sum();

なじみのない人にとっては、これは2で始まり2で終わる範囲を取得しているように見えます。実際には、2で始まり、2つの数字になります。したがって、2 + 3 = 5。


6
2で始まる範囲と2で終わる範囲は、ちょうど{ 2 }になりますか?
パエロエベルマン

1
@PaŭloEbermann Enumerable.Rangeは開始と終了を取りません。(列挙される要素の)開始とカウントを取ります。
MasterMastic 14年

14
@MasterMasticこれは答えの説明から理解できました。しかし、「なじみのない誰かに」という意味は、(答での説明から)このような範囲になるはず、と私の議論が予想される結果は、その後2、ない4.だろうということです
サンパウロEbermann

1
@PaŭloEbermann、はい、それはそれを見る一つの方法です。追加する数値を提供しているように見えるかもしれないと思っていました。だから、Enumerable.Range(1,2,3,4)、1から始まる4の端、および10にまとめるしまうだろう
ポール


18

C

int main() {
        char __func_version__[] = "5";  // For source control
        char b[]="2", a=2;
        printf("%d + %s = %s\n", a, b, a+b);
        return 0;
}

5あまりにもよく隠されていないですが、私は怖いです。最適化では機能しません。


1
いいね 未定義の動作が許可されていない場合、私は投票できません。
この14年

2
@self。、UBへの依存が禁止されている場所はわかりません。多くのコードゴルフの答えはUBに依存しており、合理的なプラットフォームで一貫して発生する限り問題ないと思います。
ウゴレン

2
UBへの依存が禁止されている場所はわかりません。私もそれに関するルールを見つけませんでした。それを明確にできればいいと思います。多くのコードゴルフの答えはUBに依存しており、何らかの合理的なプラットフォームで一貫して発生する限りは問題ないと考えています。
これ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.