Dấu nguyên vào lớp


30

Cho một số nguyên dương (0 trở lên, không có tối đa), chuyển đổi nó thành một lớp theo các quy tắc sau:

A = 100+  
B = 90 - 99  
C = 80 - 89  
D = 70 - 79  
E = 60 - 69  
F = 59 and less.

Điều này cảm thấy hơi nhàm chán, vì vậy hãy tạo điểm số +nếu là 7,8 hoặc 9 và -nếu là 0,1 hoặc 2. Bỏ qua điều này cho các trường hợp F và A.

Một ví dụ:

Đầu vào:

65

Đầu ra:

E

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

0  -> F
20 -> F
65 -> E
72 -> D-
75 -> D
80 -> C-
99 -> B+
102 -> A
864 -> A

Không có dấu cách. Một dòng mới sau khi đầu ra là tốt, nhưng giữ cho nó phù hợp. Chức năng và chương trình đầy đủ đều tốt.

Đây là mã golf, vì vậy mã ngắn nhất sẽ thắng. Điều này được lấy cảm hứng từ một câu hỏi Ask Ubuntu, Làm thế nào để viết một tập lệnh shell để gán các lớp chữ cái cho các phạm vi số? . Các câu trả lời là trong bash và python, vì vậy hơi spoilers.


Bảng xếp hạng:

Dưới đây là Stack Snippet để tạo cả bảng xếp hạng thông thường và tổng quan về người chiến thắng theo ngôn ngữ.

Để đảm bảo rằng câu trả lời của bạn hiển thị, vui lòng bắt đầu câu trả lời của bạn bằng một tiêu đề, sử dụng mẫu Markdown sau:

# Language Name, N bytes

nơi Nlà kích thước của trình của bạn. Nếu bạn cải thiện điểm số của mình, bạn có thể giữ điểm số cũ trong tiêu đề, bằng cách đánh bại chúng thông qua. Ví dụ:

# Ruby, <s>104</s> <s>101</s> 96 bytes


1
Sẽ không có A+A-? Tôi không thấy lý do tại sao chúng ta bỏ qua chúng.
ASCIIThenANSI

1
@ASCIIThenANSI làm cho việc ngoại lệ trở nên thú vị hơn và không có mức tối đa cho A, vì vậy không+
Tim

1
Bảng phân loại đó có một lỗi: phiên bản cá cũ hơn và câu trả lời của tôi là trước nó.
Ismael Miguel

@IsmaelMiguel Nó được viết khi bài đăng sớm nhất chưa phải là bộ ngắt kết nối mặc định (vì vậy nó không có thứ tự ràng buộc nào cả). Tuy nhiên, tôi sẽ cố gắng khắc phục nó tại một số điểm (có thể không phải cho thử thách này, nhưng ít nhất là nguồn trên meta).
Martin Ender

@ MartinBüttner Tôi chỉ chỉ ra điều đó.
Ismael Miguel

Câu trả lời:


21

Python 2, 72 70 62 byte

lambda n:"FA"[n>59:1+n/100]or chr(75-n/10)+"+-"[(n+3)%10/3::2]

Đây là một hàm ẩn danh nhận một int và trả về lớp dưới dạng một chuỗi.

(cảm ơn @ MartinBüttner, @grc và @TheNumberOne để biết các mẹo)


4
"EDCB"[n/10-6]->chr(75-n/10)
grc

Thật là một cách thông minh để chọn một nhân vật có thể trống!
xnor

11

CJam, 34 33 32 byte

riAmd)4/"- +"=S-\Ae<5e>_~'L+o5%<

Được rồi, tôi đã thử nhiều cách tiếp cận bây giờ và không thể có được điều này dưới 33, vì vậy đây là lời giải thích:

ri                                 e# Read the input and convert to integer
  Amd                              e# Take divmod of the input with 10. This leaves the
                                   e# number/10 and number%10 on stack
     )4/                           e# Increment the mod by 1 and integer divide by 4.
        "- +"=S-                   e# This converts 0,1,2 to 0 and 7,8,9 to 2. Pick - or +
                                   e# respectively and remove space in case of 3,4,5 and 6
                \Ae<5e>            e# To the divisor by 10 scope it to range of [5,10]
                       _~          e# Take a copy and do number * -1 - 1
                         'L+       e# Add it to char L. This gets us the required grade
                            o      e# Output the grade. This removes it from stack
                             5%    e# We now have scoped divisor on stack. Do mod with 5
                               <   e# Both 5 and 10 will return 0, in which case, we don't
                                   e# want the + or -. So we do a substr(0, 0).
                                   e# 5 represents F and 10, A. For others, it will do
                                   e# substr(0,X) where X > 0. Since the string is only
                                   e# 1 char long, it doesn't affect at all.

