Làm một cuộc thi toán học


17

Tôi thích tham gia các cuộc thi toán do Mu Alpha Theta, một xã hội danh dự toán học ở Hoa Kỳ điều hành. Tại các cuộc thi, tôi làm bài kiểm tra trắc nghiệm 30 câu hỏi. Có năm lựa chọn cho mỗi câu hỏi, được dán nhãn từ A đến E.

Điểm của tôi trong bài kiểm tra là bốn điểm cho mỗi câu trả lời đúng, không có điểm nào cho một câu hỏi để trống và một điểm cho mỗi câu trả lời sai.

Viết chương trình chấm điểm bài kiểm tra theo hệ thống tính điểm trên. Cần có hai thành phần cho đầu vào: một phím trả lời theo sau là các câu trả lời. Các câu hỏi còn trống sẽ được nhập vào dưới dạng khoảng trắng. Đầu vào đầu tiên phải chỉ chứa các chữ cái AE (hoặc ae, sự lựa chọn của bạn) và có thể giả định rằng không có khoảng trắng trong đầu vào. Đầu vào thứ hai chỉ phải chứa khoảng trắng và các chữ cái AE (hoặc ae). Đầu vào không thực hiện kiểm tra 30 câu hỏi phải in Invalid testdưới dạng đầu ra.

Đầu ra phải là lớp hoặc Invalid test.

Tặng kem

Nếu chương trình của bạn in đúng số, số còn trống và số sai sau khi điểm cuối cùng là (aR bB cW), hãy lấy ra 20 byte.

Đầu vào mẫu

CABBDCABECDBACDBEAACADDBBBEDDA    //answer key
CABEDDABDC BACDBBAADE  CBBEDDA    //responses

Sản lượng mẫu

Không có tiền thưởng

73

Tặng kem

73 (20R 3B 7W)

Quy tắc tiêu chuẩn áp dụng. Mã ngắn nhất trong byte thắng.


Chúng ta nên làm gì với khoảng trắng trong dòng đầu tiên?
lirtosiast

@ThomasKwa Không nên có khoảng trắng ở dòng đầu tiên. Invalid test.
Arcturus

2
Có vẻ như bạn đã thay đổi các quy tắc sau khi câu trả lời được đăng, làm mất hiệu lực ít nhất 2 trong số đó. Xin vui lòng không thực hiện thay đổi có thể làm mất hiệu lực câu trả lời sau khi một thách thức được đăng. Nên sử dụng Sandbox để nhận phản hồi trước khi đăng.
Alex A.

Tôi nghĩ rằng điều này sẽ thú vị hơn khi được lót tay
con mèo

Làm thế nào về trường hợp nhạy cảm? Ngoài ra, nếu ngôn ngữ của tôi ... không được tạo bởi khoảng trắng thì sao? Tôi có thể chỉ định khoảng trắng trong đầu vào phải là dấu gạch dưới thay thế không?
mèo

Câu trả lời:


7

Bình thường, 53 51

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

Dùng thử trực tuyến

Việc kiểm tra được thực hiện bằng cách xem liệu toàn bộ đầu vào có chứa bất kỳ ký tự nào khi tất cả các khoảng trắng và a-eđược loại bỏ hay không và bằng cách kiểm tra xem cả hai chuỗi có độ dài hay không 30.

Việc tính toán điểm được thực hiện bằng cách nén hai dòng lại với nhau, sau đó bằng cách ánh xạ từng cặp thành : (letters are equal) ? 4 : -1. Sau đó, chỉ cần tổng hợp các giá trị và thêm số lượng khoảng trắng trong dòng thứ hai trở lại điểm số.


1
Không có lỗi. (Hiện tại ít byte hơn câu trả lời của Dennis ...)
Arcturus

7

Nghiêm túc , 86 byte

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

Có đầu vào như "CABBDCABECDBACDBEAACADDBBBEDDA", "CABEDDABDC BACDBBAADE CBBEDDA"

Hãy thử trực tuyến (bạn sẽ phải nhập thủ công đầu vào vì permalinks không thích dấu ngoặc kép)

Làm việc trên tiền thưởng bây giờ. Không, thêm tiền thưởng sẽ có giá hơn 20 byte.

Tôi biết rằng tôi đã quên một cái gì đó ... Invalid Testđã không được in trong trường hợp có lỗi. Hy vọng của tôi về việc chơi golf ngoài Dennis.


Phải không? Nghiêm túc? Sau đó, tôi phải nâng cấp nó
edc65

4

JavaScript (ES6), 134 byte

Chỉnh sửa: Các yêu cầu câu hỏi đã thay đổi. Câu trả lời này là từ khi chương trình cần để đảm bảo mỗi ký tự trả lời là AE, mỗi ký tự phản hồi là AE hoặc khoảng trắng và cả hai đều có độ dài 30, khác trả về 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

