苦労している大学生のGPA計算機


13

GPA計算機

(GPA =成績平均点)

あなたは決勝戦の週にストレスを感じた大学生です。今後の試験のために勉強する代わりに、学期の終わりにどのGPAを取得するかを決定することが最善であると判断します。このように、Bの代わりにCalculusでそのAを取得してDeanのリストに残すという決定をバックアップするためのデータがあります!

コンピューターサイエンス専攻なので、このGPAを決定する最もクールな方法を見つけたいと思います。もちろん、最もクールな方法は、最短のコードを使用することです!これはなので、バイト単位の最短コードが勝ちです!

詳細

  • あなたが行く大学は単位時間に合わせてスケーリングされた基本的なGPAを使用します。
  • Aの文字グレードは4.0、Bは3.0、Cは2.0、Dは1.0、Fは0.0です。
  • GPAは加重GPAであるため、4クレジット時間クラスのAは、1クレジット時間クラスのAの4倍にカウントされます(詳細については、以下の例を参照してください)
  • クレジット時間の範囲は1〜4
  • プログラムには、2つのコマンドライン入力、GradeおよびCredit Hourのリストが必要です。これらをコマンドラインからプログラムに入力する最適な方法を決定できます。入力が多すぎることを心配する必要はありませんが、コードが19クレジット時間の学期を処理できることを確認してください。

    • すなわち、入力:A 1 B 4 C 2…
  • プログラムは、3桁(X.XXなど)を使用してGPAを出力する必要があります

  • GPAは小数点以下2桁に丸める必要があります。好きな方法(床、天井、ベースなど)でラウンド

入力例(デザインに最適なものを選択してください)

  • A1B3C2F3B4
  • A1 B3 C2 F3 B4
  • A 1 B 3 C 2 F 3 B 4
  • A、1、B、3、C、2、F、3、B、4
  • A1、B3、C2、F3、B4

または、上記の組み合わせのいずれかで、すべての成績を一覧表示する形式を使用し、次にクレジット時間を指定する場合:

  • すなわちABAA 3 4 1 1

Input - A 3 B 4 A 1 A 1
Output - 3.56
Explanation: (4.0 * 3 + 3.0 * 4 + 4.0 * 1 + 4.0 * 1)/(3+4+1+1) = 3.555556 rounded off to 3.56 

Input - A 4 F 2 C 3 D 4
Output - 2.00
Explanation: (4.0 * 4 + 0.0 * 2 + 2.0 * 3 + 1.0 * 4)/(4+2+3+4) = 2 rounded off to 2.00

2
@DevelopingDeveloper 面倒なI / O形式は避けてください。
ジョンファンミン

1
@JungHwanMinあなたが望んでいたI / Oオプションを指定しなかったことを教えてください。約6種類の柔軟なオプションを提供しましたが、実際にこのシナリオに適合するように指定する必要があります。
DevelopingDeveloper

3
@DevelopingDeveloper Your GPA needs to be rounded to two decimal places:これを実現するには、GPA計算とは関係のないコードを追加する必要があります。
ジョンファンミン

2
PPCGへようこそ。私の謙虚な意見の最初の質問です。
エルペドロ

5
これはかなり興味深い質問であるにもかかわらず、前に言ったように、末尾の0での丸めと出力を強制することは、これがマルチパートの課題になるためです。答えは、単に出力仕様に準拠するために、不必要にバイトを追加する必要があるため、退屈で困難なIMO全体の問題になります。
23:23にコイナーリンガーをケア

回答:


5

ゼリー 15  21 バイト(丸めなしの12)

厳密なフォーマットのために+6バイト(ほとんど確実に少ない時間で可能ですが、就寝時間です)

Oạ69.Ḟ×S×ȷ2÷⁹S¤RLDż”.

計算されたGPAを印刷するグレードとそれぞれのクレジット時間を取る完全なプログラム(注:丸め方法は、OPで許可されているように、フロアになります)。

オンラインでお試しください!

がないため、丸め12バイト

Oạ69.Ḟ×S÷⁹S¤

どうやって?

Oạ69.Ḟ×S×ȷ2÷⁹S¤RLDż”. - Link: list of characters, grades; list of number, creditHours
                      -                                   e.g. "AFBDC", [5, 2, 4, 1, 2]
O                     - cast to ordinals (vectorises)          [65,70,66,68,67]
  69.                 - literal 69.5
 ạ                    - absolute difference (vectorises)       [4.5,0.5,3.5,1.5,2.5]
     Ḟ                - floor (vectorises)                     [4,0,3,1,2]
      ×               - multiply by creditHours (vectorises)   [20,0,12,1,4]
       S              - sum                                    37
         ȷ2           - literal 100
        ×             - multiply                               3700
              ¤       - nilad followed by link(s) as a nilad:
            ⁹         -   chain's right argument, creditHours  [5, 2, 4, 1, 2]
             S        -   sum                                  14
           ÷          - division                               264.2857142857143
               R      - range                                  [1,2,3,...,264]
                L     - length                                 264
                 D    - digits                                 [2,6,4]
                   ”. - literal '.'
                  ż   - zip together                           [[2,'.'],6,4]
                      - implicit print (smashing)              2.64

@nimi-良い点、私はそのビットを見逃した。修繕。
ジョナサンアラン


4

Perl 5の57 53 + 2(-an)= 59の 55バイト

