Seltsames Bewertungssystem

14

Weirdo Incorporates haben eine seltsame Methode, um ihre Mitarbeiter nach der Anzahl der Tage einzustufen, an denen sie im Büro anwesend waren:

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

Zielsetzung:

Schreiben Sie ein Programm / eine Funktion, die / die die Note eines Mitarbeiters für die Anzahl der vom Mitarbeiter besuchten Tage ausgibt / zurückgibt.

Regeln:

  • Sie können Eingaben als Zeichenfolge oder Zahl annehmen, müssen sie jedoch als Zeichenfolge / Alphabet ausgeben (Sie können zwischen Groß- und Kleinschreibung wählen.)
  • Es gelten Standardlücken.
  • Das ist , also gewinnt das kürzeste Programm in Bytes!

Testfälle:

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

Anzeigetafel:

officialaimm
quelle
Sandkasten
offiziell
1
Eng verwandt
Mr. Xcoder
1
@ Mr.Xcoder Ich erinnere mich, dass in der Sandbox diskutiert wurde, dass es sich nicht um einen Betrüger handelt, da dieser keine gleichgroßen Bereiche und Suffixe wie +/ hat -.
Erik der Outgolfer
1
Können wir eine Anzeigetafel bekommen?
Jrtapsell

Antworten:

4

Jelly ,  18 17 15  14 Bytes

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

Eine monadische Verknüpfung, die eine Zahl aufnimmt und ein Zeichen zurückgibt.

Probieren Sie es online! oder sehen Sie alle Eingabe-Ausgabe-Paare .

Wie?

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)
Jonathan Allan
quelle
12

Javascript (ES6), 51 Byte

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

Alternativlösungen (länger):

53 52 bytes (-1 byte dank @Arnauld)

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

55 53 Bytes (-2 Bytes dank @Neil)

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

55 Bytes

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

Beispielcode-Snippet:

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

Herman L
quelle
1
Das Zusammenfassen der Bedingungen ist großartig !!! Ich wünschte, ich könnte noch einmal stimmen !!! : D
officialaimm
Ich kann zwei Bytes für eine Ihrer alternativen Lösungen einsparen:n=>"AFEDCB"[[14,171,181,295,301].findIndex(m=>n<m)+1]
Neil
-1 Byte für Ihre erste alternative Lösung:n=>'FEDCBA'[n>300?5:n>294?4:n>180?3:n>170?2:+(n>13)]
Arnauld
7

TI-Basic, 40 Bytes

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

J , 31 Bytes

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

Probieren Sie es online!

Erläuterung

'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
Meilen
quelle
Zum ersten Mal habe ich dyadic I.in freier Wildbahn gesehen. Ordentlich.
Cole
@cole Ich glaube, ich habe es in der Vergangenheit ein paar Mal im Code-Golf verwendet.
Meilen
6

Python 3 , 50 Bytes

Vielen Dank an @jferard für -4 Bytes.

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

Probieren Sie es online!

Python 3 , 54 Bytes

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

Probieren Sie es online!

2 Bytes dank @mathmandan und indirekt dank @JonathanFrech eingespart.

Python 2 , 56 Bytes

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

Probieren Sie es online!

Mr. Xcoder
quelle
1
54 Bytes lambda n:chr(70-sum(n>x for x in[13,170,180,294,300])). (Siehe Antwort von Jonathan Frech unter codegolf.stackexchange.com/a/142244/36885 )
Mathmandan
1
50 Bytes
jferard
Ruby Port: ->n{(70-"ĬĦ´ª\r".chars.count{|i|n>i.ord}).chr}gleiche Größe
Asone Tuhid
4

C 62 61 Bytes

Vielen Dank an Jonathan Frech für das Speichern eines Bytes!

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

Probieren Sie es online!

C 57 Bytes

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

Probieren Sie es online!

C (gcc), 54 Bytes

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

Probieren Sie es online!

C (gcc), 50 Bytes

Mit der Lösung von @Herman Lauenstein .

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

