var QUESTION_ID=65106,OVERRIDE_USER=16196;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/65106/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}#answer-list{padding-right: 100px}
<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>
Respostas:
CJam,
3935 bytesExperimente online
A versão mais recente inclui melhorias sugeridas por @ MartinBüttner, particularmente usando o operador de vetor por elementos em vez de transpor as duas listas.
Explicação:
fonte
ri60md]r"utehour"+6/W%.{1$1>'s*+}S*
(parece que isso lhe dá uma vantagem sólida bonita neste desafio :))r"utehour"+6/W%
é na verdade o mesmo comprimento que"hour minute"S/
, então essa parte acaba não ajudando. Acho que já tinha.
usado com um bloco antes, mas tinha esquecido novamente que ele era suportado.Python 3,
506711911611211110494 bytesNão gosto de voltar para a%
formatação de string no estilo, mas economiza 6 bytes.format
.Editar: Esqueceu de analisar a entrada.
Edit: Esqueceu-se de lidar com plurais.
Edit: Yay lambdas!Edit: Adicionado ungolfing
Edit: Maldito seja. Lambdas não ajudou.
Editar: Como os minutos têm no máximo três dígitos e
int()
não se importam com os espaços na sequência, posso salvar alguns bytes usandoinput()[:3]
.Ungolfed:
fonte
JavaScript, 78 bytes
Para o conjunto de testes, insira entrada como
"61 min"
na caixa de entrada.Explicação
fonte
parseInt(n)
para+n
.150 min
.2 hours 30 minutes
. Posso perguntar como você o testou?"61 min"
ou'61 min'
Pitão,
3938 bytesfonte
Vitsy ,
575452 bytesOh, uau, eu nem tenho números inteiros no meu idioma. oo
Experimente online!
fonte
K5,
5551 bytesIsso é mais geral do que estritamente tem que ser; ainda pode melhorar ainda mais.
Em ação:
Editar:
Esse programa passou por várias iterações muito diferentes no decorrer do desenvolvimento, e eu pensei que poderia ser mais esclarecedor mostrar algumas das etapas intermediárias.
Aqui foi minha primeira facada no problema, antes que o requisito de pluralização fosse introduzido. Há clara repetição aqui:
Percebi que a maneira geral de lidar com a exclusão de lugares era a forma de "decodificação" do K5. Para colocar os valores no lugar da string, usei a primitiva "dot-apply", que aplica uma lista de argumentos a uma função e descompacta a lista em parâmetros individuais:
Não resta muita redundância aqui. Quando a pluralização foi adicionada, decomponho essa função anônima principal em uma transformação que eu poderia aplicar a cada número, assim:
Junte
x
,y
e quers
ou nada, dependendo sex
é igual a "1". Por fim, funcionou melhor para reverter a ordem dos argumentos para essa função.Edição 2:
Várias pequenas melhorias aqui. Uma maneira melhor de selecionar um "s" ou uma sequência vazia, uma constante mais curta para "decodificar", que reflete a faixa limitada de entrada, e uma maneira mais simples de descartar "min".
fonte
Pitão, 46 bytes
Recebe entradas
x min
e saídasx hours y minutes
Experimente aqui
Explicação:
fonte
Perl 6 ,
8073 bytesOriginal de 80 bytes
Uso:
Devido a uma alteração na pergunta, posso remover
x?$m
do final da função, o que me permite reduzi-la em mais 3 bytes.fonte
JavaScript (ES6),
100948981 bytesDemonstração descodificada (convertida para ES5, pois nem todos os navegadores ainda suportam ES6)
fonte
t=parseInt(t)
e parênteses, e depois colocar que onde quer que você use primeirot
modo:(h=0|(t=parseInt(t))/60)
. Dessa forma, você pode remover o retorno e o{}
C #, 127 bytes
Isso pode ser colocado em um arquivo e executado através do shell interativo C # que acompanha o Mono, usando a configuração padrão.
[Esta é minha primeira tentativa de código de golfe. Espero que minha contribuição não esteja violando nenhuma regra.]
fonte
C, 89 bytes
fonte
Ruby, 75 bytes
fonte
''
→p
.MATLAB,
111 108106 bytesIsso também funciona com o Octave e pode ser tentado aqui . O link é para um espaço de trabalho que já contém o código em um arquivo chamado
runningLength.m
. Portanto, para testá-lo, basta digitarrunningLength
no prompt e digite a sequência de entrada, por exemplo'123 mins'
e ela exibirá a saída.Pega a entrada como uma string, por exemplo
'123 mins'
, converte-a em um número (que ignora implicitamente omins
bit).Minutos e horas são calculados
Em seguida, exibe a sequência de saída
O bit 's' da saída é calculado e manipulado corretamente - um 's' é adicionado sempre que o número não for 1.
fonte
Python 2, 96 bytes
fonte
Haskell,
117109 bytesVersão menos golfe:
f
é uma função que pega os 3 primeiros caracteres de sua entrada e os converte em um número inteiro.p#q
é uma função que pluralizaq
sep
não é igual a 1. Para retornar o resultado sem aspas, useiputStr
para imprimir o resultado em STDOUT.Obrigado a nimi pela ajuda!
fonte
Python 2,
7977 bytesOs três primeiros caracteres da entrada são simplesmente analisados como um número inteiro. Isso funciona apenas porque o terceiro caractere em uma entrada de 2 dígitos é um espaço que
int
será ignorado durante a conversão.fonte
"hour"+m/120*"s"
mesmo por alguns minutos.m=240
Infelizmente, falhará .LabVIEW, 50 bytes
Isso é contado de acordo com minha sugestão no Meta .
O código é bem direto, pegue o número da entrada Modulo em 60 e adicione um s por minutos! = 1. O outro lado do caso apenas passa a string.
fonte
Scala, 135 bytes
Uso:
fonte
Haskell,
107101 bytesUngolfed:
s!n
preceden
as
, adicionando's'
a ao final sen /= 1
.f x
faz a formatação após o usodivMod
.Como podemos assumir uma entrada máxima de
240
,take 3
é suficiente para pegar apenas o número.(Tive que me esforçar muito para vencer a pontuação de @Craig Roy ...)
fonte
R, 112 bytes
Editar : corrigido um erro de escopo e solucionado o problema de saída da cotação.
Casos de teste
Tentei economizar espaço, tentando encontrar uma maneira de adicionar ou subtrair "s" conforme necessário, mas tive que mexer com o
sep =
argumento nopaste()
função e não parecia realmente que isso me pouparia muito espaço. Alguma sugestão?Ungolfed
O arredondamento para baixo com entrada / 60 ou entrada %% 60 (mod) fornece as horas e minutos, respectivamente. Encadeie-os com uma
ifelse()
declaração que especifique se as unidades são ou não hora (s) ou minuto (s).fonte
cat()
funçãos
e alterando suas condições.Ruby,
971009988 bytesEdit: Fixando a saída.
Editar: removendo chaves de
divmod
.Edit: Yay interpolação de cordas! Agradecimentos a Vasu Adari . Além disso, melhor não-golfe.
Ungolfed:
fonte
divmod
método. Além disso, usando a interpolação de cadeias, você pode salvar alguns bytes.Go, 177 bytes
(Inclui apenas a função e as instruções de importação)
Solução bonita -
Testando -
fonte
Mathematica, 61 bytes
fonte
AutoHotkey ,
174170160 bytesNotas:
fonte
PHP,
7776 bytesHorible, Horible, Horible!
PHP emite apenas alguns
Notice
s para"s"[$h<2]
Para executar:
php -r 'CODE' '150 minutes'
e, é claro, desative / desative o relatório de erros do stdout!
Edit: -1byte atribuir em atribuir (crédito: insertusernamehere)
É tão feio que devo dar uma ajuda para os usuários do Linux:
fonte
$m=($i=$argv[1])%60;echo$h=$i/60|0," hour","s"[$h<2]," $m minute","s"[$m<2];
.$m=($i=$argv[1])%60;echo$h=$i/60|0," hour",s[$h<2]," $m minute",s[$m<2];
.Arcyóu (não competitivo), 93 bytes
Este envio usa uma versão do idioma que foi criado após esse desafio.
Yeesh! Essa linguagem precisa de melhor manipulação de strings.
Explicação:
fonte
Ruby,
747371 bytes73 bytes
74 bytes:
Uso:
fonte
Kotlin, 132 bytes
Versão Ungolfed:
Teste com:
Exemplo de saídas:
fonte
Sério , 77 bytes
Sério, sério, não é bom em manipulação de cordas. Experimente online com explicações completas (você precisará inserir manualmente a entrada como
"210 mins"
porque os links permanentes não gostam de aspas).Explicação rápida e suja:
fonte
Java 8, 148 bytes
Optei por postar uma alternativa ao @TheAustralianBirdEatingLouse, pois isso não só é mais curto em boa parte (~ 10%), mas também é mais correto nas horas e minutos de impressão, em vez de horas e minutos abreviados. As implementações de métodos nas interfaces são novas no Java 8 - portanto, isso seria necessário para compilar / executar
fonte