Sistem penilaian aneh


14

Perusahaan Aneh Weirdo memiliki cara aneh menilai staf mereka dengan jumlah hari mereka hadir di kantor:

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

Objektif:

Tulis program / fungsi yang menghasilkan / mengembalikan nilai seorang karyawan selama beberapa hari [dalam kisaran inklusif 0-365] yang dihadiri oleh karyawan tersebut.

Aturan:

  • Anda dapat mengambil input sebagai string atau angka tetapi harus menampilkan sebagai string / alfabet (Anda dapat memilih huruf kecil atau huruf besar.)
  • Celah standar berlaku.
  • Ini , jadi program terpendek dalam byte menang!

Kasus uji:

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

Papan angka:





1
@ Mr.Xcoder Saya ingat bahwa sudah dibahas di kotak pasir bahwa itu bukan duplikat karena ini tidak memiliki rentang ukuran yang sama dan yang memiliki sufiks seperti +/ -.
Erik the Outgolfer

1
Bisakah kita mendapatkan papan skor?
jrtapsell

Jawaban:


4

Jelly ,  18 17 15  14 byte

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

Tautan monadik yang mengambil nomor dan mengembalikan karakter.

Cobalah online! atau lihat semua pasangan input-output .

Bagaimana?

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 byte

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

Solusi alternatif (lebih lama):

53 52 byte (-1 byte terima kasih kepada @Arnauld)

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

55 53 byte (-2 byte terima kasih kepada @Neil)

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

55 byte

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

Cuplikan kode contoh:

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
Menjumlahkan kondisi itu hebat !!! Seandainya aku bisa memilih lagi !!! : D
officialaimm

Saya dapat menyimpan dua byte pada salah satu solusi alternatif Anda:n=>"AFEDCB"[[14,171,181,295,301].findIndex(m=>n<m)+1]
Neil

-1 byte untuk solusi alternatif pertama Anda:n=>'FEDCBA'[n>300?5:n>294?4:n>180?3:n>170?2:+(n>13)]
Arnauld

7

TI-Basic, 40 byte

