Gosto de participar de competições de matemática organizadas pela Mu Alpha Theta, uma sociedade de honra da matemática nos Estados Unidos. Nas competições, faço um teste de múltipla escolha com 30 perguntas. Existem cinco opções por pergunta, rotuladas de A a E.
Minha pontuação em um teste é de quatro pontos para cada resposta correta, zero ponto para uma pergunta deixada em branco e um ponto negativo para cada resposta errada.
Escreva um programa que classifique um teste de acordo com o sistema de pontuação acima. Deve haver dois componentes para a entrada: uma chave de resposta seguida por respostas. As perguntas deixadas em branco devem ser inseridas como espaços em branco. A primeira entrada deve conter apenas as letras AE (ou ae, sua escolha) e pode-se assumir que não há espaço em branco na entrada. A segunda entrada deve conter apenas espaços em branco e as letras AE (ou ae). Entradas que não implementam testes de 30 perguntas devem ser impressas Invalid test
como saída.
A saída deve ser a nota ou Invalid test
.
Bônus
Se o seu programa imprimir o número certo, o número deixado em branco e o número errado após a pontuação final (aR bB cW)
, retire 20 bytes.
Entrada de amostra
CABBDCABECDBACDBEAACADDBBBEDDA //answer key
CABEDDABDC BACDBBAADE CBBEDDA //responses
Saída de amostra
Nenhum bônus
73
Bônus
73 (20R 3B 7W)
Aplicam-se regras padrão. O menor código em bytes vence.
Invalid test
.Respostas:
Pyth,
5351Experimente online
As verificações são feitas verificando se a entrada inteira contém caracteres quando todos os espaços
a-e
são removidos e verificando se as duas seqüências têm comprimento30
.O cálculo da pontuação é feita por fechando as duas linhas em conjunto, em seguida, por mapeamento de cada par para:
(letters are equal) ? 4 : -1
. Em seguida, basta somar os valores e adicionar o número de espaços na segunda linha de volta à pontuação.fonte
Sério , 86 bytes
Toma entrada como
"CABBDCABECDBACDBEAACADDBBBEDDA", "CABEDDABDC BACDBBAADE CBBEDDA"
Experimente online (você precisará inserir manualmente a entrada porque os links permanentes não gostam de aspas)
Trabalhando no bônus agora.Não, adicionar o bônus custaria mais de 20 bytes.Eu sabia que estava esquecendo algo ...
Invalid Test
não estava sendo impresso no caso de um erro. Lá estão minhas esperanças de jogar Dennis fora do golfe.fonte
JavaScript (ES6), 134 bytes
Editar: os requisitos da pergunta foram alterados. Essa resposta é quando o programa precisa garantir que cada caractere de resposta seja AE, cada caractere de resposta seja AE ou espaço e ambos tenham comprimentos de 30, caso contrário, retornem
Invalid test
.Explicação
Teste
fonte
CJam, 60 bytes
Experimente online no intérprete CJam .
fonte
JavaScript (Firefox 31+), 86 bytes
Usa a compreensão da matriz proposta para o ES7. Portanto, o suporte é limitado ao Firefox no momento.
Com bônus, 106 bytes (126 - 20)
Editar: Anteriormente, minha solução verificava apenas a resposta ou o tamanho da pergunta, agora verifica as duas.
Mostrar snippet de código
fonte
f=
no início e dizer que isso gera uma função lambda.(x,y)=>(r=i=0,[for(l of y)x[i++]==l?r+=4:r-=l!=' '],i!=30|i-x.length?'Invalid test':r)
Japonês , 71 bytes
Japt é uma versão abreviada do Ja vaScri pt . Intérprete
Os dois
.
s no final devem ser os caracteres Unicode não imprimíveis U + 0017 e U + 0099, respectivamente.Como funciona
Espero que exista uma maneira mais curta de garantir que ambos os comprimentos sejam iguais a 30. Sugestões são bem-vindas!
fonte
Haskell,
144138 bytesSeria cerca de 50 sem a validação. cheirar .
Uso:
"ABCDEABCDEABCDEABCDEABCDEABCDE" % "AAAAABBBBBCCCCCDDDDDEEEEEAAAAA"
fonte
!
pode ser definido comoall(`elem`l)s
, economizando 6 bytes.g=all.flip elem
.C #,
162154148134 bytesUso
Teste
http://csharppad.com/gist/15f7c9c3c8cfce471ff2
fonte
int s=0,i=0;for(;...
para salvar 3 bytes.Ruby, 81 caracteres
Exemplo de execução:
fonte
Java,
183169 bytesEssa foi uma boa parte da prática do Java 8:
fonte
String.valueOf
adicionando o int a uma string vazia (""+IntStream....
) - também acredito que o Java permite um curto-circuito e, portanto, você pode remover um&
e salvar um byte .brainfuck, 354 bytes
Requer um intérprete que permita ir para a esquerda da célula 0. A saída é um byte assinado. Por exemplo, o byte
0x49
é impresso para a entrada de exemplo e0xFF
é impresso para entrada com a mesma primeira linha, mas a segunda linha foi substituída por "C" e 29 espaços.A pontuação começa em 0 e, à medida que a segunda linha de entrada é lida, essas alterações são feitas nela:
Finalmente, 120 é adicionado. Funcionalmente, é o mesmo que assumir uma pontuação perfeita e aplicar penalidades, em vez de começar com 0.
Com comentários:
fonte
Python 3,
187 179 175 165 155151fonte
JavaScript ES7, 102
Como sempre, o bônus não vale o esforço.
Verificando espaços inválidos na primeira entrada (como isso faz sentido para mim) 112
fonte
(k,r,s=0)=>/^[A-E]{30}$/.test(k)&&/^[ A-E]{30}$/.test(r)?Object.keys(k).map(i=>k[i]==r[i]?s+=4:s-=r[i]!=' ').pop():'Invalid Test'
é 129 bytes.Python 2.7,
131, 116, 109, 139Eu tentei fazer uma solução python "curta" ... Bem, aqui está, sugestões são mais que bem-vindas
A adição de mais alguns caracteres torna muito mais legível ...
fonte
Prolog, 165 bytes
Mais da metade dos bytes são para a verificação de testes inválidos.
Código:
Explicado:
Exemplo:
Experimente online aqui
fonte
MATLAB,
9290 bytesObrigado a Tom Carpenter por me ajudar a reduzir minha resposta em 2 bytes!
A função pode ser chamada atribuindo a folha de respostas a q e as respostas enviadas a a . por exemplo:
A resposta é simplesmente impressa na tela. 8 bytes podem ser salvos se for permitido imprimir ans = 73
fonte
numel(q)
pornnz(q)
.C # 6.0 ->
(270 - 20 = 250)246 - 20 = 226 bytesVersão legível e não destruída:
Realmente queria receber o bônus: D
fonte
i
junto coms
fora do loop for. Você pode usarvar
para declarara
, economizando 1 byte (viva!). Você não precisa de muitas chaves{}
no seu código, o que é sempre uma boa maneira de aparar bytes, e sempre vale a pena olhar para uma tabela ASCII ao comparar caracteres (você pode obter um byte dec[i]==' '
alguma forma usando uma desigualdade). Você também deve contar as seqüências de trás para frente - nesse caso, você pode salvar pelo menos 1 byte, rejeitando um pouco o loop for.Groovy 2.4.5, 107 bytes
Apenas uma tradução simples da resposta Java anterior .
fonte
C, 273 - 20 = 253 bytes
Eu recebi o bônus, mesmo que me custasse 23 bytes apenas para imprimi-lo. :-(
Explicação
Há duas vezes mais código para verificar se há entrada inválida do que para contar as respostas - o verdadeiro desafio do desafio está no
for
loop próximo ao fim. De fato, aqui está uma versão que assume que a entrada é sempre válida, em 163-20 = 143 bytes:E aquele que faz a mesma suposição e imprime apenas a pontuação, em 133 bytes:
fonte
SAS 9.4, 291-20 = 271 bytes (com bônus) ou 231 bytes (sem bônus)
Com bônus:
Sem bônus:
O Sas não possui realmente uma entrada / saída, portanto, você precisará substituir k = '..' pela chave er = '..' pela resposta. A saída é impressa no log.
fonte