क्या v = (v == 0; 1: 0) लिखने का एक बेहतर तरीका है; [बन्द है]


465

मैं 0 और 1 के बीच एक चर को टॉगल करना चाहता हूं। अगर यह 0 है तो मैं इसे 1 पर सेट करना चाहता हूं, अगर यह 1 है तो मैं इसे 0 पर सेट करना चाहता हूं।

यह एक ऐसा मौलिक ऑपरेशन है जो मैं इतनी बार लिखता हूं कि मैं इसे करने का सबसे छोटा, स्पष्ट तरीका खोज सकता हूं। यहाँ मेरा अब तक का सबसे अच्छा है:

v = (v == 0 ? 1 : 0);

क्या आप इस पर सुधार कर सकते हैं?

संपादित करें: सवाल यह है कि स्पष्टता बनाए रखते हुए सबसे कम वर्णों में उपरोक्त कथन को कैसे लिखा जाए - यह 'वास्तविक प्रश्न नहीं' कैसे है? यह एक कोड-गोल्फ अभ्यास करने का इरादा नहीं था, हालांकि कुछ दिलचस्प उत्तर लोगों के गोल्फ के रूप में सामने आए हैं - यह देखने के लिए अच्छा है कि गोल्फ को रचनात्मक और विचारशील तरीके से इस्तेमाल किया जा रहा है।


20
यह मुझे पहले से ही सरल / स्पष्ट / छोटा लग रहा है।
मोब

136
trickery:v = +!v;
jAndy

48
यदि 'बेहतर' का अर्थ 'तेज' भी है: jsperf.com/v-0-1-0
pimvdb

7
@ मोबिंगा: +1। यह उतना ही सरल है जितना इसे मिलना चाहिए। मेरे द्वारा देखे गए अन्य सभी उत्तर भ्रमित करने वाले हैं, और उनमें से कुछ तर्क बदलते हैं; कीड़े का परिचय।
इयान बॉयड

8
@holodoc अपनी राय व्यक्त करने का एक बेहतर समाधान एक उत्तर बनाना होगा जो कहता है कि आपको लगता है कि मूल सबसे अच्छा तरीका है, और जो आपको लगता है कि मामले में विस्तृत है। यह भी अन्य लोगों को आसानी से यह वोट देकर अपने जवाब के साथ पक्ष करने के लिए अनुमति देता है।
चक वैन डेर लिंडेन

जवाबों:


721

आप बस का उपयोग कर सकते हैं:

v = 1 - v;

यह निश्चित रूप से मानता है कि चर को ठीक से आरम्भ किया गया है, अर्थात इसका केवल मान 0 या 1 है।

एक और तरीका जो छोटा है लेकिन एक कम आम ऑपरेटर का उपयोग करता है:

v ^= 1;

संपादित करें:

स्पष्ट होना; मैंने इस सवाल को कोड गोल्फ के रूप में कभी नहीं कहा, बस ऑपरेटरों के साइड इफेक्ट जैसे किसी भी अस्पष्ट चाल का उपयोग किए बिना कार्य करने का एक छोटा तरीका खोजने के लिए।


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

37
आप हमेशा यह कहते हुए एक टिप्पणी जोड़ सकते हैं कि कोड क्या करता है।

25
@ केविन: यह सच नहीं है कि यह स्पष्ट रूप से पूछे गए सवाल का जवाब नहीं देता है। Q ने कहा "मैं 0 और 1. के बीच एक चर को टॉगल करना चाहता हूं" एक बहुत ही उचित व्याख्या यह है कि इसका तात्पर्य यह है कि चर का मान पहले से ही 0 या 1. है। इस व्याख्या / सीमा को उत्तर में स्पष्ट किया गया था। दुनिया में आप किस पर आपत्ति कर सकते हैं?
लार्स

50
@ मैथ्यू का कहना है कि जो व्यक्ति v ^= 1स्पष्ट नहीं है, उसे प्रोग्रामिंग बंद कर देना चाहिए, मुझे लगता है कि थोड़ा कठोर है। जैसा कि पहले कहा गया था कि यह अधिक सामान्य ऑपरेटरों में से एक नहीं है और यह वैसा ही काम नहीं करता है v = v ^ 1। साथ ही ऑपरेटर का मतलब विभिन्न भाषाओं (वीबी) में पूरी तरह से अलग है। हां एक त्वरित लुक-अप आपको बताएगा कि इसका एक्सओआर ऑपरेटर है और आप समझेंगे कि इसका क्या करना है, लेकिन कई लोगों को यह पहली नज़र में स्पष्ट नहीं हो सकता है। मुझे नहीं लगता कि इसका मतलब है कि आपको अपनी नौकरी छोड़ने की आवश्यकता है।
बजे जेडी आइजैक

80
यदि आप इसे लिखकर 15 वर्णों को बचाते हैं, लेकिन फिर इसे समझाने के लिए टिप्पणियों के 40 वर्णों का उपयोग करते हैं, तो क्या यह वास्तव में सुधार है?
माइकल मायर्स

343

चूंकि 0एक falseमूल्य है और 1एक trueमूल्य है।

v = (v ? 0 : 1);

उपयोग करने के लिए आप खुश हैं तो trueऔर falseसंख्या के बजाय

v = !v;

या यदि वे संख्याएँ होनी चाहिए:

v = +!v; /* Boolean invert v then cast back to a Number */

55
+इससे पहले कि जादू रखो !। ओहो जो गन्दी लगती है! लेकिन शांत: पी
jAndy

