एक मठ प्रतियोगिता ग्रेडर बनाओ


17

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

एक परीक्षण पर मेरा स्कोर प्रत्येक सही उत्तर के लिए चार अंक है, एक प्रश्न के लिए शून्य अंक खाली छोड़ दिया गया है, और प्रत्येक गलत उत्तर के लिए नकारात्मक एक अंक है।

एक प्रोग्राम लिखें जो उपरोक्त स्कोरिंग प्रणाली के अनुसार एक परीक्षा का ग्रेड दे। इनपुट के दो घटक होने चाहिए: एक उत्तर कुंजी जिसके बाद प्रतिक्रियाएं होती हैं। रिक्त छोड़ दिए गए प्रश्नों को रिक्त स्थान के रूप में इनपुट किया जाना है। पहले इनपुट में केवल अक्षर AE (या ae, आपकी पसंद) शामिल होना चाहिए, और यह माना जा सकता है कि इनपुट में कोई व्हाट्सएप नहीं है। दूसरे इनपुट में केवल रिक्त स्थान और अक्षर AE (या ae) होना चाहिए। 30-प्रश्न परीक्षण लागू नहीं करने वाले इनपुट Invalid testको आउटपुट के रूप में प्रिंट करना चाहिए ।

आउटपुट ग्रेड या होना चाहिए Invalid test

बक्शीश

यदि आपका प्रोग्राम अंतिम अंक के बाद नंबर राइट, नंबर लेफ्ट ब्लैंक और नंबर गलत को प्रिंट करता है (aR bB cW), तो 20 बाइट्स हटा दें।

नमूना इनपुट

CABBDCABECDBACDBEAACADDBBBEDDA    //answer key
CABEDDABDC BACDBBAADE  CBBEDDA    //responses

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

कोई बोनस नहीं

73

बक्शीश

73 (20R 3B 7W)

मानक नियम लागू होते हैं। बाइट्स में सबसे छोटा कोड जीतता है।


पहली पंक्ति में रिक्त स्थान के साथ हमें क्या करना चाहिए?
lirtosiast

@ThomasKwa पहली पंक्ति में स्थान नहीं होने चाहिए। Invalid test
आर्कटुरस

2
ऐसा प्रतीत होता है कि आपने उत्तर पोस्ट किए जाने के बाद नियमों को बदल दिया है, जिनमें से कम से कम 2 अमान्य हैं। कृपया कोई बदलाव न करें जो एक चुनौती पोस्ट होने के बाद जवाबों को अमान्य कर सकता है। पोस्टिंग से पहले प्रतिक्रिया प्राप्त करने के लिए सैंडबॉक्स का उपयोग करना एक अच्छा विचार है।
एलेक्स ए।

मुझे लगता है कि यह अंडरहेल्ड के
बिल्ली

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

जवाबों:


7

पायथ, ५३ ५१

?&!-sJ.z+d<G5&FqR30lMJ+sm?qFd4_1CJ/eJd"Invalid test

इसे ऑनलाइन आज़माएं

चेक यह देखने के द्वारा किया जाता है कि क्या पूरे इनपुट में सभी वर्ण हैं जब सभी रिक्त स्थान a-eहोते हैं और हटा दिए जाते हैं, और जाँच करके यदि दोनों तारों की लंबाई है 30

स्कोर गणना दो लाइनों एक साथ ज़िप करने, तब तक के लिए प्रत्येक जोड़ी मानचित्रण द्वारा किया जाता है: (letters are equal) ? 4 : -1। फिर बस मानों को संक्षेप में लिखें, और दूसरी पंक्ति में रिक्त स्थान की संख्या को वापस स्कोर में जोड़ दें।


1
त्रुटियाँ नहीं। (वर्तमान में डेनिस के उत्तर की तुलना में कम बाइट्स ...)
आर्कटिकस

7

गंभीरता से , 86 बाइट्स

,`;l5╙¬=);' UΣS" ABCDE"=(**;l`Mi@)=YWé"Invalid test"0WX@Z```i@;(=5*(' =D+`(;l@)5╙¬=IMΣ

