var QUESTION_ID=49876;function answersUrl(e){return"http://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),e.has_more?getAnswers():process()}})}function shouldHaveHeading(e){var a=!1,r=e.body_markdown.split("\n");try{a|=/^#/.test(e.body_markdown),a|=["-","="].indexOf(r[1][0])>-1,a&=LANGUAGE_REG.test(e.body_markdown)}catch(n){}return a}function shouldHaveScore(e){var a=!1;try{a|=SIZE_REG.test(e.body_markdown.split("\n")[0])}catch(r){}return a}function getAuthorName(e){return e.owner.display_name}function process(){answers=answers.filter(shouldHaveScore).filter(shouldHaveHeading),answers.sort(function(e,a){var r=+(e.body_markdown.split("\n")[0].match(SIZE_REG)||[1/0])[0],n=+(a.body_markdown.split("\n")[0].match(SIZE_REG)||[1/0])[0];return r-n});var e={},a=1,r=null,n=1;answers.forEach(function(s){var t=s.body_markdown.split("\n")[0],o=jQuery("#answer-template").html(),l=(t.match(NUMBER_REG)[0],(t.match(SIZE_REG)||[0])[0]),c=t.match(LANGUAGE_REG)[1],i=getAuthorName(s);l!=r&&(n=a),r=l,++a,o=o.replace("{{PLACE}}",n+".").replace("{{NAME}}",i).replace("{{LANGUAGE}}",c).replace("{{SIZE}}",l).replace("{{LINK}}",s.share_link),o=jQuery(o),jQuery("#answers").append(o),e[c]=e[c]||{lang:c,user:i,size:l,link:s.share_link}});var s=[];for(var t in e)e.hasOwnProperty(t)&&s.push(e[t]);s.sort(function(e,a){return e.lang>a.lang?1:e.lang<a.lang?-1:0});for(var o=0;o<s.length;++o){var l=jQuery("#language-template").html(),t=s[o];l=l.replace("{{LANGUAGE}}",t.lang).replace("{{NAME}}",t.user).replace("{{SIZE}}",t.size).replace("{{LINK}}",t.link),l=jQuery(l),jQuery("#languages").append(l)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",answers=[],page=1;getAnswers();var SIZE_REG=/\d+(?=[^\d&]*(?:<(?:s>[^&]*<\/s>|[^&]+>)[^\d&]*)*$)/,NUMBER_REG=/\d+/,LANGUAGE_REG=/^#*\s*([^,]+)/;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"><div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table></div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table></div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody></table><table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody></table>
A+
eA-
? Não vejo por que os estamos ignorando.+
Respostas:
Python 2,
727062 bytesEsta é uma função anônima que recebe um int e retorna a nota como uma string.
(obrigado a @ MartinBüttner, @grc e @TheNumberOne pelas dicas)
fonte
"EDCB"[n/10-6]
->chr(75-n/10)
CJam,
34 3332 bytesOk, eu tentei várias abordagens agora e não consigo obter isso abaixo de 33, então aqui vai a explicação:
ATUALIZAÇÃO : 1 byte economizado graças a um ponteiro de Dennis
Experimente online aqui
fonte
s
faz?<
Character String -
empurra uma corda.Retina, 43 + 15 = 58 bytes
Retina é uma linguagem de regex criada por Martin Büttner, em que os arquivos com números ímpares são o regex a combinar e os arquivos com números pares são o que substituí-lo. Cada linha é um arquivo separado, então adicionei 15 bytes para cada arquivo adicional.
Explicação
Começa transformando qualquer coisa com 3 ou mais dígitos em A. Ele adiciona a
-
se for um número de dois dígitos que termina com 0, 1 ou 2 e+
se termina com 7, 8 ou 9. Os números são mapeados para sua nota (por exemplo, um número começando com 9 é dado um B). Qualquer número restante é automaticamente um F.Infelizmente,Atualização: a versão 0.5.0 possui saída intermediária desativada por padrão, permitindo que eu salve alguns bytes.;`
deve ser anexado a todos, exceto ao último regex, para suprimir a saída intermediária.fonte
\d.*
combina e substitui toda a string,+
incluída.C, 99 bytes
Sou novo por aqui, espero seguir as regras.
Esta função recebe a marca como parâmetro e retorna a nota como uma sequência terminada em NULL.
Explicação
Espaço em branco adicionado:
As variáveis globais são inicializadas automaticamente como zero, então b é preenchido com NULLs. Como apenas os dois primeiros caracteres são tocados, precisamos nos preocupar em colocar um NULL em b [1] se a nota tiver apenas um caractere. Este NULL é inserido no início da função. O parâmetro n é implicitamente int. Se a nota for inferior a 60, será definida como 'F', se for maior que 99, será definida como 'A'. Nos outros casos, a nota base é dada por
'E' - (n - 60) / 10
, o que simplifica para75 - n / 10
.n % 10
obtém o dígito das unidades da marca. Se for menor que 3, então a - será anexado, se for maior que 6 a +, caso contrário b [1] será anulado (o que já era).Casos de teste
fonte
Pitão, 33 bytes
Experimente on-line: Demonstration or Test Suite
Explicação:
fonte
> <> (Peixe),
7871 bytesMétodo:
x,y,z
da entrada. Se um caractere não estiver presente, o valor de sua variável será-1
implicitamente. (ord(c)
marcará o ponto de código do caracterec
)z > 0
(entrada de 3 dígitos) imprimirA
e sair.x < ord('6') or y < 0
(entrada <60) imprimirF
e sair.123 - x
.y < ord('4') print
-` e sair.y > ord('6') print
+ `e sair.fonte
C,
6765Surpreendentemente, isso é bem próximo da solução python.
Mas, para que esse programa chegasse a tão grande falta, sacrifícios precisavam ser feitos:
Se um
F
ou umA
é impressoprintf
, nem olha para os outros argumentos passados. Este é um truque bastante desagradável.Se
(i%10+1)/4
avaliar como1
(nenhum+
ou-
deve ser anexado à nota), o%s
formatador recebe um ponteiro para um\0
byte, para que nada seja impresso. Também muito engraçado, porque eu não sabia que você poderia pegar o endereço de uma string indexada literal. (por exemplo&"string"[i]
) ( editar :"string"+i
é ainda mais curto ! Obrigado @nutki)Aqui está a saída do programa para os números 57 a 102. Fiz um hexdump, para que possamos ter certeza de que nenhum
\0
bytes estranho foi impresso.O
main
método usado:fonte
&"string"[i]
é desnecessário, pois é equivalente a mais curto,"string"+i
com o qual você pode salvar 2 bytes.CJam,
41393734 bytesIsso é muito longo, mas acho que não vou jogar mais por agora.
Teste aqui. Ou execute todos os casos de teste aqui.
Três bytes salvos pelo Optimizer.
Explicação
(Um pouco desatualizado)
fonte
GNU sed, 73 + 1 = 74 bytes
O + 1 é para o parâmetro -r.
fonte
Python 2,
94888469 bytesfonte
JavaScript (ES6), 66 bytes
Direto.
fonte
R,
10710599 bytesReceio que não seja um esforço muito bom, mas tentarei jogar mais tarde.
Editar Soltou alguns
if
s. Corrigido o caso e um resultado incorreto para 100.Agora, livre-se dos. Se livrou deifelse
sifelse
s.fonte
LETTERS
mais do queletters
.Perl,
6662 bytesProvavelmente isso pode ser jogado mais. Também uma maneira diferente pode ser melhor.
+1 para
-p
Correr com:
fonte
-p
e soltar osay
?Javascript (ES6),
7879 bytesEssa realmente não é a opção mais inteligente, mas fiz o que pude.
Simplesmente passe a nota como uma string e ela retornará a letra da nota.
A parte da corda é muito importante.
Você pode verificar um caso de teste aqui:
Se o espaço adicional após a carta não for permitido, eu o removerei com prazer.Não foi! Isso aumentou meu código em 1 byte, mas nada (também) sério.fonte
One newline after output is fine, but keep it consistent.
". Eu acho que isso é consistente o suficiente.C #,
14312711288 bytesEu tentei ser inteligente fazendo mods de número ASCII, mas parece que não estava sozinho!
Agradecemos a Tim por conselhos sobre listas em vez de ifs.
Graças a DarcyThomas por apontar, eu poderia usar operadores ternários aninhados.
fonte
[item1,item2][condition]
. Se a condição for True, fornece o 2º item, se False, o primeiro.return <condition> ? <true result> : <false result>
Nota Pode também ninho eles assimreturn <condition> ? <true result> : <condition> ? <2nd true result> : < 2nd false result>
Haskell, 78 bytes
A primeira linha parece um desperdício, custando 14 bytes, mas não consegui encontrar uma versão mais curta sem ela.
Explicação
O operador
#
é uma abreviação para criar n cópias do seu segundo argumento. Listaa
é uma lista infinita de seqüências de caracteres "A". A funçãof
indexa em uma lista de todas as notas para n = 0,1, ... A compreensão da lista constrói a "parte do meio" desta lista (notas E a B);g
é um único caractere que é anexado à Strings
(que pode estar vazia).Uso
fonte
C, 102 bytes
}
Uso
fonte
dc, 52
Saída
fonte
TI-Basic,
797476 bytesfonte
1+
TI-BASIC,
696866 bytesO TI-BASIC não é bom para manipulação de strings.
Insira na tela inicial da calculadora, na forma de [número]: [nome do programa].
Formatado:
Provavelmente isso pode ser ainda mais jogado.
fonte
C #, 82 bytes
Aqui está uma brincadeira com alguns casos de teste.
fonte
JavaScript (ES6),
8683 bytesO que realmente está atrapalhando os personagens é a
String.fromCharCode
condição +/- ... suspeito fortemente que haja uma maneira inteligente de reduzir pelo menos um deles.fonte
~~(.1*-n+75.9)
->75.9-n/10|0
PHP5.5, 73 bytes
Mais uma vez, não o mais curto.
Mas funciona!
Eu o classifiquei no PHP5.5 em vez de apenas no PHP, pois ele usa sintaxe válida apenas para o PHP5.5 e o PHP5.6.
Você pode ler sobre desreferenciamento de string e array no manual:
http://php.net/manual/en/migration55.new-features.php
fonte
Perl, 52
fonte
Ruby, 58 bytes
Não podia acreditar que não há Ruby aqui. Na reflexão, é bastante semelhante a alguns que já estão aqui, mas de qualquer maneira:
Experimente aqui
fonte
Excel, 100 bytes
fonte