फास्ट, सस्ता और अच्छा - कोई भी दो चुनें


43

प्रोग्रामर के रूप में, हम सभी इस कहावत को जानते हैं: "आप इसे तेज़ और अच्छा बना सकते हैं, लेकिन यह सस्ता नहीं होगा, आपके पास यह सस्ता और अच्छा हो सकता है, लेकिन यह तेज़ नहीं होगा, या आप इसे तेज़ और सस्ता कर सकते हैं। , लेकिन यह अच्छा नहीं होगा। "

इस चुनौती के लिए, आप अपनी कस्टम प्रोग्रामिंग सेवाओं के लिए एक काल्पनिक कॉन्फ़िगरेशन टूल लागू कर रहे हैं। आपको "किसी भी दो का चयन करें" के शीर्षक के साथ तीन चेक बॉक्स का एक सेट प्रस्तुत करना चाहिए:

SELECT ANY TWO  
☐ FAST  
☐ CHEAP  
☐ GOOD

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

कोई विशेष नियंत्रण की अनुमति नहीं है। आपकी पसंद की भाषा में चेक बॉक्स मानक चेक बॉक्स होना चाहिए। उदाहरण के लिए, "चेकबॉक्सलिस्ट" नियंत्रण का उपयोग न करें, यदि आपकी भाषा में एक है। मैं कल्पना कर रहा हूं कि अधिकांश प्रविष्टियां HTML / jQuery होंगी, लेकिन यह एक नियम नहीं है। यह कोड गोल्फ है, जो सबसे छोटी प्रविष्टि की तलाश में है।

विजेता तो दूर

मैं इसे श्रेणियों में तोड़ दूँगा। कुछ स्पष्ट विजेता हैं:

jQuery: nderscore, Mr. Tenacity Under 100b जब आप पाठ "संसाधन" को बाहर करते हैं। माननीय उल्लेख को भी उन jQuery अवधारणाओं को पेश करने के लिए मैट पर जाना चाहिए जिनसे कई लोगों ने प्रेरणा ली।

Dyalog APL: marinus, उर्फ ​​श्री यूनिकोड आप उन सभी चीजों को कैसे टाइप करते हैं? मैं देख सकता हूं कि आप छोटे कार्यक्रम क्यों लिखना चाहेंगे।

PHP: सुपरस्क्रिप्ट का मानना ​​है कि यह सबसे छोटी प्रविष्टि है जो वास्तव में नियमों की सख्त व्याख्या के बाद तीसरे विकल्प का चयन रद्द करने के बजाय अक्षम करता है।


क्या मैं इसे सिर्फ इसलिए बना सकता हूं ताकि एक बार में केवल दो का चयन किया जा सके? ताकि तीसरे डी का चयन अन्य लोगों में से एक का चयन करें? या शायद एक स्वीकार करें बटन जोड़ें जो 3 विकल्प चुने जाने पर बाहर निकल जाता है?
जस्टिन

7
@Quincunx - चूँकि कोई भी अनुमानवादी (मन-पढ़ने के बाहर) नहीं है, जो यह तय कर सकता है कि कौन सा चयन रद्द करना है, यह उपयोगकर्ता को भ्रमित करेगा ... इसलिए मुझे कहना पड़ेगा कि नहीं, क्योंकि हम पहली छाप नहीं चाहते हैं हमारी कस्टम सॉफ़्टवेयर सेवाएँ ख़राब हैं। ;)
ब्रूस पियर्सन

इस सवाल ने मुझे पाइथन 3 के टिंकर में रुचि दी, इसलिए मैं अब इसे सीखने की कोशिश कर रहा हूं। IMO, GUI सीखने का सबसे अच्छा तरीका परीक्षण और त्रुटि है। मैं इस की कोशिश की: ideone.com/YHLZIQ । परिणाम: नए जीयूआई का तेजी से उद्घाटन। मुझे उन्हें बंद करने के लिए टास्क मैनेजर खोलना पड़ा। :-)। छवि (संख्या जल्द ही 340 पर चढ़ गई: i.stack.imgur.com/c9wQi.png )
जस्टिन

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

