ভি = (v == 0? 1: 0) লেখার আরও ভাল উপায় কি আছে; [বন্ধ]


465

আমি 0 এবং 1 এর মধ্যে একটি ভেরিয়েবল টগল করতে চাই, যদি এটি 0 হয় তবে আমি এটি 1 এ সেট করতে চাইছি, অন্যথায় যদি এটি 1 হয় তবে আমি 0 এ সেট করতে চাই।

এটি এমন একটি মৌলিক ক্রিয়াকলাপ যা আমি প্রায়শই লিখি আমি এটি করার সবচেয়ে সংক্ষিপ্ততম এবং পরিষ্কার পদ্ধতিতে তদন্ত করতে চাই। এখানে এখন পর্যন্ত আমার সেরা:

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

আপনি এই উন্নতি করতে পারেন?

সম্পাদনা: প্রশ্ন জিজ্ঞাসা করছে যে স্বচ্ছতা বজায় রাখার সময় উপরের বিবৃতিটি স্বল্প অক্ষরে কীভাবে লিখবেন - এটি কীভাবে 'আসল প্রশ্ন নয়'? এটি কোনও কোড-গল্ফ অনুশীলন হওয়ার উদ্দেশ্য ছিল না, যদিও এটির গল্ফ হিসাবে আগত লোকদের কাছ থেকে কিছু আকর্ষণীয় উত্তর বেরিয়েছে - গল্ফকে গঠনমূলক এবং চিন্তা-ভাবনামূলক উপায়ে ব্যবহার করা দেখে ভাল লাগছে।


20
এটি আমার কাছে ইতিমধ্যে সহজ / পরিষ্কার / সংক্ষিপ্ত দেখাচ্ছে।
মোব


48
যদি 'আরও ভাল' এর অর্থ 'দ্রুত' হয়: jsperf.com/v-0-1-0
pimvdb

7
@ মোবিঙ্গ: +1 1 এটি যেমন পাওয়া উচিত তত সহজ। আমি যে সমস্ত উত্তর দেখেছি তা বিভ্রান্তিকর, এবং তাদের মধ্যে কিছু যুক্তি পরিবর্তন করে; বাগ প্রবর্তন
ইয়ান বয়ড

8
@ হোলডোক আপনার মতামত প্রকাশের একটি আরও ভাল সমাধান হ'ল এমন একটি উত্তর তৈরি করা উচিত যা বলে যে আপনি আসলটিকে সর্বোত্তম উপায় বলে মনে করছেন এবং আপনি কেন বিষয়টি অনুভব করছেন সে সম্পর্কে বিস্তারিত। এটি অন্যকে সহজেই আপনার জবাবটি দিয়ে ভোট দিয়ে জবাব দিতে পারে।
চক ভ্যান ডের লিন্ডেন

উত্তর:


721

আপনি কেবল ব্যবহার করতে পারেন:

v = 1 - v;

এটি অবশ্যই ধরে নিয়েছে যে ভেরিয়েবলটি সঠিকভাবে আরম্ভ করা হয়েছে, অর্থাৎ এটির কেবলমাত্র 0 বা 1 মান রয়েছে has

আরও একটি পদ্ধতি যা সংক্ষিপ্ত হলেও কম সাধারণ অপারেটর ব্যবহার করে:

v ^= 1;

সম্পাদনা:

স্পষ্ট করা; অপারেটরগুলির পার্শ্ব প্রতিক্রিয়াগুলির মতো কোনও অস্পষ্ট কৌশল ব্যবহার না করেই কাজটি করার একটি ছোট উপায় সন্ধান করার জন্য আমি এই প্রশ্নটি কোড গল্ফ হিসাবে কখনও পৌঁছিনি।


206
এগুলি হ'ল কোডের সুন্দর লাইনগুলি যেমন সূক্ষ্ম কাটা কাচ বা বিরল ফুলের অর্কিড। আমি পছন্দ করি আপনি কীভাবে লজিক্যাল স্তরের মধ্য দিয়ে পৌঁছেছেন এবং সম্ভাব্য সর্বোত্তম অপারেশনগুলির সাথে সরাসরি 1 এবং 0 এর গণিতের সাথে ডিল করেছেন। আমি এগুলি আমার নিজস্ব প্রকল্পগুলিতে ব্যবহার করব, তবে দুর্ভাগ্যক্রমে যখন আমার সহকর্মীদের দ্বারা বোঝার কোড দরকার তখন আমাকে আরও যুক্তি ভিত্তিক পদ্ধতির ডিফল্ট করতে হবে। আপনাকে ধন্যবাদ যদিও, আপনার উত্তর আমার দিনকে পরিণত করেছে।
অলি গ্লাস

37
কোডটি কী করে তা আপনি সর্বদা একটি মন্তব্য যুক্ত করতে পারেন।
প্রস

25
@ কেভিন: এটি সত্য নয় যে এটি পরিষ্কারভাবে জিজ্ঞাসা করা প্রশ্নের উত্তর দেয় না। কিউ বলেছিল "আমি 0 এবং 1 এর মধ্যে একটি পরিবর্তনশীল টগল করতে চাই" একটি খুব যুক্তিসঙ্গত ব্যাখ্যার অর্থ এটি বোঝায় যে ভেরিয়েবলের মান ইতিমধ্যে 0 বা 1 হয় This এই ব্যাখ্যা / সীমাবদ্ধতা উত্তরে স্পষ্ট করে দেওয়া হয়েছিল। আপনি বিশ্বের আপত্তি করতে পারেন?
LarsH

50
@ ম্যাথু বলার জন্য যে কেউ v ^= 1স্পষ্ট দেখতে পাচ্ছেন না সে প্রোগ্রামিং বন্ধ করে দেওয়া উচিত বলে আমি মনে করি rsh পূর্বে যেমনটি বলা হয়েছে এটি আরও সাধারণ অপারেটরগুলির মধ্যে একটি নয় এবং এটি একই কাজ করে না 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
তার +আগে যাদুটা রেখে দাও !। ওহ, যে দেখতে খুব নোংরা! তবে শীতল: p
jAndy