1
@ क्वेंटिन - यह आदमी के कोड को तोड़ देगा यदि उसके पास है switch(v){ case 0 ...या (v == 0) या यदि v === 0. तो आप अपने दृष्टिकोण के अलावा उसका परिणाम बदल रहे हैं ....
ब्रायन

34
इसे एक स्माइली बनाओ ({v :+! v}).v:।
pimvdb

17
@ ब्रायन: उस मैजिक +साइन के साथ नहीं ! ¯ \ _ (ツ) _ / ¯
jAndy

11
+1 v = (v ? 0 : 1)स्पष्ट और मुहावरेदार JS के लिए।
बेनेट मैकलेवे

200

v = (v + 1) % 2और यदि आप और अधिक मूल्यों के माध्यम से चक्र करने की जरूरत है बस बदलने 2के लिए (n + 1)। कहते हैं कि आपको केवल 0,1,2 चक्र करने की आवश्यकता है v = (v + 1) % 3


2
मुझे चक्र से प्यार है! यह वास्तव में स्मार्ट है।
ओली ग्लास

16
एक चक्र के रूप में टॉगल के बारे में सोचने के लिए +1। सरल यह देखते हुए कि यह कितना लचीला है।
गुफ़ा

3
एक मॉड्यूलर समाधान प्रदान करने के लिए +1 जो मजबूत भी है। व्यवहार में आप शायद constजादुई संख्या 2, 3, ... के स्थान पर एक चर का उपयोग करना चाहेंगे ...
oosterwal

2
छोटा (हैकर) तरीका: ++v % 3यदि आप 0, 1, 2 के माध्यम से साइकिल चलाना चाहते हैं
haraldmartin

75

आप इसके लिए एक फ़ंक्शन लिख सकते हैं और इसका उपयोग कर सकते हैं:

v = inv(v)


30
+1: मैं दृढ़ता से सहमत हूं कि यह सबसे साफ समाधान है (... लेकिन फिर invफ़ंक्शन में क्या जाता है : पी)
ली हाय्स

4
काश मैं इस जवाब को सिर्फ +1 से ज्यादा दे पाता। यदि सामान्य कोड स्पष्ट रूप से स्पष्ट नहीं है, तो इसे एक वर्णनात्मक नाम के साथ फ़ंक्शन में लपेटा जाना चाहिए।
तेहश्री

11
@TehShrike क्या आप invएक वर्णनात्मक नाम मानते हैं ?
बेनेट McElwee

3
@ बेनेट McElwee: inv = invert। हमेशा मुझे एक सामान्य संक्षिप्त नाम की तरह लगता था।
डैनियल

51
फिर इसे संक्षिप्त क्यों करें, इसे 'इनवर्ट' या 'टॉगल' कहें और कोड पठनीय हो। ऐसा नहीं है कि हम इस सामान को एक 80 कॉलम के पंचकार्ड या कुछ और पर फिट करने की कोशिश कर रहे हैं।
चक वैन डेर लिंडेन

50

यदि आप 1 के अलावा किसी भी संभावना के बारे में परवाह नहीं करते हैं:

v = v ? 0 : 1;

उपरोक्त मामले में, v 1 होने पर समाप्त हो जाएगा यदि v 0, झूठा, अपरिभाषित या अशक्त है। इस तरह के दृष्टिकोण का उपयोग करते हुए ध्यान रखें - v 0 होगा, भले ही v "हैलो वर्ल्ड" हो।


2
वह मान नहीं छोड़ेगा। आपका मतलब है v = v ? 0 : 1
गुफा

3
@ गुफ़ा - मेरी डिस्लेक्सिया को पकड़ने के लिए ...
ब्रायन

3
यह मेरा पसंदीदा तर्क-आधारित उत्तर है जिसे मैं सहकर्मियों के साथ उपयोग कर सकता हूं (मैं @ गुफ़ा के उत्तर को नंबर-आधारित के रूप में देख रहा हूं)। मुझे पसंद है कि आपने अनावश्यक परीक्षण (v == 0) लिया है और कोष्ठक को निकाल दिया है, और इसे पूर्णतम न्यूनतम वर्ण गणना तक ले जाता है। धन्यवाद।
ओली ग्लास

1
मैं @ गुफ़ा के जवाब का बहुत बड़ा प्रशंसक हूँ - लियोनार्ड स्किनार्ड के शब्दों में, इसे साधारण आदमी रखो;)
ब्रायन

2
"सत्य" मूल्यों को समझने के लिए +1।
zzzzBov

44

लाइन्स की तरह v = 1 - v, या v ^= 1या v= +!vसब काम हो जाएगा, लेकिन वे क्या मैं हैक्स के रूप में उल्लेख होगा गठन। ये कोड की सुंदर रेखाएं नहीं हैं, लेकिन इच्छित प्रभाव के लिए सस्ती चालें हैं। 1 - v"0 और 1 के बीच का मूल्य टॉगल करें" संवाद नहीं करता है। यह आपके कोड को कम अभिव्यंजक बनाता है और एक जगह का परिचय देता है (एक छोटा सा) जहां एक और डेवलपर को आपके कोड को पार्स करना होगा।

इसके बजाय एक समारोह की तरह v = toggle(v)तेज नज़र में इरादे का संचार करता है।


8
-1, गंभीरता से, v=1-vटॉगल संचार नहीं करता है?
Blindy

22
1-vवास्तव में टॉगल संवाद कर सकते हैं, लेकिन यह है कि केवल एक चीज यह संचार करता है। उदाहरण के लिए, यह शून्य पर एक लाइन v=1या संचार पर केंद्रित एक मिररिंग संचार का भी संचार कर सकता है v=0.5। इस अर्थ में यह अपेक्षाकृत अस्पष्ट है। यह सच है कि यह जानना vकेवल कभी भी हो सकता है 0या 1इसके इच्छित अर्थ को सीमित कर सकता है, लेकिन यह अन्य डेवलपर्स (या आपके भविष्य के स्व) को इस सरल रेखा को समझने में सक्षम होने से पहले उस संदर्भ को समझने के लिए मजबूर करता है। आप अधिक स्पष्ट नहीं हो सकते हैंv = toggle(v)
रे

10
v ^= 1यदि आप तार्किक संचालन को समझते हैं तो यह पूरी तरह से स्पष्ट है, हालांकि, यदि आप एक प्रोग्रामर हैं तो बेहतर था। मुझे लगता है कि उस और उसके बीच अंतर है v=1-v; एक तार्किक ऑपरेशन और एक अंकगणितीय ऑपरेशन, और हम एक गणितीय एक तार्किक अवधारणा का प्रतिनिधित्व करने की कोशिश कर रहे हैं।
मैथ्यू

6
@ मैथ्यू पढ़ें: यह एक महान कथन है, जो मेरे विचारों को अच्छी तरह से प्रस्तुत करता है: "हम एक गणितीय एक तार्किक अवधारणा का प्रतिनिधित्व करने की कोशिश कर रहे हैं।" यहां तक v ^= 1कि कुछ अस्पष्टता भी है, हालांकि, इसकी व्याख्या बिटवाइज़-एक्सर के रूप में की जा सकती है।
रे

