एक प्रोग्राम लिखें जो 2 + 2 = 5 बनाता है [बंद]


393

एक प्रोग्राम लिखें जो प्रतीत होता है कि संख्या 2 और 2 और आउटपुट जोड़ता है। 5. यह एक अंतर्निर्मित प्रतियोगिता है।

आपका प्रोग्राम किसी भी त्रुटि का उत्पादन नहीं कर सकता है। स्मृति छेद के लिए बाहर देखो! इनपुट वैकल्पिक है।

5 के रूप में 2 + 2 को फिर से परिभाषित करना बहुत रचनात्मक नहीं है ! इसे दोगुना मत करो, कुछ और कोशिश करो।


48
जॉर्ज ऑरवेल की पुस्तक "1984" में यह सवाल है।
दोपहर

97
ऐसा क्यों है? दो और दो है पाँच।
जियोबिट्स

79
वहाँ! हैं! चार! लाइट!
निक टी

105
@Geobits - मैं सहमत हूँ: 2 + 2 = 5 आप इसे इस कैलकुलेटर में देख सकते हैं ।
MT0

47
echo "2+2=5";
user3459110

जवाबों:


669

जावा

प्रतिबिंब वास्तव में जावा को गाली देने के साथ जाने का सही तरीका है ... लेकिन आपको कुछ मूल्यों को मोड़ने की तुलना में गहराई में जाने की आवश्यकता है ।

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

स्पष्टीकरण:

आप इसे आम तौर पर उपयोग कर सकते हैं की तुलना में भी गहरा बदलने की जरूरत है। ध्यान दें कि यह जावा 6 के लिए डिज़ाइन किया गया है जिसमें जेवीएम पर कोई फंकी पैरामीटर पारित नहीं किया गया है जो अन्यथा इंटेगरचैच को बदल देगा

दीप इन द इंटेगर क्लास एक फ्लाईवेट ऑफ इंटेगर है। यह from128 से +127 तक पूर्णांक का एक सरणी है। cache[132]वह स्थान है जहां 4 सामान्य रूप से होगा। इसे 5 पर सेट करें।

चेतावनी: वास्तविक कोड में ऐसा करने से लोग बहुत दुखी होंगे।

Ideone पर कोड डेमो


5
जैसे ही मैंने सवाल देखा, :)
ऑक्टेविया तोगामी

306
उस। है। बुराई। बिलकुल दुष्ट। +1
जॉन ड्वोरक

75
@JanDvorak चैट में यह सुझाव दिया गया था कि Integer[] array = (Integer[]) c.get(cache); fisherYatesShuffle(array); बस कल्पना करें कि कितनी चीजें

30
इस तरह के उत्तर मुझे एसओ से अधिक इस साइट से प्यार करते हैं।
सोंगो

35
zomg, java के उत्तर कभी भी शीर्ष मत नहीं मिलते हैं! जावा को शीर्ष पर लाने के लिए :) :)
क्रंचर

297

हास्केल

मुझे बस इतना पसंद है कि आप कुछ भी गच्ची पर कैसे फेंक सकते हैं और इसके साथ पूरी तरह से रोल करते हैं।

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

36
क्या करता let 2+2=5 in 5+5है? ಠ_14
जॉन ड्वोरक

22
@JDDvorak Non-exhaustive patterns in function +- मैं यहां एक नया फ़ंक्शन (+) को परिभाषित कर रहा हूं, और अगर मैं किसी भी चीज में प्लग करता हूं तो 2+2यह त्रुटि नहीं होगी क्योंकि मैंने कभी भी परिभाषित नहीं किया कि उस मामले में क्या होना चाहिए।
फ्लोंक

27
@SHiKiROU छाया, पुनर्परिभाषित नहीं
जॉन ड्वोरक

96
लगभग ऐसा ही लगता है: "और भगवान ने कहा 2 + 2 = 5 में 2 + 2"))
आउटफाल

11
@ user3217013 जानें हास्केल, यह आपके दिल के लिए अच्छा है।
जूता

294

सी

सुंदर सस्ती चाल है, लेकिन मुझे यकीन है कि मैं आप में से सबसे अधिक फँस जाएगा।

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

इसे यहाँ आज़माएँ

कोड को दाईं ओर स्क्रॉल करें।
मुझे विंडोज़ / लिनक्स पर यकीन नहीं है लेकिन OSX पर, स्क्रॉलबार दिखाई नहीं दे रहा है।
वैसे भी, यह आपके पसंदीदा कोड संपादक पर "स्पेस विज़ुअलाइज़ेशन" को सक्षम करने का एक अच्छा कारण है।