जैसे इनपुट लेता है "CABBDCABECDBACDBEAACADDBBBEDDA", "CABEDDABDC BACDBBAADE CBBEDDA"

इसे ऑनलाइन आज़माएं (आपको मैन्युअल रूप से इनपुट दर्ज करना होगा क्योंकि पर्मलिंक उद्धरण पसंद नहीं करते हैं)

अब बोनस पर काम हो रहा है। नहीं, बोनस जोड़ने से 20 से अधिक बाइट खर्च होंगे।

मुझे पता था कि मैं कुछ भूल रहा था ... Invalid Testएक त्रुटि की स्थिति में मुद्रित नहीं किया जा रहा था। वहाँ बाहर गोल्फ गोल्फ डेनिस की मेरी उम्मीद है।


क्या यह? गंभीरता से? फिर मुझे इसे
अपडाउन

4

जावास्क्रिप्ट (ईएस 6), 134 बाइट्स

संपादित करें: प्रश्न आवश्यकताएँ बदल गईं। यह उत्तर तब से है जब प्रोग्राम को यह सुनिश्चित करने की आवश्यकता होती है कि प्रत्येक उत्तर चरित्र एई है, प्रत्येक प्रतिक्रिया चरित्र एई या स्पेस है और उन दोनों की लंबाई 30 है, और फिर से लौटें Invalid test

(a,r)=>[...a].map((q,i)=>q>"E"|q<"A"?x=1:(c=r[l=i])==" "?0:c>"E"|c<"A"?x=1:c==q?s+=4:s--,s=x=0)&&x|l!=29|r.length!=30?"Invalid test":s

व्याख्या

(a,r)=>                   // a = answer string, r = responses string
  [...a].map((q,i)=>      // iterate over answers, q = answer, i = question number
    q>"E"|q<"A"?x=1:      // x = 1 if answer is invalid
    (c=r[l=i])==" "?0:    // c = question response, l = answer length, add 0 for space
    c>"E"|c<"A"?x=1:      // x = 1 if response is invalid
    c==q?s+=4:s--,        // add 4 if correct, subtract 1 if incorrect
    s=x=0                 // s = total score, x = is invalid
  )&&
    x|l!=29|r.length!=30? // check input lengths for validity
      "Invalid test":
      s                   // return the score

परीक्षा

<input type="text" id="answers" value="CABBDCABECDBACDBEAACADDBBBEDDA" /><br />
<input type="text" id="responses" value="CABEDDABDC BACDBBAADE  CBBEDDA" /><br />
<button onclick='result.innerHTML=(

(a,r)=>[...a].map((q,i)=>q>"E"|q<"A"?x=1:(c=r[l=i])==" "?0:c>"E"|c<"A"?x=1:c==q?s+=4:s--,s=x=0)&&x|l!=29|r.length!=30?"Invalid test":s

)(answers.value,responses.value)'>Go</button><pre id="result"></pre>



3

जावास्क्रिप्ट (फ़ायरफ़ॉक्स 31+), 86 बाइट्स

(x,y)=>(r=i=0,[for(l of y)x[i++]==l?r+=4:r-=l!=' '],i!=30|i-x.length?'Invalid test':r)

उपयोग सरणी समझ जो ES7 के लिए प्रस्तावित है। इस प्रकार समर्थन फिलहाल फ़ायरफ़ॉक्स तक सीमित है।

बोनस के साथ, 106 बाइट्स (126 - 20)

(x,y)=>[r=w=i=0,[for(l of y)x[i++]==l?r++:w+=l!=' '],`${r*4-w} (${r}R ${i-r-w}B ${w}W)`,'Invalid test'][i!=30||i-x.length?3:2]

संपादित करें: पहले मेरा समाधान केवल उत्तर या प्रश्न लंबाई की जाँच करता था, अब दोनों की जाँच करता है।


आप f=शुरुआत में इसे छोड़ सकते हैं और कह सकते हैं कि यह एक मेमने का कार्य उत्पन्न करता है।
कॉनर ओ'ब्रायन

