Calculadora GPA
(GPA = nota média)
Você é um estudante universitário estressado durante a semana das finais. Em vez de estudar para os próximos exames, você decide que é melhor determinar qual GPA terá no final do semestre. Dessa forma, você tem dados para fazer backup de sua decisão de ficar acordado a noite toda para colocar o A no cálculo, em vez de o B permanecer na lista do decano!
Sendo um especialista em ciência da computação, você deseja encontrar a maneira mais legal de determinar esse GPA. Claro que a maneira mais legal é com o código mais curto! Isso é código-golfe , então o código mais curto em bytes vence!
Detalhes
- A faculdade que você frequenta usa um GPA básico escalado junto com o horário de crédito.
- Um grau de letra A é 4,0, B é 3,0, C é 2,0, D é 1,0 e F é 0,0
- Seu GPA é um GPA ponderado; portanto, um A em uma classe de 4 horas de crédito conta 4 vezes mais que um A em uma classe de 1 hora de crédito (veja os exemplos abaixo para obter mais explicações de peso)
- As horas de crédito variam de 1 a 4
Seu programa precisará ter uma lista de duas entradas de linha de comando, Grade e Hora de crédito. Você pode determinar a melhor maneira de inseri-las no seu programa através da linha de comando. Você não precisa se preocupar com muitas entradas, mas garanta que seu código possa lidar com um semestre de 19 horas de crédito.
- ie Entrada: A 1 B 4 C 2…
Seu programa deve gerar o GPA, usando 3 dígitos (ou seja, X.XX)
- Seu GPA precisa ser arredondado para duas casas decimais. Arredonde da maneira que desejar (piso, teto, base, etc.)
Exemplos de entrada (escolha o que for melhor para o seu design)
- A1B3C2F3B4
- A1 B3 C2 F3 B4
- A 1 B 3 C 2 F 3 B 4
- A, 1, B, 3, C, 2, F, 3, B, 4
- A1, B3, C2, F3, B4
Ou qualquer uma das combinações acima, em que você usa o formato de listar todas as notas e o horário de crédito:
- ie ABAA 3 4 1 1
Exemplos
Input - A 3 B 4 A 1 A 1
Output - 3.56
Explanation: (4.0 * 3 + 3.0 * 4 + 4.0 * 1 + 4.0 * 1)/(3+4+1+1) = 3.555556 rounded off to 3.56
Input - A 4 F 2 C 3 D 4
Output - 2.00
Explanation: (4.0 * 4 + 0.0 * 2 + 2.0 * 3 + 1.0 * 4)/(4+2+3+4) = 2 rounded off to 2.00
Your GPA needs to be rounded to two decimal places
: para conseguir isso, as pessoas precisam adicionar código adicional que não tem nada a ver com o cálculo do GPA.Respostas:
Gelatina ,
1521 bytes (12 sem arredondamento)+6 bytes para a formatação estrita (quase certamente possível em menos, mas é hora de dormir)
Um programa completo que leva as notas e as respectivas horas de crédito que imprimem o GPA calculado (Nota: o método de arredondamento é o mínimo, conforme permitido no OP).
Experimente online!
Sem arredondamento para 12 bytes :
Quão?
fonte
Python 3 , 66 bytes
-5 bytes graças a Rod.
Experimente online!
fonte
69-ord(i)
não funciona()
, também é possível mover o/sum(c)
para salvar 3 bytes, atingindo 66 bytes #Perl 5 ,
5753 + 2 (-an
) =5955 bytesExperimente online!
Editar: trocou a entrada para economizar 4 bytes
Formato de entrada: linha separada, créditos seguidos de nota:
Exemplo:
fonte
Python 2 , 69 bytes
Experimente online!
fonte
Wolfram Language (Mathematica) , 39 bytes
Leva uma lista de horas de crédito e, em seguida, uma série de notas.
Não funciona no TIO porque o TIO usa o kernel do Mathematica (que não deseja imprimir números de precisão arbitrários)
fonte
Tr
N[(5-(LetterNumber@#2/. 6->5)).#/Tr@#,3]&
/.
, no entanto.JavaScript (ES6), 72 bytes
Formato de entrada:
A1B3C2F3B4
Casos de teste
Mostrar snippet de código
fonte
search
torna mais golfista do queparseInt
?parseInt
provavelmente se tornaria mais golfista com apenas mais algumas notas suportadas. Um problema é a diferença entre F = 0 e D = 1, no entanto.R , 64 bytes
Experimente online!
obrigado a user2390246 por corrigir um erro!
fonte
LETTERS[-5]
Java, 211 bytes
Formato de entrada: A1B3C2F3B4
Golfe
Unglofed
Outra versão
Meu instinto me disse que usar um formato de entrada diferente (ABCF1324) tornaria o código mais curto. Parece que não. A versão abaixo tem 234 bytes.
Golfe
Ungolfed
fonte
Java 1.8 ,
287249 bytes-38 bytes graças ao Bumptious
Golfe
Ungolfed
fonte
Julia 0.6 ,
46 4342 bytesExperimente online!
Explicação
Formato de entrada
g
:: vetor de notas;h
: vetor de horas de créditog%h
: Redefinir%
operador.69-Int.(g)
: Converta'F','D','C','B','A'
para-1,1,2,3,4
respectivamente para cada elemento de g.max.( ,0)
: Faixa de fixação até0:4
(elemento).fonte