1
@BrucePierson वास्तव में, वहाँ है। हम सबसे पुराने चयनित चेकबॉक्स का चयन रद्द कर सकते हैं। हालाँकि, इसके लिए कोड आपके द्वारा आवश्यक कोड से बहुत अधिक होगा।
जस्टिन

जवाबों:


23

जावास्क्रिप्ट के साथ जावास्क्रिप्ट ( ES5 ) - 143 ( डेमो )

मैंने मैट के घोल को संशोधित किया और इसे नीचे उतारा जहां तक ​​मुझे लगता है कि यह जा सकता है:

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

जावास्क्रिप्ट के बिना जावास्क्रिप्ट ( ES5 ) - 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]'>"))

यदि हमें उपयोगकर्ता को वास्तव में फ़ील्ड को अक्षम करने के बजाय 3rd बॉक्स को चेक करने से रोकने की अनुमति है, तो हम इसे और भी छोटा कर सकते हैं:

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,ऐसा करने का एक और तरीका है, जिसके परिणामस्वरूप समान लंबाई है।
रात

बस picky होने के नाते, jquery संस्करण को प्रोप का उपयोग करना चाहिए,
एटीआर का

@Einacio आपकी इच्छा मेरी आज्ञा है!
nderscore

5
@Einacio लेकिन कोडगोल्फ सबसे खराब प्रथाओं के बारे में है! : P
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/

EDIT: @ डैनियल लिसिक की मदद से सुधार - https://codegolf.stackexchange.com/a/26805/16278


5
अच्छा! अप करने के लिए पर्याप्त प्रतिनिधि नहीं है ... लेकिन आप काम पर रखा है!
ब्रूस पियर्सन

2
जितना मैं यह देख रहा हूं, उतना ही मैं सीख रहा हूं। एक jQuery चयनकर्ता के अंदर चर असाइनमेंट की चतुराई। बहुत ही शांत। इसके अलावा, क्या आप बता सकते हैं कि "डबल धमाका" (!!) क्या कर रहा है?
ब्रूस पियर्सन

1
एकल धमाके, एक बूलियन मूल्य coerces, और डबल स्पष्ट रूप से कि पलटना होगा। undefinedसत्य के लिए मजबूर करता है। वह और चर असाइनमेंट शायद केवल छोटी चालें हैं जो वास्तव में उपयोग की जाती हैं।
मैट

आपका कोड 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}

एपीएल के नए बिट में लंबे कीवर्ड हैं। मैंने अभी भी HTML को हराया है।

स्पष्टीकरण:

  • 'R'⎕WC'Form' 'Select any two',2/⊂S←2/20: एक फॉर्म बनाएं R, शीर्षक के साथ किसी भी दो और आकार और स्थिति का चयन करें20 20 । में भी स्टोर करता 20 20है S
  • 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: योग X, यदि यह दो के बराबर नहीं है तो सभी चेकबॉक्स सक्रिय होने चाहिए, अगर यह दो के बराबर है तो केवल चेकबॉक्स सक्रिय होने चाहिए
    • B.Active←: चेकबॉक्स को सक्षम या अक्षम करें

नतीजा:

स्क्रीनशॉट


महान व्याख्या, धन्यवाद!
ब्रूस पियर्सन

11

पायथन 3 2, 454 434 ... 393 392 बाइट्स

मैंने सोचा, अजगर जावा से छोटा होना चाहिए। यहाँ "प्रमाण" ( EDIT: अब यह वास्तव में छोटा है ) है:

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वास्तव में अभिव्यक्ति को लागू करने के लिए उत्सुक हैं , वह इसे निष्पादित करता है (यह वही है जो स्ट्रिंग को करता है। पठनीयता के लिए नई सीमाएं जोड़ी गई हैं):

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 से अधिक चेकबॉक्स को चुनने का कारण बनता है। यूएनएफ सौभाग्य दुर्भाग्य से, मैं खर्च अधिक कम अधिक बाइट्स यह कर।

यहाँ छवि विवरण दर्ज करें