96
स्क्रोलबार क्रोमियम में दिखाई देता है, लेकिन सबसे पहले कौन ध्यान देता है? :)
रुस्लान

172
लोगों को भ्रमित करने के लिए, आप एक टिप्पणी लाइन जोड़ सकते हैं जो स्क्रॉलबार के अस्तित्व को "समझाने" के लिए पर्याप्त है, लेकिन इतना सुस्त है कि कोई भी इसे (स्क्रॉल करने के लिए) की परवाह नहीं करता है।
हेगन वॉन एटिजन

22
ओएस एक्स में, डिफ़ॉल्ट रूप से स्क्रॉलबार दृश्यता इस बात पर निर्भर करती है कि माउस जुड़ा हुआ है या नहीं। अगर सिर्फ एक टचपैड है, तो स्क्रॉलबार ओवरलैड हैं और उपयोग में नहीं होने पर फीका हो जाता है। यदि कोई माउस जुड़ा हुआ है, तो स्क्रॉलबार्स संदर्भ बॉक्स से स्थान चुरा लेते हैं और हमेशा दिखाई देते हैं। आप USB माउस में मैकबुक पर अनप्लग और प्लग करके इसका परीक्षण कर सकते हैं। यह निश्चित रूप से सिस्टम प्राथमिकता में कॉन्फ़िगर किया जा सकता है।
एंड्रिया

49
चतुर, लेकिन मोबाइल पर यह सिर्फ शब्दवाचक है :)
लोगन

31
यह केवल समय है कि स्क्रॉल एसई कोड खिड़कियां है नहीं है मुझे किसी की उंगलियों को तोड़ने के लिए चाहते हैं।
ऑबस्क्योररॉबट

184

GolfScript

4:echo(2+2);

प्रिंट करता है 5

बेशक GolfScript में एक वाक्यविन्यास है जो अन्य भाषाओं से स्पष्ट रूप से भिन्न है, यह प्रोग्राम कुछ बेसिक या सी-ईश की तरह दिखने के लिए होता है।

4  - नंबर 4 को स्टैक पर रखें। स्टैक सामग्री: 4
:echo- स्टैक के शीर्ष पर मान को वैरिएबल इको में सहेजें। स्टैक सामग्री: 4
(  - स्टैक के शीर्ष पर मूल्य को घटाएं 1. स्टैक सामग्री: 3
2  - स्टैक के शीर्ष पर नंबर 2 डालें। स्टैक सामग्री: 3 2
+  - स्टैक के शीर्ष पर दो नंबर जोड़ें। स्टैक सामग्री: 5
2  - नंबर 2 को स्टैक के ऊपर रखें। स्टैक सामग्री: 5 2
)  - स्टैक के शीर्ष पर मूल्य में वृद्धि 1. स्टैक सामग्री: 5 3
;  - स्टैक से शीर्ष तत्व निकालें। स्टैक सामग्री: 5

निष्पादन समाप्त होने के बाद, गोल्फ प्रिंट डिफ़ॉल्ट रूप से स्टैक पर कुछ भी छोड़ देगा।


3
क्या आप समझा सकते हैं कि जो लोग गोल्फस्क्रिप्ट नहीं बोलते हैं कृपया?
मडक्स

1
@MadTux यहां आप जाएं।
आआआआआआआआआआआ आआआआआ

1
धन्यवाद। (मैं बाद में
उत्थान करूंगा

5
सरल और धोखा, मुझे यह पसंद है। +1
seequ

9
मुझे यह पसंद है क्योंकि ऐसा नहीं लगता है कि यह आपको गणित या शब्दार्थ के साथ छल कर रहा है, यह इतना सीधा और अभी तक 5 ^ ^ लगता है
dwana

145

जावा

हमेशा अपने युगल, लोगों को गोल करना होगा

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 पर्याप्त है, हालांकि)।

संख्याओं के कच्चे हेक्स निरूपण में, यह केवल 1 बिट अंतर (बीच 4000000000000001और 4000000000000000) ... जो कि Math.ceilविधि 5 को बनाने के लिए पर्याप्त है , 4 नहीं।


61
Math.ceil(two + two); // round just in caseमैं देखता हूं कि आपने वहां क्या किया था
टिम एस।

17
एक फ़ंक्शन और एक ही नाम के साथ एक चर बना रहा है ... वाह।
विन्यासकर्ता

107
@configurator जो कुछ भी नहीं है, वहाँ भी एक वर्ग का नाम नहीं है two। प्रोडक्शन ग्रेड जावा Two two = Two.two.two();टूटू दो प्रकार के टू फंक्शन के साथ है।
जनीस फ्रूज़

