수학 경쟁 학년 만들기


17

저는 미국의 수학 영예 사회 인 Mu Alpha Theta가 운영하는 수학 경쟁에 참여하는 것을 좋아합니다. 경쟁에서 나는 30 질문 객관식 시험을 치릅니다. 질문 당 5 개 중에서 A부터 E까지의 레이블이 있습니다.

시험에서 내 점수는 각 정답에 대해 4 점, 빈칸으로 남은 질문에 대해 0 점, 각 오답에 대해 음수로 1 점입니다.

위의 채점 시스템에 따라 시험을 채점하는 프로그램을 작성하십시오. 입력에는 두 가지 구성 요소가 있어야합니다. 응답 키와 응답이 있습니다. 비워 둔 질문은 빈칸으로 입력해야합니다. 첫 번째 입력은 문자 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.
Arcturus

2
답변을 게시 한 후 규칙을 변경 한 것으로 보이며이 중 2 개 이상이 무효화되었습니다. 챌린지가 게시 된 후 답변을 무효화 할 수있는 변경을 수행하지 마십시오. 게시하기 전에 샌드 박스를 사용하여 피드백을받는 것이 좋습니다.
Alex A.

나는 이것이 언더 핸드
고양이

대소 문자 구분은 어떻습니까? 또한 내 언어가 공백으로 인해 마음에 들지 않으면 어떻게해야합니까? 입력에서 공백을 대신 밑줄로 지정할 수 있습니까?
고양이

답변:


7

피스, 53 51

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

온라인으로 사용해보십시오

모든 공백 a-e이 제거되고 제거 될 때 전체 입력에 문자가 포함되어 있는지 확인하고 두 문자열에 length가 있는지 확인하여 점검합니다 30.

점수 계산은 두 줄을 함께 압축 한 다음 각 쌍을 다음에 매핑하여 수행됩니다 (letters are equal) ? 4 : -1. 그런 다음 간단히 값을 합산하고 두 번째 줄의 공백 수를 다시 점수에 추가합니다.


1
오류가 없습니다. (현재 Dennis의 답변보다 적은 바이트 수 ...)
Arcturus

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

자바 스크립트 (ES6), 134 바이트

편집 : 질문 요구 사항이 변경되었습니다. 이 답변은 프로그램이 각 응답 문자가 AE인지, 각 응답 문자가 AE 또는 공백인지 확인하고 둘 다 길이가 30이고 그렇지 않으면 return 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

CJam, 60 바이트

2{l_,30=\N?}*_2$|S'F,65>+-!@2$.{=4W?}@' f=+:+"Invalid test"?

CJam 통역사 에서 온라인으로 사용해보십시오 .


3

자바 스크립트 (Firefox 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에 제안 된 배열 이해를 사용합니다. 따라서 지원은 현재 Firefox로 제한됩니다.

보너스 포함, 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ʀɪᴇɴ 고마워 항상 테스트 중임을 잊어 버렸습니다 -_-
George Reith

보너스 없이는 훨씬 짧을 것입니다. 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 바이트입니다
George Reith

나는 매우 비슷한 대답을 가지고 있지만 이것을 복사하지 않았습니다 (첫 번째 시도는 선행하지만 길이를 확인하지 않아 삭제했습니다). 그것은 말했다 : 이것은 범위 3을 확인하지 않기 때문에 3 upvotes에도 불구하고 유효하지 않습니다 ... E
edc65

2

apt , 71 바이트

JaptJa vaScri pt 의 단축 버전입니다 . 통역사

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

.끝에 있는 두 개 는 각각 인쇄 할 수없는 유니 코드 문자 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
!all(`elem`l)s6 바이트를 절약하여 로 정의 할 수 있습니다 .
Zgarb

1
... 또는 pointfree로 이동하십시오 : g=all.flip elem.
니미

2

C #을 162 154 148 134 바이트

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)+"";

용법

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

테스트

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


