ระบบการให้เกรดแปลก ๆ


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 ผมจำได้ว่ามันถูกกล่าวถึงใน sandbox ว่ามันไม่ได้เป็นของล่อว่าตั้งแต่นี้ไม่ได้มีช่วงที่มีขนาดเท่ากันและมีคำต่อท้ายเช่น/+ -
Erik the Outgolfer

1
เราจะได้รับสกอร์บอร์ดหรือไม่?
jrtapsell

คำตอบ:


4

เยลลี่ ,  18 17 15  14 ไบต์

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

ลิงก์ monadic ที่ใช้ตัวเลขและส่งคืนอักขระ

ลองออนไลน์! หรือดูคู่อินพุต - เอาต์พุตทั้งหมด

อย่างไร?

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 ไบต์ (-1 ไบต์ขอบคุณ @Arnauld)

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

55 53 ไบต์ (-2 ไบต์ขอบคุณ @Neil)

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
เป็นทางการเมื่อ

ฉันสามารถบันทึกสองไบต์บนหนึ่งในโซลูชันทางเลือกของคุณ:n=>"AFEDCB"[[14,171,181,295,301].findIndex(m=>n<m)+1]
Neil

-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

ครั้งแรกที่ฉันเห็น dyadic I.ในป่า เรียบร้อย
โคล

@ โคลฉันเชื่อว่าฉันเคยใช้มันสองสามครั้งในอดีตในการเล่นกอล์ฟ
ไมล์

6

Python 3 , 50 ไบต์

ขอบคุณ @jferard สำหรับ -4 ไบต์

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

ลองออนไลน์!

บันทึก 2 ไบต์ด้วย @mathmandan และต้องขอบคุณ @JonathanFrech ทางอ้อม

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]))ไบต์: (ดูคำตอบโดย@Jonathan Frech ที่codegolf.stackexchange.com/a/142244/36885 )
mathmandan


ruby port: ->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 ฉันแก้ไขคำตอบของคุณในรูปแบบที่เป็นทางการมากขึ้นหวังว่าคุณจะไม่สนใจ
อย่างเป็นทางการ

ไม่เลยฉันหมายถึงการแก้ไขเครื่องมือของฉันเพื่อส่งออกส่วนหัวขวา
jrtapsell

3

Japt , 23 21 ไบต์

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

ลองมัน


explantion

Uการป้อนข้อมูลโดยนัยของจำนวนเต็ม

'Gc-

ลบออกจาก codepoints ของสตริง (อักขระเดี่ยว) G...

è<U

จำนวนองค์ประกอบน้อยกว่าU...

[#ªT#´D294L*3]

ในอาร์เรย์ของ 170 ( ), 0 ( T), 180 ( ), 13 ( D), 294 (ตัวอักษร) และ 300 ( L*3) ดังนั้นการจัดรูปแบบและสั่งให้หลีกเลี่ยงการใช้เครื่องหมายจุลภาคคั่น 0สามารถลบได้ (ลบออกจาก codepoint Fแทน) แต่จะต้องเพิ่มเครื่องหมายจุลภาคหรือC*F(12 * 15) ที่ใช้สำหรับ180ในท้ายที่สุดจะไม่บันทึกไบต์


3

R , 50 44 ไบต์

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

ลองออนไลน์!

เช่นเดียวกับคำตอบ javascript แต่ใช้ vectorization ของ R และ LETTERS builtin เพื่อให้สั้นลงเล็กน้อย

ขอบคุณที่rturnbullสำหรับการโกนจำนวน 6 ไบต์สุดท้าย



ในความเป็นจริง44 ไบต์โดยเพียงแค่ทำให้มันเป็นโปรแกรมเต็มรูปแบบแทนฟังก์ชั่น
rturnbull

@rtbull ah, ฉันกำลังจะพูดว่า "ไม่คุณจำเป็นต้องห่อที่ใช้catหรืออื่น ๆsource(program,ec=T)และนับec=Tเป็นธง (ตามฉันทามติ meta ในโปรแกรม R) แต่โดยอื่นฉันทามติ meta ใหม่ที่เราไม่นับธงใด ๆ อีกต่อไปดังนั้นฉันจึงเป็นทางออกที่ถูกต้องสมบูรณ์แบบ
Giuseppe


2

Recursiva , 49 30 ไบต์

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

ลองออนไลน์!

อนุญาตให้ฉันตอบคำถามของฉันในภาษาของฉันเอง : D

  • บันทึก 19 ไบต์โดยใช้เทคนิคจากคำตอบ JS ที่น่าอัศจรรย์ของ @Herman Lauenstein

คำอธิบาย:

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 ไบต์

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ในตอนท้าย

(แทนที่1s ทั้งหมดด้วยอักขระด้วยจุดรหัส 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

Ly , 74 ไบต์

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;

ลองออนไลน์!

วิธี if-chain ที่ง่าย ฉันสงสัยว่ามันสามารถทำให้สั้นลงได้มาก


จะ(...)ต้องมีการคุมขังเหล่านั้นหรือไม่? ป.ล. nvm เห็นได้ชัดว่าพวกเขาเป็น
เป็นทางการ


1

Java 8, 55 bytes

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

Try it here.

Alternative 57 bytes:

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

Try it here.

Alternative 60 bytes:

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

Try it here.

Maybe some kind of formula can be find to get 0-5 in a shorter way than n<14?0:n<171?1:n<181?2:n<295?3:n<301?4:5 using the last approach. Still investigating this.



1

Rabbit~, 50 bytes

(Noncompeting, postdates question. I just finished the interpreter(yay) and wanted to try and solve something. This is also my first code golf thing ever)

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

It basically takes the differences from one grade to the next 14,157,10,114,6,65 (encoded as ỤṅỌrḲA) and subtracts from the input. If a negative number is found it stops progressing along the 'FEDCBA' sequence and outputs the letter.

Small explanation of this beautiful piece of syntax

Rabbit~ uses a grid based memory with one or several carets you can move around; this solution uses 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

Nice. Is there a way to try it online?
officialaimm

Not at the moment ^^
Adam

1

Excel, 53 bytes

Sum of conditions, then returns the required ASCII character:

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

Alternative solutions:

Summing conditions, return string index (63 bytes):

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


1

Jotlin, 48 41 bytes

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

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

Ported my previous Kotlin answer here.


1

V, 37 34 bytes

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

Try it 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

Basic idea:

  • Print FEDCBA, create 5 copies of B, 113 copies of C etc. resulting in the string FFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEDDDDDDDDDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBBBBBA (There is probably a more efficient way to do this)
  • Go to nth column (n is the first argument), copy a single character and replace the entire string with it.



1

Stax, 18 bytes

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

Run and debug online!

Explanation

Bytes counted in 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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.