숫자 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
설명:
일반적으로 액세스 할 수있는 것보다 더 깊게 변경해야합니다. 이는 IntegerCache를 변경하는 JVM에 펑키 매개 변수가 전달되지 않은 Java 6 용으로 설계되었습니다 .
Integer 클래스 내에는 Flyweight of Integer가 있습니다. 이것은 -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-ish처럼 보입니다.
4
-스택에 숫자 4를 넣습니다. 스택 내용 : 4-스택
:echo
상단의 값을 변수 에코에 저장합니다. 스택 내용 : 4-스택
(
맨 위의 값을 1 씩 줄입니다. 스택 내용 : 3-
2
스택 맨 위에 2를 넣습니다. 스택 내용 : 3 2-
+
스택 위에 두 숫자를 더합니다. 스택 내용 :
2
5-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 비트 차이 (4000000000000001
와 사이4000000000000000
)입니다 ...Math.ceil
4를 반환하지 않고 5를 반환 하기에 충분합니다 .
Math.ceil(two + two); // round just in case
난 당신이 무슨 짓을했는지 볼
two
. 생산 등급 java는 Two two = Two.two.two();
TwoFactory 유형이 Two.two입니다.
편집 : 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처럼 보이도록 재정의합니다. 미학적 이유로 합리적인 크기의 문자로 화면 모드 6이 선택되었습니다.
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
두 번째 줄은 v를 추가하지 않고 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
4 의 문자열은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")
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))
파이썬 2.7로 실행하면 ... 끝에 그 줄을 무시하십시오. 내가 액세스하기 쉬운 두 시스템 인 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+3
있지만, 우리는 또한 정식 속성 ( a + b = b + a ; 두 번째 및 세 번째 줄). 파이썬 인터프리터가 추가 표현식 주위의 불필요한 괄호를 무시하는지 궁금합니다.
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 (Latin letter capital h) 및 Η (Greek letter capital 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 (30dB 음원을 추가 한 경우 33dB)가됩니다.
여기서 다른 계산기로 볼 수 있습니다 .
echo '2 + 2 = ' . (2 + 2 === 4 ? 4 : 2 + 2 === 5 ? 5 : 'dunno');
어느 생산 :
2 + 2 = 5
PHP에서 삼항은 왼쪽에서 오른쪽으로 계산되기 때문에 실제로
(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');
}
=
대신보기 ==
쉽고 솔직하게 영감을 얻지 못했습니다.
=
static void Main(string[] args)
{
var x = 2;
var y = 2;
if (1 == 0) ;
{
++x;
}
Console.WriteLine(x + y);
}
;
나는 빈 루프를 사용하여 커서를 진행할 때 완벽하게 의도적이었습니다. 실수로 세미콜론을 제거하고 모든 것이 터져서 이유를 알 수 없었습니다.
ASCII 아트로 Javascript를 장식하는 것은 위험합니다.
-~// JS \\~-
~-// Maths \\-~
-~// Madness \\~-
(2 + 2)
주석이 제거되면 나머지 기호 및 연산자는 다음과 같이 평가됩니다
-~~--~(2 + 2)
. JS에서 비트 단위 연산자 (~)를 사용하고 그 과정에서 값을 무시하는 소수의 빼기 부호를 사용합니다.
--
오류가 발생 하여 연산자가 어떻게 수용 가능한지 궁금합니다 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]}"
배쉬 배열은 인덱스가 0이다
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 이데올로기에 따라 수학을 구현합니다.
# 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에서 다른 수학 함수, 달리sum
,max
그리고min
; wheresum(1,3)
,max(1,3)
및min(3,1)
모두 예상되는 답변을 제공합니다.
public class Five {
public static void main(final String... args) {
System.out.println(256.0000000000002 + 256.0000000000002);
}
}
산출:
512.0000000000005
아마도 같은 종류의 복식을 사용하는 모든 언어에서 작동합니다.
_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 프로그램은 단일 문자 명령으로 구성된 그리드로 구성됩니다. 첫 번째 명령은 왼쪽 상단에있는 명령이며 명령 읽기는 오른쪽으로 진행됩니다. 그러나 프로그램 실행 중에 방향이 바뀔 수 있습니다.
첫 번째 문자 행과 첫 번째 행에서 시작하는 문자 열만v
실행됩니다. 문제의 문자를 수행합니다
#
- 다음 명령을 건너
>
- 지금부터를, 명령은 현재 명령의 오른쪽에 읽기
v
- 지금부터, 명령은 현재 명령 아래 읽기
5
- 푸시 (5) 스택에
.
- 팝과 숫자를 인쇄 스택의 상단에
@
-프로그램을 종료
<space>
-아무것도하지 마십시오
당신이 Befunge에서 프로그래밍하고 있다는 것을 알고 있다면, 이것은 실제로 누군가를 속이지 않을 것입니다. 그러나 당신이 이것을 발견하고 그것이 Befunge라는 것을 몰랐다면, 아마도 그럴 것입니다.
U+0431
가 б – 거의 6 인 방법을 좋아합니다 !
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")
편집 : 다음은 문자열이 아닌 정수를 추가하는 대체 버전입니다.
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()
입력이
루비에는 일류 환경이 있습니다. 이것은 많은 것을 의미합니다. 또한 많은 일을 할 수 있다는 것을 의미합니다.
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 Ruby를 합리적으로 유지 하고 Abstract Heresies 블로그에서 일류 환경 을 읽으십시오 .
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 + 3 = 5입니다.
{ 2 }
그렇지 않습니까?
Enumerable.Range
은 시작과 끝을하지 않으며 시작과 카운트 (열거되는 요소의 수)를 취합니다.
다음과 같은 진술을하자.
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
너무 잘 숨겨지지, 난 두려워. 최적화와 함께 작동하지 않습니다.