奇妙なグレーディングシステム


14

Weirdo Incorporatesには、オフィスにいた日数でスタッフを格付けするという奇妙な方法があります。

  0 -  13 : F  
 14 - 170 : E
171 - 180 : D
181 - 294 : C
295 - 300 : B
301 - 365 : A

Note: The range is inclusive (i.e. 0-13 means 0 days and 13 days both will evaluate
as grade 'F').

目的:

従業員が参加した日数(0〜365の範囲内)で従業員の成績を出力/返すプログラム/関数を作成します。

ルール:

  • 入力は文字列または数値として取得できますが、文字列/アルファベットとして出力する必要があります(小文字または大文字を選択できます)。
  • 標準の抜け穴が適用されます。
  • これはなので、バイト単位の最短プログラムが勝ちです!

テストケース:

12  => F
15  => E
301 => A
181 => C

スコアボード:





1
@ Mr.Xcoderサンドボックスで、同じサイズの範囲がなく、+/ などのサフィックスがあるため、それがだまされていないことを説明したことを思い出し-ます。
エリックアウトゴルファー

1
スコアボードを取得できますか?
jrtapsell

回答:


4

ゼリー 18 17 15  14 バイト

NịØAx“A©r½ɗÇ‘¤

数字を受け取って文字を返すモナドリンク。

オンラインでお試しください!または、すべての入出力ペアを参照してください。

どうやって?

NịØAx“A©r½ɗÇ‘¤ - Link: number, d
N              - negate d
             ¤ - nilad followed by link(s) as a nilad:
  ØA           -   uppercase alphabet yield = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
     “A©r½ɗÇ‘  -   code-page indices = [65,6,114,10,157,14]
    x          -   times = 'A'x65+'B'*6+'C'x114+'D'x10+'E'*157+'F'*14
 ị             - index into (1-indexed & modular - hence the negation to allow all Fs
                                                   to be together at one end)

12

Javascript(ES6)、51バイト

n=>"ABCDEF"[(n<14)+(n<171)+(n<181)+(n<295)+(n<301)]

代替ソリューション(より長い):

53 52バイト(@Arnauldのおかげで-1バイト)

n=>"FEDCBA"[n>300?5:n>294?4:n>180?3:n>170?2:+(n>13)]

55 53バイト(@Neilのおかげで2バイト)

n=>"AFEDCB"[[14,171,181,295,301].findIndex(m=>n<m)+1]

55バイト

n=>"FEDCBA"[[13,170,180,294,300].filter(m=>n>m).length]

サンプルコードスニペット:

f=
n=>"ABCDEF"[(n<14)+(n<171)+(n<181)+(n<295)+(n<301)]
console.log(f(12))
console.log(f(15))
console.log(f(301))
console.log(f(181))


1
条件をまとめることは素晴らしいことです!!! もう一度賛成できたらいいな!!! :D
officialaimm

:私はあなたの代わりの解決策の一つに2つのバイトを保存することができますn=>"AFEDCB"[[14,171,181,295,301].findIndex(m=>n<m)+1]
ニール

最初の代替ソリューションでは-1バイト:n=>'FEDCBA'[n>300?5:n>294?4:n>180?3:n>170?2:+(n>13)]
Arnauld


6

J、31バイト

