Sistema de clasificación extraño


14

Weirdo Incorporates tiene una forma extraña de calificar a su personal por la cantidad de días que estuvieron presentes en la oficina:

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

Objetivo:

Escriba un programa / función que genere / devuelva la calificación de un empleado por el número de días [dentro del rango inclusivo de 0-365] atendido por el empleado.

Reglas:

  • Puede tomar la entrada como una cadena o un número, pero debe salir como una cadena / alfabeto (puede elegir minúsculas o mayúsculas).
  • Se aplican lagunas estándar.
  • Este es el , por lo que gana el programa más corto en bytes.

Casos de prueba:

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

Marcador:





1
@ Mr.Xcoder Recuerdo que se discutió en el sandbox que no es una trampa de eso, ya que esto no tiene rangos de igual tamaño y que tiene sufijos como +/ -.
Erik the Outgolfer

1
¿Podemos obtener un marcador?
jrtapsell

Respuestas:


4

Jalea ,  18 17 15  14 bytes

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

Un enlace monádico que toma un número y devuelve un personaje.

Pruébalo en línea! o ver todos los pares de entrada-salida .

¿Cómo?

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 bytes

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

Soluciones alternativas (más largas):

53 52 bytes (-1 byte gracias a @Arnauld)

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

55 53 bytes (-2 bytes gracias a @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]

Fragmento de código de ejemplo:

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
Que resumir las condiciones es genial !!! ¡Ojalá pudiera votar de nuevo! : D
officialaimm

Puedo guardar dos bytes en una de sus soluciones alternativas:n=>"AFEDCB"[[14,171,181,295,301].findIndex(m=>n<m)+1]
Neil

-1 byte para su primera solución alternativa: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

6

J , 31 bytes

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

Pruébalo en línea!

Explicación

'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

Primera vez que veo diádica I.en la naturaleza. Ordenado.
cole

@cole Creo que lo he usado un par de veces en el pasado en code-golf.
millas

6

Python 3 , 50 bytes

Gracias a @jferard por -4 bytes.

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

Pruébalo en línea!

Python 3 , 54 bytes

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

Pruébalo en línea!

Ahorré 2 bytes gracias a @mathmandan e indirectamente gracias a @JonathanFrech.

Python 2 , 56 bytes

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

Pruébalo en línea!


1
54 bytes: lambda n:chr(70-sum(n>x for x in[13,170,180,294,300])). (Ver respuesta de @Jonathan Frech en codegolf.stackexchange.com/a/142244/36885 )
mathmandan


puerto rubí: ->n{(70-"ĬĦ´ª\r".chars.count{|i|n>i.ord}).chr}mismo tamaño
Asone Tuhid

4

C, 62 61 bytes

¡Gracias a @Jonathan Frech por guardar un byte!

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

Pruébalo en línea!

C, 57 bytes

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

Pruébalo en línea!

C (gcc), 54 bytes

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

Pruébalo en línea!

C (gcc), 50 bytes

Usando la solución de @Herman Lauenstein .

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

Pruébalo en línea!



¿Por qué no enviar la versión más corta como su solución principal?
Shaggy

@Shaggy Los que requieren gcc recurren a un comportamiento indefinido, por lo que prefiero mantener los bien definidos en la parte superior, y ordenarlos del más antiguo al más nuevo y al mismo tiempo del más largo al más corto me parece bien.
Steadybox

3

Kotlin , 56 bytes

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

Pruébalo en línea!

Embellecido

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

Prueba

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. Edité tu respuesta a un formato más formal, espero que no te importe.
officialaimm

No, en absoluto, me refería a arreglar mi herramienta para mostrar la cabecera derecha
jrtapsell

3

Japt , 23 21 bytes

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

Intentalo


Explantacion

Entrada implícita de entero U.

'Gc-

Restar de los puntos de código de la cadena (carácter único) G...

è<U

El recuento de elementos menores que U...

