Calculadora GPA do estudante universitário em dificuldades
(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!
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)
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
@DevelopingDeveloper Por favor, tente evitar formatos de E / S complicados .
@JungHwanMin Informe qual opção de E / S você deseja que eu não especifiquei? Dei cerca de 6 opções flexíveis diferentes, mas ele precisa ser especificado para realmente se encaixar nesse cenário.
@DevelopingDeveloper 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.
Bem-vindo ao PPCG. Primeira pergunta agradável na minha humilde opinião.
Apesar de ser uma pergunta bastante interessante, diminuí a votação, porque, como disse antes, forçar arredondamentos e saídas com zeros à direita faz deste um desafio de várias partes; as respostas estão tendo que adicionar bytes desnecessariamente, simplesmente para estar em conformidade com as especificações de saída, o que torna um desafio chato e pior na IMO geral.
Gelatina , 15 21 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).
Sem arredondamento para 12 bytes :
@nimi - bom ponto, eu perdi esse pedaço. Fixo.
Python 3 , 66 bytes
-5 bytes graças a Rod.
69-ord(i)não funciona
Você tem um extra (), também é possível mover o /sum(c)para salvar 3 bytes, atingindo 66 bytes #
Perl 5 , 57 53 + 2 ( -an) = 59 55 bytes
Editar: trocou a entrada para economizar 4 bytes
Formato de entrada: linha separada, créditos seguidos de nota:
Python 2 , 69 bytes
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)
-3 bytes se você usarTr
Isso falhará no segundo caso de teste. Ele retorna 1,85 porque você conta F = -1
Aqui está uma correção de 41 bytes:N[(5-(LetterNumber@#2/. 6->5)).#/Tr@#,3]&
@Jenny_mathy nice catch. Eu não tenho idéia de como eu perdi isso ... O parêntese extra poderia ser diminuído movendo o /., no entanto.
Formato de entrada: A1B3C2F3B4
Em que ponto se searchtorna mais golfista do que parseInt?
A @Neil parseIntprovavelmente se tornaria mais golfista com apenas mais algumas notas suportadas. Um problema é a diferença entre F = 0 e D = 1, no entanto.
Huh, eu nem tinha notado que não há E ...
obrigado a user2390246 por corrigir um erro!
Eu acho que você quer dizerLETTERS[-5]
@ user2390246 sim, é claro. isso foi bobagem da minha parte.
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.
— PStigerID
Olá e bem-vindo! Você não precisa responder com programas completos, para poder eliminar muitos bytes assim.
Java 1.8 , 287 249 bytes
-38 bytes graças ao Bumptious
Reduzir o comprimento usando isso? float estático m (String l) {return l.equals ("F")? 0 :( 'E'-l.charAt (0));}