দ্রুত, সস্তা এবং ভাল - যে কোনও দুটি বেছে নিন


43

প্রোগ্রামার হিসাবে, আমরা সকলেই এই কথাটি জানি: "আপনি এটি দ্রুত এবং ভাল রাখতে পারেন তবে এটি সস্তা হবে না, আপনি এটি সস্তা এবং ভাল রাখতে পারেন, তবে এটি দ্রুত হবে না, বা আপনি এটি দ্রুত এবং সস্তায় নিতে পারেন তবে এটি ভাল হবে না। "

এই চ্যালেঞ্জের জন্য, আপনি আপনার কাস্টম প্রোগ্রামিং পরিষেবাদির জন্য একটি কল্পিত কনফিগারেশন সরঞ্জাম প্রয়োগ করছেন। "দুটি নির্বাচন করুন" শিরোনাম সহ আপনার তিনটি চেক বাক্সের একটি সেট রেন্ডার করা উচিত:

SELECT ANY TWO  
☐ FAST  
☐ CHEAP  
☐ GOOD

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

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

বিজয়ীরা খুব দূরে

আমি এটি বিভাগে ভেঙে দেব। কিছু স্পষ্ট বিজয়ী রয়েছে:

jQuery: nderscore, মিস্টার টেনাটি 100 বি এর অধীনে যখন আপনি পাঠ্য "সংস্থানগুলি" বাদ দেন। সম্মানজনক উল্লেখটি ম্যাটকেও যেতে হবে jQuery ধারণাগুলি প্রবর্তনের জন্য যা অনেকে অনুপ্রেরণা নিয়েছিলেন।

ডায়ালগ এপিএল: মেরিনাস, ওরফে মিঃ ইউনিকোড আপনি এই সমস্ত জিনিস কীভাবে টাইপ করেন? আপনি কেন ছোট প্রোগ্রাম লিখতে চান তা আমি দেখতে পাচ্ছি।

পিএইচপি: সুপারস্ক্রিপ্ট আমি বিশ্বাস করি যে এটি সবচেয়ে সংক্ষিপ্ত এন্ট্রি যা নিয়মের কঠোর ব্যাখ্যা অনুসরণ করে তৃতীয় বিকল্পটি অনির্বাচিত করার চেয়ে বাস্তবে অক্ষম করে।


আমি কি কেবল এটি তৈরি করতে পারি যাতে একবারে কেবল দু'জনকে বেছে নেওয়া যায়? সুতরাং যে তৃতীয় নির্বাচন অন্য একটি নির্বাচন? অথবা সম্ভবত একটি গ্রহণ বোতাম যুক্ত করুন যা 3 টি বিকল্প নির্বাচন করা থাকলে ধূসর হয়ে যায়?
জাস্টিন

7
@ কুইনকুনস - যেহেতু কোনও হিউরিস্টিক (মন-পঠনের বাইরে) সিদ্ধান্ত নিতে পারে যে কোনটি নির্বাচন না করা উচিত, এটি ব্যবহারকারীকে বিভ্রান্ত করবে ... সুতরাং আমাকে না বলতে হবে, কারণ আমরা প্রথম ধারণাটি চাই না আমাদের কাস্টম সফ্টওয়্যার পরিষেবাগুলি একটি খারাপ হতে হবে। ;)
ব্রুস পাইয়ারসন

এই প্রশ্নটি পাইথন 3 এর টিঙ্কটারে আমাকে আগ্রহী, তাই আমি এখন এটি শেখার চেষ্টা করছি। আইএমও, জিইউআই শেখার সর্বোত্তম উপায় হ'ল পরীক্ষা এবং ত্রুটি। আমি এটি চেষ্টা করেছি: ideone.com/YHLZIQ । ফলাফল: দ্রুত নতুন জিইউআই খোলার। এগুলি বন্ধ করার জন্য আমাকে টাস্ক ম্যানেজার খুলতে হয়েছিল। :-)। চিত্র (শীঘ্রই সংখ্যাটি 340 এ পৌঁছেছে : i.stack.imgur.com/c9wQi.png )
জাস্টিন

উদ্দেশ্যমূলক প্রাথমিক বিজয়ী মানদণ্ড বা "বোনাস" এর কোনও বিবরণ না থাকায় বোনাস প্রতিযোগিতাটি আরেকটি প্রশ্ন হওয়া উচিত। এটি বলেছে যে কোডটি "... মার্জিত এবং নমনীয় ..." এবং "... সংক্ষিপ্ত এবং পরিষ্কার ..." হওয়া উচিত যা কোড-গল্ফের বিরুদ্ধে । আপনি কী জিজ্ঞাসা করছেন তা অস্পষ্ট হিসাবে ভিটিসি। প্রশ্নগুলি জিজ্ঞাসা করার দীর্ঘ সময় পরে তাদের মূল পরিবর্তন করবেন না।
ব্যবহারকারী 80551

1
@ ব্রুসপিয়ারসন আসলে, আছে। আমরা সবচেয়ে পুরানো বাছাই করা চেকবক্সটি অনির্বাচিত করতে পারি। তবে এর জন্য কোডটি আপনার প্রয়োজনীয় কোডের চেয়ে অনেক বেশি হবে।
জাস্টিন

উত্তর:


23

জাভাস্ক্রিপ্ট ( ইএস 5 ) jQuery সহ - 143 ( ডেমো )

আমি ম্যাট এর সমাধানটি সংশোধন করেছি এবং যতদূর মনে করি এটি যেতে পারে তা গল্ফ করেছিলাম:

$("*").html(["SELECT ANY TWO","FAST","GOOD","CHEAP"].join("<input type=checkbox onclick=(a=$('input:not(:checked)')).prop('disabled',!a[1])>"))

জাভাস্ক্রিপ্ট ( ES5 ) jQuery ছাড়াই - 185 175 ( ডেমো )

JQuery ব্যবহার করা এক ধরণের প্রতারণা, সুতরাং এটি ছাড়াই এখানে একটি সমাধান দেওয়া হয়েছে:

(d=document).write(["SELECT ANY TWO","FAST","GOOD","CHEAP"].join("<input type=checkbox onclick='for(b in a=d.querySelectorAll(\"input:not(:checked)\"))a[b].disabled=!a[1]'>"))

আমাদের যদি ক্ষেত্রটি অক্ষম করার পরিবর্তে 3 য় বাক্সটি পরীক্ষা করতে বাধা দেওয়ার অনুমতি দেওয়া হয় তবে আমরা এটিকে আরও ছোট করে তুলতে পারি:

JQuery সহ - 126 123 ( ডেমো )

$("*").html(["SELECT ANY TWO","FAST","GOOD","CHEAP"].join("<input type=checkbox onclick=this.checked*=!$(':checked')[2]>"))

JQuery ছাড়াই - 150 147 ( ডেমো )

(d=document).write(["SELECT ANY TWO","FAST","GOOD","CHEAP"].join("<input type=checkbox onclick=this.checked*=!d.querySelectorAll(':checked')[2]>"))

কুল। ব্যবহার .joinএকটি ভাল কৌশল!
রবি ডাব্লিজিজ

