数字2と2を追加し、5を出力するように見えるプログラムを作成します。これは、人手不足のコンテストです。
プログラムはエラーを出力できません。メモリホールに注意してください!入力はオプションです。
2 + 2を5として再定義するのはあまり創造的ではありません!それを二重に考えないで、他のことを試してください。
echo "2+2=5";
数字2と2を追加し、5を出力するように見えるプログラムを作成します。これは、人手不足のコンテストです。
プログラムはエラーを出力できません。メモリホールに注意してください!入力はオプションです。
2 + 2を5として再定義するのはあまり創造的ではありません!それを二重に考えないで、他のことを試してください。
echo "2+2=5";
回答:
リフレクションは、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に設定します。
警告:実際のコードでこれを行うと、人々は非常に不幸になります。
Integer[] array = (Integer[]) c.get(cache); fisherYatesShuffle(array);
と想像するだけ破るどのように多くの事...
私はあなたがghciで何かを投げることができるのが大好きで、それは完全にロールバックします。
λ> let 2+2=5 in 2+2
5
let 2+2=5 in 5+5
するの?ಠ_ಠ
Non-exhaustive patterns in function +
私はここで新しい関数(+)を2+2
定義しています。そうでない場合は何もプラグインするとエラーが発生します。
かなり安いトリックですが、私はあなたのほとんどを捕まえると確信しています。
int main() {
int a = 2 + 2; a++;
printf("%d",a);
return 0;
}
コードを右にスクロールします。
Windows / Linuxではわかりませんが、OSXではスクロールバーが表示されません。
とにかく、これはお気に入りのコードエディターで「スペースの視覚化」を有効にする正当な理由です。
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はデフォルトで、実行が終了した後にスタックに残っているものをすべて印刷します。
常にダブルスを丸める必要があります
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ビットの差(4000000000000001
〜4000000000000000
)だけMath.ceil
です。
Math.ceil(two + two); // round just in case
私はあなたがそこで何をしたかを見る
two
。という名前のクラスすらありません。製品グレードのjavaはTwo two = Two.two.two();
、Two.twoがTwoFactory型である。
編集: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 23
ASCII 52のフォントを再定義して、4ではなく5のように見えるようにします。
http://bbcbasic.co.uk/bbcwin/bbcwin.htmlのエミュレーターを使用した元のイメージ。(わずかに異なるコードで)編集履歴で見ることができます。
2+3=5
および2+2=5'
VDU 23,52,126,96,124,6,6,102,60,0
+++++ +++++
+ +
+ + + +++++
+++++ +++ +++++
+ + + +++++
+ +
+++++ +++++.
出力:
5
これは少し単純に聞こえるかもしれませんが、元の投稿で示唆されているように、創造的にしようとしました。
+++++.
何でもペイントできます。
これは人気コンテストなので、私は長い方法を使用する必要があると思います...
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
((v = v * 5))
または((v *= 5))
+=
すぐにそれを見つけました。
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)のコピーに同じメモリ位置を使用します。これにより、そのメモリ位置がを介して直接編集されます
ctypes
。patch
は難読化された"12-7"
、len
4eval
から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")
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インタープリターは、加算式の周りの余分な括弧を無視するだけなのでしょうか。
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にドロップできるように作成しました。
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)よりも大幅に少なく表示されます。
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)。
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';
PHP
例を持っています:$a=2;echo "2+2=".$a++ + $a++;
var total = 2 + 2;
if(total = 5)
{
alert('I guess 2 + 2 = 5');
}
else
{
alert('The universe is sane, 2 + 2 = 4');
}
=
の代わりに==
、見やすく、率直に言って、インスパイアされていません。
=
だけでなく、割り当てと比較演算子(例えばパスカル、SQL、VBは)
static void Main(string[] args)
{
var x = 2;
var y = 2;
if (1 == 0) ;
{
++x;
}
Console.WriteLine(x + y);
}
;
空ループを使用してカーソルを進めるため、forループとafter ループがありました。セミコロンを誤って削除したので、すべてが爆発し、その理由がわかりませんでした。
JavaScriptをASCIIアートで装飾するのは危険です。
-~// JS \\~-
~-// Maths \\-~
-~// Madness \\~-
(2 + 2)
コメントが削除されると、残りのシンボルと演算子は
-~~--~(2 + 2)
、JSのBitwise Not演算子(〜)を使用し、途中で値を無効にする少数のマイナス記号を使用します。
--
エラーが発生するはずなので、オペレータはどのように受け入れられるのかと思っていましたInvalid left-hand side expression in prefix operation
。ただし、それらの間に空白文字があることに気付きました。
#!/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配列にはゼロのインデックスが付けられます
set a to {1, 2, 3, 4, 5, 6, 7, 8}
item 4 of a
zsh
オプションが設定されてい$arr[0]
ない限り、1インデックス付き配列を使用します(単純に未設定または未定義などです)KSH_ARRAYS
。この場合、配列は0インデックス付きです。
# 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イデオロギーに従って数学を実装します。
public class Five {
public static void main(final String... args) {
System.out.println(256.0000000000002 + 256.0000000000002);
}
}
出力:
512.0000000000005
おそらく、同じ種類のdoubleを使用するすべての言語で動作します。
_2_56 + _2_56 = _5_12
)、それはあなたが意味することを可能性が高いと思われる256.000000000000_2_ + 256.000000000000_2_ = 512.000000000000_5_
ノート(:数字「太字」に使用強調している。
これは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であることに気づかなかったなら、おそらくそうでしょう。
#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です。
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
ます。
2=3
コードは、このタスクの正解である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
、次に5
~eval(`a`)
ただの代わりに~a
?
int()
機能の一部を残しeval()
、仕事をしたかった:)
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
class Fixnum; alias_method :orig_plus, :+; protected :orig_plus; def +(n) self == 2 && n == 2 ? 5 : self.orig_plus(n) end end
(define 2+2 5)
2+2 ;=> 5
2+2
Lispで追加する方法ではありません!
((((2))(()()))()()(()((((+))))()(((()(())((((2)))))()))(())))
。
var c = Enumerable.Range(2, 2).Sum();
なじみのない人にとっては、これは2で始まり2で終わる範囲を取得しているように見えます。実際には、2で始まり、2つの数字になります。したがって、2 + 3 = 5。
{ 2 }
になりますか?
Enumerable.Range
は開始と終了を取りません。(列挙される要素の)開始とカウントを取ります。
次のステートメントをfsiに入れましょう。
let ``2+2``= 5
出力:
val ( 2+2 ) : int = 5
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
あまりにもよく隠されていないですが、私は怖いです。最適化では機能しません。