Đánh dấu giấy IMC UKMT


22

Tôi đã làm IMC năm nay. Có ai khác ở đây làm điều đó?

Trong một bài thi Thử thách Toán trung cấp UKMT, có hai mươi lăm câu hỏi. Mười lăm câu hỏi đầu tiên cung cấp cho bạn năm điểm nếu bạn trả lời đúng. Đối với mười câu hỏi khác, bạn nhận được sáu điểm để trả lời đúng. Trong mười câu hỏi cuối cùng, bạn bị mất điểm nếu bạn hiểu sai! Đối với các câu hỏi từ mười sáu đến hai mươi, bạn mất một điểm và trong năm câu hỏi cuối cùng, bạn mất hai điểm. Nếu bạn để trống một câu hỏi, không có điểm nào được trao hoặc khấu trừ. Không có điểm nào bị trừ khi nhận bất kỳ câu hỏi nào trong mười lăm câu hỏi đầu tiên. Bài viết là nhiều lựa chọn; bạn có thể chọn bất kỳ câu trả lời nào trong số A, B, C, D và E cho mỗi câu hỏi. Luôn luôn chỉ có một câu trả lời đúng cho mỗi câu hỏi.

Tạo một chương trình / hàm lấy hai chuỗi và cho điểm. Chuỗi đầu tiên sẽ là câu trả lời của bạn cho bài báo. Nếu bạn bỏ qua một câu hỏi, hãy sử dụng khoảng trắng, byte rỗng hoặc dấu gạch dưới. Nếu không, sử dụng chữ A, B, C, D hoặc E cho câu trả lời. Bạn có thể có chữ hoa hoặc chữ thường. Chuỗi thứ hai sẽ là câu trả lời đúng cho mỗi câu hỏi trong bài báo. Chương trình / chức năng của bạn sau đó sẽ xuất một số điểm. Làm cho mã của bạn ngắn.

Các trường hợp thử nghiệm:

DDDDDDDDDDDDDDDDDDDDDDDDD
ABCDEABCDEABCDEABCDEABCDE
15

BDBEACCECEDDBDABBCBDAEBCD
BDBEACCECEDDBDABBCBDAEBCD
135

DBACBDCDBAEDABCDBEECACDC_
DBADBDCDBAEDABCDBEEDACDCA
117

_________________________
DABDABDABDABDABDABDABDABD
0

DBADBDCDBAEDABCD_E__A__C_
DBADBDCDBAEDABCDBEEDACDCA
99

_______________BBBBBBBBBB
AAAAAAAAAAAAAAAAAAAAAAAAA
-15

Có nên "Đối với câu hỏi mười lăm đến hai mươi" là "Đối với câu hỏi mười sáu đến hai mươi"?
Greg Martin

1
Chúng ta có thể sử dụng một byte null để thể hiện các câu hỏi bỏ qua không?
betseg

2
Và điểm số đầu tiên không phải là 27-12 = 15?
Greg Martin

1
Có ai nhìn thấy / thực hiện các giấy tờ UKMT? Họ thực sự vui vẻ. Kiểm tra các câu đố tại ukmt.org.uk. Tôi nhận được hầu hết các ý tưởng của tôi cho các thách thức từ các câu hỏi toán học.
0WJYxW9FMN

1
Các trường hợp kiểm tra của bạn có thể nên bao gồm một bài nộp với điểm số âm.
Dennis

Câu trả lời:


7

C, 88 87 86 81 byte

c,d;i(char*a,char*b){for(c=d=0;*b;c++,a++)d+=*a^*b++?*a?-c/15-c/20:0:5+c/15;d=d;}

Hãy thử trực tuyến!


1
ABCDEtất cả đều dưới điểm 95, tôi nghĩ bạn có thể sử dụng *a<95.
Yytsi

2
Vì câu hỏi cho phép lấy byte null thay vì dấu gạch dưới, -(c/15+c/20)*(*a<95)có thể trở thành *a?-c/15-c/20:0.
Dennis


6

Thạch , 26 23 22 byte

=s5ị"“HHHQP‘D¤_2Fæ.n⁶¥

Hãy thử trực tuyến!

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

=s5ị"“HHHQP‘D¤_2Fæ.n⁶¥  Main link. Argument: t (answer to test), s (answer sheet)