1
"SELECT ANY TWO0FAST0GOOD0CHEAP".replace(/0/g,একই দৈর্ঘ্যের ফলে এটি করার অন্য উপায়।
nderscore

শুধু পিক হওয়ার কারণে,
জ্যাকোরি

@ আইনাচিও আপনার ইচ্ছা আমার আদেশ!
nderscore

5
@ আইনাসিও কিন্তু কোডগলফ সবচেয়ে খারাপ অভ্যাস সম্পর্কে! : পি
nderscore

29

জাভাস্ক্রিপ্ট - 184 169 (jQuery সহ)

b="input",a="<input type=checkbox>",c=":checked";$("body").html("SELECT ANY TWO"+a+"FAST"+a+"GOOD"+a+"CHEAP").click(function(){$(b).not(c).attr("disabled",!!$(b+c)[1])})

http://jsfiddle.net/L33JK/16/

সম্পাদনা: @ ড্যানিয়েল লিসিকের সহায়তায় উন্নত - https://codegolf.stackexchange.com/a/26805/16278


5
নিস! উর্ধ্বে দেওয়ার পক্ষে যথেষ্ট প্রতিনিধি নেই ... তবে আপনি নিয়োগ পেয়েছেন!
ব্রুস পাইয়ারসন

2
আমি এটিকে যত তাকাব, ততই শিখছি। একটি jQuery নির্বাচক ভিতরে ভেরিয়েবল নিয়োগের চতুরতা। খুব ঠান্ডা. এছাড়াও, আপনি "ডাবল ব্যাং" (!!) কী করছে তা ব্যাখ্যা করতে পারেন?
ব্রুস পাইয়ারসন

1
একক ঠুং শব্দ, একটি বুলিয়ান মান coerces, এবং ডাবল স্পষ্টত যে এটি বিপরীত হবে। undefinedcoerces সত্য। এটি এবং ভেরিয়েবল অ্যাসাইনমেন্ট সম্ভবত সত্যিই ব্যবহৃত একমাত্র ছোট কৌশল।
ম্যাট

আপনার কোডটি এর মতো 179 টি অক্ষরে হ্রাস করা যেতে পারে: a="<input type='checkbox'>",b="input",c=":checked",$("body").html("SELECT ANY TWO"+a+"FAST"+a+"GOOD"+a+"CHEAP").change(function(){$(b+":not("+c+")").attr("disabled",!!$(b+c)[1])}) jsfiddle.net/L33JK/15
প্রদর্শন-নাম-নিখোঁজ রয়েছে


12

ডায়ালগ এপিএল (উইন্ডোজে) (169)

এটি একটি স্ট্যাটিক ফাংশন, এটি পরীক্ষা করার জন্য আপনি যদি এপিএল না জানেন )ed Cতবে এটি সম্পাদনা উইন্ডোতে টাইপ করুন এবং আটকান, তারপরে চালান C

C
'R'⎕WC'Form' 'Select any two',2/⊂S←2/20
1 21 41{('R.',⊃⍵)⎕WC'Button'⍵(⍺1)S'Check'('Event' 'Select' 'F')}¨'Fast' 'Cheap' 'Good'
B←R.(F C G)
F←{B.Active←X∨2≠+/X←B.State}

নতুন এপিএলের বিটগুলির দীর্ঘ কীওয়ার্ড রয়েছে। আমি এখনও এইচটিএমএল বীট।