CẬP NHẬT : 1 byte được lưu nhờ một con trỏ của Dennis

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


Làm gì s?
Dennis

@Dennis chuyển đổi char + / - / dấu cách thành chuỗi cho lần cuối<
Trình tối ưu hóa

Điều đó không cần thiết. Character String -đẩy một chuỗi.
Dennis

@Dennis Ah, bạn nói đúng. Tôi nghĩ đối với một số phiên bản trước, cách sử dụng là khác nhau.
Tối ưu hóa

8

Võng mạc, 43 + 15 = 58 byte

...+
A
.[012]
$&-
.[789]
$&+
^9.
B
^8.
C
^7.
D
6.
E
\d.*
F

Retina là ngôn ngữ regex được tạo bởi Martin Büttner, trong đó các tệp có số lẻ là biểu thức chính phù hợp với và các tệp được đánh số chẵn là thứ cần thay thế. Mỗi dòng là một tệp riêng biệt, vì vậy tôi đã thêm 15 byte cho mỗi tệp bổ sung.

Giải trình

Nó bắt đầu bằng cách tạo bất cứ thứ gì có 3 chữ số trở lên thành A. Nó thêm một -nếu nó là số có hai chữ số kết thúc bằng 0, 1 hoặc 2 và +nếu nó kết thúc bằng 7, 8 hoặc 9. Các số sau đó được ánh xạ tới lớp của họ (ví dụ một số bắt đầu bằng 9 được cho B). Bất kỳ số nào còn lại sẽ tự động là F. Thật không may, ;`phải được đặt trước cho tất cả ngoại trừ regex cuối cùng để triệt tiêu đầu ra trung gian. Cập nhật: phiên bản 0.5.0 có đầu ra trung gian tắt theo mặc định, cho phép tôi lưu một vài byte.


Bạn có chắc chắn nó không xuất + và - cho trường hợp F không?
Tim

1
@Tim Không nên, vì \d.*khớp và thay thế toàn bộ chuỗi, +bao gồm.
NinjaBearMonkey 11/05/2015

Ahh được rồi - tôi có thể thấy điều đó ngay bây giờ! :)
Tim

8

C, 99 byte

Tôi mới ở đây, tôi hy vọng tôi tuân theo các quy tắc.

char b[3];char*f(n){b[1]=0;n<60?*b=70:n>99?*b=65:(*b=75-n/10,b[1]=n%10<3?45:n%10>6?43:0);return b;}

Hàm này lấy dấu làm tham số và trả về điểm dưới dạng chuỗi kết thúc NULL.

Giải trình

Đã thêm khoảng trắng:

char b[3];

char *f(n) {
    b[1] = 0;
    n<60 ? *b = 70 :
    n>99 ? *b = 65 :
    (
        *b = 75 - n / 10,
        b[1] = n % 10 < 3 ? 45 : n % 10 > 6 ? 43 : 0
    );

    return b;
}

Các biến toàn cục được tự động khởi tạo về 0, do đó b chứa đầy NULL. Vì chỉ có hai ký tự đầu tiên được chạm vào, chúng tôi chỉ phải lo lắng về việc đặt NULL trong b [1] nếu lớp chỉ có một ký tự. NULL này được chèn vào lúc bắt đầu của hàm. Tham số n là ngầm định int. Nếu điểm nhỏ hơn 60, thì nó được đặt thành 'F', nếu nó lớn hơn 99 thì nó được đặt thành 'A'. Trong các trường hợp khác, lớp cơ sở được đưa ra bởi 'E' - (n - 60) / 10, đơn giản hóa 75 - n / 10. n % 10được chữ số đơn vị của nhãn hiệu. Nếu nó nhỏ hơn 3 thì a - được nối thêm, nếu nó lớn hơn 6 a + được nối thêm, nếu không b [1] sẽ bị hủy (mà nó đã bị xóa).

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

#include <stdio.h>

char b[3];char*f(n){b[1]=0;n<60?*b=70:n>99?*b=65:(*b=75-n/10,b[1]=n%10<3?45:n%10>6?43:0);return b;}

int main() {
    printf("  0 -> %s\n", f(0));
    printf(" 20 -> %s\n", f(20));
    printf(" 65 -> %s\n", f(65));
    printf(" 72 -> %s\n", f(72));
    printf(" 75 -> %s\n", f(75));
    printf(" 80 -> %s\n", f(80));
    printf(" 99 -> %s\n", f(99));
    printf("102 -> %s\n", f(102));
    printf("864 -> %s\n", f(864));

    return 0;
}

Output:
  0 -> F
 20 -> F
 65 -> E
 72 -> D-
 75 -> D
 80 -> C-
 99 -> B+
102 -> A
864 -> A

Hoàn hảo :) Không có gì sai ở đó.
Tim

sự khác biệt giữa mã ur và của tôi là một từ "printf" sẽ tiết kiệm hơn 3 byts trong trường hợp bị bỏ qua :)
Abr001am

7

Bình thường, 33 byte

+C-75K@S[/QTT5)1<-@"- +"/heQ4d%K5

Dùng thử trực tuyến: Trình diễn hoặc Test Suite

Giải trình:

                                     implicit: Q = input
        [/QTT5)                      create the list [Q/10, 10, 5]
       S                             sort
      @        1                     take the element in the middle
     K                               store in K (this results in a number between 5 and 10)
  -75K                               75 - K
 C                                   char with ASCII-value ...
                  @"- +"/heQ4        "- +"[(Q%10 + 1) / 4]
                 -           d       remove spaces
                <             %K5    slice [:K%5]
+                                    add these two chars and print

7

> <> (Cá), 78 71 byte

iii0)?/:0({:'6'(@@+?/'{'01.
;$-o:'4'(?\'7'(?;'+'o
 ;o'A'\   \'-'o;o'F'\

Phương pháp:

  • Chúng tôi đọc các điểm mã của 3 ký tự đầu tiên x,y,ztừ đầu vào. Nếu một ký tự không xuất hiện, giá trị của biến của nó sẽ được -1ngầm định. ( ord(c)sẽ đánh dấu điểm mã của nhân vật c)
  • Nếu z > 0(đầu vào 3 chữ số) in Avà thoát.
  • Nếu x < ord('6') or y < 0(đầu vào <60) in Fvà thoát.
  • In ký tự với mật mã 123 - x.
  • Nếu y < ord('4') print-` và thoát.
  • Nếu y > ord('6') print+ `và thoát.
  • Lối thoát hiểm.

7

C, 67 65

Đáng ngạc nhiên, điều này khá gần với giải pháp python.

f(i){printf(i<60?"F":i>99?"A":"%c%s",75-i/10,"-\0+"+(i%10+1)/4);}

Nhưng để chương trình này, để đạt được sự ngắn ngủi như vậy, người ta phải hy sinh:

  • Nếu một Fhoặc một Ađược in printfthậm chí không nhìn vào các đối số khác được thông qua. Đây là một hack khá khó chịu.

  • Nếu (i%10+1)/4ước tính 1(không +hoặc -nên được thêm vào lớp), trình %sđịnh dạng sẽ nhận một con trỏ tới một \0byte, do đó không có gì được in. Cũng khá buồn cười, vì tôi không biết rằng bạn có thể lấy địa chỉ của một chuỗi ký tự được lập chỉ mục. (ví dụ &"string"[i]) ( chỉnh sửa : "string"+ithậm chí còn ngắn hơn ! Cảm ơn @nutki)

Ở đây, đầu ra của chương trình cho các số từ 57 đến 102. Tôi đã biến nó thành một hexdump, vì vậy chúng ta có thể chắc chắn rằng không có \0byte lạ nào được in.

% seq 44 115 | xargs -n1 ./grade | xxd
0000000: 4646 4646 4646 4646 4646 4646 4646 4646  FFFFFFFFFFFFFFFF
0000010: 452d 452d 452d 4545 4545 452b 452b 452b  E-E-E-EEEEE+E+E+
0000020: 442d 442d 442d 4444 4444 442b 442b 442b  D-D-D-DDDDD+D+D+
0000030: 432d 432d 432d 4343 4343 432b 432b 432b  C-C-C-CCCCC+C+C+
0000040: 422d 422d 422d 4242 4242 422b 422b 422b  B-B-B-BBBBB+B+B+
0000050: 4141 4141 4141 4141 4141 4141 4141 4141  AAAAAAAAAAAAAAAA

Các mainphương pháp được sử dụng:

main(c,v)char**v;{f(atoi(v[1]));}

1
&"string"[i]là không cần thiết vì nó tương đương với ngắn hơn "string"+imà bạn có thể lưu 2 byte.
nutki

Tôi phải khách quan và nâng cao điều này :) xin chúc mừng, bạn đã đánh bại tất cả các hồ sơ C
Abr001am

6

CJam, 41 39 37 34 byte

Điều này quá dài, nhưng tôi không nghĩ bây giờ tôi sẽ chơi gôn.

qiAmd'K@Ae<5e>:X-X5%g@)4/"- +"=*S-

Kiểm tra nó ở đây. Hoặc chạy tất cả các trường hợp thử nghiệm ở đây.

Ba byte được lưu bởi Trình tối ưu hóa.

Giải trình

(Hơi lỗi thời)

qi                                    e# Read input and convert to integer.
  'K1$                                e# Push the character K, then copy the input.
      A/                              e# Divide by 10.
        Ae<5e>                        e# Clamp the result to the range 5..10.";
              -                       e# Subtract from K to get the grade.
               _'Am                   e# Duplicate get difference to A.
                   5%g                e# Check that its neither 0 (A) nor 5 (F).
                      @               e# Pull up the other copy of the input.
                       A%)4/          e# ((i % 10) + 1) / 4
                            "- +"=    e# Use that to select -, space, or +.
                                  *   e# Multiply it with the earlier boolean so that
                                      e# it vanishes for A and F.
                                   S- e# Remove the space if there is one.


5

Python 2, 94 88 84 69 byte

lambda g:g>99and'A'or[chr(75-g/10)+'-+'[g%10>2:1-(g%10>6)],'F'][g<60]

5

JavaScript (ES6), 66 byte

Thẳng.

F=n=>n<60?'F':n>99?'A':'EDCB'[n/10-6|0]+(n%10>6?'+':n%10<3?'-':'')

// TEST (in Firefox)

for(i=0;i<111;i++)document.write(i+'='+F(i)+' ')


4

R, 107 105 99 byte

Tôi không sợ lắm, nhưng tôi sẽ thử và chơi nó sau.

cat(LETTERS[11-(r=min(max(scan(),59),100))%/%10],if(r>59&r<100)c('-','','+')[(r%%10+1)/4+1],sep='')

Chỉnh sửa Thả một vài ifs. Đã sửa trường hợp và kết quả không chính xác cho 100. Bây giờ để thoát khỏi ifelses . Đã thoát khỏi ifelses.


Tôi nghĩ rằng bạn muốn LETTERShơn là letters.
Alex A.

3

Perl, 66 62 byte

Điều này có thể có thể được chơi golf nhiều hơn. Ngoài ra một cách khác có thể tốt hơn.

$_=$_>99?A:$_<60?F:s/\d$/$&>6?"+":$&<3?"-":""/re;y/9876/BCDE/

+1 cho -p

Chạy với:

echo 72 | perl -pE'$_=$_>99?A:$_<60?F:s/\d$/$&>6?"+":$&<3?"-":""/re;y/9876/BCDE/'

Tại sao không sử dụng -pvà thả say?
ThisSuitIsBlackNot

@ ThisSuitIsBlackNot cảm ơn! Đã cập nhật
hmatt1

2

Javascript (ES6), 78 79 byte

Đây thực sự không phải là lựa chọn thông minh nhất, nhưng tôi đã làm những gì có thể.

F=n=>'FEDCBA'[n[2]?5:n<60?0:n[0]-5]+(n[2]||n<60?'':'-+\n'[n[1]<3?0:n[1]>6?1:2])

Đơn giản chỉ cần vượt qua lớp dưới dạng một chuỗi , và nó sẽ trả về ký tự lớp.

Phần chuỗi trong rất quan trọng.

Bạn có thể kiểm tra một testcase ở đây:

console._RELAY_TO_DOC=true;

//non-es6 version:

function F(n){return 'FEDCBA'[n[2]?5:n<60?0:n[0]-5]+(n[2]||n<60?'':'-+\n'[n[1]<3?0:n[1]>6?1:2])}



var testcases=[0,20,65,72,75,77,80,90,99,100,102,180,1000],
    results={};

for(var i in testcases)
{
  results[testcases[i]]=F(testcases[i]+'');
}

console.log(results);
<script src="http://ismael-miguel.github.io/console-log-to-document/files/console.log.min.js"></script>

Nếu không gian quảng cáo sau khi thư không được phép, tôi sẽ vui vẻ xóa nó. Không phải thế! Điều này làm tăng mã của tôi thêm 1 byte, nhưng không có gì (quá) nghiêm trọng.


1
@Tim Đã sửa nó. Tôi hy vọng nó là đủ. Trích dẫn chính mình: " One newline after output is fine, but keep it consistent.". Tôi nghĩ rằng đó là đủ phù hợp.
Ismael Miguel

2

C #, 143 127 112 88 byte

string g(int n){return n>=100?"A":n<=59?"F":(char)(75-n/10)+(n%10>6?"+":n%10<3?"-":"");}

Tôi đã cố gắng thông minh bằng cách thực hiện các mod số ASCII, nhưng có vẻ như tôi không đơn độc!

Cảm ơn Tim đã cho lời khuyên về danh sách thay vì ifs.

Cảm ơn DarcyThomas đã chỉ ra rằng tôi có thể sử dụng các toán tử ternary lồng nhau.


1
Bạn có thể không cắt giảm ifs bằng cách sử dụng danh sách?
Tim

Tôi không chắc ý của bạn là gì khi sử dụng danh sách, bạn có thể giải thích một chút không?
Truyền

Trong python tôi có thể làm điều này : [item1,item2][condition]. Nếu điều kiện là True, nó đưa ra mục thứ 2, nếu Sai là mục đầu tiên.
Tim

Ý tưởng tốt! Thêm vào đó.
Truyền

Tôi nghĩ rằng bạn có thể sử dụng ternary nếu các câu lệnh, ví dụ: return <condition> ? <true result> : <false result>Lưu ý bạn cũng có thể lồng chúng như vậyreturn <condition> ? <true result> : <condition> ? <2nd true result> : < 2nd false result>
DarcyThomas

1

Haskell, 78 byte

Dòng đầu tiên cảm thấy lãng phí, tốn 14 byte, nhưng tôi không thể tìm thấy phiên bản ngắn hơn mà không có nó.

(#)=replicate
a="A":a
f=(!!)$60#"F"++[g:s|g<-"EDCB",s<-3#"-"++4#""++3#"+"]++a

Giải trình

Toán tử #là một tốc ký để tạo n bản sao của đối số thứ hai của nó. Danh sách alà một danh sách vô hạn của Chuỗi "A". Hàm flập chỉ mục thành một danh sách tất cả các lớp cho n = 0,1, ... Việc hiểu danh sách xây dựng "phần giữa" của danh sách này (từ E đến B); glà một Char duy nhất được thêm vào Chuỗi s(có thể trống).

Sử dụng

ghci> map f [0,20,65,72,75,80,99,102,864]
["F","F","E","D-","D","C-","B+","A","A"]

1

C, 102 byte

int f(int h){int b,c;printf("%c%c",b?65:!c?70:75-h/10,!(b=h>99)*(c=h>59)*(((h%10<3)*45+(h%10>6)*43)));

}

Sử dụng

#include <stdio.h>
int f(int );
int main(){
    int c;
    scanf("%d",&c);
    f(c);
}

Bạn đang thiếu phần + và -.
Trình tối ưu hóa

ah ok .... nhớ điều đó
Abr001am

quá dài :( ....
Abr001am

1

đc, 52

[Anq]sa[Fnq]sf[q]sn16o?A~rd9<ad6>f20r-n1+4/d1=n45r-P

Đầu ra

$ for i in {0,20,65,72,75,80,99,102,864}; do printf "{%s -> %s} " $i $(dc -e '[Anq]sa[Fnq]sf[q]sn16o?A~rd9<ad6>f20r-n1+4/d1=n45r-P' <<< $i); done
{0 -> F} {20 -> F} {65 -> E} {72 -> D-} {75 -> D} {80 -> C-} {99 -> B+} {102 -> A} {864 -> A} $ 
$ 

1

TI-Basic, 79 74 76 byte

Input N
If N>99
105->N
sub("FFFFFFEDCBA",1+int(N.1),1
If Ans!="F
Ans+sub("---    +++",1+fPart(N.1),1
Ans

Điều đó không hoạt động đối với các số nhỏ hơn 10.
lirtosiast

Bắt tuyệt vời, Tom, nó đã mất tích1+
Timtech

Điều này cũng có dấu cách (vô hình) bất cứ khi nào không có dấu + hoặc -.
lirtosiast

1

TI-BASIC, 69 68 66 byte

.1Ans
sub("F?E-E+D-D+C-C+B-B+A",1+2max(0,min(9,int(2Ans)-11)),int(e^(Ans<10 and Ans≥6 and iPart(2.2-5fPart(Ans

TI-BASIC không tốt cho thao tác chuỗi.

Nhập vào màn hình chính của máy tính, dưới dạng [số]: [tên chương trình].

Định dạng:

.1Ans
sub(                      //Syntax for the substring command is sub(string, index, length)

    "F?E-E+D-D+C-C+B-B+A"                  //String that encodes possible grades

    ,1+2max(0,min(9,            ))         //Starts at "F" if input <60, "A" if >=100
                   int(2Ans)-11           //(Input-55)/5, so starts at "E" from 60 to 64,
                                          //second E from 65-69, D from 70 to 74, &c.

    ,int(e^(                                   //length 1 if false, 2 (includes +/-) if true
            Ans<10 and Ans≥6 and               //grade between 60 and 100        
                                 iPart(               //1 if abs. val. of below >= 0.2
                                       2.2-5fPart(Ans  //2.2-.5(last digit)    

Điều này có thể có thể được chơi golf hơn nữa.


0

C #, 82 byte

Func<int,string>g=s=>s>99?"A":s<60?"F":(char)(75-s/10)+(s%10<3?"-":s%10>6?"+":"");

Đây là một câu đố với một số trường hợp thử nghiệm.


0

JavaScript (ES6), 86 83 byte

Những gì thực sự ăn hết các nhân vật là String.fromCharCodevà điều kiện +/- ... Tôi cực kỳ nghi ngờ có một cách thông minh để rút ngắn ít nhất một trong số họ.

f=n=>n>99?'A':n<60?'F':String.fromCharCode(75.9-n/10|0)+(n%10<3?'-':n%10>6?'+':'');

Nếu bạn muốn mã ngắn, String.fromCharCode hầu như luôn vô dụng. Sử dụng lập chỉ mục chuỗi (xem các câu trả lời javascript khác)
edc65

Dù sao, ~~(.1*-n+75.9)->75.9-n/10|0
edc65

@ edc65 Cảm ơn bạn đã tư vấn chơi golf! Tôi sẽ ghi nhớ lập chỉ mục chuỗi cho dịp tiếp theo.
vvye 11/05/2015

0

PHP5.5, 73 byte

Một lần nữa, không phải là ngắn nhất.

Nhưng nó đã có tác dụng!

<?=($n=$_GET[n])<59?F:($n>99?A:'BCDE'[$n[0]-6].'+-'[$n[1]<3?1:2*$n[1]<5])

Tôi đã phân loại nó theo PHP5.5 thay vì chỉ PHP vì cách này sử dụng cú pháp chỉ hợp lệ cho PHP5.5 và PHP5.6.

Bạn có thể đọc về hội thảo chuỗi và mảng trong hướng dẫn:
http://php.net/manual/en/migration55.new-features.php


0

Perl, 52

#!perl -p
$_=$_>99?A:$_<60?F:"$_"^"s";y/JK7890-6/BC+++\-\--/d

0

Ruby, 58 byte

Không thể tin rằng không có Ruby ở đây. Về sự phản chiếu, nó khá giống với một số đã có ở đây nhưng dù sao đi nữa:

->x{x<60?'F':x>99?'A':(75-x/10).chr+'+-'[(x+3)%10/3].to_s}

Hãy thử nó ở đây


0

Excel, 100 byte

=IF(A1<60,"F",IF(A1>99,"A",MID("EDCB",INT(A1/10)-5,1)&IF(MOD(A1,10)<3,"-",IF(MOD(A1,10)>6,"+",""))))
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.