=                       Test the characters of t and s for equality.
 s5                     Split into chunks of length 5.
             ¤          Combine the two preceding links into a niladic chain.
     “HHHQP‘              Yield the code points, i.e., [72, 72, 72, 81, 80].
            D             Decimal; yield [[7, 2], [7, 2], [7, 2], [8, 1], [8, 0]].
   ị"                   Index zipwith; use the Booleans in each chunk to index into
                        the corresponding pair. Indexing is 1-based and modular, so
                        1 gives the first element and 0 the last.
              _2        Subtract 2 from each result.
                F       Flatten the resulting 5x5 matrix.
                     ¥  Combine the two preceding links into a dyadic chain.
                   n⁶     Test the characters of t for inequality with space.
                 æ.     Take the dot product of the integers to the left and the
                        Booleans to the right.

5

JavaScript (ES6), 70 68 66 byte

Đã lưu 2 byte nhờ Neil
Lưu 2 byte nhờ vào ETHproductions

Đưa ra câu trả lời của người nộp đơn avà câu trả lời đúng ctrong cú pháp currying (a)(c). Mong đợi bỏ qua các câu hỏi để được đánh dấu bằng một khoảng trắng.

a=>c=>a.replace(/\S/g,(a,i)=>s+=a==c[j=i>14,i]?5+j:-j^i>19,s=0)&&s

Các trường hợp thử nghiệm


Nếu bạn thay đổi câu hỏi bị bỏ qua thành một ký tự không phải từ (ví dụ: khoảng trắng) thì bạn có thể sử dụng /\w/gđể tiết kiệm cho mình hai byte.
Neil

Tôi nghĩ -j-(i>19) là giống như -j^i>19, mặc dù tôi không chắc chắn.
Sản xuất ETH

@ETHproductions Thật vậy. Điều này được phân tích cú pháp như (-j)^(i>19)vậy, vâng, điều này hoạt động.
Arnauld

4

Python 2 , 86 85 83 77 byte

f=lambda t,s,i=24:~i and(i/10*-(14<i<t[i]<'_'),5+i/15)[t[i]==s[i]]+f(t,s,i-1)

Hãy thử trực tuyến!

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

Điều này định nghĩa một hàm đệ quy f có hai đối số không tối ưu: t (các câu trả lời cho bài kiểm tra) và s (phiếu trả lời). Khi được gọi chỉ với hai đối số này, f khởi tạo i thành 24 , chỉ mục cuối cùng của cả ts .

Mỗi lần f được gọi, đầu tiên nó sẽ kiểm tra xem ~ i (bitwise KHÔNG của i ) có đúng hay không không. Vì ~ (-1) = 0 , điều này xảy ra khi i đạt giá trị -1 . Nếu i = -1 , ~ i = 0 được trả về, nhưng khi tôi lấy các giá trị từ 24 đến 0 (tất cả các chỉ số của ts ), mã sau đây andđược thực thi và f trả về kết quả.

Trong khi tôi không âm, điều sau đây xảy ra. Đầu tiên,

(i/10*-(14<i<t[i]<'_'),5+i/15)

tạo ra một tuple có độ dài 2 :

  • Thương số i/100 nếu 0 ≤ i <10 , 1 nếu 10 ≤ i <202 nếu 20 ≤ i <25 . So sánh chuỗi 14<i<t[i]<'_'trả về True khi và chỉ khi tất cả các so sánh riêng lẻ trả về True , nghĩa là, nếu và chỉ khi i ≥ 15 (phạm vi câu hỏi có hình phạt), i nhỏ hơn t [i] (luôn luôn đúng vì tất cả các số đều nhỏ hơn tất cả các lần lặp trong Python 2) và t [i] không phải là dấu gạch dưới.

    Nếu so sánh trả về Sai , unary -trả về 0 và toàn bộ biểu thức ước tính thành 0 . Tuy nhiên, nếu so sánh trả về True , unary -trả về -1 , do đó toàn bộ biểu thức ước tính thành 0 nếu 0 ≤ i <10 , -1 nếu 10 ≤ i <20-2 nếu 20 ≤ i <25 ; đây là kết quả ròng cho câu trả lời sai hoặc thiếu cho tất cả các chỉ số i .

  • 5+i/15trả về 5 + 0 = 5 nếu 0 i <155 + 1 = 6 nếu 15 ≤ i <25 . Đây là các kết quả ròng cho câu trả lời đúng cho tất cả các chỉ số i .