6
प्रोग्रामर के लिए (और हां, मेरा मतलब है कि हमारे जैसे गीक्स), ये काफी स्पष्ट हैं। वे हैक नहीं कर रहे हैं, क्योंकि वे अपनी सादगी के कारण सुरुचिपूर्ण समाधान हैं।
gion_13

38

( ईमानदारी और गणितीय अखंडता - इस "उत्तर" पर वोटों की संख्या को देखते हुए - ने मुझे इस उत्तर को संपादित करने के लिए प्रेरित किया है। मैंने यथासंभव लंबे समय तक आयोजित किया क्योंकि यह एक छोटी सी चुटकी के रूप में था और कुछ भी "गहरी" के रूप में नहीं डाला गया था। कोई भी स्पष्टीकरण उद्देश्य के लिए काउंटर लग रहा था। हालांकि, टिप्पणियां यह स्पष्ट कर रही हैं कि मुझे गलतफहमी से बचने के लिए स्पष्ट होना चाहिए। )

मेरा मूल उत्तर:

विनिर्देशन के इस भाग का शब्दांकन:

यदि यह 0 है, तो मैं इसे 1 पर सेट करना चाहता हूं, अन्यथा इसे 0 पर सेट करें।

इसका मतलब है कि सबसे सटीक समाधान है:

v = dirac_delta(0,v)

सबसे पहले, स्वीकारोक्ति: मैं था मिल मेरी डेल्टा कार्यों उलझन में। क्रोनकर डेल्टा थोड़ा अधिक उपयुक्त होता, लेकिन उतना नहीं जितना कि मैं कुछ चाहता था जो कि डोमेन-इंडिपेंडेंट था (क्रोनकर डेल्टा मुख्य रूप से पूर्णांक के लिए उपयोग किया जाता है)। लेकिन मुझे वास्तव में डेल्टा फ़ंक्शंस का उपयोग नहीं करना चाहिए था, मुझे कहना चाहिए:

v = characteristic_function({0},v)

मुझे स्पष्ट करें। स्मरण करो कि एक फ़ंक्शन एक ट्रिपल है, (एक्स, वाई, एफ) , जहां एक्स और वाई सेट हैं ( क्रमशः डोमेन और कोडोमैन कहा जाता है) और एफ एक नियम है जो एक्स के प्रत्येक तत्व को वाई का एक तत्व प्रदान करता है । हम अक्सर ट्रिपल (एक्स, वाई, एफ) को एफ: एक्स → वाई लिखते हैं । के एक सबसेट को देखते हुए एक्स , का कहना है कि एक , वहाँ एक है विशेषता समारोह जो एक समारोह है χ एक एक्स → {0,1}:(इसे एक बड़े कोडोमेन जैसे ℝ या thought के फ़ंक्शन के रूप में भी सोचा जा सकता है)। यह फ़ंक्शन नियम द्वारा परिभाषित किया गया है:

χ (एक्स) = 1 अगर एक्स χ और x (एक्स) = ० अगर एक्स

यदि आप सत्य सारणी को पसंद करते हैं, तो यह प्रश्न के लिए सत्य सारणी है "क्या X का तत्व x , उपसेट A का एक तत्व है ?"।

तो इस परिभाषा से, यह स्पष्ट है कि विशेषता कार्य यहाँ आवश्यक है, जिसमें X में कुछ बड़े सेट हैं जिनमें 0 और A = {0} हैं । यही मुझे लिखना चाहिए था।

और इसलिए डेल्टा कार्य करने के लिए। इसके लिए हमें एकीकरण के बारे में जानने की जरूरत है। या तो आप यह पहले से ही जानते हैं, या आप नहीं। यदि आप ऐसा नहीं करते हैं, तो मैं यहां कुछ भी नहीं कह सकता कि आप सिद्धांत की जटिलताओं के बारे में बताएंगे, लेकिन मैं एक वाक्य सारांश दे सकता हूं। एक सेट X पर एक माप सार में है "जो औसत काम करने के लिए आवश्यक है"। यही कारण है कि कहने के लिए अगर हम एक सेट है कि है एक्स और एक उपाय μ फिर वहाँ कार्यों का एक वर्ग है कि सेट पर एक्स → ℝ , कहा जाता है औसत दर्जे का काम करता है जिसके लिए अभिव्यक्ति एक्स च dμ समझ में आता है और है, कुछ अस्पष्ट अर्थ में, X पर f का "औसत" ।

एक सेट पर एक माप को देखते हुए, कोई भी उस सेट के सबसेट के लिए "माप" को परिभाषित कर सकता है। यह एक उपसमुच्चय को उसके चारित्रिक कार्य के अभिन्न अंग (यह मानते हुए कि यह एक औसत दर्जे का कार्य है) को निर्दिष्ट करके किया जाता है। यह अनंत, या अपरिभाषित हो सकता है (दोनों सूक्ष्म रूप से भिन्न हैं)।

चारों ओर बहुत सारे उपाय हैं, लेकिन यहां दो महत्वपूर्ण हैं। एक वास्तविक लाइन पर मानक उपाय है, on। इस उपाय के लिए, तो dμ च काफी क्या आप स्कूल में पढ़ाया जा रहा हो जाता है (पथरी अभी भी स्कूलों में पढ़ाया जाता है?): छोटे आयतों योग और और छोटे छोटे चौड़ाई ले। इस माप में, एक अंतराल का माप इसकी चौड़ाई है। एक बिंदु का माप 0 है।

एक अन्य महत्वपूर्ण उपाय, जो किसी भी सेट पर काम करता है , बिंदु माप कहलाता है । इसे परिभाषित किया गया है ताकि किसी फ़ंक्शन का अभिन्न अंग उसके मूल्यों का योग हो :