संपादन:

  1. उपयोग करने के लिए कोड का बड़े पैमाने पर समायोजन exec, एक 1 बाइट की बचत!
  2. अजगर (2 execकोष्ठक को हटाने) से दो बाइट्स निचोड़ने के लिए अजगर 2 पर स्विच किया गया ।
  3. अधिक गोल्फ। बदलते शामिल range(3)करने के लिए 0,1,2और खरोज बदलते टैब की एक परत है। अनिश्चित अगर \t\tबजाय काम करेगा \t__( _अंतरिक्ष चरित्र है)। अंत में सबसे लंबे समय तक मेरे जावा उत्तर तक पहुंच गया था।
  4. इस्तेमाल की जगह चाल
  5. बकीरू के सुझाव का इस्तेमाल किया , और कुछ और गोल्फ किया। वास्तव में यह जावा की तुलना में कम है! लेकिन अब, जावा उत्तर को और अधिक प्राप्त किया गया है, इसलिए यह फिर से लंबा है। :-(
  6. बेहतर चाल चाल का इस्तेमाल किया ।
  7. एक के !=लिए बदल गया -

दिलचस्प दृष्टिकोण। +1
cjfaure

मैं अपने कीबोर्ड पर टर्बो मोड के साथ धोखा दे सकता हूं। सबसे पहले, मैं दो बक्से की जांच करता हूं। दूसरा, मैं तीसरे को उजागर करने के लिए टैब का उपयोग करता हूं। अब मैं कुछ सेकंड के लिए टर्बो मोड में स्पेस बार पकड़ता हूं। कभी-कभी, यह तीसरे बॉक्स की जांच करता है!
kernigh

@kernigh मेरा मानना ​​है कि ऐसा इसलिए है क्योंकि मेरा कोड उस बिंदु पर पहुंच जाता है, जहां यह पता चल जाता है कि बॉक्स टॉगल हो गया है, लेकिन कोड उस बिंदु पर नहीं पहुंचा है, जहां यह बॉक्स को री-टॉगल करता है। इसलिए यदि आप उस समय (बंद करने के लिए) बॉक्स को टॉगल करते हैं, तो मेरा कोड उस पर एक चेकमार्क लगाएगा।
जस्टिन

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

यह Rebol 3 View dialect (r3-gui) है। उबंटू लिनक्स से नीचे का दृश्य:

3 दृश्य का प्रतीक

अपडेट - कोड के 22 वर्णों को शेव करने के लिए Rebol SO टोकन से अर्ल और ग्राहम को धन्यवाद - http://chat.stackoverflow.com/transcript/message/16345039#16345039


यह अमान्य उत्तर है, क्योंकि तीसरा अक्षम है, लेकिन इसकी जाँच भी की गई है, इसका मतलब है कि सभी 3 चेक किए गए हैं, इसलिए कृपया इसे ठीक करें।
ST3

2
@ ST3 - आप गलत हैं मैं डरता हूं। "GOOD" चेकबॉक्स की जाँच नहीं की गई है या वास्तव में अक्षम किया गया है (मेरा कोड बस तीसरे बॉक्स को बंद कर दिया गया है)। यह है कि Rebol 3 दृश्य एक अनियंत्रित बॉक्स (डिफ़ॉल्ट रूप से) दिखाता है।
प्रात

1
@ ST3 et al - यहाँ एक लिंक दिखा रहा है डिफ़ॉल्ट चेकबॉक्स लुक जो मैंने ऊपर वर्णित किया है (पहली छवि में कोई चेकबॉक्स क्लिक नहीं किया गया है, दूसरा सिर्फ "GOOD") - plus.google.com/u/0/10421603770274190908932/post/Z2EbuQX67aq
draegtun

खैर ... मैं आपके द्वारा जोड़े गए प्रिंट-स्क्रीन को देखता हूं और मैं सभी तीन चेकबॉक्सों को देखता हूं, सिर्फ एक को अनियंत्रित नहीं किया जा सकता है।
ST3

3
@ ST3 - एक ग्रीव्ड चेकबॉक्‍स सिर्फ Rebol 3 है यह दिखाने का तरीका देखें कि यह एक चेकबॉक्स है जिसे चेक किया जा सकता है। चेक करने पर टिक हरा हो जाता है और अनियंत्रित होने पर वापस ग्रे हो जाता है। ये चूक हैं। ऊपर दिए गए उत्तर में छवि में आप देख सकते हैं कि "GOOD" इनपुट फ़ोकस (नीला धब्बा) के रूप में है क्योंकि इसका "क्लिक" किया जा रहा है लेकिन यह ग्रे रहता है और हरा नहीं है (इसलिए चेक नहीं किया गया है)।
ड्रेगेटन

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. एक अनाम वर्ग और दोनों के लिए एक उदाहरण initalizer का उपयोग करके 18 बाइट्स बचा लिया Frameऔर Panel

संरेखण पर कोई प्रतिबंध नहीं है (इसलिए मुझे लगता है कि मैट उनके 5 पात्रों को कम कर सकता है)। पूर्ण चलने वाले प्रोग्राम के लिए प्रॉप्स ... लेकिन मैं नहीं देखता कि तीसरा विकल्प अक्षम है।
ब्रूस पियर्सन

@BrucePierson यह अक्षम है। इसे क्लिक नहीं किया जा सकता है। अगर इसे क्लिक किया जाता है, तो कुछ भी नहीं होता है।
जस्टिन

2
आह, मुझे लगता है कि मैं देख रहा हूं। आप तुरंत अक्षम किए बिना जाँच की गई स्थिति को "परेशान" कर रहे हैं? यह स्वीकार्य होगा।
ब्रूस पियर्सन

@BrucePierson यह सही है। वास्तव में अक्षम करने के लिए, मुझे बदलना 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
@BrucePierson जब भी आप सोचते हैं, यह अजीब लगता है जब इसे किसी चित्रमय चीज़ के चरित्र प्रतिनिधित्व का उपयोग करना होता है, यूनिकोड की तलाश करें। वैकल्पिक रूप से, ग्राफिकल डिज़ाइन चीज़ों के लिए, यूज़र एक्सपीरियंस SE की ओर मुड़ें
जस्टिन

7

C ++ 11 / Qt5.2 - 561 481 433 423 369

क्योंकि क्यों नहीं।

चौंकाने वाली बात यह है कि अब तक हम पायथन से छोटे हैं, और गैर-छोटी सी #, और जावा से बंधे हुए हैं!

ईवबर्ड को इसे 561 से घटाकर 481 करने का श्रेय।

और एक बार और ईवबर्ड इसे 481 से 433 तक छोटा कर देता है!

एक लंबोदर कनेक्ट के साथ कुछ दूर ले गया

C ++ 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

@Matt के उत्तर के कॉफीस्क्रिप्ट पोर्ट ।

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

PHP, जावास्क्रिप्ट, jQuery - 135b

मैं @ nderscore के जवाब को स्वीकार कर रहा था, लेकिन फिर मैंने उसे कॉपी करने और एक-अप करने का फैसला किया।

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

मूल रूप से मैंने उसकी .joinचाल को कुछ PHP हाइपरटेक्स्ट प्रीप्रोसेसिंग के साथ बदल दिया ।


जब आप समझते हैं कि कार्यक्रम में पाठ "संसाधनों" के लिए 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 बाइट्स

मैं Quincunx द्वारा पायथन 3 उत्तर के समान ही Tk विजेट्स का उपयोग करता हूं ।

यह प्रोग्राम नियमों को तोड़ता है क्योंकि इसमें एक चेक बॉक्स सूची है । (नियमों ने कहा, "चेक बॉक्स सूची का उपयोग न करें।") हाँ, a3 TkCheckButton ऑब्जेक्ट्स की एक सरणी है, और मेरा मानना ​​है कि एक सरणी एक सूची है। मेरा बचाव यह है कि मैंने किसी मौजूदा चेक बॉक्स सूची का उपयोग नहीं किया, लेकिन मैंने मानक चेक बॉक्स का उपयोग किया और अपनी सूची बनाई।

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 बाइट (218 करने के लिए 219 नीचे) को बचाया '0'करने के लिए ?0। रूबी में, ?0एक चरित्र स्थिर है।
  • a.count(&o) चयनित चेक बटन को गिनने के लिए विधेय का उपयोग करता है।
  • जब उपयोगकर्ता एक चेक बटन टॉगल करता है, तो कमांड a.mapसभी बटन के लिए लूप को कॉल करता है, उन्हें बनाता है :normalया :disabled

1
बहुत अच्छा। यहां कोई नियम नहीं टूट रहा है - मैं एक चेक बॉक्स सूची नियंत्रण का उल्लेख कर रहा था जो भाषा ढांचे का हिस्सा हो सकता है। मेरा मानना ​​है कि अब तक के सभी उत्तर किसी न किसी प्रकार के मानचित्र या चयनकर्ता का उपयोग करते हैं, इसलिए यह पूरी तरह से वैध है।
ब्रूस पियर्सन

5

गोल्फ की मदद के लिए रोटेम और जॉनबॉट को धन्यवाद!

C # 343 334

यह Quincunx के जावा उत्तर के रूप में उसी "धोखा" का उपयोग करता है - चेकबॉक्स वास्तव में अक्षम नहीं हैं; वे सिर्फ आपको उनकी जांच करने की अनुमति नहीं देते हैं यदि वह चेक 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);}}