sub("FEDCBA",sum(Ans≥{0,14,171,181,295,301}),1

6

J , 31 byte

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

Cobalah online!

Penjelasan

'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

Pertama kali saya melihat diad I.di alam liar. Rapi.
cole

@cole Saya percaya saya telah menggunakannya beberapa kali di masa lalu dalam kode-golf.
miles

6

Python 3 , 50 byte

Berkat @ jferard untuk -4 byte.

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

Cobalah online!

Python 3 , 54 byte

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

Cobalah online!

Disimpan 2 byte berkat @mathmandan, dan secara tidak langsung berkat @JonathanFrech.

Python 2 , 56 byte

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

Cobalah online!


1
54 byte: lambda n:chr(70-sum(n>x for x in[13,170,180,294,300])). (Lihat jawaban oleh @Jonathan Frech di codegolf.stackexchange.com/a/142244/36885 )
mathmandan


port ruby: ->n{(70-"ĬĦ´ª\r".chars.count{|i|n>i.ord}).chr}ukuran yang sama
Asone Tuhid

4

C, 62 61 byte

Terima kasih kepada @Jonathan Frech karena telah menghemat satu byte!

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

Cobalah online!

C, 57 byte

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

Cobalah online!

C (gcc), 54 byte

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

Cobalah online!

C (gcc), 50 byte

Menggunakan solusi @Herman Lauenstein .

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

Cobalah online!



Mengapa tidak mengirimkan versi terpendek sebagai solusi utama Anda?
Shaggy

@Shaggy Yang membutuhkan gcc resort untuk perilaku yang tidak terdefinisi, jadi saya lebih suka menjaga yang terdefinisi dengan baik di atas, dan memilah mereka dari yang tertua ke yang terbaru dan pada saat yang sama dari yang terpanjang ke yang terpendek tampaknya baik untuk saya.
Steadybox

3

Kotlin , 56 byte

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

Cobalah online!

Yg diperindahkan

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

Uji

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. Saya mengedit jawaban Anda ke format yang lebih formal, harap Anda tidak keberatan.
officialaimm

Tidak sama sekali, saya bermaksud memperbaiki alat saya untuk menampilkan header yang tepat
jrtapsell

3

Japt , 23 21 byte

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

Cobalah


Penjelasan

Input bilangan bulat implisit U.

'Gc-

Kurangi dari codepoint dari string (karakter tunggal) G...

è<U

Hitungan elemen kurang dari U...

[#ªT#´D294L*3]

Dalam array 170 ( ), 0 ( T), 180 ( ), 13 ( D), 294 (literal) & 300 ( L*3), diformat dan dipesan untuk menghindari penggunaan tanda pembatas koma. 0dapat dihapus (dikurangi dari codepoint Fsebagai gantinya) tetapi kemudian koma perlu ditambahkan atau C*F(12 * 15) digunakan untuk 180, akhirnya tidak menyimpan byte.


3

R , 50 44 byte

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

Cobalah online!

sama dengan jawaban javascript, tetapi menggunakan vektorisasi R dan SURAT builtin untuk datang sedikit lebih pendek.

Terima kasih kepada rturnbull untuk mencukur 6 byte terakhir.



Bahkan, 44 byte hanya dengan menjadikannya program yang lengkap alih-alih suatu fungsi.
rturnbull

@rturnbull ah, saya hampir mengatakan "tidak, Anda perlu membungkusnya catatau menggunakan source(program,ec=T)dan menghitung ec=Tsebagai bendera (sesuai konsensus meta pada program R), tetapi dengan konsensus meta baru kami tidak menghitung bendera apa pun lebih lama, jadi saya itu solusi yang sangat valid
Giuseppe


2

Recursiva , 49 30 byte

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

Cobalah online!

Izinkan saya untuk menjawab pertanyaan saya sendiri dalam bahasa saya sendiri. : D

  • disimpan 19 byte dengan menggunakan teknik dari jawaban JS menakjubkan @Herman Lauenstein

Penjelasan:

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

Pyke , 28 byte

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

Coba di sini!

Penjelasan

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 byte

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

Situs ini tampaknya tidak menunjukkan karakter dengan titik kode 1, sehingga Anda perlu untuk memasukkan karakter dengan titik kode 1 sebelum &, ,danm pada akhirnya

(Ganti semua 1dengan karakter dengan kode 1):

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

1

Pyth , 25  26  byte

@<G6sgRQ[13*17T180*30T294

Verifikasi semua kasus uji.

Penjelasan

@<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

Ly , 74 byte

n(14)L["F"o;]p(171)L["E"o;]p(181)L["D"o;]p(195)L["C"o;]p(301)L["B"o;]"A"o;

Cobalah online!

Pendekatan if-chain yang sederhana. Saya ragu itu bisa dibuat lebih pendek.


Apakah paranthesis itu (...)diperlukan? PS nvm, Ternyata mereka.
officialaimm


1

Java 8, 55 byte

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

Coba di sini.

Alternatif 57 byte :

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

Coba di sini.

Alternatif 60 byte :

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

Coba di sini.

Mungkin beberapa jenis rumus dapat ditemukan untuk mendapatkan 0-5 dengan cara yang lebih pendek daripada n<14?0:n<171?1:n<181?2:n<295?3:n<301?4:5menggunakan pendekatan terakhir. Masih menyelidiki ini.


1

PowerShell , 59 byte

(,'F'*14+,'E'*157+,'D'*10+,'C'*114+,'B'*6+,'A'*65)["$args"]

Cobalah online!

Mirip dengan jawaban Jelly Allen Jonathan, dalam hal ini kami sedang membangun sebuah array dari semua huruf yang disatukan, kemudian mengindeks ke dalam array itu dengan input $args.


1

Kelinci ~ , 50 byte

(Tidak berkompetisi, pertanyaan postdates. Saya baru saja menyelesaikan penerjemah (yay) dan ingin mencoba memecahkan sesuatu. Ini juga kode golf pertama saya)

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

Ini pada dasarnya membawa perbedaan dari satu kelas ke 14.157.10.10.114.6.65 berikutnya (dikodekan sebagai ỤṅỌrḲA ) dan mengurangi dari input. Jika angka negatif ditemukan, ia berhenti bergerak di sepanjang urutan 'FEDCBA' dan mengeluarkan surat itu.

Penjelasan kecil tentang sintaks yang indah ini

Kelinci ~ menggunakan memori berbasis grid dengan satu atau beberapa caret yang dapat Anda pindahkan; solusi ini menggunakan 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

Bagus. Apakah ada cara untuk mencobanya secara online?
officialaimm

Tidak pada saat ini ^^
Adam

1

Excel, 53 byte

Jumlah kondisi, lalu mengembalikan karakter ASCII yang diperlukan:

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

Solusi alternatif:

Kondisi penjumlahan, kembalikan indeks string (63 byte):

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

1

K (oK) , 30 byte

Larutan:

"FEDCBA"@0 14 171 181 295 301'

Cobalah online!

Penjelasan:

Indeks ke dalam ember yang benar:

"FEDCBA"@0 14 171 181 295 301' / the solution
         0 14 171 181 295 301' / bin (') input in a bucket
"FEDCBA"@                      / index (@) into "FEDCBA"

1

Jotlin , 48 41 byte

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

Seluruh program:

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

Mengaitkan jawaban Kotlin saya sebelumnya di sini .


1

V , 37 34 byte

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

Cobalah online!

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

Ide dasar:

  • Cetak FEDCBA, buat 5 salinan B, 113 salinan C, dll. Yang menghasilkan string FFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEDDDDDDDDDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBBBBBA(Mungkin ada cara yang lebih efisien untuk melakukan ini)
  • Pergi ke nkolom th ( nadalah argumen pertama), salin satu karakter dan ganti seluruh string dengan itu.


1

Perl 6, 42 39 byte

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

1

Stax , 18 byte

5"«µħĭ",+|oH-VA@]

Jalankan dan debug online!

Penjelasan

Byte dihitung dalam CP437.

5"«µħĭ",+|oH-VA@]
5            -        5 minus the result of the following
 "«µħĭ"                   [14, 171, 181, 295, 301]
        ,+                Append input
          |oH             Index of last element if the array were to be sorted
              VA@]    Letter in the alphabet with the given index

0

C #, 110 byte

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

Cobalah online


2
Anda dapat memperpendek lambda Anda secara signifikan menggunakan operator trinary ?:sebagaix<14?"F":x<170?"E":x<180?"D":x<294?"C":x<300?"B":"A"
Bradley Uffner
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.