ব্যাখ্যা:

  • 'R'⎕WC'Form' 'Select any two',2/⊂S←2/20: Rশিরোনাম সহ একটি ফর্ম তৈরি করুন যে কোনও দুটি এবং আকার এবং অবস্থান নির্বাচন করুন20 20 । এছাড়াও সঞ্চয় করে 20 20S
  • 1 21 41{... }¨'Fast' 'Cheap' 'Good': এই জোড়া ডেটার প্রত্যেকটির জন্য (নাম এবং y- স্থানাঙ্ক, যা কেবলমাত্র ভেরিয়েবল যা চেকবক্সগুলির মধ্যে পৃথক:
    • ('R.',⊃⍵)⎕WC'Button': Rনামের প্রথম অক্ষরের সাথে একটি বোতাম তৈরি করুন ,
    • ⍵(⍺1)S'Check': শিরোনাম হিসাবে সঠিক যুক্তি দিয়ে, (left arg, 1)অবস্থান Sহিসাবে, আকার Checkহিসাবে এবং শৈলী হিসাবে পুনরায় ব্যবহার ,
    • ('Event' 'Select' 'F')যা Fক্লিক করার পরে ফাংশনটি কল করে ।
  • B←R.(F C G): Bআমরা তৈরি তিনটি চেকবক্সের সংক্ষিপ্তসার হিসাবে ব্যবহার করুন
  • F←{... }: কলব্যাক ফাংশনটিকে এটি হিসাবে সংজ্ঞায়িত করুন:
    • X←B.State: প্রতিটি চেকবক্সের জন্য রাজ্য পান এবং এগুলিতে সংরক্ষণ করুন X,
    • X∨2≠+/Xযোগফল এক্স
    • B.Active←: চেকবাক্সগুলি সক্ষম বা অক্ষম করুন

ফলাফল:

স্ক্রিনশট


দুর্দান্ত ব্যাখ্যা, ধন্যবাদ!
ব্রুস পাইর্সন

11

পাইথন 3 2, 454 434 ... 393 392 বাইট

আমি ভেবেছিলাম, পাইথন অবশ্যই জাভার চেয়ে কম হতে হবে। এখানে "প্রুফ" ( সম্পাদনা: এখন এটি সত্যই ছোট ):

from Tkinter import*
t=Tk()
r=str.replace
exec r(r(r(r('a@b@c@l=Label(t,text="SELECT ANY TWO");A`FAST|a);B`CHEAP|b);C`GOOD|c);l^A^B^C^','`','=Checkbutton(t,text="'),'|','",v='),'^','.pack();'),'@','=IntVar();')
def f(p,b,B,s):
 for i in 0,1,2:
    y=b[i].get()
    if p[i]-y:
     p[i]=y;s-=1
     if p[i]:s>0and B[i].toggle();s+=2
 t.after(1,f,p,b,B,s)
t.after(1,f,[0]*3,[a,b,c],[A,B,C],0)
t.mainloop()

আপনার মধ্যে কৌতূহল রয়েছে যে execঅভিব্যক্তিটি আসলে কী সম্পাদন করে, এটি এটি সম্পাদন করে (স্ট্রিংয়ের পরিবর্তে এটি প্রতিস্থাপন করে read পঠনযোগ্যতার জন্য নিউলাইনগুলি যুক্ত হয়েছে):

a=IntVar();
b=IntVar();
c=IntVar();
l=Label(t,text="SELECT ANY TWO");
A=Checkbutton(t,text="FAST",v=a);
B=Checkbutton(t,text="CHEAP",v=b);
C=Checkbutton(t,text="GOOD",v=c);
l.pack();
A.pack();
B.pack();
C.pack();

এটি আমার জাভা উত্তরের মতো একই যুক্তি ব্যবহার করে: যদি 2 টিরও বেশি চেকবক্স নির্বাচন করা হয় তবে চেকবক্সটি নির্বাচন করুন। Unf সৌভাগ্যবশত দুর্ভাগ্যবশত, আমি কাটিয়েছি আরো কম বেশি বাইট এই কাজ।

এখানে চিত্র বর্ণনা লিখুন

সম্পাদনাগুলি:

  1. ব্যবহারের জন্য কোডের বিশাল সমন্বয়, একটি বৃহত exec1 বাইট সংরক্ষণ করা!
  2. exec(প্রথম বন্ধনী অপসারণ) থেকে দুটি বাইট নিঃসৃত করতে পাইথন 2 এ স্যুইচ করা হয়েছে ।
  3. আরও গল্ফিং ট্যাবগুলির একটি স্তর রাখতে ইন্ডেন্টেশনটি পরিবর্তন range(3)করা 0,1,2এবং পরিবর্তন করা অন্তর্ভুক্ত । ( স্থানের অক্ষর) \t\tএর পরিবর্তে কাজ করবে কিনা তা নিশ্চিত করুন ure অবশেষে আমার জাভা উত্তরটি সবচেয়ে দীর্ঘতম পৌঁছে গেল।\t___
  4. ব্যবহৃত কৌতুক প্রতিস্থাপন
  5. বাকিরুর পরামর্শ ব্যবহার করে এবং আরও কিছু গল্ফ করে। আসলে এটি জাভা থেকে খাটো করা হয়েছে! তবে এখন, জাভা উত্তরটি আরও গল্ফ পেয়েছে, তাই এটি আবার দীর্ঘ। :-(
  6. কৌশল উন্নত ট্রিক ব্যবহার ।
  7. একটি !=জন্য একটি পরিবর্তন -

আকর্ষণীয় পদ্ধতির। +1
সিজেফুরে

আমি আমার কীবোর্ডে টার্বো মোড দিয়ে প্রতারণা করতে পারি। প্রথমে আমি দুটি বাক্স চেক করি। দ্বিতীয়ত, আমি তৃতীয়টি হাইলাইট করতে ট্যাব ব্যবহার করি। এখন আমি স্পেস বারটি কয়েক সেকেন্ডের জন্য টার্বো মোডে রাখি। কখনও কখনও, এই তৃতীয় বাক্স চেক!
কার্নে

@ কার্নিগ আমি বিশ্বাস করি যেহেতু আমার কোডটি এমন জায়গায় পৌঁছেছে যেখানে এটি জানে যে বাক্সটি টগল করা হয়েছে, তবে কোডটি সেই পর্যায়ে পৌঁছেছে না যেখানে এটি বাক্সটি টগল করে। সুতরাং আপনি যদি সেই সময়ে বাক্স টগল করেন (অফ), আমার কোড এটিতে একটি চেকমার্ক রাখবে।
জাস্টিন

1
আপনি ইন্ডেন্টযুক্ত ব্লক দিয়ে শুরু এড়াতে পারেন if p[i]একটি ব্যবহার andএকটি পরিবর্তে if: if p[i]:s>1 and B[i].toggle();s+=1
বাকুরিউ

@ Kernigh আমি ভুল ছিলাম; B[i].toggle()সঙ্গে প্রতিস্থাপন B[i].deselect()কিছুই পরিবর্তন করে না। কেন এমন হয়েছে তা আমার কোনও ধারণা নেই। সম্ভবত এটির সাথে একটি ত্রুটিtkinter
জাস্টিন

10

রেবোল, 219 197

load-gui p: func[p][p/state/value]x: func[v][if all[p a p b p c][set-face v false]] view [title"SELECT ANY TWO"a: check"FAST"on-action[x a]b: check"CHEAP"on-action[x b]c: check"GOOD"on-action[x c]]

Ungolfed:

load-gui    ;; this is temporary while r3-gui is in beta

p: func [p] [p/state/value]

x: func [v] [
    if all [p a p b p c] [set-face v false]
]

view [
    title "SELECT ANY TWO"
    a: check "FAST" on-action [x a]
    b: check "CHEAP" on-action [x b]
    c: check "GOOD" on-action [x c]
]

এটি রিবোল 3 ভিউ উপভাষা (r3-gui)। উবুন্টু লিনাক্স থেকে নীচে স্ক্রিনডাম্প:

বিদ্রোহ 3 দেখুন উদাহরণ

আপডেট - কোডের 22 টি অক্ষর শেভ করার জন্য রেবল এসও চ্যাটরুম থেকে আর্ল এবং গ্রাহামকে ধন্যবাদ - http://chat.stackoverflow.com/transcript/message/16345039#16345039


এটি অবৈধ উত্তর, তৃতীয়টি অক্ষম থাকলেও এটি যাচাই করা হয়েছে, এর অর্থ তিনটি চেক করা আছে, তাই দয়া করে এটি ঠিক করুন।
এসটি 3

2
@ এসটি 3 - আপনি ভুল বলেছেন আমি ভয় করি। "ভাল" চেকবাক্সটি চেক করা হয়নি বা বাস্তবে অক্ষম করা হয়েছে (আমার কোডটি কেবলমাত্র চেক করা তৃতীয় বাক্সটি বন্ধ করা আছে)। এভাবেই রিবোল 3 ভিউ একটি চেক না হওয়া বাক্সটি দেখায় (ডিফল্টরূপে)।
ড্র্যাগটুন

1
@ ST3 এট - এখানে লিঙ্ক প্রদর্শন ডিফল্ট চেকবক্সটি বর্ণন আমি (1 ম ইমেজ শো কোন চেকবক্সে ক্লিক করেন, 2nd শুধু "ভালো") উপরে বর্ণিত করেছি - plus.google.com/u/0/104216037702741908932/posts/Z2EbuQX67aq
draegtun

ভাল ... আমি প্রিন্ট-স্ক্রিনটি দেখেছি যা আপনি যুক্ত করেছেন এবং আমি তিনটি চেকবক্স চেক করে দেখছি, কেবলমাত্র একজনকেই চেক করা যায় না।
এসটি 3

3
@ এসটি 3 - একটি গ্রেড আউট চেকবক্সটি কেবল রিবোল 3 এটি দেখানোর উপায় দেখুন যে এটি একটি চেকবক্স যা চেক করা যায়। টিকটি চেক করা হলে সবুজ হয়ে যায় এবং চেক না করা অবস্থায় ধূসর হয়ে ফিরে আসে। এগুলিই খেলাপি। উপরের উত্তরের চিত্রটিতে আপনি দেখতে পাচ্ছেন যে "ভাল" ইনপুট ফোকাস হিসাবে (নীল অস্পষ্ট) কারণ এটি "ক্লিক করা" হয়েছে তবে এটি ধূসর এবং সবুজ নয় (তাই যাচাই করা হয়নি)।
ড্র্যাগটুন

10

জাভা, 421 ... 369 351 বাইট

import java.awt.*;class F extends Checkbox{F(String s){super(s);}public static void main(String[]a){new Frame(){{add(new Panel(){{add(new Label("SELECT ANY TWO"));F[]c={new F("FAST"),new F("CHEAP"),new F("GOOD")};for(F b:c){add(b);b.addItemListener(e->{int x=0;for(F d:c)x+=d.getState()?1:0;if(x>2)((F)e.getSource()).setState(1<0);});}}});}}.show();}}

জাভা ... কারণ জাভা। সুন্দর দেখাচ্ছে কোড:

import java.awt.*;

class F extends Checkbox {
    F(String s) {
        super(s);
    }

    public static void main(String[] a) {
        new Frame() {
            {
                add(new Panel() {
                    {
                        add(new Label("SELECT ANY TWO"));
                        F[] c = {new F("FAST"), new F("CHEAP"), new F("GOOD")};
                        for (F b: c) {
                            add(b);
                            b.addItemListener(e -> {
                                int x = 0;
                                for (F d: c) {
                                    x += d.getState() ? 1 : 0;
                                }
                                if (x > 2) ((F) e.getSource()).setState(1 < 0);
                            });
                        }
                    }
                });
            }
        }.show();
    }
}

নমুনা রান (উইন্ডোর বিভিন্ন সিজনিং, প্রথমে শুরু হয়):

এখানে চিত্র বর্ণনা লিখুন
এখানে চিত্র বর্ণনা লিখুন
এখানে চিত্র বর্ণনা লিখুন

চেকবক্সগুলি অনুভূমিকভাবে সাজানো হয়; এটি অনুমোদিত । এটি সঠিকভাবে সারিবদ্ধ হতে আরও অনেক বেশি সময় লাগবে। এছাড়াও, ক্লিক করা থাকা বাক্সটি ক্লিক করা অবস্থায় আমি তা আনচেক করে অক্ষম করছি , এটি ক্লিক করা অসম্ভব করে তোলে না।

সম্পাদনাগুলি:

  1. প্রধান শ্রেণীর প্রসারিত করে 3 বাইট সংরক্ষণ করা হয়েছে Checkbox
  2. ল্যাম্বদা এক্সপ্রেশনগুলি পুনরায় পড়ুন এবং বুঝতে পারলেন যে প্রকারের নামটি অপ্রয়োজনীয়। পাইথন ধর!
  3. একটি whileলুপ একটি অগ্রণী লুপ রূপান্তর (ধন্যবাদ লি ); কেন আগে আমি তা ভেবে দেখিনি?
  4. একটি বেনাম শ্রেণি এবং উভয় Frameএবং উভয়ের জন্য একটি ইনসেন্টালাইজার ব্যবহার করে 18 বাইট সংরক্ষণ করেছে Panel

প্রান্তিককরণের উপর কোনও বাধা নেই (সুতরাং আমি মনে করি ম্যাট তার 5 টি অক্ষর হ্রাস করতে পারে)। সম্পূর্ণ চলমান প্রোগ্রামের জন্য প্রপস ... তবে আমি দেখতে পাচ্ছি না যে তৃতীয় বিকল্পটি অক্ষম।
ব্রুস পাইয়ারসন

@ ব্রুসপিয়ারসন এটি অক্ষম। এটি ক্লিক করা যাবে না। এটি ক্লিক করা থাকলে কিছুই হয় না।
জাস্টিন

2
আহ, আমি মনে করি। আপনি অবিলম্বে অক্ষম না করে চেক করা রাষ্ট্রটি অবিলম্বে "আনসেট" করছেন? এটা গ্রহণযোগ্য হবে।
ব্রুস পাইয়ারসন

@ ব্রুসপিয়ারসন ঠিক আছে আসলে অক্ষম করতে, আমাকে পরিবর্তন if(x>2)((Checkbox)e.getSource()).setState(1<0);করতে হবেif(x>2){Checkbox b=(Checkbox)e.getSource();b.setState(1<0);b.setEnabled(1<0);}
জাস্টিন

1
@ ব্রুসপিয়ারসন যখনই আপনি ভাবেন, মজার লাগে যখন কিছু গ্রাফিকাল জিনিসের চরিত্র উপস্থাপনা ব্যবহার করতে হয়, ইউনিকোডের সন্ধান করুন। বিকল্পভাবে, গ্রাফিকাল ডিজাইনের জিনিসগুলির জন্য, ব্যবহারকারীর অভিজ্ঞতা এসই : i.stack.imgur.com/xFkzy.png
জাস্টিন

7

সি ++ 11 / কিউটি 5.2 - 561 481 433 423 369

কারণ কেন নয়।

আশ্চর্যের বিষয়, বর্তমানে আমরা পাইথনের চেয়ে কম, এবং নন-বগি সি #, এবং জাভা দিয়ে বাঁধা!

এভাবার্ডের এটিকে 561 থেকে 481 এ নামিয়ে দেওয়ার জন্য ক্রেডিট।

এবং আরও একবার ইভবার্ড এটি 481 থেকে 433 পর্যন্ত সংক্ষিপ্ত করে!

ল্যাম্বডা কানেক্ট দিয়ে কয়েকটা যাত্রা শুরু করে

সি ++ 11 ইনিশিয়ালাইজার সহ 389 এর নিচে

এবং 373 পৃথক ক্লাস ছাড়াই

কয়েকটি স্পেস সরানো হয়েছে - 369

Golf'd:

#include<QtWidgets>
#define C(x,y,z)z.setEnabled(x.isChecked()+y.isChecked()<2);
#define S(x)l.addWidget(&x);
#define X(x)S(x);x.connect(&x,&QCheckBox::clicked,[&](){C(g,f,c)C(g,c,f)C(f,c,g)});
int main(int n,char**v){QApplication a(n,v);QWidget m;QLabel t{"Select any two"};QCheckBox g{"Good"},f{"Fast"},c{"Cheap"};QVBoxLayout l(&m);S(t)X(g)X(f)X(c)m.show();a.exec();}

আন-গল্ফযুক্ত বাছাই করুন:

#include<QtWidgets>

#define C(x,y,z)z.setEnabled(x.isChecked()+y.isChecked()<2);
#define S(x)l.addWidget(&x);
#define X(x)S(x);connect(&x, &QCheckBox::clicked, [&](){C(g,f,c)C(g,c,f)C(f,c,g)});

int main(int n,char**v){ 
    QApplication a(n,v);
    QWidget m;
    QLabel t{"Select any two"};
    QCheckBox g{"Good"},f{"Fast"},c{"Cheap"};
    QVBoxLayout l(&m);
    S(t)X(g)X(f)X(c)m.show();
    a.exec();
}

GFC


1
স্ব-ফ্ল্যাজলেটিং "কেন নয়" এর জন্য +1 :)
ব্রুস পাইয়ারসন

আরও কিছুটা উন্নতি করতে পারে: QWidget mসাথে QDialog mএবং m.show();a.exec()সাথে প্রতিস্থাপন করুন m.exec()
টবি স্পিড

6

কফিস্ক্রিপ্ট - 167, 154

@ ম্যাট এর উত্তরের কফিস্ক্রিপ্ট পোর্ট ।

b="input";a="<input type=checkbox>";c=":checked";$("body").html("SELECT ANY TWO#{a}FAST#{a}GOOD#{a}CHEAP").click ->$(b).not(c).attr "disabled",!!$(b+c)[1]

কিছুটা নাড়িত:

b = "input"
a = "<input type=checkbox>"
c = ":checked"

$( "body" ).html( "SELECT ANY TWO#{a}FAST#{a}GOOD#{a}CHEAP" ).click ->
    $( b ).not( c ).attr "disabled", !!$( b + c )[1]

জেএসফিডাল


5

পিএইচপি, জাভাস্ক্রিপ্ট, jQuery - 135 বি

আমি @ এনডস্কোরের উত্তরটির প্রশংসা করছি, তবে তারপরে আমি তাকে অনুলিপি করার ও সিদ্ধান্ত নেওয়ার সিদ্ধান্ত নিয়েছি।

<?echo"SELECT ANY TWO".($m="<input type=checkbox onclick=(a=$('input:not(:checked)')).prop('disabled',!a[1])>")."FAST$m GOOD$m CHEAP"?>

মূলত আমি তার .joinকৌশলটি কিছু পিএইচপি হাইপারটেক্সট প্রিপ্রসেসিংয়ের সাথে প্রতিস্থাপন করেছি ।


আপনি যখন বিবেচনা করেন যে প্রোগ্রামটিতে "সংস্থানগুলি" পাঠ্যের জন্য 27 বাইট প্রয়োজন, এটি একটি 100 বি প্রোগ্রামের খুব কাছে চলেছে। সাবাশ!
ব্রুস পাইয়ারসন

1
আমি পিএইচপি গল্ফার খুব বেশি নই, তবে আমি আপনার জন্য কয়েকটা বাইট কেটে দিয়েছি: (128)SELECT ANY TWO<?=($m="<input type=checkbox onclick=(a=$('input:not(:checked)')).prop('disabled',!a[1])>").FAST.$m.GOOD.$m.CHEAP;
nderscore

5

রুবি, 219 218 বাইট

আমি কুইঞ্চাঙ্কসের পাইথন 3 উত্তর হিসাবে একই টাকার উইজেট ব্যবহার করি ।

এই প্রোগ্রামটি বিধিগুলি ভঙ্গ করে কারণ এতে একটি চেক বাক্সের তালিকা রয়েছে । (বিধিগুলি বলেছিল, "একটি চেক বাক্সের তালিকা ব্যবহার করবেন না।") হ্যাঁ, a3 টাক চেকবটন বস্তুর একটি অ্যারে, এবং আমি বিশ্বাস করি যে অ্যারেটি একটি তালিকা। আমার প্রতিরক্ষা হ'ল আমি কোনও বিদ্যমান চেক বাক্সের তালিকা ব্যবহার করিনি, তবে আমি মানক চেক বাক্স ব্যবহার করেছি এবং নিজের তালিকা তৈরি করেছি।

require'tk'
o=->(c){c.variable.value>?0}
TkLabel.new{text'SELECT ANY TWO'
pack}
a=%w[FAST CHEAP GOOD].map{|t|TkCheckButton.new{text t
command{a.map{|c|c.state a.count(&o)<2||o[c]?:normal: :disabled}}
pack}}
Tk.mainloop

চিপ এবং ভাল চেক করা হয়েছে, তবে দ্রুত অক্ষম হয়েছে

আমি রুবি 2.1.0 এবং 8.5.15 টাকার সাথে পরীক্ষা করেছি।

  • o[c]চেক বোতামটি cনির্বাচন করা হয়েছে কিনা তা পরীক্ষা করার জন্য প্রিডিটিক। ডিফল্ট স্ট্রিংগুলির সাথে c.variable.valueহয় '0'বা '1'তাই, স্ট্রিং তুলনাটি কেবলমাত্র যদি সত্য হয় '1'>'0'। সম্পাদনা: আমি 1 বাইট (219 ডাউন 218) এ পরিবর্তন '0'করে সংরক্ষণ করেছি ?0। রুবিতে ?0একটি চরিত্র ধ্রুবক।
  • a.count(&o) নির্বাচিত চেক বোতামগুলি গণনা করতে প্রিকিকেট ব্যবহার করে।
  • ব্যবহারকারী একটি চেক বাটন টগল, তখন কমান্ড কল a.mapতাদের উপার্জন সব বোতাম জন্য লুপ করতে, :normalবা :disabled

1
খুব ভালো. এখানে কোনও নিয়ম ভঙ্গ হচ্ছে না - আমি এমন একটি চেক বাক্সের তালিকা নিয়ন্ত্রণের কথা উল্লেখ করছিলাম যা ভাষার কাঠামোর অংশ হতে পারে। আমি বিশ্বাস করি এখনও পর্যন্ত সমস্ত উত্তর কোনও না কোনও মানচিত্র বা নির্বাচক ব্যবহার করে, সুতরাং এটি সম্পূর্ণ বৈধ।
ব্রুস পাইয়ারসন

5

গল্ফিং সাহায্যের জন্য রোটেম এবং জনবটকে ধন্যবাদ!

সি # 343 334

এইটি কুইঞ্চুনসের জাভা উত্তরের মতো একই "প্রতারণা" ব্যবহার করে - চেকবক্সগুলি আসলে অক্ষম নয়; যদি চেকটি 3 করে তবে তারা আপনাকে তাদের পরীক্ষা করতে অনুমতি দেয় না।

using System.Windows.Forms;using System.Linq;class P:Form{static void Main(){P p=new P();p.Text="SELECT ANY TWO";int y=0;var a=new CheckBox[3];foreach(var n in "FAST CHEAP GOOD".Split()){var c=new CheckBox();a[y]=c;c.Top=y++*50;c.Text=n;c.Validating+=(s,e)=>{if(a.Count(b=>b.Checked)>1)e.Cancel=true;};p.Controls.Add(c);}Application.Run(p);}}

একটি ছোট্ট বাগ রয়েছে যা আপনি তৃতীয় চেকবক্সটি নির্বাচন করার পরে উইন্ডোটি বন্ধ করতে পারবেন না যদি না আপনি একটিটি নির্বাচন না করেন, কারণ বৈধতাটি পাস হবে না won't তবে এটি , সুতরাং কে যত্ন করে? ;)

সি # 403 397 374

এটি একটি যথাযথ যা আসলে তৃতীয় চেকবক্সটি অক্ষম করে।

using System.Windows.Forms;using System.Linq;class P:CheckBox{static void Main(){var p=new Form{Text="SELECT ANY TWO"};P[]a=null;a="FAST CHEAP GOOD".Split().Select((x,i)=>{var c=new P{Top=i*50,Text=x};c.Click+=(s,e)=>{a.First(b=>!b.Checked).Enabled=a.Count(b=>b.Checked)>1?1<0:a.All(b=>b.Enabled=0<1);};p.Controls.Add(c);return c;}).ToArray();Application.Run(p);}}

স্ক্রিনশট

কিন্ডা অবরুদ্ধ:

using System.Windows.Forms;
using System.Linq;

class P:Form
{
    static void Main()
    {
        P p = new P();
        p.Text = "SELECT ANY TWO";
        int y = 0;
        var a = new CheckBox[3];
        foreach (var n in "FAST CHEAP GOOD".Split())
        {
            var c = new CheckBox(); a[y] = c; c.Top = y++ * 50; c.Text = n; c.Click += (s, e) =>
            {
                if (a.Count(b => b.Checked) == 2)
                {
                    a.First(b => !b.Checked).Enabled = false;
                }
                else
                {
                    foreach (var b in a) b.Enabled = true;
                }
            };
            p.Controls.Add(c);
        }
        Application.Run(p);
    }
}

1
if(a.Count(b=>b.Checked)==2)e.Cancel=true;নতুন করে লেখা যাবে না e.Cancel=a.Count(b=>b.Checked)==2;?
রোটেম

@ রোটেম হ্যাঁ, হ্যাঁ এটা হতে পারে। আমি বকা. এবং অন্যটির জন্য একই রকম অপটিমাইজেশন রয়েছে। ধন্যবাদ!
বব

অপেক্ষা করুন, না, অন্যটির জন্য নেই। হ্যাঁ, এখনও কিছু অক্ষর সংরক্ষণ করেছেন।
বব

1
যদি আপনি উত্তরাধিকারটি চেকবক্সে স্যুইচ করেন, অবজেক্টের আরম্ভকারী ব্যবহার করুন এবং লিনককে কিছুটা আপত্তি জানাতে পারেন তবে using System.Windows.Forms;using System.Linq;class P:CheckBox{static void Main(){var p=new Form{Text="SELECT ANY TWO"};P[]a=null;a="FAST CHEAP GOOD".Split().Select((x,i)=>{var c=new P{Top=i*50,Text=x};c.Click+=(s,e)=>{if(a.Count(b=>b.Checked)>1){a.First(b=>!b.Checked).Enabled=1<0;}else a.All(b=>b.Enabled=0<1);};p.Controls.Add(c);return c;}).ToArray();Application.Run(p);}}
যথাযথটি

1
364 যদি আপনি যদি বিবৃতিটির জায়গায় শর্তসাপেক্ষ অপারেটর ব্যবহার করেন। প্রতিস্থাপন if(a.Count(b=>b.Checked)>1){a.First(b=>!b.Ch‌​ecked).Enabled=1<0;}else a.All(b=>b.Enabled=0<1);সঙ্গেa.First(b=>!b.Checked).Enabled=a.Count(b=>b.Checked)>1?1<0:a.All(b=>b.Enabled=0<1);
Johnbot

5

AngularJS - 214

<input type=checkbox ng-model=fast ng-disabled=cheap&&good>FAST</input>
<input type=checkbox ng-model=cheap ng-disabled=fast&&good>CHEAP</input>
<input type=checkbox ng-model=good ng-disabled=fast&&cheap>GOOD</input>

আমি জেএসফিডেলে এটি চেষ্টা করেছিলাম, তবে কোনও সাফল্য ছাড়াই । আপনি একটি কাজের উদাহরণ প্রদান করতে পারেন?
চটজলদি ossifrage


আপনি "এনজি-অ্যাপ" উল্লেখ করেন নি। <উদাহরণ> আমার উদাহরণে দেখুন>
ব্যবহারকারী 12345

1
আহ, ঠিক আছে :-) আপনি উদ্ধৃতি চিহ্ন এবং অতিরিক্ত লাইন ব্রেকগুলি সরিয়ে এটি কিছুটা গল্ফ করতে পারেন ।
চটজলদি ossifrage

