बेतरतीब ढंग से एक संख्या चुनें जो दो अन्य यादृच्छिक संख्याओं से अलग है


14

दो यादृच्छिक संख्या A और B को 1, 2 या 3 होने के लिए उत्पन्न किया गया है

आपका काम बेतरतीब ढंग से तीसरी संख्या C को चुनना है जो 1,2 या 3 भी हो सकती है। लेकिन, C, A या B की बराबरी नहीं कर सकता है।

  • और हां, A, B को बराबर कर सकता है।
  • यदि A = B है, तो C के केवल दो नंबर बचे हैं, यह हो सकता है।
  • यदि A, B के बराबर नहीं है, तो C के पास केवल एक संख्या है।
  • मान लें कि A और B आपके लिए पहले ही चुने जा चुके हैं

यह कैसे पायथन में ए और बी बनाया जाएगा

A = random.randrange(1,4)
B = random.randrange(1,4)

यह मान लें कि यह पहले से ही आपके कोड में है।

यह सबसे छोटा है जिसे मैं पायथन में लेकर आया हूं

while True:
    C = random.randrange(1,4)
    if C != A and C != B:
        break

यह वही है जो ए, बी और सी के बराबर हो सकता है।

  • 1,2,3
  • 1,1,2
  • 2,3,1
  • 3,3,2

यह वही है जो ए, बी और सी के बराबर नहीं हो सकता है

  • 1,2,1
  • 2,3,3
  • 1,1,1
  • 3,2,3

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

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

अच्छी तरह से मान लें कि ए और बी 1, 2 या 3 के बराबर हो सकते हैं, इसलिए सभी संभावनाओं का अनुमान लगाने के लिए अपने कोड को सही करें।
tysonsmiths

1
मुझे समझ नहीं आ रहा है। क्या कुछ ऐसा है जो मुझे याद आ रहा है या C = (A!=B ? 6-A-B : (!(A-1) ? 2 : 1))काम करता है ? इसके अलावा आपका समाधान अत्यधिक अक्षम है क्योंकि यह समय बर्बाद कर रहा है और संभवतः इसे चलाने के लिए अनंत समय लग सकता है। इसके अलावा, import randomबाइट आकार में मायने रखता है ...
DankMemes

3
तो आप चाहते हैं कि हम मोंटी हॉल सिम्युलेटर लिखें ? ;-)
इल्मरी करोनन

जवाबों:


17

रूबी, 22 अक्षर

([1,2,3]-[A,B]).sample

अभी भी यकीन नहीं हो रहा है अगर मैं सवाल को सही ढंग से समझ गया ...


12

सी, 26

a-b?6-a-b:(rand()%2+a)%3+1

यदि मैंने प्रश्न को सही ढंग से समझा है:

अगर aऔर bअलग हैं, तो कोई यादृच्छिक नहीं है। जवाब 1,2,3 का केवल एक ही है कि अप्रयुक्त है होना चाहिए: 6-a-b

IF aऔर bसमान हैं 2 विकल्प हैं:

a=b=           1 2 3
            return value    
rand()%2=0     2 3 1
rand()%2=1     3 1 2

5

बेफुज ( 156 89 85 74)

ठीक है, यह भयानक है, मुझे पता है। लेकिन यह मेरा पहला Befunge प्रयास है, इसलिए मैं अभी भी बहुत खुश हूं कि यह काम करता है। मुझे यकीन है कि एक बहुत, बहुत बेहतर समाधान है।

<v1p90&p80&
<<@.g70_v#-g70_v#-g70g90g80p70
  v     <      <
^1?v
^3<2
^  <

1
अभी मेरे फोन पर .. यकीन नहीं होता कि कुछ पंक्तियाँ गलती से बदल गईं। जब मैं घर जाऊँगा, तो इसकी जाँच करूँगा।
इंगो बुर्क

मुझे ठीक लगता है। मेरे 99 बाइट के प्रयास से बहुत बेहतर है। मुझे उम्मीद है कि आप बेफिजूल के साथ मस्ती कर रहे होंगे।
एंडोआन जूल