36
दो.इन्फ़िनिटी। और। बियॉन्ड ()
सिनसुआहंगस

7
@ समय मैं तुम वहाँ क्या
छत

135

बीबीसी बेसिक

EDIT: एंड्रिया फॉल्स और स्क्विश ऑस्सिफ्रेज के लिए, एक अलग व्याख्याकार का उपयोग करके एक अधिक ठोस संस्करण: 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एएससीआईआई 52 के लिए फ़ॉन्ट को फिर से परिभाषित करता है ताकि यह 4 के बजाय 5 जैसा दिखे। स्क्रीन मोड 6 को सौंदर्य कारणों (एक उचित आकार के वर्ण) के लिए चुना गया था।

Http://bbcbasic.co.uk/bbcwin/bbcwin.html पर एमुलेटर का उपयोग करते हुए मूल छवि । (थोड़े अलग कोड के साथ) संपादित इतिहास में देखे जा सकते हैं।


8
हालांकि ये फॉन्ट अलग दिखते हैं। क्या आपको लगता है कि आप इसे सही फ़ॉन्ट का उपयोग कर सकते हैं?
एंड्रिया

@AndreaFaulds मैं से एमुलेटर उपयोग कर रहा हूँ bbcbasic.co.uk/bbcwin/bbcwin.html । यह 8x8 ग्रिड पर मूल बीबीसी बेसिक के फ़ॉन्ट पुनर्निर्धारण का समर्थन करता है। लेकिन एमुलेटर का डिफ़ॉल्ट फ़ॉन्ट स्पष्ट रूप से 8x8 से अधिक है। इसलिए मैं शायद बेहतर काम कर सकता था, लेकिन यह सही नहीं होगा। मुझे लगता है कि मैं सभी 5 और साथ ही 4 के लिए फ़ॉन्ट को फिर से परिभाषित कर सकता हूं, फिर वे समान दिखेंगे।
स्तर नदी सेंट

5
@AndreaFaulds प्रश्न ने यह नहीं कहा कि परिणाम अन्य 5s से अप्रभेद्य होना चाहिए। मुझे लगता है कि यह वास्तव में एक विशेषता है। 2+3=5और2+2=5'
बेन जैक्सन

1
यह बीबीसी माइक्रो में मूल फ़ॉन्ट से मेल खाता है:VDU 23,52,126,96,124,6,6,102,60,0
स्क्वीश ossifrage

@squeamishossifrage जानकारी के लिए धन्यवाद। यह हालांकि एमुलेटर में फ़ॉन्ट से मेल नहीं खाएगा। आपका उदाहरण मेरी तरह ही 7 पिक्सेल ऊँचा है। इसके अलावा, यह मेरे जैसे ही नीचे की तरफ एक शून्य है, जबकि ऐसा लगता है कि मुझे इसे थोड़ा नीचे ले जाने की आवश्यकता है (यानी, नीचे के बजाय शीर्ष पर शून्य है।) एक महत्वपूर्ण अंतर यह है कि मेरे पास 126,64 है। जबकि आपके पास 126,96 है, और आपके पास मेरे 2 के बजाय कुछ 6 है। ऐसा इसलिए है क्योंकि मूल बीबीसी फ़ॉन्ट में मोटी ऊर्ध्वाधर लाइनें थीं, इसलिए इसे एक मानक टीवी स्क्रीन पर 80 कॉलम प्रारूप में आसानी से पढ़ा जा सकता था।
लेवल रिवर सेंट

134

Brainfuck

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

आउटपुट:

5

इसे यहाँ आज़माएँ ।

मुझे पता है कि यह थोड़ा सरल लग सकता है, लेकिन मैंने रचनात्मक होने की कोशिश की, जैसा कि मूल पोस्ट में सुझाया गया है।


1
मैं ब्रेनफॉक नहीं जानता, यह पता लगाने में मुझे कुछ मिनट लगे। ASCII 53, है ना?
स्तर नदी सेंट

4
जब तक आपके पास है +++++.आप कुछ भी पेंट कर सकते हैं।
एडुआर्ड फ्लोरिनेसस्क

1
@steveverrill: हाँ आप सही हैं। (और यह BF में ascii वर्णों को आउटपुट करने का एकमात्र तरीका है)।
बाघ


105

दे घुमा के

चूंकि यह एक , मुझे लगता है कि मुझे एक लंबी-घुमावदार विधि का उपयोग करना चाहिए ...