'FEDCBA'{~13 170 180 294 300&I.

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

説明

'FEDCBA'{~13 170 180 294 300&I.  Input: n
          13 170 180 294 300     Constant array [13, 170, 180, 294, 300]
                            &I.  Use it with interval index to find which of
                                 the intervals (-∞, 13], (13, 170], (170, 180],
                                 (180, 294], (294, 300], (300, ∞) n can be inserted at
        {~                       Index into
'FEDCBA'                         This string and return that char

初めてI.野生のダイアディックを見ました。きちんとした。
コール

@cole過去数回、コードゴルフで使ってきたと思う。
マイル

6

Python 3、50バイト

-4バイトの@jferardに感謝します。

lambda n:chr(70-sum(n>ord(x)for x in"\rª´ĦĬ"))

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

Python 3、54バイト

lambda n:chr(70-sum(n>x for x in[13,170,180,294,300]))

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

@mathmandanのおかげで2バイト、間接的に@JonathanFrechのおかげで2バイト節約されました。

Python 2、56バイト

lambda n:"ABCDEF"[sum(n<x for x in[14,171,181,295,301])]

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


1
54バイト:lambda n:chr(70-sum(n>x for x in[13,170,180,294,300]))。(で@ジョナサンFRECHで答えを参照codegolf.stackexchange.com/a/142244/36885
mathmandan


ルビーポート:->n{(70-"ĬĦ´ª\r".chars.count{|i|n>i.ord}).chr}同じサイズ
Asone Tuhid

4

C、62 61バイト

バイトを保存してくれた@Jonathan Frechに感謝します!

f(n){putchar(70-(n<14?0:n<171?1:n<181?2:n<295?3:n<301?4:5));}

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

C、57バイト

#define f(n)70-(n<14?0:n<171?1:n<181?2:n<295?3:n<301?4:5)

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

C(gcc)、54バイト

f(n){n=70-(n<14?0:n<171?1:n<181?2:n<295?3:n<301?4:5);}

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

C(gcc)、50バイト

@Herman Lauensteinのソリューションを使用します

f(n){n=65+(n<14)+(n<171)+(n<181)+(n<295)+(n<301);}

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



最短バージョンをメインソリューションとして提出してみませんか?
シャギー

@Shaggy gccを必要とするものは未定義の振る舞いに頼るので、明確に定義されたものを一番上に保ち、最も古いものから最新のものに並べ替えると同時に、長いものから短いものに並べ替えるのがいいようです。
Steadybox

3

Kotlin、56バイト

{v->'F'-listOf(13,170,180,294,300).filter{it<v}.count()}

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

美化

{ v->
    // Count the grades passed, then subtract that from F
    'F' - listOf(13,170,180,294,300)
            .filter { it < v }
            .count()
}

テスト

var x:(Int)->Char =
{v->'F'-listOf(13,170,180,294,300).filter{it<v}.count()}

fun main(args: Array<String>) {
    println(x(12))
    println(x(15))
    println(x(301))
    println(x(181))
}

+1。あなたの答えをより正式な形式に編集しました。気にしないでください。
officialaimm

すべてで、私は出力に右のヘッダを自分のツールを修正することを意図していない
jrtapsell

3

Japt23 21バイト

'Gc-[#ªT#´D294L*3]è<U

それを試してみてください


外植

integerの暗黙的な入力U

'Gc-

(単一文字)文字列のコードポイントから減算G...

è<U

以下の要素の数U...

[#ªT#´D294L*3]

170()、0(T)、180()、13(D)、294(リテラル)および300(L*3)の配列で、区切りコンマの使用を避けるためにフォーマットおよび順序付けされています。0削除することができます(のコードポイントから減算F代わりにが、コンマを追加するか、C*F(12 * 15)に使用する必要があり180、最終的にはバイトを節約しません。


3

R50 44バイト

LETTERS[6-sum(scan()>c(13,170,180,294,300))]

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

javascriptの回答と同じですが、Rのベクトル化とレター組み込み機能を使用して、少し短くします。

最後の6バイトを削除したrturnbullに感謝します。



実際、関数ではなく完全なプログラムにするだけで44バイトになります。
-rturnbull

@rturnbullああ、私は「Rプログラムのメタコンセンサスによると、catそれをラップするか、フラグとして使用source(program,ec=T)してカウントする必要はありませんec=Tが、別の新しいメタコンセンサスではフラグをカウントしません長いので、私はそれが完全に有効なソリューションです
ジュゼッペ


2

再帰49 30バイト

Y(++++<a301<a295<a181<a171<a14

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

自分の言語で自分の質問に答えさせてください。:D

  • @Herman Lauensteinの驚くべきJS回答の手法を使用して19バイトを節約しました

説明:

Y(++++<a301<a295<a181<a171<a14
      <a301<a295<a181<a171<a14 calculate true/false for all the conditions
  ++++                         sum up all the conditions to obtain n which can be either 0,1,2,3,4 or 5
 (                             yield upper-case Alphabet
Y                              Get n-th element   


2

パイク、28バイト

G6<13T17*180T30*294]5FhQ>)s@

ここで試してみてください!

説明

G6<13T17*180T30*294]5FhQ>)s@ - Full program. T is the constant for 10.

G                            - The lowercase alphabet.
 6<                          - With the letters after the index 6 trimmed.
   13                        - The literal 13.
     T17*                    - The integer 170, composed by 17 * 10, to save whitespace.
         180                 - The literal 180.
            T30*             - The integer 300, composed by 30 * 10. 
                294          - The literal 294.
                   ]5        - Create a list of 5 elements.
                     FhQ>)   - For each element in the list.
                      h      - Increment.
                       Q     - The input.
                        >    - Is smaller ^^ than ^? Yields 1 for truthy and 0 for falsy.
                         )s  - Close loop and sum.
                           @ - Get the index in the alphabet substring explained above.


1

Pyth、30バイト

@GtlfgTQmCdc"\r ª ´ & , m"d

サイトにはコードポイント1の文字が表示されていないようですので、コードポイント1の文字を挿入する必要があります。 &,m最後に

(すべて1のsをコードポイント1の文字に置き換えます):

@GtlfgTQmCdc"\r ª ´ 1& 1, 1m"d

1

Pyth、25  26 バイト

@<G6sgRQ[13*17T180*30T294

すべてのテストケースを確認します。

説明

@<G6sgRQ[13*17T180*30T294 - Full program.

  G                       - The lowercase alphabet.
 < 6                      - With the letters after the index 6 trimmed. We will call "S".
        [                 - Initialise a list literal.
         13               - The literal 13.
           *17T           - The integer 170, composed by 17 * 10, so save whitespace.
               180        - The literal 180.
                      294 - The literal 294.
                  *30T    - The integer 300, composed by 30 * 10.
     gRQ                  - For each element, return 1 if is is ≥ the input. 0 otherwise.
    s                     - Sum.
@                         - Get the index into S of ^.
                          - Output implicitly.         



1

Java 8、55バイト

n->n<14?'F':n<171?'E':n<181?'D':n<295?'C':n<301?'B':'A'

ここで試してみてください。

代替57バイト

n->(char)(n<14?70:n<171?69:n<181?68:n<295?67:n<301?66:65)

ここで試してみてください。

代替60バイト

n->"FEDCBA".charAt(n<14?0:n<171?1:n<181?2:n<295?3:n<301?4:5)

ここで試してみてください。

おそらくn<14?0:n<171?1:n<181?2:n<295?3:n<301?4:5、最後のアプローチを使用するよりも短い方法で0〜5を取得するための何らかの種類の式を見つけることができます。まだ調査中です。



1

うさぎ〜、50バイト

(非競合、後期の質問。私は通訳を終えたばかりです(イェーイ)と何かを解決しようとした。

=>FEDCBA$<({.0-\_-^\-&^?n&&}_}\>\{{\>:.¤})Ð"ỤṅỌrḲA

基本的に、1つのグレードから次の14,157,10,114,6,65(としてエンコードỤṅỌrḲA)までの差を取り、入力から減算します。負の数が見つかった場合、「FEDCBA」シーケンスに沿って進行を停止し、文字を出力します。

この美しい構文の簡単な説明

Rabbit〜は、移動可能な1つまたは複数のキャレットでグリッドベースのメモリを使用します。このソリューションでは2を使用します。

=>FEDCBA$<({.0-\_-^\-&^?n&&}_}\>\{{\>:.¤})Ð"ỤṅỌrḲA - Full program.

  FEDCBA                                           - Load bytes into grid
                                          Ð"ỤṅỌrḲA - Load bytes 14,157,10,114,6,65 into second line of data grid
=                                                  - Read input
 >       <      _ ^   ^     _  >   >               - Move caret (most instructions read from the grid below the active caret)
        $                                          - Create a new caret
          (                              )         - Loop
           {.0             } }   {{     }          - Conditional statement checking if value at caret == 0 then move active caret to next grade else print and quit
              -  -  -                              - Subtract 
               \   \          \ \                  - Cycle active caret
                     &   &&                        - Bitwise and to see if number is negative
                       ?n                          - Get negative sign bit
                                    :.             - Print value at caret as character
                                      ¤            - Terminate program

いいね オンラインで試す方法はありますか?
officialaimm

現時点ではありません^^
アダムアダム

1

Excel、53バイト

条件の合計、次に必要なASCII文字を返します。

=CHAR((A1<14)+(A1<171)+(A1<181)+(A1<295)+(A1<301)+65)

代替ソリューション:

合計条件、文字列インデックス(63バイト)を返します。

=MID("ABCDEF",(A1<14)+(A1<171)+(A1<181)+(A1<295)+(A1<301)+1,1)


1

ジョットリン48 41バイト

{v->'F'-l(13,170,180,294,300).f{a<v}.l()}

プログラム全体:

var x:(Int)->Char =
{v->'F'-l(13,170,180,294,300).f{a<v}.l()}

println(x(12))
println(x(15))
println(x(301))
println(x(181))

以前のKotlinの回答をここに移植しました


1

V37 34バイト

aFEDCBA5äh113äh9äh156äh13ähÀ|vyVp

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

Hexdump:

00000000: 3133 4146 1b31 3536 4145 1b39 4144 1b31  13AF.156AE.9AD.1
00000010: 3133 4143 1b35 4142 1b36 3441 411b eec0  13AC.5AB.64AA...
00000020: 7c76 7956 70                             |vyVp

基本的な考え方:

  • 印刷FEDCBA、Bの5つのコピー、Cの113のコピーなどを作成し、文字列を作成しますFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEDDDDDDDDDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBBBBBA(これを行うにはおそらくより効率的な方法があります)
  • n列(n最初の引数)に移動し、1つの文字をコピーして、文字列全体を置き換えます。


1

Perl 6の、42の 39バイト

{chr(65+[+] "\rª´ĦĬ".ords »>»$_)}


0

C#、110バイト

x=>{if(x<14)return"F";if(x<171)return"E";if(x<181)return"D";if(x<295)return"C";if(x<301)return"B";return"A";};

オンラインで試す


2
あなたは大幅にトライナリ演算子を使用して、あなたのラムダを短縮することができます?:ようx<14?"F":x<170?"E":x<180?"D":x<294?"C":x<300?"B":"A"
ブラッドリーUffner
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.