4

জাভাস্ক্রিপ্ট (jQuery সহ) - 224 , 222 , 210 , 205 , 178

a="<input type=checkbox>",c=":checked",e="input",f="disabled",d=$("body").html("SELECT ANY TWO"+a+" FAST"+a+"CHEAP"+a+"GOOD").click(function(){$(e).not(c).attr(f,$(e+c).length>1)})

উজ্জ্বল @ ম্যাট এর একটি মন্তব্যে ধন্যবাদ আমি কোডটি 27 টি অক্ষর দ্বারা হ্রাস করেছি।

JSFiddle


আপনার $(e+c).length>1শর্তটিকে অ্যাসাইনমেন্টে সরিয়ে 25 বা তার বেশি সংরক্ষণ করুন : $(e).not(c).attr(f,$(e+c).length>1)যেহেতু আপনি কেবল বুলিয়ান নিজেই পরিবর্তন করছেন।
ম্যাট

1
আপনার এবং আমার মিশ্রণটি ব্যবহার করে এটি 169 এ নামতে পরিচালিত। !!জোর খাটানো বা ঘ শরীর বরাদ্দ না সাথে একটু অতিরিক্ত golfing। a="<input type=checkbox>",c=":checked",e="input";$("body").html("SELECT ANY TWO"+a+"FAST"+a+"CHEAP"+a+"GOOD").click(function(){$(e).not(c).attr("disabled",!!$(e+c)[1])})
ম্যাট