int s=0,i=0;for(;...3 바이트를 저장 하도록 변경할 수 있습니다 .
LegionMammal978

첫 번째 입력에 29자를 입력하고 두 번째에 31을 입력하면 작동하지 않습니다. "잘못된 테스트"를 인쇄해야하지만 실제로 등급을 매기려고합니다.
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 자) 및 Johans 입력을 고려합니다.
Stephan Schinkel

솔루션 +1이지만 자격이 되나요? OP는 전체 프로그램을 말했다.
Yytsi

요한 좋은 캐치! @StephanSchinkel은 대리자와 Enum.range 비트를 사용하는 아이디어에 감사드립니다. 조건을 30 == (k.Length & a.Length)로 변경 한 3 개의 문자를 더 면도 할 수있었습니다
noisyass2

2

루비, 81 자

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

샘플 실행 :

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

자바, 183 169 바이트

이것은 좋은 Java 8 연습이었습니다.

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";}

나는 자바 골퍼 아니지만, 난 당신이 저장할 수 있습니다 생각 String.valueOf만 (빈 문자열로 INT를 추가하여 ""+IntStream....당신이 중 하나를 제거 할 수 있도록, 나는 또한 자바가 아닌 짧은 - 단락 수 믿고 -) &와 바이트 저장 .
VisualMelon

@VisualMelon 훌륭한 팁, 감사합니다. String.valueOf가 차지한 바이트 수를 짜증나게했습니다!
RCB

2

brainfuck, 354 바이트

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

셀 0에서 왼쪽으로 이동할 수있는 인터프리터가 필요합니다. 출력은 부호있는 바이트입니다. 예를 들어, 바이트 0x49는 예제 입력에 0xFF대해 인쇄되고 동일한 첫 번째 행에 대한 입력을 위해 인쇄되지만 두 번째 행은 "C"및 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 바이트입니다.
Neil

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 바이트 줄 이도록 도와 준 Tom Carpenter에게 감사합니다!

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

답은 단순히 화면에 인쇄됩니다. ans = 73 을 인쇄 할 수 있으면 8 바이트를 저장할 수 있습니다.


당신은 대체하여 2 바이트를 절약 할 수 numel(q)와 함께 nnz(q).
톰 카펜터

1

C # 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");
    }

정말 보너스를 원했습니다 : D


잘 했어! 여기에 적용되는 몇 가지 일반적인 트릭 은 for 루프 외부 i와 함께 선언 할 수 있습니다 s. 1 바이트 (hurrah!)를 저장 var하고 선언 하는 데 사용할 수 있습니다 a. {}코드에는 중괄호가 많이 필요하지 않으므로 항상 바이트를 자르는 좋은 방법이며, 문자를 비교할 때 항상 ASCII 테이블을 살펴볼 가치가 있습니다 ( c[i]==' '부등식을 사용하여 바이트를 약간 중단 할 수 있음 ). 또한 문자열을 거꾸로 세는 것도 고려해야합니다.이 경우 for 루프를 약간 조정하여 최소 1 바이트를 절약 할 수 있습니다.
VisualMelon

불행히도 제출은 유효하지 않은 입력을 인식 할 수 없기 때문에 현재 기준과 공모하지 않습니다.
VisualMelon

@ VisualMelon 아, 너무 바보 같아요. 내가 :) 내가 그들을 추가 할 것 등을 '무효 시험'일을 추가하는 것을 잊었다 그래서 나는 학교에서이 제출을 썼다
Yytsi

@VisualMelon 예, 수업이 끝날 때 학교에서 제출하고 작성했습니다. 편집하겠습니다. 트릭 주셔서 감사합니다 :)
Yytsi

0

Groovy 2.4.5, 107 바이트

이전 자바 답변 의 간단한 번역 .

f={a,b->a.length()==30&b.length()==30?(0..29).collect{a[it]==b[it]?4:b[it]!=' '?-1:0}.sum():'Invalid test'}

0

C, 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;

Sas에는 실제로 입 / 출력이 없으므로 k = '..'를 키로 바꾸고 r = '..'를 응답으로 바꿔야합니다. 출력이 로그에 인쇄됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.