उन लोगों के लिए जो बैश नहीं जानते हैं: $((...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

व्याख्या

दूसरी पंक्ति 22 जोड़ने के लिए v और 2 को जोड़ती है।
वास्तविक विवरण:
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
देखें कि क्या आप इस शैली का लुक पसंद करते हैं, जो वैध बैश भी है (डॉलर के संकेतों को समाप्त करता है, समान चिह्न के आसपास रिक्त स्थान की अनुमति देता है और संयुक्त असाइनमेंट ऑपरेटरों को अनुमति देता है): ((v = v * 5))या((v *= 5))
डेनिस विलियमसन

2
अच्छा लगा, लेकिन मैंने +=तुरंत बात को टाल दिया।
nyuszika7h

2
@ardnew हाँ वहाँ है। पहली दो पंक्तियाँ ( v=2और v+=2): बैश वैरिएबल हैंडलिंग से अपरिचित किसी के लिए, जो इसके बराबर होगा 2+2, लेकिन यह वास्तव में है "2"+"2", अर्थात "22"। कोड में अन्य टिप्पणियां केवल इस वजह से गलत हैं। मुझे पता है, हर किसी को यह हास्यास्पद नहीं लगता

101

अजगर

जावा उत्तर से प्रेरित:

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

जावा की तरह, CPython पहले कुछ छोटे पूर्णांक (यदि स्मृति कार्य करता है तो 0-255) की किसी भी प्रतिलिपि के लिए समान मेमोरी स्थान का उपयोग करता है। यह अंदर जाकर उस मेमोरी लोकेशन को सीधे एडिट करता है ctypespatchसिर्फ एक आज्ञाकारी है "12-7", len4 के साथ एक स्ट्रिंग , जो eval5 से है।

एक अधिक मोटे संस्करण

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 से आगे

जैसा कि ओपी ने कहा, 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 के साथ चल रहा है ... अंत में उस रेखा को अनदेखा करें। विंडोज 64-बिट और उबंटू 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 ; दूसरी और तीसरी पंक्तियाँ)। मुझे आश्चर्य है कि अगर पायथन दुभाषिया सिर्फ अतिरिक्त अभिव्यक्तियों के आसपास के अति सुंदर कोष्ठकों की उपेक्षा करता है।


96
हां, हम निश्चित रूप से बस लापरवाही से segfaults की अनदेखी करते हैं ...

10
यह ध्यान देने योग्य है कि यह वास्तव में एक पायथन चाल नहीं है और केवल पायथन के सी कार्यान्वयन के लिए विशिष्ट है।
xApple

1
@ निकट आह! ठीक है। मैं इस धारणा के तहत था कि आपने एक ही 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')एक संशोधित पहला संस्करण है। मैंने इसे बनाया इसलिए मैं इसे हैकिंग प्रतियोगिताओं में रेड टीम के रूप में $ PYTHONSTARTUP / etc / प्रोफाइल में छोड़ सकता हूं।
डेविडजेलिक्स

2
हाँ। सिडेनोट, ऐसा लगता है कि 1, 0 और -1 कुछ ऐसी संख्याएँ हैं जिनके साथ अजगर तुरंत सेगुलेट करता है। मैं सोच रहा था कि उन लोगों को अजगर कार्यक्रमों के व्यवहार को खराब करने के लिए सबसे बुरा होगा। इन त्रुटियों को शामिल करने के लिए बकवास का उपयोग करना संभव हो सकता है ।
डेविडजेलिक्स

86

जावास्क्रिप्ट:

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/ पर देखें

एच (लैटिन अक्षर कैपिटल एच) और Η (ग्रीक अक्षर कैपिटल एटा) दोनों वैश्विक दायरे में सेट किए गए हैं क्योंकि वे संस्करण कीवर्ड के साथ स्थानीय कार्यों के रूप में परिभाषित नहीं किए गए थे। जब वे समान दिखते हैं, तो वे वास्तव में 2 अलग-अलग चर होते हैं जिनमें 2 अलग-अलग मूल्य होते हैं। अपने ब्राउज़र में Ctrl + F का उपयोग करने पर आप पाएंगे कि F (eta) इस पृष्ठ पर H (h) से काफी कम दिखाता है।


4
@Sam भले ही दो 'H का लुक एक जैसा हो, लेकिन वे वास्तव में 2 बिल्कुल अलग तरह के किरदार हैं। यूनिकोड में अलग-अलग वर्ण हो सकते हैं जो समान दिखते हैं लेकिन अलग-अलग कोड-पॉइंट होते हैं। इस विशिष्ट मामले में; अन्य "एच" वास्तव में ग्रीक अक्षर एटा है
d3dave

79
पाठकों को "भ्रमित" करने के लिए होमोग्लिफ़ का उपयोग करना अब आधिकारिक रूप से मज़ेदार नहीं है
जॉन ड्वोरक

29
जावास्क्रिप्ट के हास्यास्पद वैश्विक चरों के साथ संयोजन में सजातीय मजाकिया बन जाते हैं।
कॉन्स्टेंटिन वीट्ज

3
यह "यूनिकोड" वर्ण "नहीं है, यह लैटिन एच और ग्रीक एटा (।) है।
फ्यजोम

4
@Vortico हम्म ... क्या आप चाहते हैं जब एक सवाल सवाल पर्याप्त नहीं है? सहायता केंद्र से जुड़ा एक सामान्य प्रश्न? ध्यान दें कि केवल मध्यस्थ ही faq टैग को लागू कर सकते हैं । जवाब के लिए के रूप में - सवाल "स्कोर +5 या अधिक और कम से कम दो बार के रूप में कई चढ़ाव के रूप में बताता है"। जवाब में 27 अपवोट हैं और कोई डाउनवोट नहीं है। मुझे लगता है कि उत्तर में दिए गए मानदंडों को पूरा करने जैसा लगता है, और उत्थान की मात्रा एक साइट के मेटा साइट पर एक प्रश्न के दूसरे सबसे पुराने उत्तर के लिए बहुत प्रभावशाली है, जहां केवल 124 लोगों ने 10 से अधिक बार मतदान किया है। कितने हैं आप पसंद है? हर कोई?
जॉन ड्वोरक

72

जावास्क्रिप्ट

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) क्योंकि वे लॉग स्केल पर मापे जाते हैं।