4

ম্যাথামেটিকাল

ডেভিডের পরামর্শ অনুসারে আরও একটি কোড-গল্ফযুক্ত সংস্করণ, 255 টি অক্ষর :

h = Checkbox;
i = Dynamic;
j = Enabled;
t = True;
i[
 If[Total@Boole@{a, b, c} == 2,
  {d, e, f} = {a, b, c},
  {d, e, f} = {t, t, t}
  ];
 Row@{
   "SELECT ANY TWO",
   h[i@a, j -> d], "FAST",
   h[i@b, j -> e], "CHEAP",
   h[i@c, j -> f], "GOOD"
   }
 ]

আপনি কিছু অক্ষর ব্যবহার করে সংরক্ষণ করতে পারেন h=Checkbox;i=Dynamic;j=Enabled
ডেভিডসি

@ ডেভিডকারারহর ধন্যবাদ, আমি ভবিষ্যতে অন্যান্য কোড গল্ফিং প্রশ্নের জন্যও সেই কৌশলটি নিজেকে ব্যবহার করতে দেখতে পাচ্ছি।

1
উভয় সংস্করণ অন্তর্ভুক্ত করার প্রয়োজন নেই। এবং ব্যবহার করতে hএবং শিরোনামে আপনার চর গণনা সামঞ্জস্য করতে ভুলবেন না ।
ডেভিডসি