हाँ, मोबाइल संस्करण मोनोपॉज़ नहीं लगता है। Befunge काफी मजेदार है, लेकिन मेरी इच्छा है कि एक सभ्य Befunge-98 दुभाषिया हो (मुझे कोई नहीं मिल सकता ... संपादित करें: rcfunge काम करने लगता है)
Ingo Bürk

3

GolfScript, 13 वर्ण

~0]4,^.,rand=

यह एक पूर्ण गोल्फस्क्रिप्ट प्रोग्राम है जो मानक इनपुट से दो व्हाट्सएप-अलग संख्याओं (प्रत्येक को 1, 2 या 3) माना जाता है, और सेट से एक यादृच्छिक संख्या {1, 2, 3} को आउटपुट करता है जो किसी के बराबर नहीं होता है इनपुट नंबरों का।

इसे ऑनलाइन आज़माएं। (ध्यान दें: लिंक पिछले संस्करण में है; मैं एक मोबाइल डिवाइस पर हूं और इसे ठीक नहीं कर सकता।)

यहाँ कार्यक्रम का एक टिप्पणी संस्करण है:

~         # eval the input, pushing the input numbers onto the stack
0         # push the number 0 onto the stack
]         # collect all the numbers on the stack into an array
4,        # create another array containing the numbers 0, 1, 2 and 3
^         # xor the arrays (i.e. take their symmetric set difference)
.,rand=   # choose a random element from the array

यदि आप नामांकित फ़ंक्शन को पसंद करते हैं जो स्टैक पर तर्क के रूप में दो नंबर लेता है, तो कुछ और वर्ण लेता है:

{[\0]4,^.,rand=}:f;

फ़ंक्शन का वास्तविक निकाय स्टैंड-अलोन कोड की तुलना में केवल एक चार गुना लंबा है (क्योंकि हमें [यह सुनिश्चित करने की आवश्यकता है कि हम केवल दो तर्कों का उपभोग करते हैं), लेकिन कोड को एक ब्लॉक में लपेटने और इसे एक प्रतीक को असाइन करने में पांच से पांच लगते हैं कुल 19 के लिए और अधिक चार्ट।

वैकल्पिक रूप से, आप सचमुच दो नंबर चर में सौंपा है, तो Aऔर B, और चाहते हैं तीसरे नंबर करने के लिए सौंपा Cहै, वह भी 19 वर्ण में किया जा सकता:

4,[0A B]^.,rand=:C;

(यदि स्टैक पर तीसरा नंबर छोड़ना स्वीकार्य है, तो आप :C;अंत को छोड़ सकते हैं ।)

Ps। सुझाव का उपयोग करने के लिए धन्यवाद ^, हावर्ड।


इसके बजाय \-आप उपयोग कर सकते हैं ^
हावर्ड

3

अजगर - 35

C=random.sample({1,2,3}-{A,B},1)[0]

यादृच्छिक मान लिया गया है, जो प्रश्न में निर्दिष्ट प्रतीत होता है।

PYG - 25

C=RSm({1,2,3}-{A,B},1)[0]

2

अजगर, 14 वर्ण

मैंने इसे हर 9 संभावित मामलों के लिए आज़माया और यह ठीक काम करने लगता है!

C=A^B or A^1|2

(संपादित करें): जैसा कि edc65 ने बताया है, यह वैध नहीं है क्योंकि यह यादृच्छिक नहीं है ... मैंने प्रश्न के उस हिस्से को याद किया और मैं अभी बेवकूफ महसूस कर रहा हूं।


3
यादृच्छिक नहीं
edc65

फिर भी, प्रवेश के लिए +1
श्री लिस्टर

2

Befunge - 99 बाइट्स

&:01p&:11p-!!#v_v
   @,g2+g11g10< "
   321 vv*2g<"v ^
 2v v v 5v*2^10<"
 v?v?v?vp5     ^<
 2 3 1 2<        
 > > > >.@       

बहुत प्रभावशाली नहीं है।


2

पॉवरशेल, 21

1..3-ne$A-ne$B|random

बहुत सीधा है। इस तथ्य का दुरुपयोग करना कि तुलना ऑपरेटर अपने बाएं ऑपरेंड के रूप में एक सरणी के साथ अलग तरह से कार्य करते हैं।


तुलना ऑपरेटरों के बारे में अच्छी टिप। मुझे मेरी कुछ पुरानी लिपियों को देखना चाहता है और देखता है कि क्या ऐसी जगहें हैं जिनका उपयोग किया जा सकता है। विशेष रूप से, यह मुझे मोंटी हॉल सिम्युलेटर के हिस्से की याद दिलाता है।
इज़्ज़ी

1

गणितज्ञ, 37 बाइट्स

RandomChoice@DeleteCases[{1,2,3},a|b]

मूल रूप से रूबी उत्तर के समान है, लेकिन मैथमेटिका के फ़ंक्शन नामों के लिए बहुत अधिक धन्यवाद। मैं लोअर-केस वैरिएबल का उपयोग कर रहा हूं, क्योंकि अपर-केस के नाम बिल्ट-इन के साथ टकरा सकते हैं (वे इस मामले में नहीं करते हैं, लेकिन आप केवल मैथेमैटिका में ऐसा नहीं करते हैं)।


1

आर, 42 चरस

x=c(1,1,1);x[c(A,B)]=0;C=sample(1:3,1,p=x)

वेक्टर xवेक्टर के तत्वों को प्राप्त करने के लिए संभाव्यता भार का वेक्टर है। यह पहली बार में प्रत्येक के लिए 1 पर सेट है, फिर ए और बी से संबंधित तत्व 0 पर सेट हैं, इसलिए उनके पास चुने जाने का कोई मौका नहीं है।



1

CJam - 12

4,[AB0]-mr0=

यह मानता है कि चर ए और बी पहले ही सेट किए जा चुके हैं, सवाल के अनुसार।

आप इसे http://cjam.aditsu.net/ पर आज़मा सकते हैं

यादृच्छिक संख्याओं के साथ इसका परीक्षण करने के लिए, इसका उपयोग करें:

"A="3mr):A", B="3mr):B", C="
4,[AB0]-mr0=