1
@ কেন্টিন - এটির সাথে যদি তার switch(v){ case 0 ...বা তার (v == 0) বা ভি === ০ থাকে তবে এটি তার কোডটি ভেঙে দেবে ... আপনি তার পদ্ধতির পাশাপাশি তার ফলাফলও পরিবর্তন করছেন ....
ব্রায়ান

34
এটি একটি হাস্যজ্জল করুন: ({v :+! v}).v
pimvdb

17
@ ব্রায়ান: ম্যাজিক +চিহ্নের সাথে নয় ! ¯ \: _ (ツ): _ / ¯
jAndy

11
v = (v ? 0 : 1)স্পষ্ট এবং মূর্তিযুক্ত জেএস হিসাবে +1 J
বেনেট ম্যাকএলওয়ে

200

v = (v + 1) % 2এবং যদি আপনাকে আরও মানগুলির মধ্যে চক্রের প্রয়োজন হয় তবে এটির 2জন্য পরিবর্তন করুন (n + 1)। বলুন আপনাকে কেবল 0,1,2 চক্র করা দরকার v = (v + 1) % 3


2
আমি চক্রটি ভালবাসি! এটা সত্যিই স্মার্ট।
অলি গ্লাস

16
চক্র হিসাবে টগল সম্পর্কে চিন্তা করার জন্য +1। এটি কতটা নমনীয় তা বিবেচনা করে সহজ।
গুফা

3
একটি মডিউল সমাধান প্রদানের জন্য +1 যা মজবুত। অনুশীলনে আপনি সম্ভবত constম্যাজিক সংখ্যা 2, 3, ... এর জায়গায় একটি পরিবর্তনশীল ব্যবহার করতে চান ...
অস্টারওয়াল

2
সংক্ষিপ্ত (হ্যাকিয়ার) উপায়: ++v % 3আপনি যদি 0, 1, 2
হেরাল্ডমার্টিন

75

আপনি এটির জন্য একটি ফাংশন লিখতে এবং এটি ব্যবহার করতে পারেন:

v = inv(v)


30
+1 আমি দৃ strongly়ভাবে সম্মত হ'ল এটিই সবচেয়ে পরিষ্কার সমাধান (... তবে invফাংশনে কী হবে: পি)
লায়া হেইস

4
আমি আশা করি আমি এই উত্তরটি কেবল +1 এর চেয়ে বেশি দিতে পারতাম। সাধারণ কোড যদি অন্ধভাবে স্পষ্ট না হয় তবে তা বর্ণনামূলক নামের সাথে কোনও ফাংশনে মোড়ানো উচিত।
তেহশ্রাইক

11
@ তেহশ্রাইক আপনি কি invবর্ণনামূলক নাম হিসাবে বিবেচনা করছেন?
বেনেট ম্যাকএলওয়ে

3
@ বেনেট ম্যাকেলউই: ইনভ = বিপরীত। সর্বদা আমার কাছে একটি সাধারণ সংক্ষেপণের মতো মনে হয়েছিল।
ড্যানিয়েল

51
কেন তখন এটি সংক্ষিপ্ত করে, এটিকে 'ইনভার্ট' বা 'টগল' বলুন এবং কোডটি পঠনযোগ্য হবে। এটি এমন নয় যে আমরা একটি 80 কলামের পাঞ্চকার্ড বা কোনও কিছুর উপরে এই জিনিসগুলি ফিট করার চেষ্টা করছি।
চক ভ্যান ডের লিন্ডেন

50

যদি আপনি 1 ব্যতীত অন্য কোনও সম্ভাবনা সম্পর্কে চিন্তা করেন না:

v = v ? 0 : 1;

উপরের ক্ষেত্রে, ভি 0 হলে 1 টি হবে, ভুয়া, অপরিজ্ঞাত বা নাল। এই ধরণের পদ্ধতির সাহায্যে যত্ন নিন - ভি "হ্যালো ওয়ার্ল্ড" হলেও ভি 0 হবে।


2
এটি মান ফ্লিপ করবে না। আপনি বলতে চাচ্ছেন v = v ? 0 : 1
গুফা

3
@ গুফা - আমার ডিসলেক্সিয়া ধরার জন্য +1 ...
ব্রায়ান

3
এটি আমার প্রিয় যুক্তি ভিত্তিক উত্তর যা আমি সহকর্মীদের সাথে ব্যবহার করতে পারি (আমি @ গুফার উত্তরটি নম্বর-ভিত্তিক হিসাবে দেখছি)। আমি পছন্দ করি আপনি কীভাবে অপ্রয়োজনীয় পরীক্ষা করেছেন (v == 0) এবং বন্ধনীগুলি নিখুঁত ন্যূনতম অক্ষরের গণনায় রেখে stri ধন্যবাদ.
অলি গ্লাস

1
আমি @ গুফার জবাবের খুব বড় অনুরাগী - লিনার্ড স্কিনার্ডের ভাষায়, এটিকে সাধারণ মানুষ রাখুন;)
ব্রায়ান

2
"সত্যবাদী" মানগুলি বোঝার জন্য +1।
zzzzBov

44

লাইনস পছন্দ v = 1 - v, বা v ^= 1বা v= +!vসব কাজ শেষ হবে, কিন্তু তারা কি আমি হ্যাক হিসাবে পড়ুন হবে গঠন করে। এগুলি কোডের সুন্দর লাইন নয়, তবে উদ্দেশ্যটি কার্যকরভাবে কার্যকর করার জন্য সস্তা কৌশলগুলি। 1 - v"0 এবং 1 এর মধ্যে মান টগল করুন" যোগাযোগ করে না। এটি আপনার কোডকে কম সংবেদনশীল করে তোলে এবং এমন একটি জায়গা (একটি ছোট হলেও) পরিচয় করিয়ে দেয় যেখানে অন্য বিকাশকারীকে আপনার কোডটি বিশ্লেষণ করতে হবে।