4

এমআইআরসি স্ক্রিপ্ট ( 727 719 বাইট)

গতরাত রাতে মাতাল কথোপকথন হওয়া পর্যন্ত এই ভাষাটি ভুলে গেছেন।

alias select_two {
  dialog -m s2 s2
}

dialog s2 {
  title "Select any two:"
  size -1 -1 200 100
  check "Fast",1, 5 10 170 25
  check "Cheap",2, 5 30 170 25
  check "Good",3, 5 50 170 25 
}

on *:dialog:s2:sclick:*: {
  if ($did(s2, $did).state = 1) {
    if ($did = 1) {
      if ($did(s2, 2).state = 1) { did -b s2 3 }
      if ($did(s2, 3).state = 1) { did -b s2 2 }
    }
    if ($did = 2) {
      if ($did(s2, 1).state = 1) { did -b s2 3 }
      if ($did(s2, 3).state = 1) { did -b s2 1 }
    }
    if ($did = 3) {
      if ($did(s2, 1).state = 1) { did -b s2 2 }
      if ($did(s2, 2).state = 1) { did -b s2 1 }
    }
  }
  if ($did(s2, $did).state = 0) {
    did -e s2 1
    did -e s2 2
    did -e s2 3
  }
}

আরও এই ভাষায় কোড করা উচিত! তবে এটিকে সত্যিকারের জগাখিচায় পরিণত করার একটি উপায় থাকা দরকার যাতে এটি পার্লের মতো দুর্দান্ত হতে পারে।

সম্পাদনা: লক্ষ্য করেছিলাম যে আমার পাইথন-আইএসএমগুলি ফুটে উঠছে এবং 8 টি বাইট দ্বারা কোড হ্রাস করতে সক্ষম হয়েছিল!


হাহাহা, আমি এইটির পরিচয় পছন্দ করি। যদিও এটি একধরনের ভার্বোজ - এটি বিয়ার স্পিকার হতে পারে? = সি)
ব্রুস পিয়ারসন

3

সি #, 335 333 326 320 308

ববস উত্তর বন্ধ ভিত্তিতে, আমার তার (335 বনাম 342) এর চেয়ে কম অক্ষর ব্যবহার করে, তবে কীভাবে এটি গণনা করতে হবে তা আমি পুরোপুরি বুঝতে পারি না।

using System.Linq;using System.Windows.Forms;class P:Form{static void Main(){new P();}P(){Text="SELECT ANY TWO";var a="FAST CHEAP GOOD".Split().Select(r=>new CheckBox{Text=r,Top=r[0]%9*20}).ToList();a.All(r=>{r.Validating+=(b,c)=>c.Cancel=a.Count(z=>z.Checked)>1;Controls.Add(r);return 1>0;});ShowDialog();}}

Ungolfed

using System.Linq;
using System.Windows.Forms;

class P : Form
{
    static void Main()
    {
        new P();
    }

    P()
    {
        Text = "SELECT ANY TWO";

        var a = "FAST CHEAP GOOD".Split().Select(r => new CheckBox
        {
            Text = r,
            Top = r[0] % 9 * 20
        }).ToList();

        //loops, I dont need no stinking loops
        a.All(r => { r.Validating += (b, c) => c.Cancel = a.Count(z => z.Checked) > 1; Controls.Add(r); return 1 > 0; });
        ShowDialog();
    }
}

অনন ফাংশন এবং লিনকের দুর্দান্ত ব্যবহার, বিশেষত: এর মতো Select
ব্রুস পাইয়ারসন

আপনি ==2একটি >1এবং এর trueসাথে প্রতিস্থাপন করে আরও কয়েকটি অক্ষর সংরক্ষণ করতে পারেন 1>0। এছাড়াও আপনি একটি ব্যবহার করতে পারেন Allপরিবর্তে Whereএবং LastToListএর চেয়ে ছোটও ToArray
বব

@ Bob শুভ কল, জানেন না আমি কীভাবে সমস্ত মিস করেছি (), এবং বোনাস হিসাবে, আপনাকে আরও কিছু সাশ্রয় করতে হবে না এমন সকলের সাথে দেখা গেল
iamkrillin

3

গ্রোভি - 357 221 217 অক্ষর

আমি সুইংবিল্ডার ব্যবহার করে কুইঞ্চুনসের সমাধান গ্রোভির ২.২.১-তে পোর্ট করেছি (এবং এটিকে আরও গ্রোভিয়ার বানিয়েছি):

c=[];new groovy.swing.SwingBuilder().frame(){panel(){label("SELECT ANY TWO");f={if(c.count{it.isSelected()}>2)it.source.setSelected(1<0)};["FAST","CHEAP","GOOD"].each{c<<checkBox(label:it,itemStateChanged:f)}}}.show()

Ungolfed:

c=[]
new groovy.swing.SwingBuilder().frame() {
    panel() {
        label("SELECT ANY TWO")
        f = { if (c.count{it.isSelected()} > 2) it.source.setSelected(1<0) }
        ["FAST","CHEAP","GOOD"].each { c << checkBox(label: it, itemStateChanged: f) }
    }
}.show()