आप इसे एक अलग कैलकुलेटर पर यहाँ देख सकते हैं ।


वैसे यह वास्तव में 5.01 डेसिबल की तरह है, लेकिन गिनती के लिए 4 से काफी दूर है।
जो जे।

68

पीएचपी

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';


35
अनिवार्य phpsadness
wchargin

1
मुझे एक और PHPउदाहरण मिला है :$a=2;echo "2+2=".$a++ + $a++;
२१

यह स्पष्ट है कि $ ++ एक 3 बनाता है और परिणाम 6 होगा। मुझे वह नहीं मिलता जो आप सोच रहे हैं।
ओज

1
@ जानूस PHPsadness # 30 इसे अच्छी तरह से समझाता है
wchargin


66

जावास्क्रिप्ट

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
वैसे भी एक उत्थान है, मैं उस गलती को बहुत करता

6
मुझे यह उत्तर अभी भी पसंद है
सैम क्रीमर

5
मुझे भी यह पसंद है। हर भाषा का उपयोग =केवल असाइनमेंट लेकिन एक तुलना ऑपरेटर (जैसे पास्कल, एसक्यूएल, वीबी) के रूप में
avall

मुझे यह बहुत स्पष्ट लगता है
ओलिवर नी

57

सी#

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

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

        Console.WriteLine(x + y);
    }

7
आह, दुष्ट पात्रों के साथ अच्छी पुरानी चाल। इसलिए आपको हर जगह 1TBS का उपयोग करना चाहिए।
जॉन ड्वोरक

11
@JanDvorak क्या इफ स्टेटमेंट के बाद अर्धविराम के कारण यह काम करता है? मैं C # नहीं जानता, लेकिन मैंने C ++

5
@professorfish कि मैं क्या मान रहा हूँ। इसके अलावा, ऐसी भाषाएँ जो आपको यादृच्छिक घुंघराले ब्रेस FTW सम्मिलित नहीं करने देतीं।
जॉन ड्वोरक

12
बिना ";", यदि कथन नियंत्रित करता है कि क्या कोड ब्लॉक निष्पादित किया जाएगा। उसके साथ ";" वहाँ, अगर मूल्यांकन किया जाता है, लेकिन परिणाम के साथ कुछ भी नहीं किया जाता है। फिर कोड ब्लॉक को हर बार क्रियान्वित किया जाता है, फिर भी। C # में, यादृच्छिक कोड ब्लॉक होना पूरी तरह से स्वीकार्य है।
ग्रैक्स

2
मैंने दूसरे दिन खुद को इसके साथ पा लिया। मेरे पास ;इसके बाद एक लूप था, जो पूरी तरह से जानबूझकर था क्योंकि मैं एक कर्सर को आगे बढ़ाने के लिए खाली लूप का उपयोग कर रहा था। मैंने गलती से अर्ध-बृहदान्त्र को हटा दिया, सब कुछ उड़ा दिया, और मैं यह पता नहीं लगा सका कि क्यों।
एमपीएन