পরিবর্তে মত একটি ফাংশন থাকার v = toggle(v)দ্রুত নজরে অভিপ্রায় যোগাযোগ করে।


8
-1, সিরিয়াসলি, v=1-vটগল যোগাযোগ করে না?
অন্ধ

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

( সততা এবং গাণিতিক অখণ্ডতা - এই "উত্তরের" ভোটের সংখ্যার পরিপ্রেক্ষিতে - আমাকে এই উত্তরটি সম্পাদনা করতে পরিচালিত করেছে I আমি যতদিন সম্ভব স্থির ছিলাম কারণ এটি একটি সংক্ষিপ্ত কুইপ হিসাবে তৈরি হয়েছিল এবং "গভীর" তেমন কিছু রাখেনি) কোনও ব্যাখ্যা উদ্দেশ্যটির সাথে পাল্টা মনে হয়েছিল However তবে, মন্তব্যগুলি স্পষ্ট করছে যে ভুল বোঝাবুঝি এড়াতে আমার পরিষ্কার হওয়া উচিত ))

আমার মূল উত্তর:

নির্দিষ্টকরণের এই অংশটির শব্দ:

যদি এটি 0 হয়, আমি এটি 1 এ সেট করতে চাইছি, অন্যথায় 0 তে সেট করুন।

ইঙ্গিত দেয় যে সবচেয়ে সঠিক সমাধানটি হ'ল:

v = dirac_delta(0,v)

প্রথমত, স্বীকারোক্তি: আমি না পেতে আমার ব-দ্বীপ ফাংশন বিভ্রান্ত। ক্রোনেকার ব-দ্বীপটি কিছুটা যথাযথ হতে পারে তবে আমি ডোমেন-ইন্ডিপেন্ডড কিছু চাইনি (ক্রোনেকার ডেল্টা মূলত কেবল পূর্ণসংখ্যার জন্য ব্যবহৃত হয়)। তবে আমার সত্যিই ডেল্টা ফাংশনগুলি ব্যবহার করা উচিত হয়নি, আমার বলা উচিত ছিল:

v = characteristic_function({0},v)

আমাকে স্পষ্ট করতে দিন। মনে রাখবেন যে একটি ফাংশন একটি ট্রিপল, (এক্স, ওয়াই, এফ) , যেখানে এক্স এবং ওয়াই সেট হয় ( যথাক্রমে ডোমেন এবং কোডোমেন বলা হয়) এবং f এমন একটি নিয়ম যা এক্স এর প্রতিটি উপাদানকে Y এর একটি উপাদান নির্ধারণ করে । আমরা প্রায়শই f: X → Y হিসাবে ট্রিপল (এক্স, ওয়াই, চ) লিখি । একটি উপসেট দেওয়া এক্স বলতে একটি , একটি হল চরিত্রগত ফাংশন যা একটি ফাংশন χ একটি এক্স → {0,1}:(এটি ℕ বা ℝ এর মতো বৃহত্তর কোডোমেনের একটি কার্য হিসাবেও ভাবা যেতে পারে)। এই ফাংশনটি বিধি দ্বারা সংজ্ঞায়িত করা হয়:

χ (এক্স) = 1 যদি এক্স ∈ এ এবং χ (এক্স) = ০ যদি এক্স ∉ এ

আপনি সত্য টেবিল মত, এটা প্রশ্নের জন্য সত্য টেবিল যদি "উপাদান এক্স এর এক্স উপসেট এর একটি উপাদান একটি ?"।

তাই এই সংজ্ঞা থেকে এটা পরিষ্কার চরিত্রগত ফাংশন কি এখানে প্রয়োজন, যে এক্স কিছু বড় ধারণকারী 0 এবং সেট একটি = {0} । এটাই আমার লেখা উচিত ছিল

এবং তাই ডেল্টা ফাংশন। এই জন্য, আমাদের একীকরণ সম্পর্কে জানতে হবে। হয় আপনি ইতিমধ্যে এটি জানেন, বা আপনি না। আপনি যদি তা না করেন তবে এখানে আমি যা বলতে পারি তা কিছুই আপনাকে তত্ত্বের জটিলতা সম্পর্কে বলবে না, তবে আমি একটি বাক্য সংক্ষিপ্তসার দিতে পারি। একটি সেট এক্সের একটি পরিমাপ মূলত "এটি যা গড় কাজ করতে প্রয়োজন"। অর্থাৎ যদি আমরা একটি সেট আছে যে এক্স এবং একটি পরিমাপ μ তারপর ফাংশন একটি বর্গ যে সেটে এক্স → ℝ বলা পরিমাপযোগ্য ফাংশন , যার জন্য অভিব্যক্তি এক্স চ dμ জ্ঞান করে তোলে এবং, কিছু অস্পষ্ট অর্থে, "গড়" এর উপর এক্স

