Dziwny system oceniania


14

Weirdo Incorporates ma dziwny sposób oceniania swoich pracowników według liczby dni, w których przebywali w biurze:

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

Cel:

Napisz program / funkcję, która generuje / zwraca ocenę pracownika za liczbę dni [w zakresie 0–365], w których uczestniczy pracownik.

Zasady:

  • Możesz przyjmować dane wejściowe jako ciąg lub liczbę, ale dane wyjściowe muszą być ciągiem / alfabetem (możesz wybrać małe lub wielkie litery).
  • Obowiązują standardowe luki.
  • To jest , więc wygrywa najkrótszy program w bajtach!

Przypadki testowe:

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

Tablica wyników:





1
@ Mr.Xcoder Pamiętam, że w piaskownicy dyskutowano, że nie jest to duplikat, ponieważ nie ma on jednakowych zakresów i że ma sufiksy takie jak +/ -.
Erik the Outgolfer,

1
Czy możemy dostać tablicę wyników?
jrtapsell

Odpowiedzi:


4

Galaretka ,  18 17 15  14 bajtów

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

Monadyczny link pobierający liczbę i zwracający znak.

Wypróbuj online! lub zobacz wszystkie pary wejścia-wyjścia .

W jaki sposób?

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 bajtów

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

Alternatywne rozwiązania (dłuższe):

53 52 bajty (-1 bajt dzięki @Arnauld)

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

55 53 bajtów (-2 bajty dzięki @Neil)

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

55 bajtów

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

Przykładowy fragment kodu:

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
To podsumowanie warunków jest świetne !!! Chciałbym móc jeszcze raz głosować !!! : D
oficjalny

Mogę zapisać dwa bajty na jednym z twoich alternatywnych rozwiązań:n=>"AFEDCB"[[14,171,181,295,301].findIndex(m=>n<m)+1]
Neil

-1 bajt dla twojego pierwszego alternatywnego rozwiązania:n=>'FEDCBA'[n>300?5:n>294?4:n>180?3:n>170?2:+(n>13)]
Arnauld

7

TI-Basic, 40 bajtów

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

6

J , 31 bajtów

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

Wypróbuj online!

Wyjaśnienie

'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

Pierwszy raz widziałem dyadię I.na wolności. Schludny.
cole

@cole Wydaje mi się, że kilkakrotnie korzystałem z niego podczas gry w golfa.
mile

6

Python 3 , 50 bajtów

Dzięki @jferard za -4 bajty.

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

Wypróbuj online!

Python 3 , 54 bajty

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

Wypróbuj online!

Zaoszczędzono 2 bajty dzięki @mathmandan i pośrednio dzięki @JonathanFrech.

Python 2 , 56 bajtów

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

Wypróbuj online!


1
54 bajtów: lambda n:chr(70-sum(n>x for x in[13,170,180,294,300])). (Patrz odpowiedź @Jonathan Frech na codegolf.stackexchange.com/a/142244/36885 )
mathmandan


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

4

C, 62 61 bajtów

Dzięki @Jonathan Frech za uratowanie bajtu!

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

Wypróbuj online!

C, 57 bajtów

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

Wypróbuj online!

C (gcc), 54 bajty

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

Wypróbuj online!

C (gcc), 50 bajtów

Korzystanie z rozwiązania @Herman Lauenstein .

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

Wypróbuj online!



Dlaczego nie zgłosić najkrótszej wersji jako głównego rozwiązania?
Shaggy,

@Shaggy Te, które wymagają gcc uciekają się do nieokreślonego zachowania, więc wolę zachować dobrze zdefiniowane na górze, a sortowanie ich od najstarszych do najnowszych, a jednocześnie od najdłuższych do najkrótszych wydaje mi się w porządku.
Steadybox

3

Kotlin , 56 bajtów

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

Wypróbuj online!

Upiększony

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

Test

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. Zredagowałem twoją odpowiedź na bardziej formalny format, mam nadzieję, że nie będziesz miał nic przeciwko.
officialaimm

Wcale nie, chciałem naprawić moje narzędzie, aby wyświetlało właściwy nagłówek
jrtapsell

3

Japt , 23 21 bajtów

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

Spróbuj


Wyjaśnienie

Domniemane wprowadzenie liczby całkowitej U.

'Gc-

Odejmij od współrzędnych kodowych ciągu (pojedynczego znaku) G...

è<U

Liczba elementów mniejsza niż U...