X f dμ = x (X f (x)

यह उपाय प्रत्येक सिंगलटन को असाइन करता है माप 1 सेट करता है। इसका मतलब यह है कि एक सबसेट का परिमित माप है यदि और केवल यदि यह स्वयं परिमित है। और बहुत कम कार्यों में परिमित अभिन्नता है। शून्य गैर केवल एक पर एक समारोह में एक परिमित अभिन्न है, यह होना चाहिए गणनीय अंकों की संख्या। तो जिन कार्यों को आप जानते हैं, उनमें से अधिकांश में इस उपाय के तहत परिमित अभिन्न नहीं है।

और अब डेल्टा कार्यों के लिए। आइए एक बहुत व्यापक परिभाषा लें। हमारे पास एक मापने योग्य स्थान (एक्स, μ) है (ताकि यह उस पर एक माप के साथ एक सेट हो) और एक तत्व ∈ एक्स । हम "को परिभाषित" डेल्टा समारोह (के आधार पर एक "समारोह" होने के लिए) δ एक एक्स → ℝ: संपत्ति के साथ कि δ एक (x) = 0 यदि x ≠ एक और एक्स δ एक dμ = 1

इसके बारे में सबसे महत्वपूर्ण तथ्य यह है कि यह एक पकड़ है: डेल्टा फ़ंक्शन की आवश्यकता नहीं है । यह है नहीं ठीक से परिभाषित: मैं क्या नहीं कहा है δ एक (क) है।

आप इस बिंदु पर क्या करते हैं यह इस बात पर निर्भर करता है कि आप कौन हैं। यहां की दुनिया दो श्रेणियों में विभाजित है। यदि आप एक गणितज्ञ हैं, तो आप निम्नलिखित कहते हैं:

ठीक है, इसलिए डेल्टा फ़ंक्शन को परिभाषित नहीं किया जा सकता है। जहां यह हम इसके लिए एक उचित घर मिल सकता है अपने काल्पनिक संपत्तियों पर आइए नज़र और देखो है परिभाषित किया। हम ऐसा कर सकते हैं, और हम वितरण के साथ समाप्त होते हैं । ये हैं नहीं (जरूरी) काम करता है, लेकिन चीजें हैं कि कार्यों की तरह एक छोटे से है, और अक्सर हम उनके साथ काम कर सकते हैं जैसे कि वे कार्यों थे व्यवहार; लेकिन कुछ चीजें हैं जो उनके पास नहीं हैं (जैसे कि "मूल्य") इसलिए हमें सावधान रहने की जरूरत है।

यदि आप गणितज्ञ नहीं हैं, तो आप निम्नलिखित कहते हैं:

ठीक है, इसलिए डेल्टा फ़ंक्शन ठीक से परिभाषित नहीं हो सकता है। ऐसा कौन कहता है? गणितज्ञों का एक समूह? उन पर ध्यान न दें! उन्हें क्या पता है?

अब अपने दर्शकों को नाराज करके, मैं जारी रखूंगा।

Dirac डेल्टा आमतौर पर इसके मानक उपाय के साथ वास्तविक रेखा में एक बिंदु (अक्सर 0) के डेल्टा समारोह होने के लिए लिया जाता है। इसलिए जो लोग मेरे बारे में टिप्पणियों में शिकायत कर रहे हैं वे मेरे डेल्टास को नहीं जानते हैं क्योंकि वे इस परिभाषा का उपयोग कर रहे हैं। उनके लिए, मैं माफी मांगता हूं: हालांकि मैं गणितज्ञ की रक्षा का उपयोग करके उस से बाहर निकल सकता हूं (जैसा कि हम्प्टी डम्प्टी द्वारा लोकप्रिय : बस सब कुछ फिर से परिभाषित करें ताकि यह सही हो), यह मानक शब्द का उपयोग करने के लिए कुछ अलग मतलब है।

लेकिन वहाँ है एक डेल्टा समारोह जो कि मैं क्या करना चाहते हैं और ऐसा लगता है कि जो मैं यहाँ की जरूरत है क्या करता है। अगर मैं एक ले बिंदु उपाय एक सेट पर एक्स फिर वहाँ है एक वास्तविक समारोह δ एक एक्स → ℝ: जो संतुष्ट एक डेल्टा समारोह के लिए मापदंड। इसका कारण यह है कि हम एक फ़ंक्शन X → is की तलाश कर रहे हैं, जो कि शून्य को छोड़कर है और जैसे कि इसके सभी मानों का योग है। 1. ऐसा फ़ंक्शन सरल है: सूचना का एकमात्र अनुपलब्ध टुकड़ा एक में इसका मान है , और 1 होने का योग पाने के लिए हम इसे केवल 1 मान देते हैं। यह {a} पर विशेषता फ़ंक्शन के अलावा और कोई नहीं है । फिर:

एक्स δ एक dμ = Σ एक्स ∈ एक्स δ एक (x) = δ एक (ए) = 1।

तो इस मामले में, एक सिंगलटन सेट के लिए, विशेषता फ़ंक्शन और डेल्टा फ़ंक्शन सहमत हैं।

अंत में, "कार्य" के तीन परिवार हैं:

  1. सिंगलटन सेट्स की विशिष्ट विशेषताएं,
  2. डेल्टा कार्य,
  3. क्रोनकर डेल्टा कार्य करता है।

इनमें से दूसरा सबसे सामान्य है क्योंकि बिंदु माप का उपयोग करते समय किसी भी अन्य का एक उदाहरण है। लेकिन पहले और तीसरे को फायदा है कि वे हमेशा वास्तविक कार्य करते हैं। तीसरा वास्तव में डोमेन के किसी विशेष परिवार (पूर्णांक, या उसके बाद कुछ उप-समूह) के लिए पहला मामला है।

तो, अंत में, जब मैं मूल रूप से इस सवाल का जवाब मैंने लिखा नहीं कर रहा था ठीक से सोच (मैं अब तक जाना नहीं होगा, क्योंकि यह कहना है कि मैं था उलझन में , के रूप में मुझे उम्मीद है कि मैं सिर्फ प्रदर्शन किया है मैं करना जानता हूँ कि मैं क्या जब के बारे में बात कर रहा हूँ मैं वास्तव में पहले सोचता हूं, मैंने अभी बहुत सोचा नहीं है)। डाय्रेक्ट डेल्टा का सामान्य अर्थ वह नहीं है जो यहां चाहिए, लेकिन मेरे जवाब में एक बात यह थी कि इनपुट डोमेन को परिभाषित नहीं किया गया था , इसलिए क्रोनकर डेल्टा भी सही नहीं था। इस प्रकार सबसे अच्छा गणितीय उत्तर (जो मैं लक्ष्य कर रहा था) विशेषता कार्य होता।

मुझे आशा है कि यह सब स्पष्ट है; और मुझे यह भी उम्मीद है कि मुझे टीईएक्स मैक्रोज़ के बजाय HTML संस्थाओं का उपयोग करके एक गणितीय टुकड़ा फिर से लिखना नहीं है!


37
+1 - यदि मैं क्वेंटिन को डायवर्ट_डेल्टा फ़ंक्शन को नहीं जानने के लिए डाउनवोट कर सकता हूं। मैं जानना चाहूंगा कि वह किस कॉलेज में गया क्योंकि मुझे नहीं लगता कि मैं वहां से किसी को भी नियुक्त करूंगा अगर उन्हें डिजिटल प्रोसेसिंग के लिए मौलिक रूप से कुछ भी पता नहीं है। मैं आगे चलकर आपके द्वारा किए जा रहे हास्य के बिट को समझने में असमर्थता के लिए क्वेंटिन को और कम कर दूंगा।
डंक

23
अगर मैं हर उस उत्तर को अस्वीकार कर देता हूं जो मुझे समझ में नहीं आया ... तो मैं बहुत सारे उत्तरों को नीचे कर दूंगा।
सीमस

4
हैलो एंड्रयू, यह एक समय हो गया है।
टिम डाउन

4
@ समय: अच्छा दु: ख, इसलिए यह है! और बरमूडा का बिशप कैसे है? (क्या मुझे वह सही याद है?) मुझे लगता है कि यह टिप्पणी धागा पकड़ने के लिए सबसे अच्छी जगह नहीं है, हालांकि ... 17 साल, है ना?
एंड्रयू स्टेसी

3
@ C @ "ԃ" यह उत्तर विफल रहा है ... " आह । आपने पढ़ा कि मैं गणितज्ञ हूँ, क्या आपने नहीं किया? यह उत्तर एक वैक्यूम में एक गोलाकार प्रोग्रामर के लिए पूरी तरह से काम करता है इसलिए मुझे नहीं पता कि आप किस बारे में शिकायत कर रहे हैं।
एंड्रयू स्टेसी

35

तुम यह कर सकते थे

v = Math.abs(--v);

यह मान 0 या -1 पर मान सेट करता है, और फिर Math.abs-1 से +1 में परिवर्तित होता है।


27
यह 'साधारण कार्य करने के लिए 10000 तरीके' प्रतियोगिता में बदल गया है। और मुझे सभी तरीके पसंद हैं।
जोश

27
v = Math.round(Math.sin(Math.PI/(v+3)));
बेनोइट

15
@ बेनोइट - आपका सूत्र v = 0 और v = 1 दोनों के लिए 1 बराबर है। इस एक ही सही, हालांकि है! v = Math.round(Math.cos(Math.PI/((v*2+1)+2)-2*v));: D
Teo.sk 15

2
वह मूल्य कभी नहीं बदलेगा। यदि है v = 1तो v = Math.Abs(-1)+1 है। तो v = 0फिर v = Math.Abs(-0)जो 0. है
पॉल

1
+1 और यह मेरा अन्य एक था ... जीआरआर।
पुनरावर्ती

34

सामान्य तौर पर जब भी आपको दो मूल्यों के बीच टॉगल करने की आवश्यकता होती है, तो आप वर्तमान मूल्य को दो टॉगल मानों के योग से घटा सकते हैं:

    0,1 -> v = 1 - v
    1,2 -> v = 3 - v
    4,5 -> v = 9 - v 

2
यह दिलचस्प और रचनात्मक है लेकिन संभावित रूप से खतरनाक है। यदि vयह दूषित हो जाता है तो यह अचानक दो अलग-अलग मूल्यों के बीच टॉगल करना शुरू कर देगा। (बस कुछ विचार करने के लिए ...)
oosterwal

1
दिलचस्प विचार के लिए +1। ऐसा नहीं है कि ओपी या कोई और वास्तव में इस परिस्थितियों में इसका उपयोग करने जा रहा है, लेकिन जानकारी का यह टुकड़ा मस्तिष्क में कहीं हमेशा के लिए मौजूद होना चाहिए।
शिमी वेइटहैंडलर

3
@ बूस्टरवाल: फिर निश्चित रूप से यह मुद्दा भ्रष्टाचार के साथ है ...
GManNickG

@GManNickG: जल्द या बाद में डेटा भ्रष्टाचार होगा इसलिए हमें इसका पता नहीं लगाने के परिणाम के बारे में पता होना चाहिए। यदि vसामान्य रूप से तीन या अधिक राज्यों की सूची में से दो राज्यों को वैकल्पिक रूप से निष्पादित करने के लिए उपयोग किया जाता है, तो एक भ्रष्टाचार के vकारण प्रोग्राम को वैकल्पिक रूप से दो पूरी तरह से अलग-अलग राज्यों को निष्पादित कर सकता है - इसके परिणामस्वरूप अप्रत्याशित और अवांछनीय परिणाम हो सकते हैं। इससे दूर रहने का सबक यह है: अपने डेटा पर हमेशा प्रशंसनीय जाँच करें।
22

33

यदि यह पूर्णांक 1 या 0 होना चाहिए, तो जिस तरह से आप कर रहे हैं वह ठीक है, हालांकि कोष्ठक की आवश्यकता नहीं है। यदि ये बूलियन के रूप में उपयोग किए जाने हैं, तो आप बस कर सकते हैं:

v = !v;

10
क्या यह परिणाम Ollie के "v" के बूलियन परिणाम पर सेट नहीं किया जाएगा, पूर्णांक नहीं?
ब्रायन

12
हाँ यह होगा, और मैंने चेतावनी दी थी कि कोड की रेखा से ऊपर के वाक्य में। यदि ये बूलियन्स के रूप में उपयोग किए जाने वाले हैं
माइकल बर्कोव्स्की

23
v = v == 0 ? 1 : 0;

पर्याप्त है !


7
एक राय से अधिक एक राय, क्या आपको नहीं लगता?
ब्रायन

16
@ ब्रायन: 'बेहतर' वास्तव में सभी के बारे में राय है।
pimvdb

3
मुझे पसंद है कि आपने कैसे कोष्ठक निकाले हैं - जो कुछ वर्णों को बंद कर देता है!
ओली ग्लास

9
@ ब्रायन: " उत्तर " है "नहीं, लेखन का बेहतर तरीका नहीं है v = (v==0 ? 1 : 0);" । हर कोई गोल्फ खेलने के विभिन्न तरीके ढूंढ रहा है; और वास्तव में सवाल का जवाब नहीं। इसीलिए मैंने इस जवाब को वोट दिया।
इयान बॉयड 12

19

समाधानों की सूची

ऐसे तीन उपाय हैं जिनका मैं प्रस्ताव करना चाहूंगा। वे सब के सब करने के लिए किसी भी मूल्य में परिवर्तित 0(यदि 1, trueआदि) या 1(यदि 0, false, nullआदि):

  • v = 1*!v
  • v = +!v
  • v = ~~!v

और एक अतिरिक्त, पहले से ही उल्लेख किया गया है, लेकिन चतुर और तेज (हालांकि केवल 0एस और 1एस के लिए काम करता है ):

  • v = 1-v

समाधान 1

आप निम्न समाधान का उपयोग कर सकते हैं:

v = 1*!v

यह पहली विपरीत बूलियन (करने के लिए पूर्णांक में परिवर्तित कर देंगे 0करने के लिए Trueऔर करने के लिए किसी अन्य मूल्य False), जब से गुणा तो पूर्णांक के रूप में यह व्यवहार करेगा 1। एक परिणाम के रूप में और किसी भी अन्य मूल्य में 0परिवर्तित हो जाएगा ।10

सबूत के तौर पर इस jsfiddle को देखें और कोई भी मान प्रदान करें जिसे आप परीक्षण करना चाहते हैं: jsfiddle.net/rH3g5/

परिणाम इस प्रकार हैं:

  • -123पूर्णांक में बदल जाएगा 0,
  • -10पूर्णांक में बदल जाएगा 0,
  • -1पूर्णांक में बदल जाएगा 0,
  • 0पूर्णांक में बदल जाएगा 1,
  • 1पूर्णांक में बदल जाएगा 0,
  • 2पूर्णांक में बदल जाएगा 0,
  • 60पूर्णांक में बदल जाएगा 0,

समाधान २

जैसा कि mblase75 ने कहा, jAndy के पास कुछ अन्य उपाय थे जो मेरी तरह काम करते हैं:

v = +!v

यह पहले मूल मूल्य से बूलियन बनाता है, लेकिन +इसके बजाय उपयोग करता है1* इसे पूर्णांक में बदलने के । परिणाम बिल्कुल समान है, लेकिन अंकन छोटा है।

समाधान 3

~~ऑपरेटर का उपयोग करने के लिए एक और तरीका है :

v = ~~!v

यह बहुत असामान्य है और हमेशा बूलियन से पूर्णांक में परिवर्तित होता है।


जावास्क्रिप्ट में, आप एक चर +को एक संख्या में बदलने के लिए उपसर्ग कर सकते हैं , इसलिए +!vयह आपके समाधान के बराबर है (ओपी की टिप्पणियों में jAndy का समाधान)।
ब्लेज़मॉन्गर

@ mblase75: हाँ, तुम ठीक कह रहे हैं 1*द्वारा बदला जा सकता है +जब पूर्णांक में बूलियन कन्वर्ट करने के लिए कोशिश कर रहा। मेरे जवाब में बाकी सब कुछ वैसा ही है। jAndy का उत्तर सही है, लेकिन मेरा अधिक विस्तृत है। मैं अपने जवाब में उसका समाधान जोड़ूंगा।
ताडेक

@Tadeck +1 अच्छे विचार के लिए।
शिमी वेइटहैंडलर

17

एक और जवाब, एक टिप्पणी और मेरी अपनी राय के लिए, मैं दो चीजों के संयोजन का सुझाव देता हूं:

  1. टॉगल के लिए एक फ़ंक्शन का उपयोग करें
  2. इस फ़ंक्शन के अंदर अधिक पठनीय कार्यान्वयन का उपयोग करें

यहां वह फ़ंक्शन है जिसे आप लाइब्रेरी में रख सकते हैं या हो सकता है कि इसे किसी अन्य जावास्क्रिप्ट फ़्रेमवर्क के लिए एक प्लगइन में लपेटें।

function inv(i) {
  if (i == 0) {
    return 1
  } else {
    return 0;
  }
}

और उपयोग बस है:

v = inv(v);

लाभ हैं:

  1. कोई कोड डुप्लीकेशन नहीं
  2. यदि आप या भविष्य में कोई इसे फिर से पढ़ता है, तो आप कम से कम समय में अपने कोड को समझेंगे।

क्या वो? मैंने एक त्वरित परीक्षण चलाया: jsperf.com/function-vs-no-function/2 और ऐसा लगता है, कि अंतर इतना अधिक नहीं है।
मार्टिन स्लेग्निटविट

25
7.5ns बनाम 8.8ns। यह अतिरिक्त 1.3 नैनोसेकेंड वास्तव में आपको मार देगा।
इयान बॉयड

5
जब मैंने बचाया, तो मैं अपने परिवार को डिज्नी वर्ल्ड ले गया। :-)
टॉम