एक छोटा बग भी है जिसे आप तीसरे चेकबॉक्स का चयन करने के बाद खिड़की को बंद नहीं कर सकते हैं जब तक कि आप एक को अचयनित न करें, क्योंकि सत्यापन पास नहीं होगा। लेकिन यह , तो कौन परवाह करता है? ;)

सी # 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);
जॉनबोट

5

एंगुलरजेएस - 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>

मैं JSFiddle पर यह कोशिश की, लेकिन किसी भी सफलता के बिना । क्या आप एक काम करने का उदाहरण प्रदान कर सकते हैं?
स्क्वीश ओस्फ़रेज


आपने "एनजी-ऐप" का उल्लेख नहीं किया। मेरे उदाहरण में <head> चेक करें।
user12345

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

शानदार @Matt की एक टिप्पणी के लिए धन्यवाद मैंने कोड को 27 वर्णों से कम कर दिया।

JSFiddle


25 या तो अपनी स्थिति $(e+c).length>1को असाइनमेंट में इस तरह $(e).not(c).attr(f,$(e+c).length>1)से सहेजें : चूंकि आप केवल बूलियन ही बदल रहे हैं।
मैट

1
तुम्हारा और मेरा का मिश्रण का उपयोग कर इसे 169 तक लाने में सफल हुआ। !!बलात्कार और घ के लिए शरीर बताए नहीं के साथ कुछ अतिरिक्त गोल्फ। 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
डेविड