Probieren Sie es online!

Steadybox
quelle
61 Bytes.
Jonathan Frech
Warum nicht die kürzeste Version als Hauptlösung einsenden?
Shaggy
@Shaggy Diejenigen, bei denen gcc auf undefiniertes Verhalten zurückgreifen muss, also möchte ich lieber die gut definierten oben belassen und sie vom ältesten zum neuesten und gleichzeitig vom längsten zum kürzesten sortieren, scheint mir in Ordnung zu sein.
Steadybox
3

Kotlin , 56 Bytes

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

Probieren Sie es online!

Verschönert

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

Prüfung

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))
}
jrtapsell
quelle
+1. Ich habe Ihre Antwort auf ein formelleres Format gebracht, ich hoffe, es macht Ihnen nichts aus.
offiziell
Überhaupt
3

Japt , 23 21 Bytes

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

Versuch es


Erklärung

Implizite Eingabe einer Ganzzahl U.

'Gc-

Von den Codepunkten der (Einzelzeichen-) Zeichenfolge subtrahieren G...

è<U

Die Anzahl der Elemente weniger als U...

[#ªT#´D294L*3]

In dem Array von 170 ( ), 0 ( T), 180 ( ), 13 ( D), 294 (wörtlich) und 300 ( L*3), formatiert und geordnet, um die Verwendung von Trennkommas zu vermeiden. 0könnte entfernt werden ( Fstattdessen vom Codepunkt subtrahieren ), aber dann müsste ein Komma hinzugefügt oder C*F(12 * 15) verwendet werden 180, um letztendlich keine Bytes zu sparen.

Zottelig
quelle
3

R , 50 44 Bytes

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

Probieren Sie es online!

Entspricht der JavaScript-Antwort, verwendet jedoch die Vektorisierung von R und die integrierten LETTERS, um ein kleines bisschen kürzer zu sein.

Vielen Dank an rturnbull für die letzten 6 Bytes.

Giuseppe
quelle
49 Bytes
rturnbull
Tatsächlich 44 Bytes, indem Sie es einfach zu einem vollständigen Programm machen, anstatt zu einer Funktion.
rturnbull
@rturnbull ah, ich wollte gerade sagen "Nein, Sie müssen das einpacken catoder es verwenden source(program,ec=T)und ec=Tals Flag zählen (gemäß dem Metakonsens für R-Programme), aber nach einem anderen, neueren Metakonsens zählen wir keine Flags länger, also ich das ist eine vollkommen gültige Lösung.
Giuseppe
2

Python 2 , 77 Bytes

lambda n:chr(70-sorted(_*(n>(0,13,170,180,294,300)[_])for _ in range(6))[-1])

Probieren Sie es online!

Jonathan Frech
quelle
2

Rekursiva , 49 30 Bytes

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

Probieren Sie es online!

Gestatten Sie mir, meine eigene Frage in meiner eigenen Sprache zu beantworten. : D

  • Mit der Technik von @Herman Lauensteins erstaunlicher JS-Antwort wurden 19 Bytes eingespart

Erläuterung:

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   
officialaimm
quelle
2

Pyke , 28 Bytes

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

Probieren Sie es hier aus!

Erläuterung

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.
Mr. Xcoder
quelle
1

Jelly , 19 Bytes

“n-'‘+⁹;“ỌẠÇ‘ð>SịØA

Probieren Sie es online!

Footer führt alle Testfälle aus und formatiert die Ausgabe.

fireflame241
quelle
1

Pyth, 30 Bytes

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

Die Seite scheint nicht das Zeichen mit dem Code Nummer 1 zu zeigen, so dass Sie ein Zeichen mit dem Code Nummer 1 vor dem einfügen müssen &, ,undm am Ende

(Ersetzen Sie alle 1s durch Zeichen mit dem Code Punkt 1):

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

Pyth , 25  26  Bytes

@<G6sgRQ[13*17T180*30T294

Überprüfen Sie alle Testfälle.

Erläuterung

@<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.         
Mr. Xcoder
quelle
1

Ly , 74 Bytes

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;

Probieren Sie es online!

Ein einfacher If-Chain-Ansatz. Ich bezweifle, dass es viel kürzer gemacht werden kann.

Textlich
quelle
Sind diese Klammern (...)erforderlich? PS nvm, anscheinend sind sie.
offiziell
1

Java 8, 55 Bytes

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

Probieren Sie es hier aus.

Alternative 57 Bytes :

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

Probieren Sie es hier aus.

Alternative 60 Bytes :

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

Probieren Sie es hier aus.

Vielleicht kann eine Art Formel gefunden werden, um 0-5 auf kürzere Weise als n<14?0:n<171?1:n<181?2:n<295?3:n<301?4:5mit dem letzten Ansatz zu erhalten. Ich untersuche das immer noch.

Kevin Cruijssen
quelle
1

PowerShell , 59 Byte

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

Probieren Sie es online!

Ähnlich wie bei Jonathan Allens Jelly-Antwort konstruieren wir ein Array aller miteinander verketteten Buchstaben und indizieren dieses Array dann mit der Eingabe $args.

AdmBorkBork
quelle
1

Kaninchen ~ , 50 Bytes

(Nicht konkurrierende Frage nach dem Termin. Ich habe gerade den Dolmetscher beendet (yay) und wollte versuchen, etwas zu lösen. Dies ist auch meine erste Code-Golf-Sache überhaupt.)

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

Grundsätzlich werden die Differenzen von einer Note zur nächsten 14.157.10.114.6.65 (kodiert als ỤṅỌrḲA) genommen und von der Eingabe subtrahiert. Wenn eine negative Zahl gefunden wird, hört sie auf, sich entlang der 'FEDCBA'-Sequenz fortzusetzen, und gibt den Buchstaben aus.

Kleine Erklärung dieser schönen Syntax

Rabbit ~ verwendet einen gitterbasierten Speicher mit einem oder mehreren Carets, in denen Sie sich bewegen können. Diese Lösung verwendet 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
Adam
quelle
Nett. Gibt es eine Möglichkeit, es online auszuprobieren?
offiziell
Im Moment nicht ^^
Adam
1

Excel, 53 Bytes

Summe der Bedingungen, dann wird das erforderliche ASCII-Zeichen zurückgegeben:

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

Alternativlösungen:

Summierungsbedingungen, Rückgabe des Stringindex (63 Bytes):

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

K (oK) , 30 Bytes

Lösung:

"FEDCBA"@0 14 171 181 295 301'

Probieren Sie es online!

Erläuterung:

Index in den richtigen Eimer:

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

Jotlin , 48 41 Bytes

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

Gesamtes Programm:

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

Portierte meine vorherige Kotlin-Antwort hier .

jrtapsell
quelle
1

V , 37 34 Bytes

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

Probieren Sie es 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

Grundidee:

  • Drucken Sie FEDCBA, erstellen Sie 5 Kopien von B, 113 Kopien von C usw., was zu der Zeichenfolge führt. FFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEDDDDDDDDDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBBBBBA(Möglicherweise gibt es eine effizientere Möglichkeit, dies zu tun.)
  • Gehen Sie in die nSpalte ( nist das erste Argument), kopieren Sie ein einzelnes Zeichen und ersetzen Sie die gesamte Zeichenfolge durch dieses.
oktupol
quelle
1

Perl 6, 42 39 Bytes

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

Stax , 18 Bytes

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

Online ausführen und debuggen!

Erläuterung

In CP437 gezählte Bytes.

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
Weijun Zhou
quelle
0

C #, 110 Bytes

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

Probieren Sie es online aus

Schnarchen
quelle
2
Sie können Ihr Lambda signifikant mit dem trinary Operator verkürzen ?:alsx<14?"F":x<170?"E":x<180?"D":x<294?"C":x<300?"B":"A"
Bradley Uffner