$c+=$F[1];$\+=$F[1]*=!/F/&&69-ord}{printf'%.2f',$\/$c

オンラインでお試しください!

編集:入力を入れ替えて4バイトを節約します

入力形式:行区切り、クレジットに続いてグレード:

grade credits

例:

A 3
B 4
A 1
A 1


3

Wolfram言語(Mathematica)、39バイト

N[(5-LetterNumber@#2/.-1->0).#/Tr@#,3]&

クレジット時間のリストを取得してから、一連の成績を取得します。

TIOはMathematicaカーネル(任意の精度の数値を出力したくない)を使用するため、TIOでは機能しません


2
あなたが使用している場合-3バイトTr

3
あなたはF = -1数えるので、これは第二のテストcase.Itリターンのための1.85を失敗した
J42161217

2
ここで41bytesの修正がある:N[(5-(LetterNumber@#2/. 6->5)).#/Tr@#,3]&
J42161217

@Jenny_mathyすてきなキャッチ。どうやってそれを見逃したのか、私にはわかりません/.
ジョンファンミン

2

JavaScript(ES6)、72バイト

入力形式: A1B3C2F3B4

f=([c,d,...s],a=b=0)=>c?f(s,a+~'DCBA'.search(c,b-=d)*d):(a/b).toFixed(2)

テストケース


どの時点でsearchゴルファーになりparseIntますか?
ニール

@Neil parseIntはおそらく、サポートされているグレードをいくつか追加するだけでゴルファーになります。ただし、1つの問題はF = 0とD = 1のギャップです。
アーナルド

えっ、私も何のE ...がないことに気づいていなかった
ニール


2

Java、211バイト

入力形式:A1B3C2F3B4

ゴルフ

interface A{static void main(String[] a){int p=0,t=0,h=0,s=0;for(int c:a[0].toCharArray())if(p++%2==0)t=c=='A'?4:c=='B'?3:c=='C'?2:c=='D'?1:0;else{s+=(c-=48)*t;h+=c;}System.out.print(Math.ceil(100d*s/h)/100);}}

グロフなし

static void main(String[] a) {
    int p=0, //position in string
    t=0, //temp var, used to store the grade between iterations
    h=0, //credit sum
    s=0; //sum of weighted grade

    for(int c:a[0].toCharArray())
        if(p++%2==0)
            //map c to grade value, assign to temp variable t
            t=c=='A'?4:c=='B'?3:c=='C'?2:c=='D'?1:0;
        else{
            //map c to credit value, add temp variable (grade from previous char) * value of this char (credit) to sum
            s+=(c-=48)*t;
            //also, add credit to credit sum
            h+=c;
        }
    System.out.print(Math.ceil(100d*s/h)/100); //grade sum / credit hours sum, to 2dp*/
}

他のバージョン

私の腸のフレアは、別の入力形式(ABCF1324)を使用するとコードが短くなることを教えてくれました。そうではなかったようです。以下のバージョンの長さは234バイトです。

ゴルフ

interface A{static void main(String[] b){char[] a=b[0].toCharArray();int l=a.length/2,h=0,s=0,g,c,i;for(i=0;i<l;i++){g=a[i];g=g=='A'?4:g=='B'?3:g=='C'?2:g=='D'?1:0;c=a[i+l]-48;s+=g*c;h+=c;}System.out.print(Math.ceil(100d*s/h)/100);}}a

非ゴルフ

static void main(String[] b) {
    char[] a=b[0].toCharArray(); //char array
    int l=a.length/2, //first grade char
    h=0, //credit sum
    s=0, //sum of weighted grade
    g,c, //avoid declaration in for loop. grade and credit being iterated
    i; //avoid declaration in for loop
    for(i=0;i<l;i++) {
        g=a[i];//get char representing grade from array
        g=g=='A'?4:g=='B'?3:g=='C'?2:g=='D'?1:0; //convert to grade
        c=a[i+l]-48;//get char representing grade from array and convert to credit (48 is value of '0')
        s+=g*c; //add weighted grade to sum
        h+=c; //add credit to sum
    }
    System.out.print(Math.ceil(100d*s/h)/100); //grade sum / credit hours sum, to 2dp*/
}

こんにちは、ようこそ!あなたは完全なプログラムで答える必要はありませんので、そのような多くのバイトを削ぎ取ることができます。
ニッサ

2

ジャワ1.8287の 249バイト

Bumptiousのおかげで-38バイト

ゴルフ

static String N(String[]j){float g=0;float b=0;for(int i=0;i<j.length;i+=2){g=((m(j[i])*Float.parseFloat(j[i+1])+g));b+=Double.parseDouble(j[i+1]);}return String.format("%.2f",g/b);}static float m(String l){return l.equals("F")?0:('E'-l.charAt(0));}

非ゴルフ

interface C {
static void main(String[] z) throws Exception {
    String[] j = {"A", "4", "B", "3", "C", "2", "D", "1", "F", "1"};
    System.out.println(N(j));
}

static String N(String[] j) {
    float g = 0;
    float b = 0;
    for (int i = 0; i < j.length; i += 2) {
        g = ((m(j[i]) * Float.parseFloat(j[i + 1]) + g));
        b += Double.parseDouble(j[i + 1]);
    }
    return String.format("%.2f", g / b);
}

static float m(String l) {
    return l.equals("F") ? 0 : ('E' - l.charAt(0));
}
}

1
これを使用して長さを減らしますか?static float m(String l){return l.equals( "F")?0 :( 'E'-l.charAt(0));}
Bumptious Q Bangwhistle

1

ジュリア0.646の43 42バイト

g%h=round(max.(69-Int.(g),0)⋅h/sum(h),2)

オンラインでお試しください!

説明

入力形式::g成績のベクトル。h:クレジット時間のベクトル

  • g%h:再定義 %演算子をます。
  • 69-Int.(g):gの各要素'F','D','C','B','A'に対して-1,1,2,3,4それぞれに変換します。
  • max.( ,0):クランプ範囲 0:4(要素ごとに)。
  • 残りは単純なベクトル演算です。
  • 丸めには9バイトかかります。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.