[#ªT#´D294L*3]

En el conjunto de 170 ( ), 0 ( T), 180 ( ), 13 ( D), 294 (literal) y 300 ( L*3), formateados y ordenados para evitar el uso de delimitación de comas. 0podría eliminarse (restando del punto de código de en su Flugar), pero luego sería necesario agregar una coma o utilizar C*F(12 * 15) 180, en última instancia, no guardar bytes.


3

R , 50 44 bytes

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

Pruébalo en línea!

igual que la respuesta de JavaScript, pero usa la vectorización de R y las LETRAS incorporadas para ser un poco más cortas.

Gracias a rturnbull por eliminar esos últimos 6 bytes.



De hecho, 44 bytes simplemente convirtiéndolo en un programa completo en lugar de una función.
rturnbull

@rturnbull ah, estaba a punto de decir "no, necesitas envolver eso cato usarlo source(program,ec=T)y contarlo ec=Tcomo una bandera (según el meta consenso sobre los programas R), pero por otro consenso más nuevo no contamos banderas. más tiempo, así que esa es una solución perfectamente válida.
Giuseppe


2

Recursiva , 49 30 bytes

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

Pruébalo en línea!

Permítame responder mi propia pregunta en mi propio idioma. :RE

  • ahorró 19 bytes utilizando la técnica de la sorprendente respuesta JS de @Herman Lauenstein

Explicación:

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 bytes

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

Pruébalo aquí!

Explicación

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 bytes

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

El sitio no parecen mostrar el carácter con el punto 1 del código, por lo que necesita para insertar un carácter con el punto 1 antes del código &, ,ym al final

(Reemplace todas las 1s con caracteres con el punto de código 1):

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

1

Pyth , 25  26  bytes

@<G6sgRQ[13*17T180*30T294

Verifique todos los casos de prueba.

Explicación

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

Pruébalo en línea!

Un enfoque simple de cadena if. Dudo que pueda hacerse mucho más corto.


¿Se (...)requieren esas parálisis ? PD nvm, aparentemente lo son.
officialaimm


1

Java 8, 55 bytes

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

Pruébalo aquí.

Alternativa 57 bytes :

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

Pruébalo aquí.

Alternativa de 60 bytes :

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

Pruébalo aquí.

Tal vez se pueda encontrar algún tipo de fórmula para obtener 0-5 de una manera más corta que n<14?0:n<171?1:n<181?2:n<295?3:n<301?4:5usar el último enfoque. Aún investigando esto.


1

PowerShell , 59 bytes

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

Pruébalo en línea!

Similar a la respuesta Jelly de Jonathan Allen, en que estamos construyendo una matriz de todas las letras concatenadas juntas, luego indexando en esa matriz con la entrada $args.


1

Conejo ~ , 50 bytes

(Pregunta no competitiva, posterior a la fecha. Acabo de terminar el intérprete (yay) y quería intentar resolver algo. Este es también mi primer código de golf)

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

Básicamente toma las diferencias de un grado al siguiente 14,157,10,114,6,65 (codificado como ỤṅỌrḲA ) y resta de la entrada. Si se encuentra un número negativo, deja de avanzar a lo largo de la secuencia 'FEDCBA' y genera la letra.

Pequeña explicación de esta hermosa sintaxis

Rabbit ~ utiliza una memoria basada en cuadrícula con uno o varios cuidados que puede mover; Esta solución utiliza 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

Agradable. ¿Hay alguna forma de probarlo en línea?
officialaimm

No en este momento ^^
Adam

1

Excel, 53 bytes

Suma de condiciones, luego devuelve el carácter ASCII requerido:

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

Soluciones alternativas:

Condiciones de suma, índice de cadena de retorno (63 bytes):

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

1

K (oK) , 30 bytes

Solución:

"FEDCBA"@0 14 171 181 295 301'

Pruébalo en línea!

Explicación:

Indice en el cubo correcto:

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

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

Programa completo:

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

Porté mi respuesta anterior de Kotlin aquí .


1

V , 37 34 bytes

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

Pruébalo en línea!

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

Idea básica:

  • Imprima FEDCBA, cree 5 copias de B, 113 copias de C, etc. resultando en la cadena FFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEDDDDDDDDDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBBBBBA(Probablemente haya una manera más eficiente de hacer esto)
  • Vaya a nla columna th ( nes el primer argumento), copie un solo carácter y reemplace la cadena completa con él.


1

Perl 6, 42 39 bytes

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

1

Stax , 18 bytes

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

¡Ejecute y depure en línea!

Explicación

Bytes contados en 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 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";};

Pruébalo en línea


2
Puede acortar su lambda significativamente utilizando el operador trinario ?:comox<14?"F":x<170?"E":x<180?"D":x<294?"C":x<300?"B":"A"
Bradley Uffner,
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.