[#ªT#´D294L*3]

W tablicy 170 ( ), 0 ( T), 180 ( ), 13 ( D), 294 (dosłownie) i 300 ( L*3), tak sformatowane i uporządkowane, aby uniknąć używania przecinków. 0można usunąć (odejmując od współrzędnej kodowejF zamiast tego zamiast), ale wówczas należy dodać przecinek lub użyć C*F(12 * 15) 180, ostatecznie oszczędzając bajtów.


3

R , 50 44 bajtów

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

Wypróbuj online!

to samo co odpowiedź na javascript, ale używa wektoryzacji R i wbudowanych LISTÓW, aby nieco się skrócić.

Dzięki rturnbull za golenie ostatnich 6 bajtów.



W rzeczywistości 44 bajty, po prostu czyniąc z niego pełny program zamiast funkcji.
rturnbull

@rturnbull ah, miałem właśnie powiedzieć: „nie, musisz to zawinąć catlub użyć source(program,ec=T)i policzyć ec=Tjako flagę (zgodnie z meta konsensusem w programach R), ale według innej, nowszej meta konsensusu nie liczymy flag dłużej, więc to jest całkowicie poprawne rozwiązanie
Giuseppe


2

Recursiva , 49 30 bajtów

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

Wypróbuj online!

Pozwól mi odpowiedzieć na własne pytanie w moim własnym języku. :RE

  • zaoszczędzono 19 bajtów, stosując technikę z niesamowitej odpowiedzi JS @ Hermana Lauensteina

Wyjaśnienie:

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 bajtów

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

Wypróbuj tutaj!

Wyjaśnienie

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 bajtów

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

Witryna nie wydaje się, aby pokazać postać z punktu kod 1, więc trzeba wstawić znak kodu z punktu 1 przed &, ,i mna koniec

(Zamień wszystkie 1s na znak z kodem 1):

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

1

Pyth , 25  26  bajtów

@<G6sgRQ[13*17T180*30T294

Sprawdź wszystkie przypadki testowe.

Wyjaśnienie

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

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;

Wypróbuj online!

Proste podejście oparte na łańcuchu. Wątpię, by można go było znacznie skrócić.


Czy te nawiasy są (...)wymagane? PS nvm, podobno są.
officialaimm


1

Java 8, 55 bajtów

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

Wypróbuj tutaj.

Alternatywnie 57 bajtów :

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

Wypróbuj tutaj.

Alternatywnie 60 bajtów :

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

Wypróbuj tutaj.

Może uda się znaleźć jakąś formułę, aby uzyskać 0-5 w krótszy sposób niż n<14?0:n<171?1:n<181?2:n<295?3:n<301?4:5przy użyciu ostatniego podejścia. Wciąż to badam.


1

PowerShell , 59 bajtów

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

Wypróbuj online!

Podobnie jak w przypadku odpowiedzi Jonathana Allena na galaretkę, ponieważ konstruujemy tablicę wszystkich liter połączonych razem, a następnie indeksujemy do tej tablicy z danymi wejściowymi $args.


1

Królik ~ , 50 bajtów

(Niekonkurencyjne pytanie po datach. Właśnie skończyłem tłumacza (tak) i chciałem spróbować coś rozwiązać. To także moja pierwsza gra w golfa w kodzie)

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

Zasadniczo bierze różnice z jednej klasy do następnej 14,157,10,114,6,65 (zakodowane jako ỤṅỌrḲA ) i odejmuje od danych wejściowych. Jeśli zostanie znaleziona liczba ujemna, przestanie ona postępować wzdłuż sekwencji „FEDCBA” i wyświetli literę.

Małe wyjaśnienie tej pięknej składni

Królik ~ używa pamięci opartej na siatce z jednym lub kilkoma kursorami, po których można się poruszać; to rozwiązanie wykorzystuje 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

Ładny. Czy istnieje sposób, aby wypróbować go online?
officialaimm

Nie w tej chwili ^^
Adam

1

Excel, 53 bajty

Suma warunków, a następnie zwraca wymagany znak ASCII:

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

Alternatywne rozwiązania:

Warunki sumowania, zwracany indeks ciągu (63 bajty):

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

1

K (oK) , 30 bajtów

Rozwiązanie:

"FEDCBA"@0 14 171 181 295 301'

Wypróbuj online!

Wyjaśnienie:

Indeksuj do właściwego wiadra:

"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 bajtów

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

Cały 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))

Przeniesiony mój poprzedni Kotlin odpowiedź tutaj .


1

V , 37 34 bajtów

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

Wypróbuj 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

Podstawowy pomysł:

  • Wydrukuj FEDCBA, utwórz 5 kopii B, 113 kopii C itp., Co spowoduje powstanie ciąguFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEDDDDDDDDDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBBBBBA (prawdopodobnie jest to bardziej wydajny sposób, aby to zrobić)
  • Przejdź do ntej kolumny ( njest to pierwszy argument), skopiuj pojedynczy znak i zastąp nim cały ciąg.


1

Perl 6, 42 39 bajtów

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

1

Stax , 18 bajtów

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

Uruchom i debuguj online!

Wyjaśnienie

Bajty liczone w 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 bajtów

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

Wypróbuj online


2
Możesz znacznie skrócić swoją lambdę, używając operatora trójnożnego, ?:jakx<14?"F":x<170?"E":x<180?"D":x<294?"C":x<300?"B":"A"
Bradley Uffner,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.