Giải trình

(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

Kiểm tra

<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

JavaScript (Firefox 31+), 86 byte

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

Sử dụng hiểu mảng được đề xuất cho ES7. Do đó, hỗ trợ được giới hạn cho Firefox trong thời điểm này.

Có thưởng, 106 byte (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]

Chỉnh sửa: Trước đây giải pháp của tôi chỉ kiểm tra câu trả lời hoặc độ dài câu hỏi, bây giờ kiểm tra cả hai.


Bạn có thể bỏ qua phần f=đầu và nói rằng điều này tạo ra hàm lambda.
Conor O'Brien

1
@ CᴏɴᴏʀO'Bʀɪᴇɴ Cảm ơn tôi luôn quên nó trong bài kiểm tra của họ -_-
George Reith

Điều này sẽ ngắn hơn đáng kể mà không có tiền thưởng. 86 byte:(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 Đúng, cảm ơn ... Tôi đã có một chút bị cuốn vào nó ... chỉ riêng chuỗi mẫu là 34 byte
George Reith

Tôi có một câu trả lời rất giống nhau, nhưng tôi đã không sao chép câu này (lần thử đầu tiên của tôi là tiền lệ, nhưng tôi đã xóa nó vì tôi không kiểm tra độ dài). Điều đó nói rằng: điều này không hợp lệ mặc dù có 3 upvote, vì không kiểm tra phạm vi A ... E
edc65

2

Japt , 71 byte

Japt là phiên bản rút gọn của Ja vaScri pt . Thông dịch viên

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

Hai .s ở cuối phải là các ký tự Unicode không thể in được lần lượt là U + 0017 và U + 0099.

Làm thế nào nó hoạt động

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

Tôi hy vọng có một cách ngắn hơn để đảm bảo cả hai độ dài đều bằng 30. Đề xuất chào mừng!


2

Haskell, 144 138 byte

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

Sẽ là khoảng 50 mà không có xác nhận. sụt sịt .

Sử dụng: "ABCDEABCDEABCDEABCDEABCDEABCDE" % "AAAAABBBBBCCCCCDDDDDEEEEEAAAAA"


1
!có thể được định nghĩa là all(`elem`l)s, tiết kiệm 6 byte.
Zgarb

1
... Hoặc đi vô nghĩa : g=all.flip elem.
nimi

2

C #, 162 154 148 134 byte

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

Sử dụng

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

Kiểm tra

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


Bạn có thể thay đổi nó int s=0,i=0;for(;...để lưu 3 byte.
LegionMammal978

Điều này sẽ không hoạt động nếu tôi nhập 29 ký tự cho đầu vào đầu tiên và 31 cho lần thứ hai .. nó sẽ in "kiểm tra không hợp lệ" nhưng thực sự sẽ cố gắng chấm điểm.
Johan

@ noisyass2: chuỗi x (chuỗi k, chuỗi a) => k. Độ dài! = 30 || a. Độ dài! = 30? [e] == ''? 0: k [e] == a [e]? 4: -1) + ""; (134 ký tự) và xem xét đầu vào của Johans.
Stephan Schinkel

+1 cho giải pháp, nhưng điều này có đủ điều kiện không? OP cho biết chương trình đầy đủ.
Yytsi

Johan bắt tốt đẹp! @StephanSchinkel cảm ơn bạn đã sử dụng bit đại biểu và bit Enum.range. Tôi đã có thể cạo thêm 3 ký tự thay đổi điều kiện thành 30 == (k.Lipse & a.Lipse)
ồn ào2

2

Ruby, 81 ký tự

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

Chạy mẫu:

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 byte

Đây là một chút hay của thực hành 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";}

Tôi không phải là một Golfer Java, nhưng tôi nghĩ bạn có thể lưu nó String.valueOfbằng cách thêm int vào một chuỗi rỗng ( ""+IntStream....) - Tôi cũng tin rằng Java cho phép không bị đoản mạch và vì vậy bạn có thể xóa một trong số đó &và lưu một byte .
VisualMelon

@VisualMelon Lời khuyên tuyệt vời, cảm ơn. Điều đó làm tôi khó chịu với bao nhiêu byte String.valueOf đã chiếm!
RCB

2

Brainfuck, 354 byte

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

Yêu cầu trình thông dịch cho phép bạn đi bên trái từ ô 0. Đầu ra là một byte đã ký. Ví dụ, byte 0x49được in cho đầu vào ví dụ và 0xFFđược in cho đầu vào có cùng dòng đầu tiên nhưng dòng thứ hai được thay thế bằng "C" và 29 khoảng trắng.

Điểm bắt đầu từ 0 và khi dòng đầu vào thứ hai được đọc, những thay đổi này được thực hiện cho nó:

  • Đầu vào là chính xác: Không làm gì cả
  • Đầu vào không chính xác: Trừ 5
  • Đầu vào là một khoảng trắng: Trừ 4

Cuối cùng, 120 được thêm vào. Đây là chức năng tương tự như giả định một số điểm hoàn hảo và áp dụng hình phạt, thay vì bắt đầu từ 0.

Với nhận xét:

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

Trăn 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

JavaScript ES7, 102

Như thường lệ, tiền thưởng không đáng để bỏ công sức.

(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

Kiểm tra khoảng trắng không hợp lệ trong đầu vào đầu tiên (vì điều này có ý nghĩa với tôi) 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

Ugh, xác thực chiếm một nửa mã của tôi khi tôi thử: (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'là 129 byte.
Neil

1

Trăn 2.7, 131, 116, 109 , 139

Tôi đã cố gắng thực hiện một giải pháp python "ngắn" ... Vâng, đây là, đề xuất được chào đón nhiều hơn

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'

Thêm một vài ký tự làm cho nó dễ đọc hơn ...

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

Prolog, 165 byte

Hơn một nửa số byte dành cho kiểm tra kiểm tra không hợp lệ.

Mã số:

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

Giải thích:

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

Thí dụ:

`CABBDCABECDBACDBEAACADDBBBEDDA`*`CABEDDABDC BACDBBAADE  CBBEDDA`.
73

Dùng thử trực tuyến tại đây


1

MATLAB, 92 90 byte

Cảm ơn Tom Carpenter đã giúp tôi giảm 2 byte câu trả lời!

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)

Hàm có thể được gọi bằng cách gán bảng trả lời cho q và các câu trả lời được gửi cho a . ví dụ:

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

Câu trả lời chỉ đơn giản là in ra màn hình. 8 byte có thể được lưu nếu được phép in ans = 73


Bạn có thể lưu 2 byte bằng cách thay thế numel(q)bằng nnz(q).
Tom Carpenter

1

C # 6.0 -> (270 - 20 = 250) 246 - 20 = 226 byte

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

Phiên bản có thể đọc và không đọc được:

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

Thực sự muốn nhận tiền thưởng: D


Công việc tốt đẹp! Một vài thủ thuật chung áp dụng ở đây, bạn có thể khai báo icùng với sbên ngoài vòng lặp for. Bạn có thể sử dụng varđể khai báo a, tiết kiệm 1 byte (Hurrah!). Bạn không cần nhiều dấu ngoặc nhọn {}trong mã của mình, đây luôn là cách tốt để cắt byte và luôn đáng để xem bảng ASCII khi so sánh các ký tự (bạn có thể loại bỏ một byte c[i]==' 'bằng cách sử dụng bất đẳng thức). Bạn cũng nên xem xét đếm qua các chuỗi ngược - trong trường hợp này bạn có thể tiết kiệm ít nhất 1 byte bằng cách điều chỉnh lại vòng lặp for.
VisualMelon

Thật không may, trình của bạn hiện không phức tạp với các tiêu chí, vì nó không thể nhận ra đầu vào không hợp lệ.
VisualMelon

@VisualMelon Ahh, tôi cảm thấy thật ngu ngốc. Tôi đã viết bài này ở trường nên tôi quên thêm 'bài kiểm tra không hợp lệ', v.v. Tôi sẽ thêm chúng :)
Yytsi

@VisualMelon Vâng, điều này đã được gửi và viết ở trường vào cuối lớp, tôi sẽ chỉnh sửa nó. Cảm ơn vì những mánh khóe :)
Yytsi

0

Groovy 2.4.5, 107 byte

Chỉ là một bản dịch đơn giản của câu trả lời Java trước đó .

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 byte

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

Tôi đã nhận được tiền thưởng, mặc dù nó tốn 23 byte chỉ để in. :-(

Giải trình

#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 */
    }
}

Có gấp đôi số mã để kiểm tra đầu vào không hợp lệ cũng như để đếm các câu trả lời - phần thực sự của thử thách nằm trong forvòng lặp gần cuối. Trong thực tế, đây là một phiên bản giả định đầu vào luôn hợp lệ, trong 163-20 = 143 byte:

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

Và một trong đó đưa ra giả định tương tự và chỉ in điểm, tính bằng 133 byte:

#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

SÀI GÒN 9,4, 291-20 = 271 byte (có tiền thưởng) hoặc 231 byte (không có tiền thưởng)

Có thưởng

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;

Không có tiền thưởng:

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 không thực sự có đầu vào / đầu ra, vì vậy bạn sẽ cần thay thế k = '..' bằng khóa và r = '..' bằng phản hồi. Đầu ra được in vào nhật ký.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.