विशिष्ट मानों के साथ इसका परीक्षण करने के लिए, उपयोग करें (उदाहरण के लिए):

"A="1:A", B="1:B", C="
4,[AB0]-mr0=

स्पष्टीकरण:

4,सरणी बनाता है [0 1 2 3] सरणी
[AB0]-से संख्या A, B और 0 को हटाता
mrहै शेष सरणी
0=को पहले तत्व लेता है

एक भविष्य CJam संस्करण में यह कार्यक्रम 2 बाइट्स छोटा होगा :)



1

जेएस, 35

ब्रैंडन अंजल्दी के जवाब से प्रेरित

A=1; // init
B=3; // init
do{C=1+new Date%3}while(C==A||C==B) // 35b

0

जूलिया, 32 या 56 नियमों के आधार पर

julia> r()=rand(1:3);f(x...)=(i=r();i in x?f(x...):i)
julia> f(r(),r())

32 अगर मुझे एक और बी उत्पन्न करने की आवश्यकता नहीं है।


सवाल कहता है "मान लीजिए कि ए और बी पहले से ही आपके लिए चुने गए हैं"।
nyuszika7h

0

जेएस, ४३

for(C=0;~[0,A,B].indexOf(C);)C=1+new Date%3

नहीं चलेंगे। आप परिभाषित करना चाहते हैं Aऔर Bपहले कर सकते हैं।
३४ पर स्पेलवर्ड जूल

ठीक है, सवाल कहता है: "ए और बी को पहले से ही आपके लिए चुना गया है"। इसलिए आपको पहले "A = 1 + नया दिनांक% 3; B = 1 + नया दिनांक% 3" चलाना चाहिए।
XEM

0

TI-BASIC, 23

Lbl 1:If C=A+B=A:Goto 1

संचालन के आदेश के कारण काम नहीं करता है; इसके अतिरिक्त आपने वास्तव में कभी भी यादृच्छिक संख्या उत्पन्न नहीं की है।
lirtosiast

0

जावा - 126 123 83 85 (चतुर का उपयोग करके c=6-a-b)

int c;if(a==b){int r=(int)(Math.random()*2);c=a==1?r+2:a==2?2*r+1:r+1;}else{c=6-a-b;}

पूर्ण संस्करण:

public void test(int a, int b) {
    int c;
    if (a == b) {
        // Random 0 or 1.
        int r = (int)Math.random()*2;
        c = // 1 -> 2 or 3
                a == 1 ? r + 2
                // 2 -> 1 or 3
                : a == 2 ? 2 * r + 1
                // 3 -> 1 or 2
                : r + 1;
    } else {
        // Whichever is not taken.
        //int[][] r = {{0, 3, 2}, {3, 0, 1}, {2, 1, 0}};
        //c = r[a - 1][b - 1];
        // Using @steveverrill's clever
        c = 6 - a - b;
    }
    System.out.println("a=" + a + " b=" + b + " c=" + c);
}

लेकिन 6-एबी यादृच्छिक नहीं है, है ना? :)
ज़ेम

1
@xem - नहीं - लेकिन इसका उपयोग केवल 6-a-bतब होता है जब कोई अन्य विकल्प नहीं होता है, अन्य दोनों को लिया जाता है। यह 1, 2, 3 से इसे नहीं चुना जाता संख्या उठा के एक चालाक रास्ता है 6-1-2 = 3, 6-1-3=2, 6-2-3=1इसलिए प्रत्येक गैर-बराबर एक के लिए, ख 6-a-bतीसरा चुनता है। चतुर एह? जब आप यादृच्छिक का उपयोग कर सकते हैं केवल एक ही समय है a==b
ओल्डकर्मुडीनगर

बहुत अच्छे। तब अच्छी नौकरी।
क्लेम em

0

आर, 24 वर्ण

के साथ आरंभ करें

a = sample(1:3,1)
b = sample(1:3,1)

फिर

n=1:3;n[!n%in%c(a,b)][1]

या बस n=1:3;n[!n%in%c(a,b)]लेकिन फिर आप दोनों नंबर वापस करते हैं।


0

आर, 31 वर्ण

sample(rep((1:3)[-c(A,B)],2),1)

यदि आप sample(x)आर में करते हैं , तो यह एक यादृच्छिक नमूने के रूप में व्याख्या करता है 1:x। वेक्टर को (1:3)[-c(A,B)]दो बार दोहराना इसे रोकने का एक तरीका है।


0

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

r=(y,z)=>Math.floor(Math.random()*(z-y+1)+y);a=b=r(1,3);while(c==a)c=r(1,3);

1
Math.floor को ~~ द्वारा प्रतिस्थापित किया जा सकता है। आप r = (y, z) => y + नई तिथि (zy) भी कह सकते हैं। इसके अलावा, A और B समान नहीं हैं, और आपको उनके स्कोर की गणना नहीं करनी है।
xem

@xem A और B यादृच्छिक होने के लिए हैं। नियम कहते हैं कि वे समान हो सकते हैं। इसके अलावा, ES6 के बारे में निश्चित नहीं है, लेकिन y+New Date(z-y)एक
SyntaxError है

y+new Date(z-y)दूसरी तरफ @xem new Date()स्ट्रिंग के साथ रिपोर्ट करता yहै।
स्प्रेडवर्ड

टाइपो के लिए खेद है, मेरा मतलब था y + नई तारीख% (zy) ... या (z-y + 1) पर आधारित है।
xem

और ए और बी के बारे में मेरी टिप्पणी "ए = बी = आर (1,3)" के बारे में थी। यदि आप ऐसा करते हैं, जो हमेशा बी के बराबर होता है, लेकिन ऐसा नहीं है जो नियम पूछते हैं। वे ए और बी यादृच्छिक के लिए पूछते हैं। वे समान हो सकते हैं लेकिन जरूरी नहीं
xem


0

जावा, 264 बाइट्स

Random r = new Random();ArrayList<Integer> s = new ArrayList<>();ArrayList<Integer> q = new ArrayList<>();for(int i=0; i<n; i++) s.add(r.nextInt(k));q.add(s.get(r.nextInt(n)));q.add(s.get(r.nextInt(n)));int x;do{x = s.get(r.nextInt()); }while(!q.contains(x));

यह कोड n0 से अलग यादृच्छिक संख्या उत्पन्न करता है k


0

J ( 21 19: मेरी पसंद के लिए बहुत लंबा)