1
पूरी तरह से सही है। "चतुर" समाधान लिखने वाले लोगों को शायद कभी भी अन्य प्रोग्रामर कोड "रत्नों" को बनाए रखने की ज़रूरत नहीं थी
एवी

1
क्यों नहीं function toggle(i){ return i == 0 ? 1 : 0 }?
बिली मून

13

मुझे नहीं पता कि आप अपने खुद के बूलियन क्यों बनाना चाहते हैं? मुझे फंकी सिंटैक्स पसंद है, लेकिन समझ में आने वाला कोड क्यों नहीं?

यह सबसे छोटा / सबसे तेज़ नहीं है, लेकिन सबसे स्पष्ट (और सभी के लिए पठनीय) अच्छी तरह से ज्ञात का उपयोग कर रहा है अगर / और नहीं:

if (v === 0)
{
  v = 1;
}
else
{
  v = 0;
}

यदि आप वास्तव में स्पष्ट होना चाहते हैं, तो आपको इसके लिए संख्याओं के बजाय बूलियन का उपयोग करना चाहिए। वे ज्यादातर मामलों के लिए काफी तेज हैं। बूलियन्स के साथ, आप बस इस वाक्यविन्यास का उपयोग कर सकते हैं, जो संक्षेप में जीत जाएगा:

v = !v;

1
यह वास्तव में मेरा पसंदीदा उत्तर होगा; लेकिन त्रिगुट ऑपरेटर बनाम अगर-किसी और एक पवित्र युद्ध मैं पर फ्यूज प्रकाश में नहीं करना चाहता था है। उस ने कहा, मुझे लगता है कि पहली पंक्ति होनी चाहिए === 0। के नमूना इनपुट के साथ 7, सही आउटपुट है 0, लेकिन यह आउटपुट होगा 1
इयान बॉयड

4
क्या किसी तरह के अपवाद को फेंकने के बजाय 7 की तरह चुपचाप इनपुट को सही करने का मूल्य है? मेरा मतलब है कि क्या होगा अगर कोड के कुछ अन्य बिट 7 पर हाथ है जब यह 0 या 1 की उम्मीद कर रहा था, इससे पहले कि आपके कोड ने मूल्य को सही किया?
चक वैन डेर लिंडेन

12

आपके मूल समाधान का दूसरा रूप:

v = Number(v == 0);

संपादित करें: मेरे मूल समाधान में त्रुटि को इंगित करने के लिए धन्यवाद तेहरिके और गुफ़ा।


4
== ऑपरेटर कई प्रणालियों के तहत एक बूलियन (पूर्णांक के बजाय) देता है। यह केवल तभी काम करेगा जब v को पूर्णांक के रूप में परिभाषित किया गया था, और भाषा स्वचालित रूप से बूलियन से पूर्णांक तक कास्टिंग के साथ शांत थी।
तेहश्री

