首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >制作数学竞赛分级机

制作数学竞赛分级机
EN

Code Golf用户
提问于 2015-11-25 03:28:37
回答 8查看 1.3K关注 0票数 16

我喜欢参加由美国数学荣誉协会Mu Alpha Theta举办的数学竞赛。在比赛中,我参加了一个30题的选择题测试.每个问题有五种选择,标有A到E。

我在考试中的分数是每一个正确答案4分,空白处零分,每一个错误答案负1分。

根据上面的评分系统,编写一个评分程序。输入应该有两个组件:一个应答键,后面跟着响应。留空的问题将作为空白输入。第一个输入必须只包含字母a(或a,您的选择),并且可以假定输入中没有空格。第二个输入必须只包含空格和字母a(或a)。没有实现30个问题测试的输入必须输出Invalid test作为输出。

输出应该是等级或Invalid test

奖金

如果您的程序打印的数字为右,数字左空白,数字错误后,最终得分为(aR bB cW),删除20个字节。

样本输入

代码语言:javascript
复制
CABBDCABECDBACDBEAACADDBBBEDDA    //answer key
CABEDDABDC BACDBBAADE  CBBEDDA    //responses

样本输出

无奖金

代码语言:javascript
复制
73

奖金

代码语言:javascript
复制
73 (20R 3B 7W)

适用标准规则。以字节为单位的最短代码获胜。

EN

回答 8

Code Golf用户

发布于 2015-11-25 04:54:44

JavaScript (ES6),134个字节

编辑:问题要求发生了变化。这个答案来自程序需要确保每个应答字符是make,每个响应字符是make或空格,它们都有30的长度,否则返回Invalid test

代码语言:javascript
复制
(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

解释

代码语言:javascript
复制
(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

测试

代码语言:javascript
复制
<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>
票数 4
EN

Code Golf用户

发布于 2015-11-25 17:57:26

杰夫特,71字节

Japt是JavaScript的简写版本。解释器

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

最后的两个.s应该分别是不可打印的Unicode字符U+0017和U+0099。

是如何工作的

代码语言:javascript
复制
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
EN

Code Golf用户

发布于 2016-01-12 16:47:18

Ruby,81个字符

代码语言:javascript
复制
->t,s{r=0;30.times{|i|r+=t[i]==s[i]?4:s[i]>' '?-1:0};t.size==30?r:'Invalid test'}

样本运行:

代码语言:javascript
复制
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
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/64717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档