({~?@#)(>:i.3)-.A,B

क्या उस चर असाइनमेंट को हटाने में मदद करने के लिए आसपास कोई जादूगर हैं? यह केवल 2 वर्ण छोटा है ...

या, अगर यह यादृच्छिक होना नहीं है, तो आप इसके साथ कर सकते हैं:

{:(i.4)-.A,B

12 वर्ण।



0

जावास्क्रिप्ट - 41 (46 तक) 37 35 34 30

अपडेट किया गया:

सी में स्टीववेइरिल के उत्तर से प्रेरित होकर, इसे संशोधित करके इसे 30 चार्ट तक नीचे लाने का प्रबंधन किया गया।

C=A-B?6-A-B:1+(A+new Date%2)%3


शुक्रिया nyuszika7h मुझे नीचे लाने के लिए 34 ~ के लिए:

C=A;while(C==A|C==B)C=1+new Date%3

उसके साथ बराबरी पर गिरने के लिए xem के उत्तर से उधार लेना:

C=A;while(C==A||C==B)C=1+new Date%3

मुझे याद दिलाने के लिए धन्यवाद 1+new Date%3 === (new Date%3)+1!

पिछला समाधान:

C=A;while(C==A||C==B)C=(new Date%3)+1

while()संतुष्ट होने की स्थिति सुनिश्चित करें , और जब तक वे नहीं हों, तब तक लूप करें।


अन्य समाधान:

C=A!=B?6-A-B:A%2!=0?4-B:new Date%2!=1?3:1;

यह मानता है कि Cपहले से ही घोषित किया गया है या कि जावास्क्रिप्ट दुभाषिया अघोषित चर को संभाल सकता है।

हालाँकि, यदि JS दुभाषिया EOL को सेमीकोलन के बिना संभाल सकता है, तो इसे 41 तक नीचे लाया जा सकता है।

C=A!=B?6-A-B:A%2!=0?4-B:new Date%2!=1?3:1

यदि Cघोषित नहीं किया गया है, और इसके लिए कोई त्रुटि सुधार नहीं है, तो यह 46 वर्णों तक टैली लाएगा।

var C=A!=B?6-A-B:A%2!=0?4-B:new Date%2!=1?3:1;

परीक्षण कार्यक्रम:

var iterations = 100;

for(var i = 0;i<iterations;i++) {
    var A = Math.floor(Math.random() * 3) + 1;
    var B = Math.floor(Math.random() * 3) + 1;
    C=A!=B?6-A-B:A%2!=0?4-B:new Date%2!=1?3:1
    if (C === A || C === B || C > 3 || C < 1) {
        console.log('FAILURE!');
        console.log(A + ',' + B + ',' + C)
        return;
    }
    console.log(A+','+B+','+C);
}

महान! मैंने इस पर आधारित एक 35b उत्तर दिया, लेकिन एक डू-लूप का उपयोग करते हुए;)
xem

आपको |इसके बजाय उपयोग करने में सक्षम होना चाहिए ||
nyuszika7h

लूप के लिए 1 बाइट बचाएं:for(C=A;C==A|C==B;)C=1+new Date%3
जूल

मैं बस उनकी मदद के लिए सभी को धन्यवाद देना चाहता हूं :)
ब्रैंडन अंजल्दी

0

Befunge-98 (57 बाइट्स)

यह कोड मानता है कि संख्याएँ स्टडिन पर इनपुट होंगी। यह एक यादृच्छिक संख्या को चुन लेगा यदि पहली संख्या दोनों भिन्न होने तक समान हो, अन्यथा यह अंतिम उपलब्ध संख्या का चयन करेगी।

6&::11p&:12pw>   ?1  >#<:11g-!_.@
     @.-g21-<>3;#[2#;^

-3

पायथन, 54 41 वर्ण

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

// [0] इसका मतलब है कि यह पहला तत्व है

C=[i for i in[1,2,3]if not(i in(A,B))][0]

यह कैसे यादृच्छिक है?
user80551

यह खेद नहीं है ...
Caridorc

@ user80551 क्या यह होना चाहिए?
जॉन ड्वोरक

1
@JDDvorak हां: "आपका काम बेतरतीब ढंग से तीसरा नंबर चुनना है ..." (मुझे लगता है कि इस सवाल में कुछ और जोर देने की जरूरत है, क्योंकि कई ने इसे गलत पाया है)
daniero
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.