सच सच। मैं जावास्क्रिप्ट के संदर्भ में सवाल का जवाब दे रहा था (सवाल कैसे टैग किया गया था)।
कर्ट Kaylor

@ कर्ट क्लोर: जावास्क्रिप्ट उन प्रणालियों में से एक है जहां == ऑपरेटर एक बूलियन देता है, इसलिए यह मूल समाधान के समान नहीं करता है।
गुफ्फा

@ गफ्फा: मैं इस तथ्य का लाभ उठा रहा हूं कि जावास्क्रिप्ट एक कमजोर टाइप की गई भाषा है जिसका निहितार्थ रूपांतरण है (जैसे'0.0000 '== 0, 0 == "", false == "", false == 0, 1 ==) सच, आदि)। मैं उसी तरह से दिए गए बूलियन मान का उपयोग कर सकता हूं जैसे कि मैं मान 0 या 1 के पूर्णांक का उपयोग कर सकता हूं। उदाहरण के लिए, जावास्क्रिप्ट कंसोल में "2 + ट्रू" का मूल्यांकन करने के लिए, आपको 3 मिलेगा।
कर्ट Kaylor

1
@ कर्ट क्लोर: यह केवल उन स्थितियों में काम करता है जहां आप एक अंतर्निहित रूपांतरण को बल देते हैं। उदाहरण के लिए प्रयास करें 'opacity:'+trueऔर आप के opacity:trueबजाय के साथ समाप्त होता है opacity:1
गुफ़ा

11

मैं इसे और स्पष्ट करूंगा।

क्या करता है v मतलब है?

उदाहरण के लिए जब v कुछ अवस्था है। एक वस्तु स्थिति बनाएँ। DDD में एक मान ऑब्जेक्ट।

इस मान ऑब्जेक्ट में तर्क को लागू करें। फिर आप अपने कोड को अधिक कार्यात्मक तरीके से लिख सकते हैं जो अधिक पठनीय है। वर्तमान स्थिति के आधार पर नई स्थिति बनाकर स्विचिंग स्थिति की जा सकती है। आपका यदि कथन / तर्क तब आपकी वस्तु में लिप्त हो जाता है, जिसे आप अनसुना कर सकते हैं। एक ValueObject हमेशा अपरिवर्तनीय है, इसलिए इसकी कोई पहचान नहीं है। इसलिए इसे बदलने के लिए आपको एक नया बनाना होगा।

उदाहरण:

public class Status
{
    private readonly int _actualValue;
    public Status(int value)
    {
        _actualValue = value;
    }
    public Status(Status status)
    {
        _actualValue = status._actualValue == 0 ? 1 : 0; 
    }

    //some equals method to compare two Status objects
}

var status = new Status(0);

Status = new Status(status);

6
इंजीनियरिंग से अधिक?
alejandro5042

6
+1 मुझे हंसाने के लिए
Denshi


10

यह गायब है:

v = [1, 0][v];

यह राउंड रॉबिन के रूप में अच्छी तरह से काम करता है:

v = [2, 0, 1][v]; // 0 2 1 0 ...
v = [1, 2, 0][v]; // 0 1 2 0 ...
v = [1, 2, 3, 4, 5, 0][v]; // 0 1 2 3 4 5 ...
v = [5, 0, 1, 2, 3, 4][v]; // 0 5 4 3 2 1 0 ...

या

v = {0: 1, 1: 0}[v];

अंतिम समाधान का आकर्षण, यह अन्य सभी मूल्यों के साथ भी काम करता है।

v = {777: 'seven', 'seven': 777}[v];

एक बहुत ही विशेष मामले के लिए, एक (बदलते) मूल्य प्राप्त करना पसंद है और undefined, यह पैटर्न सहायक हो सकता है:

v = { undefined: someValue }[v]; // undefined someValue undefined someValue undefined ...

9

चूंकि यह जावास्क्रिप्ट है, हम इंट्री +में बदलने के लिए यूनीरी का उपयोग कर सकते हैं :

v = +!v;

यह ( यदि या यदि दे तो ) NOTका मान तार्किक होगा । फिर हम लौटे बूलियन मान को इसके संबंधित पूर्णांक प्रतिनिधित्व में परिवर्तित करते हैं।vtruev == 0falsev == 1


8

सिर्फ किक्स के लिए: v = Math.pow(v-1,v)1 और 0 के बीच टॉगल भी करें।


7

एक और: v=++v%2

(सी में यह सरल होगा ++v%=2)

