Tuhaf derecelendirme sistemi


14

Weirdo Incorporated, personelini ofiste bulundukları gün sayısına göre derecelendirmenin garip bir yoluna sahiptir:

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

Amaç:

Çalışanın katıldığı gün sayısı için (0-365 dahil olmak üzere) bir çalışanın notunu veren / veren bir program / işlev yazın.

Kurallar:

  • Girişi dize veya sayı olarak alabilirsiniz, ancak dize / alfabe olarak çıktı almalısınız (Küçük veya büyük harf seçebilirsiniz.)
  • Standart boşluklar geçerlidir.
  • Bu , yani bayt en kısa program kazanır!

Test senaryoları:

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

scoreboard:





1
@ Mr.Xcoder Kum havuzunda, bunun eşit boyutlu aralıkları olmadığı ve +/ gibi sonekleri olduğu için bunun bir dupe olmadığı tartışıldığını hatırlıyorum -.
Outgolfer Erik

1
Skorbord alabilir miyiz?
jrtapsell

Yanıtlar:


4

Jöle ,  18 17 15  14 bayt

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

Sayı alan ve karakter döndüren monadik bir bağlantı.

Çevrimiçi deneyin! veya tüm giriş-çıkış çiftlerine bakın .

Nasıl?

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 bayt

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

Alternatif çözümler (daha uzun):

53 52 bayt (@Arnauld sayesinde -1 bayt)

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

55 53 bayt (@Neil sayesinde -2 bayt)

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

55 bayt

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

Örnek kod snippet'i:

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
Koşulları toplamak şey harika !!! Keşke bir kez daha upvote olabilir !!! : D
officialaimm

Alternatif çözümlerinizden birine iki bayt kaydedebilirim:n=>"AFEDCB"[[14,171,181,295,301].findIndex(m=>n<m)+1]
Neil

İlk alternatif çözümünüz için -1 bayt:n=>'FEDCBA'[n>300?5:n>294?4:n>180?3:n>170?2:+(n>13)]
Arnauld

7

TI-Basic, 40 bayt

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

6

J , 31 bayt

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

Çevrimiçi deneyin!

açıklama

'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

İlk defa I.vahşi doğada ikili gördüm . Temiz.
cole

@cole Ben geçmişte birkaç kez kod golf kullandığım inanıyorum.
mil

6

Python 3 , 50 bayt

-4 bayt için @jferard'a teşekkürler.

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

Çevrimiçi deneyin!

Python 3 , 54 bayt

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

Çevrimiçi deneyin!

@Mathmandan ve dolaylı olarak @JonathanFrech sayesinde 2 bayt tasarruf etti.

Python 2 , 56 bayt

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

Çevrimiçi deneyin!