56

ASCII कला के साथ अपने जावास्क्रिप्ट को सजाने के लिए यह खतरनाक है।

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

     (2 + 2)

जब टिप्पणियों को हटा दिया जाता है, तो शेष प्रतीकों और ऑपरेटरों का मूल्यांकन होता है
-~~--~(2 + 2) , जो जेएस में बिटवाइज़ नॉट ऑपरेटर (~) का उपयोग करता है, साथ ही मुट्ठी भर माइनस संकेत भी देता है, जो रास्ते में मूल्यों को नकार देगा।


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]}"

बैश सरणियाँ शून्य अनुक्रमित हैं


3
मैं वास्तव में पहले एक को पकड़ता था, क्योंकि मुझे बैश में गोल्फ खेलने जैसी चीजों से बहुत समस्या थी। दूसरे के लिए, जहाँ शून्य-अनुक्रमित सरणियाँ नहीं हैं ?

3
उदाहरण के लिए @professorfish Applescript:set a to {1, 2, 3, 4, 5, 6, 7, 8} item 4 of a
डिजिटल ट्रॉमा

12
@DigitalTrauma एप्सस्क्रिप्ट अजीब है

5
zsh1-अनुक्रमित सरणियों का उपयोग करता है (और $arr[0]बस परेशान या अपरिभाषित या कुछ और है), जब तक कि KSH_ARRAYSविकल्प सेट नहीं किया जाता है, जिस स्थिति में सरणियाँ 0-अनुक्रमित होती हैं।
18

4
@professorfush: Lua & Fortran 1 अनुक्रमित हैं। कभी भी मेरी गिनती 10 तक होती है, मैं हमेशा 1 से शुरू करता हूं, 0. पर नहीं: डी
काइल कानोस

49

पर्ल

# 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...";
}

यह CPAN मॉड्यूल पर निर्भर करता है जिसे Acme :: NewMath कहा जाता है । मॉड्यूल में गलत फ़ाइल नामों के कारण, यह केवल केस असंवेदनशील फ़ाइल सिस्टम (जैसे विंडोज या मैक ओएस एक्स) पर काम करेगा, लेकिन मैं यहां मूल मॉड्यूल के लेखक को दोष देता हूं। एक्मे :: न्यूमैथ इंगोसॉक विचारधारा के अनुसार गणित को लागू करता है।


16
यह काफी धूर्त है। कोई भी कभी भी आपके आयात को नहीं देखता / शामिल करता है।

44

आर

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

उत्पादन:

5

कोड वास्तव में [1] के अर्थ को [4] के माध्यम से जोड़ता है। आर में मतलब समारोह का उपयोग करने के होगा सही तरीका: mean(c(1,3)) + mean(c(4,0))इस के विपरीत आर में कुछ अन्य गणितीय कार्य, जैसे है sum, maxऔर min; जहां sum(1,3), max(1,3)और min(3,1)सभी अपेक्षित जवाब देंगे।


7
बुरा नहीं है, मुझे थोड़ा बेवकूफ बनाया है।
qwr

37

जावा

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

उत्पादन:

512.0000000000005

संभवतः किसी भी भाषा में काम करता है जो एक ही तरह के डबल्स का उपयोग करता है।


7
यह एक बहुत ही अजीब मुख्य हस्ताक्षर है।
बर्टी वूवेन

10
जावा हुड के तहत सरणियों के रूप में वैरिएड तर्क को लागू करता है।
कोडाफाई