ps। हाँ, मुझे पता है कि यह डबल असाइनमेंट है, लेकिन यह सी के तरीके का सिर्फ कच्चा रीराइट है (जो काम नहीं करता है, क्योंकि जेएस प्री-इन्क्रीमेंट ऑपरेटर ने लैवल्यू वापस नहीं किया है।


3
आपका सी संस्करण अवैध है; आप एक ++ऑपरेटर के परिणाम को संशोधित नहीं कर सकते (यह एक अंतराल नहीं है)। के रूप में v=++v%2, आप vदो बार संशोधित कर रहे हैं । मुझे नहीं पता कि यह जावास्क्रिप्ट में अच्छी तरह से परिभाषित है, लेकिन यह आवश्यक नहीं है। v = (v+1) % 2
कीथ थॉम्पसन

कम से कम c++इसमें है - क्योंकि प्री-इन्क्रीप्शन ऑपरेटर की प्राथमिकता अधिक होती है और यह 'जगह' में परिवर्तनशील होता है, इसलिए इसका इस्तेमाल लैवल्यू के रूप में किया जा सकता है। मुझे लगता है कि जेएस कार्यान्वयन ++इस तरह है कि इसे खिचड़ी भाषा के रूप में नहीं माना जा सकता है: / और हाँ, यह बेमानी है, लेकिन मैं सिर्फ एक और तरीका दिखाने की कोशिश कर रहा था - पहले से ही बेहतर समाधान पोस्ट किए गए हैं :)
एडम जुर्स्की

3
+1। V = (v + 1)% 2 के रूप में लिखा जा सकता है।
niktrs

7

यदि आप गारंटी देते हैं कि आपका इनपुट 1 या 0 है, तो आप उपयोग कर सकते हैं:

v = 2+~v;

7

एक सरणी {1,0} को परिभाषित करें, v से v [v] को सेट करें, इसलिए 0 के मान के साथ v 1 हो जाता है, और vica वर्सा।


मेरा समाधान सही है, अगर आपको यह पसंद नहीं है, तो क्यों लिखें। आपकी टिप्पणी से किसी को मदद नहीं मिलती। मेरा समाधान एक चर को पढ़ता है, जैसा कि निर्णय लेने के विपरीत है। इसके लिए CPU की आवश्यकता कम होती है।
एस ..

5

vकिसी भी मूल्य के बराबर होने के साथ, इसे करने का एक और रचनात्मक तरीका हमेशा वापस आएगा 0या1

v = !!v^1;

3
!!तार्किक गणित में कुछ भी नहीं होने पर दो परिणाम, आप !!!!वहां डाल सकते हैं और एक ही होंगे लेकिन परिणामस्वरूप 4 अनावश्यक संचालन
एलेक्स के

10
@ एलेक्स: !!एक बूल को डालेगा । !!(1) === trueऔर!!(0) === false
निक

1
@nickf: अहा, इसलिए मुझे लगता है v = Boolean(v^1)कि अधिक जानकारी होगी, समझाने के लिए धन्यवाद - कास्टिंग के बारे में नहीं सोचा
एलेक्स के

1
@ एलेक्स, "लॉजिकल मैथ्स"? यही कारण है कि गणितज्ञ गरीब प्रोग्रामर हैं। मुझे गलत मत समझो; गणित को समझने में अच्छे प्रोग्रामर भी अच्छे हैं। लेकिन इसका तार्किक गणित से कोई लेना-देना नहीं है। यह एक भाषा निर्माण है, जिसे किसी भी अभिव्यक्ति को देखते हुए, कम से कम जावास्क्रिप्ट में, !इसे बूलियन में डाल दिया जाएगा। दूसरे !को जोड़ने से उस बूलियन को नकार दिया जाएगा। कास्टिंग यहां निहित है, और अंतिम परिणाम काम करता है। -1 की कोई जरूरत नहीं है।
यानिक रोचॉन

1
मैं बिल्कुल भी गणितज्ञ नहीं हूं। आप यह कोशिश कर सकते हैं और अपने आप को देख सकते हैं jsperf.com/javascript-boolean-test
एलेक्स के

4

यदि v के लिए संभावित मान केवल 0 और 1 हैं, तो किसी भी पूर्णांक x के लिए, अभिव्यक्ति: v = Math.pow ((Math.pow (x, v) - x), v); मान को टॉगल करेगा।

मुझे पता है कि यह एक बदसूरत समाधान है और ओपी को इसकी तलाश नहीं थी ... लेकिन मैं सिर्फ एक और उपाय के बारे में सोच रहा था जब मैं शिथिल था: पी




1

यदि इस मामले में (0, 1) के रूप में सिर्फ दो मूल्य हैं, तो मेरा मानना ​​है कि यह इंट का उपयोग करने के लिए बेकार है। बल्कि बूलियन के लिए जाओ और बिट्स में काम करो। मुझे पता है कि मैं मान रहा हूं लेकिन दो राज्यों के बीच टॉगल के मामले में बूलियन आदर्श विकल्प लगता है।


1

खैर, जैसा कि हम जानते हैं कि जावास्क्रिप्ट में केवल बूलियन तुलना भी आपको अपेक्षित परिणाम देगी।

इसके v = v == 0लिए इतना ही काफी है।

नीचे उस के लिए कोड है:

var v = 0;
alert("if v  is 0 output: " + (v == 0));

setTimeout(function() {
  v = 1;
  alert("if v  is 1 Output: " + (v == 0));
}, 1000);

JSFiddle: https://jsfiddle.net/vikash2402/83zf2zz0/

उम्मीद है कि यह आपकी मदद करेगा :)


यह एक मूल्य toggling के लिए काम करता है, लेकिन मूल्य 0 और 1 के बीच टॉगल नहीं करता है, बल्कि इसके बीच trueऔर false। आप v == 0किसी स्थिति में चर के मूल्य को निर्धारित करने के लिए उपयोग कर सकते हैं, लेकिन यदि आप मूल्य 0 या 1 का उपयोग करना चाहते हैं तो आपको ऐसा कुछ प्राप्त करने v == 0 ? 0 : 1या Number(v)प्राप्त करने के लिए उपयोग करने की आवश्यकता होगी । (इसके अलावा, आप उपयोग कर सकते हैं v = !v;के बीच टॉगल करने trueऔर false।)
Guffa

हाँ मिल गया .. धन्यवाद :)
विकाश पांडे 11

0

v = संख्या (v!)

यह नंबर पर इन्वर्टेड बुलियन वैल्यू टाइप करेगा, जो वांछित आउटपुट है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.