1
54 bayt: lambda n:chr(70-sum(n>x for x in[13,170,180,294,300])). ( @Jonathan Frech'in verdiği cevaba bakınız: codegolf.stackexchange.com/a/142244/36885 )
mathmandan


yakut bağlantı noktası: ->n{(70-"ĬĦ´ª\r".chars.count{|i|n>i.ord}).chr}aynı boyutta
Asone Tuhid

4

C, 62 61 bayt

@Jonathan Frech'e bir bayt tasarrufu için teşekkürler!

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

Çevrimiçi deneyin!

C, 57 bayt

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

Çevrimiçi deneyin!

C (gcc), 54 bayt

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

Çevrimiçi deneyin!

C (gcc), 50 bayt

@Herman Lauenstein'ın çözümünü kullanmak .

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

Çevrimiçi deneyin!



Neden en kısa sürümü ana çözümünüz olarak göndermiyorsunuz?
Shaggy

@Shaggy Gcc çare tanımlanamayan davranış gerektiren olanlar, bu yüzden iyi tanımlanmış olanlar üstünde tutmak istiyorum, ve onları en eski en yeni ve aynı zamanda en uzun en kısa en kısa için sıralamak bana iyi görünüyor.
Steadybox

3

Kotlin , 56 bayt

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

Çevrimiçi deneyin!

Beautified

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

Ölçek

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. Cevabınızı daha resmi bir formatta düzenledim, umarım sakıncası olmaz.
officialaimm

Hiç değil, sağ üstbilgiyi
çıkarmak için aracımı

3

Japt , 23 21 bayt

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

Dene


explantion

Örtük tamsayı girişi U.

'Gc-

(Tek karakter) dizenin kod noktalarından çıkar G...

è<U

Daha az eleman sayısı U...

[#ªT#´D294L*3]

170 ( ), 0 ( T), 180 ( ), 13 ( D), 294 (gerçek) ve 300 ( L*3) dizisinde, virgüllerin sınırlandırılmasından kaçınmak için biçimlendirilmiş ve sıralanmıştır. 0kaldırılabilir ( Fbunun yerine kod noktasından çıkarılır ), ancak daha sonra bir virgül eklenmeli veya C*F(12 * 15) kullanılmalı ve 180sonuçta bayt tasarrufu yapılmamalıdır.


3

R , 50 44 bayt

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

Çevrimiçi deneyin!

Javascript yanıtıyla aynıdır, ancak R'nin vektörleşmesini ve LETTERS yerleşikini biraz daha kısa sürede kullanmak için kullanır.

Son 6 baytı tıraş ettiği için rturnbull'a teşekkürler .



Aslında, 44 bayt sadece bir işlev yerine tam bir program haline getirerek.
rturnbull

@rturnbull ah, "hayır, bunu bir pakete sarmanız catya da bir bayrak olarak kullanmanız source(program,ec=T)ve saymanız gerekmiyordu ec=T(R programlarındaki meta konsensüsüne göre), ancak başka, daha yeni bir meta konsensüs ile herhangi bir bayrak saymıyoruz bu yüzden bu tamamen geçerli bir çözüm
Giuseppe


2

Özyinelemeli , 49 30 bayt

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

Çevrimiçi deneyin!

Kendi sorumu kendi dilimde cevaplamama izin ver. : D

  • @Herman Lauenstein'ın muhteşem JS yanıtından tekniği kullanarak 19 bayt kurtardı

Açıklama:

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 bayt

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

Burada deneyin!

açıklama

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 bayt

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

Daha önce kod noktası 1 ile bir karakteri eklemek gerekir böylece site kod noktası 1 karakterin göstermek için görünmüyor &, ,ve msonunda

(Tüm 1kodları kod noktası 1 olan karakterle değiştirin ):

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

1

Pyth , 25  26  bayt

@<G6sgRQ[13*17T180*30T294

Tüm test senaryolarını doğrulayın.

açıklama

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

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;

Çevrimiçi deneyin!

Basit bir zincirleme yaklaşım. Çok daha kısa yapılabileceğinden şüpheliyim.


Bu parantez (...)gerekli midir? PS nvm, Görünüşe göre onlar.
officialaimm


1

Java 8, 55 bayt

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

Burada deneyin.

Alternatif 57 bayt :

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

Burada deneyin.

Alternatif 60 bayt :

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

Burada deneyin.

Belki bir tür formül n<14?0:n<171?1:n<181?2:n<295?3:n<301?4:5son yaklaşımı kullanmaktan daha kısa bir şekilde 0-5 elde edebilir . Hâlâ araştırıyor.


1

PowerShell , 59 bayt

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

Çevrimiçi deneyin!

Jonathan Allen'ın Jelly cevabına benzer şekilde, bir araya getirilmiş tüm harflerin bir dizisini oluşturuyoruz, daha sonra girdiyle bu diziyi dizine ekliyoruz $args.


1

Tavşan ~ , 50 bayt

(Rekabetçi değil, soru soruyor. Tercümanı (yay) yeni bitirdim ve bir şeyler denemek ve çözmek istedim. Bu aynı zamanda benim ilk kod golf şeyim)

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

Temel olarak farkları bir nottan diğerine 14.157,10,114,6,65 (olarak kodlanır ỤṅỌrḲA) alır ve girdiden çıkarır. Negatif bir sayı bulunursa, 'FEDCBA' dizisi boyunca ilerlemeyi durdurur ve harfi çıkarır.

Bu güzel sözdizimi parçasının küçük açıklaması

Tavşan ~ hareket edebileceğiniz bir veya birden fazla caret içeren ızgara tabanlı bir bellek kullanır; bu çözüm 2 kullanır.

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

Güzel. Çevrimiçi denemenin bir yolu var mı?
officialaimm

Şu anda değil ^^
Adam 14

1

Excel, 53 bayt

Koşulların toplamı, ardından gerekli ASCII karakterini döndürür:

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

Alternatif çözümler:

Toplama koşulları, dönüş dizesi dizini (63 bayt):

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

1

K (ok) , 30 bayt

Çözüm:

"FEDCBA"@0 14 171 181 295 301'

Çevrimiçi deneyin!

Açıklama:

Doğru kovaya endeksleyin:

"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 bayt

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

Tüm 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))

Önceki Kotlin cevabımı buraya taşıdım .


1

V , 37 34 bayt

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

Çevrimiçi deneyin!

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

Temel fikir:

  • Yazdır FEDCBA , dize sonuçlanan B'nin 5 kopya vs. C 113 kopyalarını oluşturmak FFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEDDDDDDDDDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBBBBBA(bunu yapmak için daha etkili bir yol muhtemelen vardır)
  • Bu nsütuna gidin ( nilk argüman), tek bir karakteri kopyalayın ve dizenin tamamını onunla değiştirin.


1

Perl 6, 42 39 bayt

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

1

Stax , 18 bayt

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

Çevrimiçi çalıştırın ve hata ayıklayın!

açıklama

CP437'de sayılan bayt sayısı.

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 bayt

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

Çevrimiçi deneyin


2
Önemli ölçüde trinary operatörünü kullanarak lambda kısaltabilir ?:olarakx<14?"F":x<170?"E":x<180?"D":x<294?"C":x<300?"B":"A"
Bradley Uffner
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.