@DavidCarraher धन्यवाद, मैं भविष्य में भी अन्य कोड गोल्फिंग प्रश्न के लिए उस तकनीक का उपयोग करके खुद को देख सकता हूं।

1
दोनों संस्करणों को शामिल करने की आवश्यकता नहीं है। और hशीर्षक में अपनी चार गिनती का उपयोग करना और समायोजित करना न भूलें ।
डेविड

4

MIRC स्क्रिप्ट ( 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 बाइट्स द्वारा कोड को कम करने में सक्षम थे!


हाहा, मैं इस एक को इंट्रो पसंद करता हूं। हालांकि यह क्रिया की तरह है - क्या यह बीयर बोल सकता है? = c)
ब्रूस पियर्सन

3

सी #, 335 333 326 320 308

बोब्स उत्तर के आधार पर, मेरा उनके (335 v 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
बॉब

@ थैंक्यू गुड कॉल, पता नहीं कैसे मैं सब चूक गया (), और एक बोनस के रूप में, सभी के साथ पता चलता है कि आपको इसे अमल में लाने की ज़रूरत नहीं है, इससे भी अधिक बचत
iamkrillin

3

ग्रूवी - 357 221 217 वर्ण

मैं पोर्ट किया है पंचवृक्षी के समाधान ग्रूवी 2.2.1 करने के लिए, का उपयोग कर SwingBuilder (और बना यह और भी groovier):

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

QML - 369 315 254 251 248 बाइट्स

यहाँ QML (QtQuick 2.0) संस्करण, केवल .qml फ़ाइल सामग्री को दिया गया। इस कोड को चलाने के लिए कम से कम Qt 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}}

क्षैतिज लेआउट संवाद

इसे चलाने के लिए, कोड को एक .qml फ़ाइल में सहेजें, Qt 5.1 स्थापित करें और qmlscene.exe (या लिनक्स पर सिर्फ qmlscene) चलाएं, जो एक खुली फ़ाइल संवाद दिखाएगा। Chq .qml फ़ाइल को आपने कोड को सहेज लिया है और भयानक परिणाम देखें! : डी