1
@ C @O'Bʀɪᴇɴ धन्यवाद मैं हमेशा यह भूल जाता हूं कि यह परीक्षण से उनके पास है -_-
जॉर्ज रीथ

यह बोनस के बिना काफी कम होगा। 86 बाइट्स:(x,y)=>(r=i=0,[for(l of y)x[i++]==l?r+=4:r-=l!=' '],i!=30|i-x.length?'Invalid test':r)
user81655

@ user81655 सच, धन्यवाद ... मैं इसमें थोड़ा फंस गया ... अकेले टेम्पलेट स्ट्रिंग 34 बाइट्स है
जॉर्ज रीथ

मेरे पास एक समान जवाब है, लेकिन मैंने इसे कॉपी नहीं किया है (मेरा पहला प्रयास मिसाल है, लेकिन मैंने इसे हटा दिया क्योंकि मैं लंबाई नहीं जाँच रहा था)। उस ने कहा: यह 3 upvotes के बावजूद मान्य नहीं है, क्योंकि सीमा ए की जांच नहीं करता है ... ई
edc65

2

जाप , 71 बाइट्स

Japt , Ja vaScri pt का छोटा संस्करण है । दुभाषिया

Ul ¥30©Vl ¥30«(U+V k"[A-E ]+" ?U¬r@VgZ ¥Y?X+4:VgZ ¥S?X:X-1,0 :`InvÃ. È.

.अंत में दो s क्रमशः यूनीप्रोड यूनिकोड वर्ण U + 0017 और U + 0099 होना चाहिए।

यह काम किस प्रकार करता है

Ul ==30&&Vl ==30&&!(U+V k"[A-E ]+" ?Uq r@VgZ ==Y?X+4:VgZ ==S?X:X-1,0 :"Invalid test
                    // Implicit: U = first input, V = second input
Ul ==30&&Vl ==30&&  // If both input lengths are 30, and
!(U+V k"[A-E ]+"?   // removing all ABCDE and spaces from (U+V) results in an empty string:
Uq r@            ,0 //  Reduce U with this function, starting with a value of 0:
VgZ ==Y?            //   If the matching char in V is equal to this char, 
X+4                 //    return previous value + 4.
:VgZ ==S?X          //   Else if the matching char in V is a space, return previous value.
:X-1                //   Else (if it's wrong), return previous value - 1.
:"Invalid test      // Else, return "Invalid test".
                    // Implicit: output last expression

मुझे आशा है कि यह सुनिश्चित करने का एक छोटा तरीका है कि दोनों की लंबाई 30 के बराबर हो। सुझाव का स्वागत है!


2

हास्केल, 144 138 बाइट्स

a%b|map length[a,b]==[30,30]&&"ABCDE"!a&&"ABCDE "!b=show$sum$zipWith(?)a b|0<1="Invalid test"
l!s=all(`elem`l)
_?' '=0
x?y|x==y=4|0<1=0-1

सत्यापन के बिना लगभग 50 होगा। सूँघना

उपयोग: "ABCDEABCDEABCDEABCDEABCDEABCDE" % "AAAAABBBBBCCCCCDDDDDEEEEEAAAAA"


1
! can be defined as all(`elem`l)s, saving 6 bytes.
Zgarb

1
... or go pointfree: g=all.flip elem.
nimi

2

C#, 162 154 148 134 bytes

string g(string k,string a)=>k.Length!=30||a.Length!=30?"Invalid Test!":Enumerable.Range(0,30).Sum(e=>a[e]==' '?0:k[e]==a[e]?4:-1)+"";

Usage

g("CABBDCABECDBACDBEAACADDBBBEDDA", "CABEDDABDC BACDBBAADE  CBBEDDA")

Test

http://csharppad.com/gist/15f7c9c3c8cfce471ff2


You could change it to int s=0,i=0;for(;... to save 3 bytes.
LegionMammal978

This wont work if I input 29 chars for first input and 31 for second.. it should print "invalid test" but will actually try to grade.
Johan

@noisyass2: string x(string k,string a)=>k.Length!=30||a.Length!=30?"Invalid Test!":Enumerable.Range(0,30).Sum(e=>a[e]==' '?0:k[e]==a[e]?4:-1)+""; (134 chars) and considers Johans input.
Stephan Schinkel

+1 for solution, but does this qualify? OP said full program.
Yytsi

Johan nice catch! @StephanSchinkel thanks for the idea on using the delegate and the Enum.range bit. I was able to shave of 3 more chars changing the condition to 30==(k.Length&a.Length)
noisyass2

2

Ruby, 81 characters

->t,s{r=0;30.times{|i|r+=t[i]==s[i]?4:s[i]>' '?-1:0};t.size==30?r:'Invalid test'}

Sample run:

2.1.5 :001 > ->t,s{r=0;30.times{|i|r+=t[i]==s[i]?4:s[i]>' '?-1:0};t.size==30?r:'Invalid test'}['CABBDCABECDBACDBEAACADDBBBEDDA','CABEDDABDC BACDBBAADE  CBBEDDA']
 => 73 

2.1.5 :002 > ->t,s{r=0;30.times{|i|r+=t[i]==s[i]?4:s[i]>' '?-1:0};t.size==30?r:'Invalid test'}['CCCATCH','CABEDDABDC BACDBBAADE  CBBEDDA']
 => "Invalid test" 

2

Java, 183 169 bytes

This was a nice bit of Java 8 practice:

String f(String a,String r){return a.length()==30&r.length()==30?""+IntStream.range(0,30).map(i->a.charAt(i)==r.charAt(i)?4:r.charAt(i)!=' '?-1:0).sum():"Invalid test";}

I'm not a Java Golfer, but I think you can save the String.valueOf by just adding the int to an empty string (""+IntStream....) - I also believe Java allows non-short-circuiting and, so you can remove one of the & and save a byte.
VisualMelon

@VisualMelon महान सुझाव, धन्यवाद। यह मुझे परेशान कर रहा था कि कितने बाइट्स String.valueOf ने उठाए!
आरसीबी

2

ब्रेनफक, 354 बाइट्स

+[--[>]<<+>-],----------[[<<<]>>->[>>>],----------]<<<[<<<]>>+[<-[-------<+>]<.+[---<+>]<.++++++++.[-<+++>]<-.+++++++++++.---.-----.-[---<+>]<-.---[-<++++>]<.+++[-<+++>]<.[---<+>]<----.+.>]>[[>,----------->+++++++[<---<<+++>>>-]<[<<+[>>+<<-]]>[>]<<<[>[>+>+<<-]>>[<<+>>-]>[>>>]>----<<<<[<<<]>>[-]]>[>-<-]>[>>[>>>]>-----<<<<[<<<]>[-]]>>]----[>+++<--]>--.<]

एक दुभाषिया की आवश्यकता होती है जो आपको सेल 0. से बाईं ओर जाने की अनुमति देता है। आउटपुट एक हस्ताक्षरित बाइट है। उदाहरण के लिए, बाइट 0x49उदाहरण इनपुट के लिए 0xFFमुद्रित किया जाता है , और उसी पहली पंक्ति के साथ इनपुट के लिए मुद्रित किया जाता है , लेकिन दूसरी पंक्ति को "सी" और 29 रिक्त स्थान से बदल दिया जाता है।

स्कोर 0 से शुरू होता है, और इनपुट की दूसरी पंक्ति के रूप में इन परिवर्तनों को पढ़ा जाता है:

  • इनपुट सही है: कुछ मत करो
  • इनपुट गलत है: घटाना 5
  • इनपुट एक स्थान है: घटाना 4

अंत में, 120 जोड़ा गया है। यह कार्यात्मक रूप से एक पूर्ण स्कोर मानने और दंड को लागू करने के समान है, बजाय 0 से शुरू होने के।

टिप्पणियों के साथ:

+[--[>]<<+>-]                          Get 29

,----------[[<<<]>>->[>>>],----------] Get first line of input; for each char sub one
                                       from the 29

<<<[<<<]>>+                            Add one to the cell that originally held 29

[                                      If the cell that originally held 29 is nonzero:

  Write "Invalid test"
  <-[-------<+>]<.+[---<+>]<.++++++++.[-<+++>]<-.+++++++++++.---.-----.-[---<+>]<-.---[-<++++>]<.+++[-<+++>]<.[---<+>]<----.+.

>]

>[                                     If the cell to the right is nonzero:

  This block is only ever entered if "Invalid test" isn't written!

  [                                      For all 30 characters of the first input:

    >,                                     Get char from second input to the right

    ----------                             Subtract 10 for consistency

    -                                      Subtract one more

    >+++++++[<---<<+++>>>-]                Subtract 21 (plus above lines = 32)

    <[                                     If it's nonzero:

      <<+[>>+<<-]                            Add 22 to the character

    ]

    >[>]<<<[                                 If the above block wasn't entered:

      >[>+>+<<-]>>[<<+>>-]                   Make a copy of the character from input 1

      >[>>>]>----                            Subtract 4 from the score

      <<<<[<<<]>>[-]                         Go to the cell just before first character

    ]

    >[>-<-]                                Subtract input 1 char from input 2 char

    >[                                     If the result is nonzero:

      >>[>>>]>-----                          Subtract 5 from the score

      <<<<[<<<]>[-]                          Go back to the result and set it to 0

    ]

    >>                                     Move on to next character

  ]

  ----[>+++<--]>--                       Add 120 to score (perfect score)

  .                                      Print score

  <                                      Go to an empty cell to kill loop

]

1

पायथन 3, 187 179 175 165 155 151

lambda a,b:(['Invalid test',sum([-1,4][i==j]for i,j in zip(a,b))+b.count(' ')][len(a)==len(b)==30and set(a)^set('ABCDE')==set(b)^set('ABCDE ')==set()])

1

जावास्क्रिप्ट ES7, 102

हमेशा की तरह, बोनस प्रयास के लायक नहीं है।

(k,h,t=i=0)=>[for(x of h)t+=k[i++]==x?4:1-x?0:-1]|/[^ A-E]/.test(k+h)|i-30|k.length-i?"Invalid test":t

पहले इनपुट में अमान्य स्थानों की जाँच करना (जैसा कि यह मेरे लिए समझ में आता है) 112

(k,h,t=i=0)=>[for(x of h)(y=k[i++])>' '?t+=y==x?4:1-x?0:-1:k=h+h]|/[^ A-E]/.test(k+h)|i-30|k[i]?"Invalid test":t

जब मैंने कोशिश की तो ऊग, सत्यापन ने मेरा आधा कोड लिया: (k,r,s=0)=>/^[A-E]{30}$/.test(k)&&/^[ A-E]{30}$/.test(r)?Object.keys(k).map(i=>k[i]==r[i]?s+=4:s-=r[i]!=' ').pop():'Invalid Test'129 बाइट्स।
नील

1

पायथन 2.7, 131, 116, 109 , 139

मैंने "लघु" अजगर समाधान करने की कोशिश की ... खैर यहाँ यह है, सुझावों का स्वागत से अधिक है

lambda c,d:d.count(' ')+sum([-1,4][a==b]for a,b in zip(c,d)if b!=' ')if not set('ABCDE ')^set(c+d)and len(c)==len(d)==30 else'Test Invalid'

कुछ और पात्रों को जोड़ने से यह अधिक पठनीय बन जाता है ...

def m(c, d):
    if len(c)==len(d)==30:return d.count(' ')+sum((a==b)*4+(a!=b)*-1 for a,b in zip(c,d)if b!=' ')
    return'Test Invalid'

1

प्रोलॉग, 165 बाइट्स

आधे से अधिक बाइट्स अमान्य परीक्षण जांच के लिए हैं।

कोड:

p(X,X,4).
p(_,32,0).
p(_,_,-1).
A*B:-length(A,30),length(B,30),subset(A,`ABCDE`),subset(B,`ABCDE `),maplist(p,A,B,L),sum_list(L,S),write(S);write('Invalid Test').

व्याख्या की:

p(X,X,4).                                       % If corresponding elements are equal, 4p
p(_,32,0).                                      % If answer is 'space', 0p
p(_,_,-1).                                      % Else, -1p
A*B:-length(A,30),length(B,30),                 % Check that input is of correct length
     subset(A,`ABCDE`),subset(B,`ABCDE `),      % Check that input has correct characters
     maplist(p,A,B,L),sum_list(L,S),write(S);   % Create a list of scores (L) and print sum
     write('Invalid Test').                     % If anything failed, write Invalid Test

उदाहरण:

`CABBDCABECDBACDBEAACADDBBBEDDA`*`CABEDDABDC BACDBBAADE  CBBEDDA`.
73

इसे यहाँ ऑनलाइन देखें


1

MATLAB, 92 90 बाइट्स

2 बाइट्स द्वारा मेरे उत्तर को कम करने में मेरी मदद करने के लिए टॉम बढ़ई का धन्यवाद!

function c(q,a),if nnz(q)~=30,t='Invalid test';else s=q-a;t=5*nnz(~s)-sum(s<9);end,disp(t)

उत्तर पत्रक को q और असाइन किए गए उत्तर a को निर्दिष्ट करके फ़ंक्शन को बुलाया जा सकता है । उदाहरण के लिए:

c('CABBDCABECDBACDBEAACADDBBBEDDA','CABEDDABDC BACDBBAADE  CBBEDDA')

इसका जवाब बस स्क्रीन पर छपा है। 8 बाइट्स को बचाया जा सकता है अगर इसे ans = 73 प्रिंट करने की अनुमति दी जाए


के numel(q)साथ बदलकर आप 2 बाइट्स बचा सकते हैं nnz(q)
टॉम कारपेंटर

1

सी # 6.0 -> (270 - 20 = 250) 246 - 20 = 226 बाइट्स

void m(string b,string c){if((b+c).Length==60){var a=new int[3];int s=0;for(int i=0;i<30;i++){if(b[i]==c[i]){a[0]++;s+=4;}else if(c[i]==' ')a[2]++;else{a[1]++;s--;}}Console.Write(s+$" ({a[0]} {a[2]} {a[1]})");}else Console.Write("Invalid test");}

पठनीय और अधूरा संस्करण:

    void m(string b, string c)
    {
        if ((b+c).Length==60)
        {
            var a = new int[3];
            int s = 0;
            for (int i = 0; i < 30; i++)
            {
                if (b[i]==c[i])
                {
                    a[0]++;
                    s+=4;
                }
                else if (c[i] == ' ')a[2]++;
                else
                {
                    a[1]++;
                    s--;
                }
            }
            Console.Write(s+$" ({a[0]} {a[2]} {a[1]})");
        }
        else Console.Write("Invalid test");
    }

वास्तव में बोनस प्राप्त करना चाहता था: डी


अच्छा काम! सामान्य चाल के कुछ है कि यहाँ लागू होते हैं, आप घोषणा कर सकते हैं iसाथ साथ sबाहर पाश के लिए। आप 1 बाइट (हुर्रे!) को बचाने के varलिए घोषित करने के लिए उपयोग कर सकते हैं a। आपको {}अपने कोड में कई घुंघराले ब्रेसिज़ की आवश्यकता नहीं है , जो हमेशा बाइट्स को ट्रिम करने का एक अच्छा तरीका है, और यह हमेशा एएससीआईआई तालिका को देखने के लायक है जब चार्ट की तुलना करते हैं (आप c[i]==' 'असमानता का उपयोग करके कुछ बाइट को बंद कर सकते हैं )। आपको स्ट्रिंग्स के माध्यम से पीछे की ओर गिनने पर भी विचार करना चाहिए - इस मामले में आप लूप को कुछ हद तक रिजेक्ट करके कम से कम 1 बाइट बचा सकते हैं।
विजुअलमेल

दुर्भाग्य से, आपका प्रस्तुतिकरण वर्तमान में मापदंड के साथ जटिल नहीं है, क्योंकि यह अमान्य इनपुट को पहचानने में असमर्थ है।
विजुअलमेल

@VisualMelon आह, मुझे बहुत गूंगा लगता है। मैंने यह सबमिशन स्कूल में लिखा था इसलिए मैं 'अमान्य परीक्षा' आदि जोड़ना भूल गया था, मैं उन्हें जोड़ दूंगा :)
Yytsi

@VisualMelon हाँ, यह प्रस्तुत किया गया था और कक्षा के अंत में स्कूल में लिखा था, मैं इसे संपादित करूँगा। चाल के लिए धन्यवाद :)
Yytsi


0

सी, 273 - 20 = 253 बाइट्स

#include<stdio.h>
#include<string.h>
int main(int c,char**v){char*p=v[1],*q=v[2],*s=" ABCDE",r[]={0,0,0};if(strspn(p,s+1)!=30||p[30]||strspn(q,s)!=30||q[30])puts("Invalid test");else{for(;*p;++q)++r[(*p++!=*q)+(*q==' ')];printf("%d (%dR %dB %dW)",4**r-r[1],*r,r[2],r[1]);}}

मैंने बोनस लिया है, भले ही इसे प्रिंट करने के लिए मेरे पास 23 बाइट्स हों। :-(

व्याख्या

#include <stdio.h>
#include <string.h>
int main(int c,char**v)
{
    char *p=v[1], *q=v[2],      /* arguments */
        *s=" ABCDE",            /* valid chars */
        r[]={0,0,0};            /* results - right, wrong, blank */

    if (strspn(p,s+1) != 30     /* validity check - answer key begins with [A-E]{30} */
        || p[30]                /* and ends there */
        || strspn(q,s) != 30    /* same for answers, but allow space, too */
        || q[30])
    {
        puts("Invalid test");
    } else {
        for ( ;  *p;  ++q)      /* for each answer */
            ++r[(*p++!=*q)+(*q==' ')]; /* increment the appropriate counter */
        printf("%d (%dR %dB %dW)",4**r-r[1],*r,r[2],r[1]); /* print result */
    }
}

अमान्य इनपुट की जाँच करने के लिए दोगुना कोड है क्योंकि उत्तरों को गिनना है - चुनौती का असली मांस forअंत के पास लूप में है। वास्तव में यहाँ एक संस्करण है जो इनपुट को हमेशा मान्य करता है, 163-20 = 143 बाइट्स में:

#include<stdio.h>
int main(int c,char**v){char*p=v[1],*q=v[2],r[]={0,0,0};for(;*p;++q)++r[(*p++!=*q)+(*q==' ')];printf("%d (%dR %dB %dW)",4**r-r[1],*r,r[2],r[1]);}

और एक ही धारणा बनाता है और 133 बाइट्स में केवल स्कोर प्रिंट करता है:

#include<stdio.h>
int main(int c,char**v){char*p=v[1],*q=v[2],r[]={4,-1,0};for(c=0;*p;++q)c+=r[(*p++!=*q)+(*q==' ')];printf("%d",c);}

0

SAS 9.4, 291-20 = 271 बाइट्स (बोनस के साथ), या 231 बाइट्स (बिना बोनस के)

बोनस के साथ:

data a;k='CABBDCABECDBACDBEAACADDBBBEDDA';r='CABEDDABDC BACDBBAADE  CBBEDDA';c=0;b=0;w=0;if length(k) ne 30 then put "Invalid test";do i=1 to 30;if substr(k,i,1)=substr(r,i,1) then c=c+1;else if substr(r,i,1) =' ' then b=b+1;else w=w+1;end;a=cat(c*4-w,' (',c,'R ',b,'B ',w,'W)');put a;run;

बिना बोनस:

data a;k='CABBDCABECDBACDBEAACADDBBBEDDA';r='CABEDDABDC BACDBBAADE  CBBEDDA';c=0;if length(k) ne 30 then put "Invalid test";do i=1 to 30;if substr(k,i,1)=substr(r,i,1) then c=c+4;else if substr(r,i,1)ne' ' then c=c-1;end;put c;run;

सास के पास वास्तव में इनपुट / आउटपुट नहीं है, इसलिए आपको कुंजी के साथ k = '..' को प्रतिस्थापित करना होगा, और प्रतिक्रिया के साथ r = '..' होगा। आउटपुट लॉग में मुद्रित होता है।

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