একটি সেটে একটি পরিমাপ দেওয়া, যে কোনও সেটটির উপসেটগুলির জন্য "পরিমাপ" সংজ্ঞায়িত করতে পারে। এটি একটি উপসেটকে তার বৈশিষ্ট্যযুক্ত ফাংশনের অবিচ্ছেদ্য হিসাবে নির্ধারিত করে করা হয় (ধরে নেওয়া যে এটি একটি পরিমাপযোগ্য ফাংশন। এই করতে অসীম, বা অনির্ধারিত হতে (দুই চতুরভাবে ভিন্ন)।

চারদিকে প্রচুর ব্যবস্থা রয়েছে তবে এখানে দুটি গুরুত্বপূর্ণ রয়েছে। এক বাস্তব লাইনে স্ট্যান্ডার্ড পরিমাপ , ℝ। এই মেজার ফর, তারপর dμ চ প্রায় কাছাকাছি কি আপনি স্কুলে শেখানো পাবেন (ক্যালকুলাস এখনও বিদ্যালয়ে পড়ানো হয়?): সামান্য আয়তক্ষেত্র যোগফল এবং ছোট এবং ছোট প্রস্থ নিতে। এই পরিমাপে, একটি অন্তরালের পরিমাপ এর প্রস্থ। বিন্দুর পরিমাপ 0 হয়।

অন্য একটি গুরুত্বপূর্ণ পরিমাপ, যা কোনও সেটে কাজ করে , তাকে পয়েন্ট পরিমাপ বলে । এটি সংজ্ঞায়িত করা হয় যাতে কোনও ফাংশনের অবিচ্ছেদ্য তার মানগুলির যোগফল হয়:

এক্স চ dμ = Σ এক্স ∈X চ (x) এর

প্রতিটি Singleton এই পরিমাপ নির্ধারণ পরিমাপ 1. এই উপায়ে একটি উপসেট আছে সেট সসীম পরিমাপ যদি এবং কেবল যদি তা না হয় নিজেই সসীম। এবং খুব কম ফাংশন সীমাবদ্ধ অবিচ্ছেদ্য আছে। যদি কোনও ফাংশনের একটি সীমাবদ্ধ অবিচ্ছেদ্য থাকে, তবে এটি অবশ্যই একটি গণনাযোগ্য পয়েন্টের শূন্য নয় । সুতরাং আপনি সম্ভবত জানেন যে বিস্তৃত ফাংশনগুলির এই পরিমাপের অধীনে সীমাবদ্ধ অবিচ্ছেদ্য নেই।

এবং এখন ডেল্টা ফাংশন। আসুন একটি খুব বিস্তৃত সংজ্ঞা গ্রহণ করা যাক। আমাদের একটি পরিমাপযোগ্য স্থান রয়েছে (এক্স, μ) (সুতরাং এটির উপর একটি পরিমাপের একটি সেট) এবং একটি উপাদান একটি ∈ এক্স । আমরা ডেল্টা ফাংশনটি "সংজ্ঞায়িত করি" ( উপর নির্ভর করে ) "ফাংশন" δ : এক্স → ℝ সম্পত্তি সহ যে δ a (x) = 0 যদি x ≠ a এবং X δ a dμ = 1 হয়

এটিকে ধরে রাখতে সবচেয়ে গুরুত্বপূর্ণ তথ্যটি হ'ল ডেল্টা ফাংশনটি ফাংশন হওয়ার দরকার নেই । এটা তোলে হয় না সঠিকভাবে সংজ্ঞায়িত: আমি কি বলেছি δ একটি (ক) হয়।

আপনি এই মুহুর্তে যা করেন তা নির্ভর করে আপনি কে। এখানকার বিশ্ব দুটি বিভাগে বিভক্ত। আপনি যদি গণিতবিদ হন তবে আপনি নিম্নলিখিতটি বলবেন:

ঠিক আছে, তাই ডেল্টা ফাংশন সংজ্ঞায়িত করা হতে পারে না। আসুন এর অনুমানমূলক বৈশিষ্ট্যগুলি দেখুন এবং দেখুন যেখানে এটির সংজ্ঞা দেওয়া আছে সেখানে আমরা তার জন্য উপযুক্ত বাড়ি খুঁজে পেতে পারি কিনা । আমরা এটি করতে পারি, এবং আমরা বিতরণ শেষ করি । এগুলি হল না (অগত্যা) ফাংশন, কিন্তু আছে ফাংশন মত একটু, এবং প্রায়ই আমরা তাদের সাথে কাজ করতে পারেন, যেন তারা ফাংশন ছিল আচরণ; তবে কিছু জিনিস রয়েছে যা তাদের নেই (যেমন "মান") তাই আমাদের সাবধান হওয়া দরকার।

আপনি যদি গণিতবিদ না হন তবে আপনি নিম্নলিখিতটি বলবেন:

ঠিক আছে, তাই ডেল্টা ফাংশনটি সঠিকভাবে সংজ্ঞায়িত না হতে পারে। যারা বলছেন? একগুচ্ছ গণিতবিদ? তাদের উপেক্ষা! তারা কী জানে?

আমার শ্রোতাদের এখন বিরক্ত করার পরে, আমি চালিয়ে যাব।

ডিরাক ব-দ্বীপ সাধারণত তার মান পরিমাপ রিয়েল লাইন একটি বিন্দু (প্রায়ই 0) বদ্বীপ ফাংশন করা থেকে নেওয়া হয়। সুতরাং যারা আমার সম্পর্কে ডেল্টা না জেনে আমার সম্পর্কে মন্তব্যে অভিযোগ করছেন তারা এগুলি করছেন কারণ তারা এই সংজ্ঞাটি ব্যবহার করছেন। তাদের কাছে আমি ক্ষমাপ্রার্থনা করছি: যদিও আমি ম্যাথমেটিজিয়ানদের প্রতিরক্ষা ( হ্যাম্প্টি ডাম্প্টি দ্বারা জনপ্রিয় হিসাবে : সবকিছুকে নতুনভাবে সংজ্ঞায়িত করা যাতে এটি সঠিক হয়) ব্যবহার করে এটি থেকে বেরিয়ে আসতে পারি , তবে কিছু আলাদা বোঝার জন্য মানক পদটি ব্যবহার করা খারাপ ফর্ম।

কিন্তু হয় একটি ব-দ্বীপ ফাংশন যা কি আমি এটা করতে চাই এবং এটি যা আমি এখানে প্রয়োজন কি আছে। আমি যদি একটি সেট এক্স- তে একটি বিন্দু পরিমাপ করি তবে একটি আসল ফাংশন রয়েছে δ a : X → ℝ যা একটি ব-দ্বীপ ফাংশনের মানদণ্ডকে সন্তুষ্ট করে। এর কারণ আমরা খুঁজছি হয় একটি ফাংশন জন্য এক্স → ℝ যা ব্যতীত শূন্য হয় একটি এবং এই ধরনের যে তার মূল্যবোধের সব এর সমষ্টি 1. এই ধরনের একটি ফাংশন সহজ হল: তথ্য শুধুমাত্র অনুপস্থিত টুকরা তার মান একটি , এবং পেতে সমষ্টি 1 হতে আমরা শুধু এটা মান 1. ধার্য এই চরিত্রগত ফাংশন ছাড়া অন্য কেউ নেই {একটি} । তারপর:

X δ a dμ = ∑ x ∈ X δ a (x) = δ a (a) = 1।

সুতরাং এই ক্ষেত্রে, একটি একক সেট জন্য, বৈশিষ্ট্যযুক্ত ফাংশন এবং ডেল্টা ফাংশন সম্মত হয়।

উপসংহারে, এখানে "ফাংশন" এর তিনটি পরিবার রয়েছে:

  1. সিঙ্গলটন সেটগুলির বৈশিষ্ট্যযুক্ত ফাংশন,
  2. ডেল্টা ফাংশন,
  3. ক্রোনেকার ডেল্টা কাজ করে।

এর দ্বিতীয়টি সর্বাধিক সাধারণ হিসাবে অন্যদের যে কোনওটি পয়েন্ট পরিমাপটি ব্যবহার করার সময় এর উদাহরণ। তবে প্রথম এবং তৃতীয়টির সুবিধা রয়েছে যে তারা সর্বদা খাঁটি কাজ functions তৃতীয়টি আসলে ডোমের একটি নির্দিষ্ট পরিবারের জন্য (পূর্ণসংখ্যা বা এর কিছু উপসেট) প্রথমটির একটি বিশেষ কেস।

সুতরাং, পরিশেষে, যখন আমি মূলত উত্তর আমি লিখেছি হয়নি সঠিকভাবে চিন্তা (আমি এতদূর যেতে হবে না যেমন বলতে চাই যে আমি বিভ্রান্ত , যেমন আমি আশা করি আমি শুধু প্রদর্শিত করেছি আমি না জানি আমি যখন কথা বলছি আমি আসলে প্রথমে ভাবি, আমি খুব বেশি কিছু ভাবিনি)। ডায়রাক ডেল্টার সাধারণ অর্থটি এখানে যা চেয়েছিল তা নয়, তবে আমার উত্তরের একটি বিষয় হ'ল ইনপুট ডোমেনটি সংজ্ঞায়িত করা হয়নি তাই ক্রোনেকার ডেল্টাও সঠিক ছিল না। সুতরাং সেরা গাণিতিক উত্তর (যা আমি লক্ষ্য করেছিলাম) বৈশিষ্ট্যযুক্ত ফাংশন হত ।

আমি আশা করি যে এটি সমস্ত পরিষ্কার; এবং আমি আরও আশা করি যে টেক্স ম্যাক্রোগুলির পরিবর্তে এইচটিএমএল সত্তা ব্যবহার করে আমাকে আর কোনও গাণিতিক টুকরো লিখতে হবে না!


37
+1 - ডায়রা_ডেলটা ফাংশনটি না জানার জন্য যদি আমি কোয়ান্টিনকে হ্রাস করতে পারি। আমি জানতে চাই যে তিনি কোন কলেজে গিয়েছিলেন কারণ আমি মনে করি না যে আমি সেখান থেকে কাউকে নিয়োগ দেব যদি তারা এমনকি ডিজিটাল প্রসেসিংয়ের মৌলিক কিছু না জানে তবে আমি সেখান থেকে কাউকে নিয়োগ দেব। আপনি যে হাস্যরসের চেষ্টা করছেন তা বুঝতে না পেরে আমি কন্টিনকে আরও কমে যেতে চাই।
ডঙ্ক

23
আমি যদি প্রতিটি উত্তরকে আমি বুঝতে না পারি তবে ... আমি অনেক উত্তরকে নীচে নামিয়ে দেব।
Seamus

4
হ্যালো অ্যান্ড্রু, কিছুক্ষণ হয়ে গেল
টিম ডাউন

4
@ টিম: ভালো দুঃখ, তাই এটি! আর বারমুডার বিশপ কেমন? (আমি কি এটি ঠিক মনে রেখেছি?) আমার ধারণা এই মন্তব্য থ্রেডটি ধরার সবচেয়ে ভাল জায়গা নয়, যদিও ... 17 বছর, তাই না?
অ্যান্ড্রু স্ট্যাসি

3
@ সিԃ ա ԃ "এই উত্তরটি ব্যর্থ হয়েছে ..." দীর্ঘশ্বাস ফেলল । আপনি পড়েছেন যে আমি গণিতবিদ, তাই না? এই উত্তরটি একটি ভ্যাকুয়ামে গোলাকার প্রোগ্রামারটির জন্য পুরোপুরি কাজ করে যাতে আপনি কী অভিযোগ করছেন তা আমি জানি না।
অ্যান্ড্রু স্ট্যাসি

35

আপনি করতে পারেন

v = Math.abs(--v);

হ্রাসটি 0 বা -1 এ মান সেট করে এবং তারপরে Math.abs-1 -1 এ রূপান্তর করে।


27
এটি 'সাধারণ টাস্কটি করার 10000 উপায়' প্রতিযোগিতায় পরিণত হয়েছে। এবং আমি haha ​​সব উপায় পছন্দ করি।
জোশ

27
v = Math.round(Math.sin(Math.PI/(v+3)));
বেনোইট

15
@ বিনয়েট - আপনার সূত্রটি v = 0 এবং v = 1 উভয়েরই সমান। এই এক যদিও সঠিক! v = Math.round(Math.cos(Math.PI/((v*2+1)+2)-2*v));: ডি
টিও.স্ক

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দূষিত হয়ে যায় তবে হঠাৎ এটি দুটি পৃথক মানের মধ্যে টগল করা শুরু করবে। (কেবল কিছু বিবেচনা করার জন্য ...)
ওস্টারওয়াল

1
আকর্ষণীয় ধারণা জন্য +1। না যে ওপি বা অন্য কেউ প্রকৃতপক্ষে এই পরিস্থিতিতে এটি ব্যবহার করবে, তবে এই তথ্যটির টুকরোটি চিরকালের জন্য মস্তিষ্কে কোথাও থাকা উচিত।
শিমি ওয়েইজহ্যান্ডলার

3
@ ওস্টারওয়াল: তাহলে অবশ্যই সমস্যাটি দুর্নীতির সাথে ...
GManNGG

@ জিমনিকজি: যত তাড়াতাড়ি বা পরে ডেটা দুর্নীতি ঘটবে তাই এটি সনাক্ত না করার পরিণাম সম্পর্কে আমাদের সচেতন হওয়া দরকার। তাহলে vস্বাভাবিকভাবে অথবা, বা তিনটি রাজ্যের একটি তালিকা থেকে দুই রাজ্যের চালানো ব্যবহার করা হয় তাহলে দুর্নীতিমুক্ত vএই অপ্রত্যাশিত এবং অবাঞ্ছিত ফলাফল হতে পারে - প্রোগ্রাম পর্যায়ক্রমে দুটি সম্পূর্ণ ভিন্ন রাজ্যের চালানো সৃষ্টি করতে পারে। এ থেকে দূরে নেওয়ার পাঠটি হ'ল: সর্বদা আপনার ডেটাতে করণীয় পরীক্ষা করে নিন।
ওস্টারওয়াল

33

যদি এটি অবশ্যই পূর্ণসংখ্যা 1 বা 0 হয় তবে আপনি যেভাবে এটি করছেন তা ঠিক আছে, যদিও বন্ধনীগুলির প্রয়োজন নেই। এগুলি যদি বুলিয়ান হিসাবে ব্যবহার করা হয় তবে আপনি কেবল এটি করতে পারেন:

v = !v;

10
অলির "ভি" এর ফলাফলটি কি কোনও বুলিয়ান ফলাফলের সাথে সেট করা হবে না, কোনও পূর্ণসংখ্যার নয়?
ব্রায়ান

12
হ্যাঁ এটি করবে, এবং আমি সতর্ক করেছিলাম যে কোডের লাইনের উপরে বাক্যটিতে। যদি এগুলি বুলিয়ান হিসাবে ব্যবহার করা হয়
মাইকেল বারকোভস্কি

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

যথেষ্ট!


7
উত্তরের চেয়ে মতামত বেশি, আপনি কি ভাবেন না?
ব্রায়ান

16
@ ব্রায়ান: 'ভাল' আসলে মতামত সম্পর্কে সবই।
pimvdb

3
আমি পছন্দ করি আপনি বন্ধনীগুলি কীভাবে বের করেছিলেন - এটি কয়েক অক্ষর ছাঁটাই করে!
অলি গ্লাস

9
@ ব্রায়ান: " উত্তর " হ'ল "না, লেখার আরও ভাল উপায় নেই v = (v==0 ? 1 : 0);" । অন্য প্রত্যেকে গল্ফ খেলার বিভিন্ন উপায় খুঁজে পাচ্ছে; এবং আসলে প্রশ্নের উত্তর দিচ্ছে না। এজন্য আমি এই উত্তরটি আপ-আপ করেছি।
আয়ান বাল্ড

19

সমাধানের তালিকা

আমি প্রস্তাব করতে চাই যে তিনটি সমাধান আছে। তাদের সব কোনো মান রূপান্তর 0(যদি 1, trueইত্যাদি) বা 1(যদি 0, false, nullইত্যাদি):

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

এবং একটি অতিরিক্ত, ইতিমধ্যে উল্লিখিত, তবে চতুর এবং দ্রুত (যদিও এটি কেবলমাত্র 0গুলি এবং 1গুলিগুলির জন্য কাজ করে ):

  • v = 1-v

সমাধান ঘ

আপনি নিম্নলিখিত সমাধানটি ব্যবহার করতে পারেন:

v = 1*!v

এই প্রথম বিপরীত বুলিয়ান (থেকে পূর্ণসংখ্যা রূপান্তর করবে 0করার Trueএবং অন্য কোন মান False), যখন দ্বারা গুন তারপর পূর্ণসংখ্যা যেমন বিবেচনা করবে 1। ফলে 0রূপান্তরিত হবে 1এবং অন্য কোনও মান রূপান্তরিত হবে 0

একটি প্রমাণ হিসাবে এই jsfiddle দেখুন এবং আপনি পরীক্ষা করতে চান যে কোনও মান প্রদান: jsfiddle.net/rH3g5/

ফলাফলগুলো নিম্নে প্রদর্শিত হল:

  • -123পূর্ণসংখ্যায় রূপান্তরিত হবে 0,
  • -10পূর্ণসংখ্যায় রূপান্তরিত হবে 0,
  • -1পূর্ণসংখ্যায় রূপান্তরিত হবে 0,
  • 0পূর্ণসংখ্যায় রূপান্তরিত হবে 1,
  • 1পূর্ণসংখ্যায় রূপান্তরিত হবে 0,
  • 2পূর্ণসংখ্যায় রূপান্তরিত হবে 0,
  • 60পূর্ণসংখ্যায় রূপান্তরিত হবে 0,

সমাধান 2

যেমনটি এমবি্লেজ noted৫ উল্লেখ করেছে, জ্যান্ডির আরও কিছু সমাধান রয়েছে যা আমার হিসাবে কাজ করে:

v = +!v

এটি প্রথমে মূল মান থেকে বুলিয়ান তৈরি করে তবে এটি পূর্ণসংখ্যায় রূপান্তরিত করার +পরিবর্তে ব্যবহার করে 1*। ফলাফলটি হুবহু একই, তবে স্বরলিপিটি ছোট।

সমাধান 3

অপর পদ্ধতির ~~অপারেটর ব্যবহার হয় :

v = ~~!v

এটি বেশ অস্বাভাবিক এবং সর্বদা বুলিয়ান থেকে পূর্ণসংখ্যায় রূপান্তর করে।


জাভাস্ক্রিপ্টে, আপনি কোনও পরিবর্তনকে +এটি একটি সংখ্যায় রূপান্তর করতে উপসর্গ করতে পারেন , তবে +!vএটি আপনার সমাধানের সমান (ওপি'র মন্তব্যে জেন্ডির সমাধান)।
ব্লেজমোনজার 21

@ এমবিলেস 75৫: হ্যাঁ, আপনি ঠিক বলেছেন যে বুলিয়ানকে পূর্ণসংখ্যায় রূপান্তর করার চেষ্টা করার সময় 1*এটি প্রতিস্থাপন করা যেতে পারে +। আমার উত্তরের সমস্ত কিছু একই থাকে। jAndy এর উত্তর সঠিক, তবে আমার আরও বিস্তারিত। আমি আমার উত্তরের সাথে তার সমাধান যুক্ত করব।
টাডেক

সুন্দর ধারণাটির জন্য @ টেডেক +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 এর মতো একটি ইনপুট সংশোধন করার কোনও মূল্য আছে কি? আমি বোঝাতে চাইছি যদি আপনার কোডটি মান সংশোধন করার আগে অন্য কোনও বিট কোডটি যদি কেবল 0 বা 1 এর প্রত্যাশায় ছিল তখন 7-তে এটি পেয়েছিল?
চক ভ্যান ডের লিন্ডেন

12

আপনার আসল সমাধানের আর একটি রূপ:

v = Number(v == 0);

সম্পাদনা: আমার আসল সমাধানের ত্রুটিটি নির্দেশ করার জন্য তেহশ্রাইক এবং গুফাকে ধন্যবাদ।


4
== অপারেটর অনেক সিস্টেমে বুলিয়ান (পূর্ণসংখ্যার পরিবর্তে) প্রদান করে। এটি কেবলমাত্র তখনই কাজ করবে যদি ভিটিকে সংখ্যার হিসাবে সংজ্ঞায়িত করা হয় এবং ভাষাটি বুলিয়ান থেকে পূর্ণসংখ্যায় স্বয়ংক্রিয় কাস্টিংয়ের সাথে দুর্দান্ত ছিল।
তেহশ্রিকে

খুবই সত্য. আমি জাভাস্ক্রিপ্টের প্রসঙ্গে প্রশ্নটির উত্তর দিচ্ছিলাম (প্রশ্নটি কীভাবে ট্যাগ করা হয়েছিল)।
কুর্ট কায়লর

@ কুর্ট কায়লর: জাভাস্ক্রিপ্ট এমন একটি সিস্টেম যেখানে == অপারেটর একটি বুলিয়ান দেয়, তাই এটি মূল সমাধানের মতো করে না।
গুফা 16

@ গুফা: আমি জাভাস্ক্রিপ্টটি অন্তর্নিহিত ধরণের রূপান্তর (যেমন'০.০০০০ '== 0, 0 == "", মিথ্যা == "", মিথ্যা == 0, 1 == সহ একটি দুর্বলভাবে টাইপিত ভাষা হ'ল আমি সুবিধা নিচ্ছি am সত্য, ইত্যাদি) আমি বুলিয়ান মানটি একইভাবে ব্যবহার করতে পারি যেমন আমি 0 বা 1 মানের পূর্ণসংখ্যা ব্যবহার করতে পারি, উদাহরণস্বরূপ, জাভাস্ক্রিপ্ট কনসোলে "2 + সত্য" মূল্যায়নের জন্য চেষ্টা করুন, আপনি 3 পাবেন
কার্ট কায়লর

1
@ কুর্ট কায়লর: এটি কেবলমাত্র সেই পরিস্থিতিতেই কাজ করে যেখানে আপনি অন্তর্নিহিত রূপান্তরকে বাধ্য করেন। উদাহরণস্বরূপ চেষ্টা করুন 'opacity:'+trueএবং আপনি এর opacity:trueপরিবর্তে শেষ করেন opacity:1
গুফা 18

11

আমি এটিকে আরও স্পষ্ট করে বলব।

কি করে v মানে?

উদাহরণস্বরূপ যখন ভি কিছু রাজ্য হয়। একটি অবজেক্টের স্থিতি তৈরি করুন। ডিডিডিতে একটি মান বস্তু।

এই মান অবজেক্টে যুক্তি প্রয়োগ করুন। তারপরে আপনি আপনার কোডটি আরও কার্যকরী উপায়ে লিখতে পারেন যা বেশি পঠনযোগ্য। বর্তমান স্থিতির উপর ভিত্তি করে নতুন স্থিতি তৈরি করে স্থিতি পরিবর্তন করা যায়। আপনার যদি বিবৃতি / যুক্তিটি আপনার বস্তুর মধ্যে আবদ্ধ হয়, যা আপনি ইউনিট করতে পারেন। একটি মান ওবজেক্ট সর্বদা পরিবর্তনযোগ্য, তাই এটির কোনও পরিচয় নেই। সুতরাং এর মান পরিবর্তনের জন্য আপনাকে একটি নতুন তৈরি করতে হবে।

উদাহরণ:

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
আমাকে
হাসানোর


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 )

পুনশ্চ. হ্যাঁ, আমি জানি এটি দ্বিগুণ কার্যনির্বাহী, তবে এটি কেবলমাত্র সি এর পদ্ধতির কাঁচা পুনর্লিখন (যা হিসাবে কাজ করে না, জেএস প্রি-ইনক্রিমেন্ট অপারেটরটি মূল্য ফেরত দেয় না)।


3
আপনার সি সংস্করণটি অবৈধ; আপনি কোনও ++অপারেটরের ফলাফল পরিবর্তন করতে পারবেন না (এটি কোনও মূল্য নয়) val হিসাবে v=++v%2, আপনি vদুবার সংশোধন করছেন । এটি জাভাস্ক্রিপ্টে ভালভাবে সংজ্ঞায়িত হয়েছে কিনা তা আমি জানি না, তবে এটি প্রয়োজনীয় নয়। v = (v+1) % 2
কিথ থমসন

c++এটি অন্ততপক্ষে - কারণ প্রাক-বর্ধিতকরণ অপারেটরের উচ্চতর অগ্রাধিকার রয়েছে এবং 'স্থানে' পরিবর্তনশীলটি সংশোধন করে, তাই এটি লভালিউ হিসাবে ব্যবহার করা যেতে পারে। আমি মনে করি যে ++জেএসের বাস্তবায়ন এমন যে এটিকে লভাল্য হিসাবে বিবেচনা করা যায় না: / এবং ইয়েস, এটি অপ্রয়োজনীয়, তবে আমি আরও একটি পদ্ধতি দেখানোর চেষ্টা করছিলাম - ইতিমধ্যে আরও ভাল সমাধান পোস্ট করা হয়েছে :)
অ্যাডাম জুরজাইক

3
+1 টি। V = (v + 1)% 2 হিসাবে লেখা যেতে পারে।
নিকটরস

7

যদি আপনার গ্যারান্টিযুক্ত হয় তবে আপনার ইনপুটটি 1 বা 1 0 হয় তবে আপনি ব্যবহার করতে পারেন:

v = 2+~v;

7

একটি অ্যারের {1,0} নির্ধারণ করুন, v থেকে v [v] সেট করুন, সুতরাং 0 এর মান সহ v 1 হয়ে যায় এবং তদ্বিপরীত।


আমার সমাধানটি সঠিক, আপনি যদি এটি পছন্দ না করেন তবে কেন লিখুন। আপনার মন্তব্য কাউকে সাহায্য করে না। আমার সমাধানটি সিদ্ধান্ত গ্রহণের বিপরীতে ভেরিয়েবল পড়ে reads এর জন্য কম সিপিইউ দরকার।
এস ..

5

এটি করার আর একটি সৃজনশীল উপায়, vযে কোনও মানের সমান হয়ে সর্বদা ফিরে আসবে 0বা1

v = !!v^1;

3
দুটি !!ফলাফল যৌক্তিক গণিতে কিছুই না !!!!ঘটায় আপনি সেখানে রাখতে পারেন এবং একইরূপে 4 টি অপ্রয়োজনীয় অপারেশনগুলির ফলস্বরূপ
অ্যালেক্স কে

10
@ অ্যালেক্স: !!একটি বুল করা হবে !!(1) === trueএবং!!(0) === false
নিকফ

1
@ নিকফ: আহা, তাই আমি অনুমান করি v = Boolean(v^1)যে আরও তথ্য হতে পারে, ব্যাখ্যা করার জন্য ধন্যবাদ - কাস্টিংয়ের কথা ভাবেননি
অ্যালেক্স কে

1
@ অ্যালেক্স, "যৌক্তিক গণিত"? এই কারণেই গণিতবিদরা দুর্বল প্রোগ্রামার। আমাকে ভুল করবেন না; ভাল প্রোগ্রামারগণ গণিত বোঝার ক্ষেত্রেও ভাল। তবে যৌক্তিক গণিতের সাথে এর কোনও যোগসূত্র নেই। এটি এমন একটি ভাষা নির্মাণ যা কমপক্ষে জাভাস্ক্রিপ্টে কোনও অভিব্যক্তি দেওয়া হলেও !এটিকে বুলিয়ান হিসাবে ফেলে দেবে। আরেকটি যোগ করা !সেই বুলিয়ানকে অস্বীকার করবে। Ingালাই এখানে অন্তর্ভুক্ত, এবং শেষ ফলাফল কাজ করে। -১ এর দরকার নেই।
ইয়ানিক রচন

1
আমি মোটেই গণিতজ্ঞ নই। আপনি এটি চেষ্টা করে দেখতে পারেন এবং jsperf.com/javascript-boolean-test
অ্যালেক্স কে

4

যদি v এর সম্ভাব্য মানগুলি কেবল 0 এবং 1 হয় তবে যে কোনও পূর্ণসংখ্যার x এর জন্য এই এক্সপ্রেশন: v = ম্যাথ.পো ((ম্যাথ.পো (এক্স, ভি) - এক্স), ভি); মানটি টগল করবে।

আমি জানি এটি একটি কুৎসিত সমাধান এবং ওপি এটি সন্ধান করছে না ... তবে আমি যখন লুতে ছিলাম তখন অন্য একটি সমাধান সম্পর্কে ভাবছিলাম: পি



3
v=!v;

v = 0 এবং v = 1 এর জন্য কাজ করবে; এবং রাষ্ট্রটি টগল করুন;


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

জেএসফিডাল: https://jsfiddle.net/vikash2402/83zf2zz0/

এটি আশা করা আপনাকে সহায়তা করবে :)


এটি একটি মান টগল করার জন্য কাজ করে তবে মান 0 এবং 1 এর মধ্যে টগল করে না, বরং trueএবং এর মধ্যে হয় false। আপনি v == 0একটি শর্তে ভেরিয়েবলের মান নির্ধারণ করতে ব্যবহার করতে পারেন , তবে আপনি যদি 0 বা 1 মানটি ব্যবহার করতে চান তবে আপনার মতো কিছু ব্যবহার করতে হবে v == 0 ? 0 : 1বা Number(v)তা পাওয়ার জন্য। (এছাড়াও, আপনি এবং এর v = !v;মধ্যে টগল করতে ব্যবহার করতে পারেন )truefalse
গুফা

হ্যাঁ এটি পেয়েছে .. আপনাকে ধন্যবাদ :)
বিকাশ পান্ডে

0

v = সংখ্যা (! v)

এটি টাইপ করবে উল্টানো বুলিয়ান মানটি সংখ্যায়, যা পছন্দসই আউটপুট।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.