3

কিউএমএল - 369 315 254 251 248 বাইট

এখানে কিউএমএল (কিউটি কিউইকিক 2.0) সংস্করণটি দেওয়া হয়, কেবলমাত্র .QML ফাইলের সামগ্রীগুলি। এই কোডটি চালানোর জন্য কমপক্ষে 5.1 কিউটি প্রয়োজন। অন্যান্য সমাধানের ( 248 বাইট ) তুলনায় এর বিশাল হিসাবে বড় বিষয় নয় , এটি একটি সম্পূর্ণ বৈশিষ্ট্যযুক্ত ক্রস-প্ল্যাটফর্ম অ্যাপ্লিকেশন (অ্যান্ড্রয়েড এবং আইওএস অন্তর্ভুক্ত)! : ডি

    import QtQuick 2.0;import QtQuick.Controls 1.1;Row{Text{text:"SELECT ANY TWO"}CheckBox{id:a;text:"FAST";enabled:!b.checked|!c.checked}CheckBox{id:b;text:"CHEAP";enabled:!a.checked|!c.checked}CheckBox{id:c;text:"GOOD";enabled:!b.checked|!a.checked}}

অনুভূমিক বিন্যাস ডায়ালগ

এটি চালানোর জন্য কোডটি একটি। কিএমএল ফাইলে সংরক্ষণ করুন, কিউটি 5.1 ইনস্টল করুন এবং qmlscene.exe (অথবা লিনাক্সে কেবল qmlscene) চালান, যা একটি মুক্ত ফাইল ডায়ালগ দেখায়। আপনি কোড সংরক্ষণ করেছেন .QML ফাইলটি চয়ন করুন এবং দুর্দান্ত ফলাফলটি দেখুন! : ডি


3

কে 3 - 95