4
मुझे यह महसूस करने में एक पल लगा कि आप शायद युगल में अंतिम अंकों के बारे में बात कर रहे हैं। मैंने देखा कि पहले अंक सही तरीके से जोड़े गए ( _2_56 + _2_56 = _5_12), लेकिन यह अधिक संभावना है कि आपका मतलब है 256.000000000000_2_ + 256.000000000000_2_ = 512.000000000000_5_(नोट: अंक को "बोल्ड" करने के लिए इस्तेमाल किए गए अंडरस्कोर।
जस्टिन

35

Befunge

यह Befunge में लिखा गया है, लेकिन पायथन की तरह दिखने के लिए डिज़ाइन किया गया है।

#>>>>>>>>>>>>>>>>>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 में प्रोग्रामिंग कर रहे हैं, तो यह वास्तव में किसी को भी धोखा नहीं देगा। लेकिन अगर आप इस पार आए और यह महसूस नहीं किया कि यह बेफ्यूज है, तो इसकी सबसे अधिक संभावना है।


11
+1, यह बहुत ही भयावह है, क्योंकि डिबगिंग के दौरान स्रोत कोड चलाने वाले प्रोग्राम को कौन देखता है?
MrLore

33

जावास्क्रिप्ट

कोड:

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

आउटपुट:

5

आप इसे अपने कंसोल पर स्वयं परीक्षण कर सकते हैं या इस फिडेल को जांच सकते हैं


6
क्या आप मुझे किसी संसाधन की ओर इशारा कर सकते हैं या मुझे समझा सकते हैं कि यह क्यों काम करता है। मुझे पता है कि यह काम करता है क्योंकि मैंने इसके फिडल को जांचा, लेकिन मुझे समझ नहीं आया कि क्यों।
परिवार

29
"a" वैरिएबल दोनों बार एक ही नहीं होता (क्षमा करें, यदि IM इसे खराब कर रहा है)। डरपोक यूनिकोड वास्तव में
सैम क्रीमर

6
मैं प्यार करता हूँ कि अगला चरित्र, U+0431लगभग 6 है!
वॉचर्जिन

73
पाठकों को "भ्रमित" करने के लिए होमोग्लिफ़ का उपयोग करना अब आधिकारिक रूप से मज़ेदार नहीं है
जॉन ड्वोरक

40
@JanDvorak यह जवाब इस एक के बाद पोस्ट किया गया था; यह यहाँ लागू नहीं होता है।
दरवाज़े

30

सी (लिनक्स, 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 प्रिंट करता है

तो एक = 2, सही?

gcc-4.7.3 दाएं से बाएं तक फ़ंक्शन मापदंडों का मूल्यांकन करता है। जब a + b का मूल्यांकन किया जाता है, a अभी भी 3 है।


16
अनिर्दिष्ट व्यवहार का अच्छा उपयोग
chbaker0

24

फोरट्रान 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
@JDDvorak: हाहा, मैं फोरट्रान IV का इस्तेमाल कर सकता था जिसमें मैं शाब्दिक रूप से परिभाषित कर सकता था, जैसे2=3
काइल कानोस

1
@KyleKanos, यही मैंने सोचा था कि जब मैं आपकी पोस्ट FORTRAN में लिखी थी, तो यही होगा।
danmcardle

@KyleKanos करो!
ClickRick

1
@KyleKanos: क्या यह पूर्णांक शाब्दिक या केवल तैरता है? मुझे लगता है कि उस युग की एक मशीन पर, एक पूर्णांक शाब्दिक और एक पता एक ही आकार का होता, लेकिन एक फ्लोट से छोटा होता है, इसलिए फ्लोटिंग फ्लोट लिटरल स्पेस को बचाते हैं, लेकिन इंट लिटरल पूलिंग नहीं करेंगे।
19

2
@KyleKanos: मेरी समझ यह है कि कंपाइलर एक शाब्दिक को सीधे असाइनमेंट की अनुमति नहीं देते हैं, लेकिन फ़ंक्शन कॉल संदर्भ द्वारा पास किया जाता है, और फ़ंक्शन के लिए फ़्लोटिंग-पॉइंट शाब्दिक पास करना आम तौर पर फ़्लोटिंग के पूल में एक मान के पते को पास करेगा। -सांप शाब्दिक। किसी फ़ंक्शन में पूर्णांक मान पास करने से इसे पूल किया जाएगा, लेकिन पूर्णांक का उपयोग करने वाले अधिकांश कोड में सीधे मान शामिल होंगे।
सुपरकैट

24

अजगर

कोड 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)

टिल्ड एक गैर-प्रतिलोम ऑपरेटर है -x-1, जो वापस लौटता है , इसलिए पहले चरण को प्राप्त करना है -6और फिर printफ़ंक्शन में किसी अन्य ऑपरेटर के साथ मिलता है5


~eval(`a`)सिर्फ के बजाय क्यों ~a?
एंड्रिया कोरबेलिनी

2
मैं कुछ int()कार्यक्षमता छोड़ना चाहता था और eval()अगर इनपुट एक
कठोर

24

माणिक

class Fixnum
    alias plus +

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

puts 2 + 2

यह उन सभी परिवर्धन के परिणाम को बढ़ाता है जिनका पहला तर्क एक फिक्सनम है (जो 2 है, कम से कम MRI में) 1 से।

इसके दुष्परिणाम जावा संस्करण से भी बदतर हैं।


23

माणिक

रूबी में प्रथम श्रेणी का वातावरण है। इसका मतलब बहुत सारी चीजें हैं। इसका मतलब यह भी है कि बहुत सारी चीजें की जा सकती हैं ... शायद नहीं करना चाहिए।

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

यदि आप इस के खुशियों और खतरों के बारे में अधिक समझना चाहते हैं, तो रूबी कॉन्फिडेंस को बनाए रखते हुए रूबी कॉन्फिडेंस 2011 और ऐब्स हेरेसिस ब्लॉग से प्रथम श्रेणी के वातावरण को पढ़ें ।


इसके अलावा:class Fixnum; def +(n) 5 end end; 2 + 2 # => 5
फिल्म42

1
केवल विशिष्ट मामले के लिए करने के लिए:class Fixnum; alias_method :orig_plus, :+; protected :orig_plus; def +(n) self == 2 && n == 2 ? 5 : self.orig_plus(n) end end
गैरी एस वीवर

21

योजना

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

9
हे! 2+2कैसे तुम लिस्प में इसके अलावा नहीं है!
जॉन ड्वोरक

1
तो क्या? यह प्रतीत होता है कि कार्य में 2-2 जोड़ते हैं।
होलेथ

119
@JDDvorak मैंने कभी लिस्प का उपयोग नहीं किया है, लेकिन जैसा कि मैं समझता हूं कि यह कुछ ऐसा है ((((2))(()()))()()(()((((+))))()(((()(())((((2)))))()))(())))
undergroundmonorail

2
"5 के रूप में 2 + 2 को फिर से परिभाषित करना बहुत रचनात्मक नहीं है! इसे दोहराएं नहीं, कुछ और प्रयास करें।" --- खैर, R5RS में मैं 2 + 2 या 2 के बजाय + को फिर से परिभाषित कर सकता हूं। इसका उत्तर यहां है: pastebin.com/KHtm9Jmv
Felipe

1
@FelipeMicaroniLalli कि मेरे जवाब के बाद निंदा की गई थी, तो यह गिनती नहीं है।
हौलेथ

20

सी#

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

किसी परिचित के लिए नहीं, यह ऐसा लगेगा जैसे मैं एक सीमा शुरू कर रहा हूं और 2 पर समाप्त हो रहा हूं। वास्तव में, यह 2 से शुरू होता है और दो नंबर के लिए जाता है। तो 2 + 3 = 5।


6
2 पर शुरू और समाप्त होने वाली एक सीमा बस { 2 }होगी, है ना?
पाओलो एबरमन

1
@ Pa @loEbermann Enumerable.Rangeएक शुरुआत और एक अंत नहीं लेता है, यह एक शुरुआत और एक गिनती लेता है (तत्वों की गणना की जाएगी)।
मास्टरमैस्ट

14
@MasterMastic मैंने उत्तर में स्पष्टीकरण से इसे समझा। लेकिन "किसी को पारिवारिक नहीं" का अर्थ ऐसी सीमा (उत्तर में व्याख्या से) माना जाता है, और मेरा तर्क यह है कि अपेक्षित परिणाम तब 2 होगा, 4 नहीं।
पाओलो एबरमन

1
@ Pa @loEbermann, हाँ यह देखने का एक तरीका भी है। मैं सोच रहा था कि यह अधिक लग सकता है जैसे मैं संख्याओं को जोड़ने के लिए आपूर्ति कर रहा था। तो Enumerable.Range (1,2,3,4) 1 से शुरू होता है, 4 पर समाप्त होता है, और 10 तक होगा
पॉल


18

सी

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
अच्छा; अगर अपराजित व्यवहार की अनुमति नहीं है, तो मैं इसे नहीं बढ़ा सकता।
यह

2
@ स्व।, मैं यह नहीं देखता कि यूबी पर भरोसा करना कहां प्रतिबंध है। कई कोड गोल्फ उत्तर यूबी पर भरोसा करते हैं, और मुझे लगता है कि यह ठीक है जब तक यह लगातार कुछ उचित मंच पर होता है।
बदसूरत

2
मैं यह नहीं देखता कि UB पर भरोसा करना कहाँ प्रतिबंधित है। मुझे उस पर कोई नियम नहीं मिला। अगर इसे स्पष्ट किया जा सकता है तो अच्छा होगा। कई कोड गोल्फ उत्तर यूबी पर निर्भर करते हैं, और मुझे लगता है कि यह ठीक है जब तक यह लगातार कुछ उचित मंच पर होता है उस पर कुछ विशिष्ट नियम अच्छे होंगे।
यह
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.