3

k3 - 95

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

कोड यहाँ है

नमूना चला
(स्रोत: nsl.com )


पंक्ति 1: तीन चरों वाला एक शब्दकोश; पंक्ति 2: प्रत्येक चर एक चेकबटन है; पंक्ति 3: शब्दकोश को लेबल करें; पंक्ति 4: यदि तीन चर जाँचे गए हैं, तो अंतिम चर को 0 पर जाँच लें; पंक्ति 5: शब्दकोश दिखाएं।
स्टीवन अप्टर

अच्छा! ऐसी त्रासदी k4 में कोई GUI नहीं है ...
mollmerx

k जीतता है (लेकिन ओह विडंबना! पोस्ट करने के लिए 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;
}
}
}
}

HTML फॉर्म: इनपुट प्रदान करता है और फ़ंक्शन को कॉल करता है। * फॉर्म अब ग्रुप इनपुट्स के लिए class = x का उपयोग करता है।

<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 को 0 से बदल दिया गया, चेकबॉक्स बनाने के लिए एकत्र हुए, आइटम प्रकार को हटा दिया, चेकबॉक्स को हटा दिया, छोरों को बढ़ाया।

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

रूबी विद शूज़, 133 अक्षर

Shoes.app{para'SELECT ANY TWO'
$o=%w{FAST GOOD CHEAP}.map{|q|c=check{|c|$o[c]=!$o[c];$o.values.all?&&c.checked=p}
para q
[c,p]}.to_h}

नमूना उत्पादन:

जूते खिड़की स्क्रीनशॉट


0

AppleScript, 194 190 बाइट्स (निश्चित रूप से यह थोड़ा धोखा है ...)

दो समस्याएं मौजूद हैं:

  • AppleScript में कोई चेकबॉक्स नहीं हैं, केवल सूचियाँ हैं।
  • सूची या किसी राशि से एक का चयन करने का केवल विकल्प है।

Circumventions:

  • 2 और जब केवल 2 से बाहर निकलने के लिए एक विराम बिंदु के साथ एक अनंत दोहराने लूप का उपयोग करना, सूची में आइटम का चयन किया जाता है।
  • अपने आप को एक display alertघटक के साथ सजा दिया जो मुझे एक अतिरिक्त 30 बाइट्स की लंबाई देता है।

मेरे पीछे यह तर्क देना:

  • यह है जिस तरह से AppleScript में यह करने के लिए।
  • कोड चुने गए तीन विकल्पों के साथ पूरा नहीं हो सकता है, इसलिए तीसरा विकल्प एक्सटेंशन द्वारा रद्द कर दिया गया है

एक्वा / GUI इंटरैक्शन में AppleScript की शक्ति दिखाने के लिए मुख्य रूप से इसे पोस्ट करना।

दोहराना
सूची से चुनें {"FAST", "सस्ता", "GOOD"}
यदि परिणाम के आइटम का नंबर <= 2 है
बाहर निकलें दोहराएँ
अन्य
प्रदर्शन चेतावनी "कृपया ध्यान दें दो"
समाप्त
समाप्त

निष्पादन gif

यदि आप मानते हैं कि यह बहुत दूर है, तो कृपया मुझे हटाने के लिए कहें।


यह जंगली है! यह सबसे अंग्रेजी जैसी भाषा है जिसे मैंने कभी देखा है।
ब्रूस पियर्सन

यह वास्तव में बहुत बुरा है कि उनके पास "2 चयनों की आवश्यकता" या उन पंक्तियों के साथ कुछ नहीं है।
ब्रूस पियर्सन

@ ब्रूसपीयरसन हाँ, AppleScript एक अजीब भाषा है। ¯ \ _ (ツ) _ / ever मैं केवल इसे कभी भी छोटे सामान के लिए उपयोग करता हूं, इसके साथ कुछ भी वास्तविक प्राप्त करना बहुत कठिन है।
Addison Crump

ये चेकबॉक्स नहीं हैं, जिससे यह उत्तर नियमों से "बहुत दूर" हो जाता है। मैं आपको हटाने के लिए कहता हूं।
पपड़ी

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 विंडो स्क्रीनशॉट

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