a[`FAST`CHEAP`GOOD]:0
a[.;`c]:`check
a..l:"SELECT ANY TWO"
a..t:"if[3=+/a[];.[_v;_i;:;0]]"
`show$`a

কোড এখানে

নমুনা রান
(সূত্র: এনএসএল.কম )


লাইন 1: তিনটি ভেরিয়েবল সহ একটি অভিধান; লাইন 2: প্রতিটি ভেরিয়েবল একটি চেকবটন; লাইন 3: অভিধান লেবেল; লাইন 4: যদি তিনটি ভেরিয়েবল পরীক্ষা করা থাকে তবে শেষের ভেরিয়েবল 0 এ পুনরায় সেট করুন; লাইন 5: অভিধান দেখান।
স্টিভান এপ্টার

নিস! এই জাতীয় ট্রাজেডি কে 4 এর কোনও জিইউআই নেই ...
মোলমারেক্স

কে জিতেছে (তবে ওহ বিড়ম্বনা! পোস্ট করার জন্য আরও 9 টি চরিত্রের প্রয়োজন!)
স্টিভান এপ্টার

2

জাভাস্ক্রিপ্ট / jQuery 237 234 229

ম্যাট এর উত্তর হিসাবে খুব অনুরূপ পদ্ধতির , যদিও কিছুটা দীর্ঘ।

$(function(){var e="input ",t="disabled",n,r;$("body").html("SELECT ANY TWO|FAST|CHEAP|GOOD".replace(/\|/g,"<"+e+'type="checkbox">'));n=$(e);n.change(function(){n.removeAttr(t);r=$(":checked");if(r.length>1)n.not(r).attr(t,t)})})

2

জাভাস্ক্রিপ্ট 209 (ছিল 346)

সংক্ষিপ্ত: মন্তব্যের জন্য ধন্যবাদ।

function f(){var a=document.getElementsByClassName("x"),n=0,i=0;for(i in a){if(a[i].checked)n++;}if(n<2){for(i in a){a[i].disabled=false;}}else{for(i in a){i(false===a[i].checked){a[i].disabled=true;break;}}}}

গল্ফড ফাংশন:

function f(a,b,c){
var x=document.getElementById(a);
var y=document.getElementById(b);
var z=document.getElementById(c);
var n=0,i=0;
var a=[x,y,z];
for(i in a)
{
if(a[i].checked) n++;
}
if(n<2)
{
for(i in a)
{
a[i].disabled=false;
}
}
else
{
for(i in a)
{
if(false===a[i].checked)
{
a[i].disabled=true;
break;
}
}
}
}

এইচটিএমএল ফর্ম: ইনপুট সরবরাহ করে এবং ফাংশনটি কল করে। * ফর্মটি এখন গ্রুপ ইনপুটগুলিতে শ্রেণি = এক্স ব্যবহার করে।

<form>
        SELECT ANY TWO<br>
        FAST <input id="a" type="checkbox" class="x" value="0" onchange="f()"><br>
        CHEAP <input id="b" type="checkbox" class="x" value="1" onchange="f()"><br>
        GOOD <input id="c" type="checkbox" class="x" value="2" onchange="f()"><br>
    </form>

নেটবিয়ান এবং ক্রোমের সাথে পরীক্ষিত।


আপনি ক্রিয়াকলাপটি আরও গল্ফ করতে পারেন এবং আপনার সমস্তকে একীভূত করে varঅপ্রয়োজনীয় ধনুর্বন্ধনী এবং হোয়াইটস্পেস (নিউলাইন চরগুলি সহ) সরিয়ে 264 টি অক্ষরে নামিয়ে আনতে পারেন । আপনি যদি ES6 ল্যাম্বদা ব্যবহার করেন তবে আপনি সম্ভবত এটি আরও ছোট পেতে পারেন।
টনি এলিস

আরও কিছু সুস্পষ্ট গল্ফিং বাদে, getElementsByClassNameউদাহরণস্বরূপ , সমস্ত হ'ল ইনপুট উপাদানগুলিকে এক হিটের পরিবর্তে একটি অ্যারেতে টানতে একটি শ্রেণি ব্যবহার করার কথা বিবেচনা করুন । a=document.getElementsByClassName('q')
ম্যাট

নামের আইডি পরিবর্তন এবং মাত্র তাদের কল document.a, document.c, document.cএকটি [] মধ্যে সরাসরি তাদের করা
frieder

2

খাঁজকাটা

জাভা সংস্করণের উপর ভিত্তি করে, তবে অনেকটা কমে গেছে;)

প্রকারগুলি 'ডিএফ' দ্বারা প্রতিস্থাপিত হয়েছিল, সেমিকোলনগুলি সরানো হয়েছে, << দ্বারা প্রতিস্থাপিত যোগ করা হবে, 1 <0 দ্বারা প্রতিস্থাপন করা হবে, চেকবক্সগুলি তৈরি করার জন্য সংগ্রহ করুন, পুনরাবৃত্ত প্রকারটি সরানো হবে, চেকবক্সটি castালাই মুছে ফেলা হবে, লুপগুলি বাড়িয়ে দেওয়া হবে।

import java.awt.*
class F {
    def static main(a) {
        def f = new Frame()
        def p = new Panel()
        f << p
        p << new Label("SELECT ANY TWO")
        def c = ['FAST','CHECK','GOOD'].collect { new Checkbox(it) }
        c.each { b ->
            p << b
            b.addItemListener { e->
                int x = 0, i = 0
                3.times {
                    x += c[it].state ? 1 : 0
                }
                if (x > 2) {
                    e.source.state = 0                        
                }
            }
        }
        f.show()
    }
}

গ্রোভি জাভা নয়। তার মানে এই যে সমস্ত বর্ধিতকরণগুলি এতটা গণনা করে না। আপনি মুছে ফেলা সমস্ত কিছুই জাভাতে প্রয়োজনীয় ছিল, তবে খাঁজকাটা নয়।
জাস্টিন

1
আপনি ঠিক বলেছেন, গ্রোভী জাভা নয়, এ কারণেই তাকে গ্রোভি বলা হয়। আপনি এখানে কী বলতে চাইছেন তা আমি নিশ্চিত নই।
এরিক প্রগেট

1

টিসিএল 347

কমপক্ষে এটি পাইথন এবং জাভা প্রহার করে।

set d .
proc a v {upvar f f c c g g d d $v x
if $x&&$f+$c+$g==2 {set d .$f$c$g
$d configure -state disabled} 
if !$x {$d configure -state normal}}
set z -variable
set y -command
set x checkbutton
label .l -text {SELECT ANY TWO}
$x .011 -text FAST $z f $y a\ f
$x .101 -text CHEAP $z c $y a\ c
$x .110 -text GOOD $z g $y a\ g
pack .l .011 .101 .110

দ্রষ্টব্য: আপনি যদি একটি চেকবক্স নির্বাচন করে তাৎক্ষণিকভাবে এটি নির্বাচন না করে শুরু করেন তবে আপনি একটি ত্রুটি পাবেন। আপনি 110প্রথম লাইনের শেষে যুক্ত করে এটি ঠিক করতে পারেন ।

Ungolfed:

# Keep track of the last disabled button. Set it to something valid to start with.
set last .110

proc toggled name {
        # Access some globals
        upvar fast  fast
        upvar cheap cheap
        upvar good  good
        upvar last  last
        upvar $name value

        # Just toggled one on, check if exactly two are now on
        if {$value == 1 && ($fast + $cheap + $good) == 2} {
                set last .$fast$cheap$good
                $last configure -state disabled
        }
        # Just toggled one off. Re-enable disabled one.
        if {$value == 0} {
                $last configure -state normal
        }
}

label .label -text {SELECT ANY TWO}

checkbutton .011 -text FAST  -variable fast  -command {toggled fast}
checkbutton .101 -text CHEAP -variable cheap -command {toggled cheap}
checkbutton .110 -text GOOD  -variable good  -command {toggled good}

pack .label .011 .101 .110

1

জাভাস্ক্রিপ্ট + নকআউট: ~ 250 অক্ষর

a=function(i){return "<input type=checkbox data-bind='value: "+i+", checked: x, disable: x().length>=2 && x().indexOf(\""+i+"\")==-1'>"},document.body.innerHTML = "SELECT ANY TWO"+a(0)+"Fast"+a(1)+"Good"+a(2)+"Cheap"; ko.applyBindings({x:ko.observableArray([])})

0

AngularJS - 155 ( ডেমো )

SELECT ANY TWO :<i ng-init=t=[]><p ng-repeat="(i,v) in ['FAST','CHEAP','GOOD']"><input type=checkbox ng-disabled=t[(i+1)%3]&&t[(i+2)%3] ng-model=t[i]>{{v}}

অবারিত সংস্করণ:

SELECT ANY TWO :
<i ng-init="checkedArray = []" /> <!-- A useless tag to initialize the array (which can't be done on the `input` tag, unfortunately) -->
<p ng-repeat="(key, value) in ['FAST', 'CHEAP', 'GOOD']">
    <input
        type="checkbox"
        ng-model="checkedArray[key]"
        ng-disabled="checkedArray[(key + 1) % 3] && checkedArray[(key + 2) % 3]"
    />
    {{value}}
</p>


0

অ্যাপলস্ক্রিপ্ট, 194 190 বাইট (মোটামুটি নিশ্চিত যে এটি কিছুটা প্রতারণা করছে ...)

দুটি সমস্যা বিদ্যমান:

  • অ্যাপলস্ক্রিপ্টে কোনও চেকবক্স নেই, কেবলমাত্র তালিকা।
  • তালিকা বা যে কোনও পরিমাণ থেকে একটিকেই বেছে নেওয়ার বিকল্প রয়েছে।

প্রতারণা:

  • 2, এবং কেবল 2, তালিকার আইটেম নির্বাচন করা হলে একটি প্রস্থান করতে ব্রেক পয়েন্ট সহ অসীম পুনরাবৃত্তি লুপ ব্যবহার করে।
  • আমাকে এমন একটি display alertউপাদান দিয়ে শাস্তি দিয়েছেন যা আমাকে দৈর্ঘ্যের অতিরিক্ত 30 বাইট দেয়।

আমার এই পোস্ট করার পিছনে যুক্তি:

  • এটা তোলে হয় উপায় AppleScript মধ্যে এই কাজ করতে।
  • নির্বাচিত তিনটি বিকল্পের সাহায্যে কোডটি সম্পন্ন করতে পারে না, সুতরাং তৃতীয় বিকল্পটি এক্সটেনশান দ্বারা নির্বাচিত করা হয়েছে ।

অ্যাকোয়া / জিইউআই মিথস্ক্রিয়ায় অ্যাপলস্ক্রিপ্টের শক্তিটি দেখাতে মূলত এটি পোস্ট করা।

পুনরাবৃত্তি
তালিকা থেকে বেছে নিন FA "দ্রুত", "চিপ", "ভাল" prom একাধিক নির্বাচনের অনুমতি সহ প্রম্পট "যে কোনও দুটি নির্বাচন করুন"
যদি ফলাফলের আইটেমগুলির নম্বর <= 2
প্রস্থান পুনরাবৃত্তি
আর
সতর্কতা প্রদর্শন করুন "দুটি পছন্দ করুন"
শেষ
শেষ

এক্সিকিউশন জিএফ

আপনি যদি এটি খুব দূরে বলে বিশ্বাস করেন তবে দয়া করে আমাকে মুছতে বলুন।


এই বন্য! এটি আমি দেখেছি সবচেয়ে ইংরেজি মত ভাষা।
ব্রুস পাইর্সন

এটি সত্যিই খুব খারাপ যে তাদের কাছে "2 টি নির্বাচনের প্রয়োজন রয়েছে" বা সেই লাইনের পাশাপাশি কিছু নেই।
ব্রুস পাইর্সন

ব্রুসপিয়ারসন হ্যাঁ, অ্যাপলস্ক্রিপ্ট একটি অদ্ভুত ভাষা। । \ _ (ツ) _ / ¯ আমি এটি কেবল কখনও ছোট জিনিসগুলির জন্য ব্যবহার করি, এটির সাথে আসল কিছু করা খুব শক্ত।
অ্যাডিসন ক্রম্প 21

এগুলি চেকবক্সযুক্ত নয়, এই উত্তরটি নিয়ম থেকে "খুব দূরে" তৈরি করেছে। আমি আপনাকে এখানে মুছে ফেলতে বলি।
পিপ্পারি

0

FLTK, 303 টি অক্ষর

decl{int c;}Function{}{}{Fl_Window{}{xywh {9 9 195 195}}{Fl_Pack{}{label{SELECT ANY TWO}}{Fl_Check_Button{}{callback{e(o);}label FAST}Fl_Check_Button{}{callback{e(o);}label GOOD}Fl_Check_Button{}{callback{e(o);}label CHEAP}}}}Function{e(Fl_Button*o)}{}{code{if((c+=o->value()*2-1)>2){o->value(0);c--;}}}

Ungolfed:

decl { int c; }

Function {} {} {
    Fl_Window {} {
        xywh {9 9 195 195}
    } {
        Fl_Pack {} {
            label {SELECT ANY TWO}
        } {
            Fl_Check_Button {} {
                callback { e(o); }
                label FAST
            }
            Fl_Check_Button {} {
                callback { e(o); }
                label GOOD
            }
            Fl_Check_Button {} {
                callback { e(o); }
                label CHEAP
            }
        }
    }
}

Function { e(Fl_Button* o) } {} {
    code {
        if ((c += o->value() * 2 - 1) > 2) {
            o->value(0);
            c--;
        }
    }
}

নমুনা আউটপুট:

FLTK উইন্ডো স্ক্রিনশট

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