Cuối cùng, [t[i]==s[i]]chọn phần tử đầu tiên của bộ dữ liệu được xây dựng nếu t [i]s [i] khác nhau (câu trả lời sai hoặc thiếu) và phần tử thứ hai nếu chúng bằng nhau (câu trả lời đúng), sau đó thêm giá trị trả về của f được gọi với giảm tôi để kết quả đó Khi tôi đạt -1 , điểm số cuối cùng đã được tính và được trả về bởi f .


3

Toán học, 114 byte

Tr@(m=MapThread)[#/.True->#2/.False->-#3&,{Tr/@Partition[m[Equal,#/."_"->u]/.u==_->0,5],{5,5,5,6,6},{0,0,0,1,2}}]&

Hàm thuần túy lấy một cặp danh sách các ký tự và trả về một số nguyên. m[Equal,#/."_"->u]trả về một danh sách các booleans, ngoại trừ các mục không được đánh giá của biểu mẫu u=="B"ở những nơi mà câu trả lời bằng nhau "_"; sau đó ngay lập tức, u==_->0biến những mục không đánh giá thành 0s. Tr/@Partition[...,5]thêm các mục này lên 5 tại một thời điểm, dẫn đến một danh sách như {4False+True, 4False+True, 4False+True, 4False+True, 4False+True}cho trường hợp thử nghiệm đầu tiên hoặc {5True, 5True, 5True, 2True, 2True}cho trường hợp thử nghiệm cuối cùng. Sau đó, trong mỗi tọa độ, TrueFalseđược ánh xạ tới các điểm thích hợp và kết quả được cộng lại với nhau.


3

Thạch , 22 21 byte

Zm0ṁ135µ;t€⁶E€’;E€ṫ⁹S

Hãy thử trực tuyến!

Tôi nghĩ rằng câu trả lời của @ Dennis có thể bị đánh bại. Và sau khi thử một số lượng lớn các khả năng khác nhau và hưởng lợi từ một sự trùng hợp đáng kinh ngạc, cuối cùng tôi cũng đã quản lý được nó!

Chương trình này lấy một cặp [câu trả lời của học sinh, câu trả lời đúng] làm đầu vào và sử dụng khoảng trắng để chỉ ra câu trả lời bị thiếu.

Giải trình

Chương trình này sử dụng một số định dạng đầu vào nội bộ kỳ quái để theo dõi những gì đang diễn ra, vì vậy chúng tôi sẽ thực hiện bước này một lúc.

  1. Z

    Điều này chuyển đổi đầu vào, vì vậy chúng tôi sẽ kết thúc với một danh sách 25 yếu tố, mỗi yếu tố cho mỗi câu hỏi; mỗi yếu tố có dạng [câu trả lời của học sinh, câu trả lời đúng]. Chúng tôi sẽ chỉ ra một yếu tố của hình thức này với một chữ in hoa; Acho câu hỏi 1, Bcho câu hỏi 2, v.v. Vì vậy, các câu trả lời hiện đang được lưu trữ dưới dạng

    ABCDEFGHIJKLMNOPQRSTUVWXY
    
  2. m0

    Đây là một hoạt động "lớn hơn palindrom"; chúng tôi nối ngược lại giá trị hiện tại với chính giá trị đó, mang lại điều này:

    ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBA
    
  3. ṁ135

    Các (nấm mốc) điều hành thực hiện một số điều, nhưng trong bối cảnh này, nó có hiệu quả lấy 135 yếu tố đầu tiên của danh sách vô hạn được sản xuất bằng cách thêm giá trị hiện tại cho chính nó nhiều lần. Điều đó mang lại cho chúng tôi những điều sau đây (mà tôi đã chia thành các nhóm gồm 50 yếu tố để thuận tiện; đây chỉ là danh sách 135 cặp nội bộ):

    ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBA
    ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBA
    ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQP
    
  4. µ;

    µđặt giá trị hiện tại làm mặc định mới cho các toán hạng bị thiếu. Sau đó, chúng tôi ngay lập tức thấy một nội dung bị thiếu một toán hạng; ;nối thêm, nhưng chúng tôi chưa chỉ định những gì cần nối thêm. Do đó, giá trị hiện tại được gắn vào giá trị cuối cùng µ(cũng là giá trị hiện tại), mang lại cho chúng tôi giá trị hiện tại 270 phần tử sau:

    ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBA
    ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBA
    ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPABCDEFGHIJKLMNO
    PQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBAABCDEFGHIJKLMNO
    PQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBAABCDEFGHIJKLMNO
    PQRSTUVWXYYXWVUTSRQP
    
  5. t€⁶

    Hãy nhớ rằng tất cả các chữ in hoa ở trên đại diện cho các cặp [câu trả lời của học sinh, câu trả lời đúng]. Các t€⁶hoạt động hoạt động trên mỗi ( cặp), và xóa ( tkhông gian) ( ) từ hai bên của cặp (tức là bất kỳ không gian mà xuất hiện trong cặp). Vì vậy, chúng tôi vẫn có cùng một danh sách gồm 270 câu hỏi với nhiều câu lặp lại, nhưng chúng có dạng [câu trả lời đúng] (học sinh không trả lời) hoặc [câu trả lời của học sinh, câu trả lời đúng] (học sinh đã trả lời).

  6. E€’

    Các E€’hoạt động cũng hoạt động trên mỗi ( phần tử), và, do việc sử dụng E, thay thế phần tử với 1 nếu tất cả các yếu tố đều bình đẳng (tức là học sinh không trả lời hoặc có những câu hỏi phải), hoặc 0 nếu không phải tất cả các các yếu tố là bằng nhau (tức là học sinh trả lời nhưng có câu hỏi sai). Việc sử dụng ở đây thay đổi cách đánh số, có nghĩa là bây giờ chúng ta sử dụng -1 hoặc 0 tương ứng. Tôi sẽ sử dụng các chữ cái viết thường cho loại phần tử mới này, sử dụng -1 cho câu trả lời sẽ bị phạt nếu đó là câu hỏi đủ điều kiện bị phạt hoặc 0 cho câu trả lời bị thiếu hoặc đúng:

    abcdefghijklmnopqrstuvwxyyxwvutsrqponmlkjihgfedcba
    abcdefghijklmnopqrstuvwxyyxwvutsrqponmlkjihgfedcba
    abcdefghijklmnopqrstuvwxyyxwvutsrqpabcdefghijklmno
    pqrstuvwxyyxwvutsrqponmlkjihgfedcbaabcdefghijklmno
    pqrstuvwxyyxwvutsrqponmlkjihgfedcbaabcdefghijklmno
    pqrstuvwxyyxwvutsrqp
    
  7. ;E€

    Chúng tôi đã thấy cả hai E€;trước đó; chúng tôi đang thêm một cái gì đó vào giá trị hiện tại và chúng tôi đang sử dụng định dạng 1 nếu tất cả các yếu tố bằng nhau hoặc 0 nếu một số khác nhau (không có thời gian này!). Có một toán hạng bị thiếu ở đây, vì vậy chúng tôi sử dụng giá trị như cuối cùng µ(tức là đầu ra của bước 3). Quay lại bước 3, chúng tôi đã không xóa khoảng trắng khỏi các thành phần, vì vậy chúng tôi sẽ có 1 cho câu trả lời đúng hoặc 0 cho câu trả lời sai hoặc thiếu (vì khoảng trắng sẽ không khớp với câu trả lời đúng). Từ giờ trở đi, tôi sẽ sử dụng chữ in hoa cho định dạng 1 = chính xác, 0 = không chính xác / thiếu và tiếp tục sử dụng chữ cái viết thường cho 0 = chính xác / thiếu, -1 = không chính xác. Giá trị kết quả có 405 phần tử và trông như thế này:

    abcdefghijklmnopqrstuvwxyyxwvutsrqponmlkjihgfedcba
    abcdefghijklmnopqrstuvwxyyxwvutsrqponmlkjihgfedcba
    abcdefghijklmnopqrstuvwxyyxwvutsrqpabcdefghijklmno
    pqrstuvwxyyxwvutsrqponmlkjihgfedcbaabcdefghijklmno
    pqrstuvwxyyxwvutsrqponmlkjihgfedcbaabcdefghijklmno
    pqrstuvwxyyxwvutsrqpABCDEFGHIJKLMNOPQRSTUVWXYYXWVU
    TSRQPONMLKJIHGFEDCBAABCDEFGHIJKLMNOPQRSTUVWXYYXWVU
    TSRQPONMLKJIHGFEDCBAABCDEFGHIJKLMNOPQRSTUVWXYYXWVU
    TSRQP
    
  8. ṫ⁹

    Đây là sự trùng hợp đáng kinh ngạc mà tôi đã đề cập trước đó. Trước khi nói về đoạn mã này, tôi muốn xem xét nơi chúng ta đã đến.

    Mỗi chữ in hoa đại diện cho +1 cho một câu trả lời đúng; 15 câu hỏi đầu tiên ( Athông qua O) xuất hiện 5 lần mỗi chuỗi trong chuỗi và 10 câu hỏi cuối cùng ( Pthông qua Y) xuất hiện 6 lần mỗi câu hỏi . Đó không phải là thực sự kỳ diệu; Tôi đã thiết kế nó theo cách đó khi tôi chọn số 135 trước đó trong chương trình (đó là 5 × 15 + 6 × 10) và điều may mắn duy nhất ở đây là 5 là số lẻ (vì vậy đó là số 10 cuối cùng câu hỏi cuối cùng xuất hiện thêm lần, thay vì 10 câu đầu tiên. 15 chữ cái ngay trước chữ này chứa pthông qua t(-1 câu hỏi phạt) một lần và uqua y(-2 câu hỏi phạt) hai lần. Đó cũng không phải là một sự trùng hợp ngẫu nhiên; bởi vì chúng tôi đã sử dụngm0trước đó, các bản sao bổ sung của các câu hỏi được xếp theo thứ tự PQRSTUVWXYYXWVUTSRQPvà các câu hỏi sau sẽ xuất hiện một cách tự nhiên ở gần giữa chuỗi đó (vì vậy, việc lấy 15 câu hỏi "phụ" cuối cùng sẽ tạo ra ít lần lặp lại cho những câu hỏi gần các cạnh; tất nhiên, không có gì ngạc nhiên khi các câu hỏi "thêm" xuất hiện cuối cùng).

    Bởi vì mỗi chữ cái viết thường trừ 1 từ điểm cho câu trả lời không chính xác, không thiếu và mỗi chữ cái viết hoa thêm 1 vào điểm cho câu trả lời đúng, do đó chúng tôi chỉ cần lấy 135 + 15 = 150 yếu tố cuối cùng để có được mỗi loại phần tử số lần chính xác. Lệnh của Jelly để có được một chuỗi con ở cuối danh sách là ; tuy nhiên, nó không chỉ định số lượng phần tử bạn muốn, mà là chỉ mục của phần tử đầu tiên bạn muốn. Chúng ta có 405 phần tử tại thời điểm này và muốn 150, vì vậy chúng ta cần bắt đầu ở chỉ số (405 - 150 + 1) hoặc 256. Trong một sự trùng hợp đáng kinh ngạc, 256 tình cờ là số bát phân riêng biệt tồn tại, và do đó có một đại diện ngắn trong Jelly (). Có rất ít tôi có thể làm để thực hiện điều này; Bước 4 đã thêm 135 yếu tố khác vào đầu danh sách để đạt được số tròn, nhưng thực tế đó là 135 yếu tố tôi phải thêm (một giá trị có sẵn tại thời điểm đó trong chương trình) thực sự tiện lợi, về cơ bản, bất kỳ số nào khác hoàn toàn không có ích trong tình huống này.

    Đây là cách giá trị nội bộ hiện tại:

    uvwxyyxwvutsrqpABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQP
    ONMLKJIHGFEDCBAABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQP
    ONMLKJIHGFEDCBAABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQP
    
  9. S

    Cuối cùng, bây giờ chúng tôi đã có một danh sách các sửa đổi cho điểm từ các câu hỏi, tất cả những gì chúng ta cần làm là tổng hợp chúng bằng cách sử dụng Svà chúng ta đã hoàn thành.


2

Python 2 , 93 91 byte

f=lambda a,b,n=0:a>""and((a[0]==b[0])*(5+n/15)or-(n/15*n/10)*(a[0]<"^"))+f(a[1:],b[1:],n+1)

Hãy thử trực tuyến!

-2 byte nhờ @KritixiLithos


Đầu vào:

  • a: Câu trả lời của học sinh dưới dạng chuỗi, _cho câu hỏi bỏ qua
  • b : câu trả lời đúng
  • n: số lượng câu hỏi hiện tại 0dựa trên, mặc định là0

Bạn có thể làm a[0]<'^'thay vì a[0]!="_"để lưu byte
Kritixi Lithos

Tôi nghĩ a>""có thể làm việc thay vìa!=""
Kritixi Lithos

Nếu kiểm tra ban đầu của bạn chỉ kết thúc đệ quy khi atrống, bạn không thể làm gì a and? Một chuỗi rỗng là sai, nếu không nó là đúng.
FlipTack

@FlipTack điều này sẽ ném một TypeErrorcuộc gọi đệ quy cuối cùng sẽ trả về một chuỗi
ovs

1

k, 52 byte

Hàm có 2 chuỗi, định dạng cho mỗi trường hợp kiểm tra

{+/(~x="_")*(+,/'(15 5 5#'0 -1 -2;15 10#'5 6))@'x=y}

Thí dụ:

k){+/(~x="_")*(+,/'(15 5 5#'0 -1 -2;15 10#'5 6))@'x=y}["DBADBDCDBAEDABCD_E__A__C_";"DBADBDCDBAEDABCDBEEDACDCA"]
99

1

Haskell, 84 byte

i x a b|a>'Z'=0|a==b=6-0^x|1<2= -x
w x=x<$[1..5*3^0^x]
(sum.).zipWith3 i(w=<<[0..2])

Ví dụ sử dụng: ((sum.).zipWith3 i(w=<<[0..2])) "DBADBDCDBAEDABCD_E__A__C_" "DBADBDCDBAEDABCDBEEDACDCA"-> 99. Hãy thử trực tuyến! .

Cách thức hoạt động: i x a btính điểm cho một câu trả lời acó kết quả đúng bvà hình phạt xcho một câu trả lời sai (giá trị không âm). Nếu bạn bỏ qua ( a>'Z'), điểm số là 0, nếu câu trả lời là đúng ( a==b), điểm số là 6-0^x, điểm khác là -x.

w=<<[0..2]tạo ra một danh sách các hình phạt đối với tất cả 25 câu hỏi bằng cách áp dụng wđến 0, 12, tức là làm cho 5*3^0^xcác bản sao của mỗi số (-> 15 lần 0, 5 lần 1và 5 lần 2).

zipWith3áp dụng icho danh sách các hình phạt, danh sách các câu trả lời và danh sách các kết quả chính xác. Cuối cùng tất cả các điểm được thêm vào ( sum).



1

JavaScript (ES6), 105 103 101 94 89 88 85 84 78 77 byte

Giải pháp đầu tiên của tôi trong ES6, thậm chí có thể là đầu tiên trong Javascript Oo

f=(s,a,i=24)=>i+1&&(s[i]>'Z'?0:s[i]==a[i]?5+(i>14):~(i>19)*(i>14))+f(s,a,i-1)

s là giải pháp đã nộp và a là giải pháp đúng. Cả hai sẽ được coi là chuỗi.

Đây là một giải pháp không đệ quy ở 78 byte:

s=>a=>eval([...s].map((c,i)=>c>'Z'?0:c==a[i]?5+(i>14):~(i>19)*(i>14)).join`+`)

Đưa đầu vào thông qua cú pháp currying.

Cảm ơn @ETHproductions đã lưu 9 byte! s[i]để c(-1-(i>19|0))để ~(i>19).

Cảm ơn @Kritixi Lithos vì đã tiết kiệm một byte! c=='_'để c>'Z'.

Hãy thử trực tuyến!


Nói về điều này là giải pháp đầu tiên của bạn trong JS, ngôn ngữ chính của bạn cho môn đánh gôn là gì? Tôi chỉ từng sử dụng Python và brainfuck cho mã golf.
0WJYxW9FMN

@ J843136028 Ngôn ngữ chính của tôi là Python, nhưng tôi cũng đã chơi golf khá nhiều với C #. Haxe đã nghỉ việc một thời gian, nhưng tôi có thể quay lại với nó.
Yytsi

Mát mẻ! Tôi mới chỉ sử dụng brainfuck một lần, vì vậy ngôn ngữ chính của tôi cũng là Python.
0WJYxW9FMN

@ J843136028 Vâng, tôi thực sự đã thấy câu trả lời của bạn ở đây và ở đó. Vì năng suất sinh học của tôi, tôi không dành nhiều thời gian để tìm ra giải pháp, vì vậy hầu hết thời gian họ không quan tâm. Tôi chỉ làm rất ít với BrainF * ck, vì phải mất rất nhiều thời gian để tìm giải pháp ngắn, thậm chí cho các vấn đề trung gian.
Yytsi

Tôi biết ý của bạn về BF. Tôi ngạc nhiên khi mọi người nhìn vào câu trả lời của tôi.
0WJYxW9FMN
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.