Desafio
Peter ressuscitou para nos salvar dos desafios duplicados!
Peter Taylor está morto , e não há dúvida sobre isso (bem, além da enorme quantidade de dúvida que temos ... mas apenas ignore isso). Na memória dele, você deve escrever um programa que determine se um determinado usuário está vivo ou morto.
Outras informações
Um usuário está morto se não for visto por mais de um dia, a menos que esteja vivo. Confira a última seção vista encontrada aqui:
A entrada será uma identificação de usuário (por exemplo, a minha é 30525 e a de Peter Taylor é 194). Suponha que todas as entradas sejam IDs PPCG válidas.
Se o usuário estiver vivo, você deve gerar:
[User name] is alive!
Onde você substitui [Nome do usuário] pelo nome de usuário e não pelo ID do usuário.
Se o usuário estiver morto, você deverá gerar:
Sadly, [User name] is dead.
Os participantes do T-SQL que usam o SE Data Explorer não são permitidos.
Ganhando
O programa mais curto em bytes vence.
Entre os melhores
var QUESTION_ID=59763;OVERRIDE_USER=30525;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 commentUrl(e,s){return"http://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}
<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, 115 bytes
A ideia é a mesma da minha resposta do Bash , exceto que essa resposta não usa expressões regulares, porque o CJam não tem expressões regulares ...
O intérprete online não executa solicitações da Web, portanto, isso funcionará apenas na linha de comando.
fonte
Bash, 151 bytes
Como de costume, a saída para STDERR é ignorada .
Exemplo de execução
Idéia
Esse código greps para linhas contendo
s="r
que não têm>
antes de sua ocorrência. Por exemplo:da
, ela conterá a palavrayesterday
oudays
(como em2 days ago
).morto-vivo.O nome do usuário é extraído de uma metatag no Twitter. Exemplo:
fonte
Javascript ES6, 234 bytes
Versão anotada
fonte
PowerShell (v4),
228 217 209, 157 bytespor exemplo
(Desculpe, Keith Randall, você foi apenas a primeira conta que encontrei com> 1 dia desde a última data vista).
Fiquei feliz com o sólido e confiável bloco de 209 bytes que chamava de API, mas a captura de tela é o caminho a seguir para o golfe.
Agora isso puxa o nome de usuário do URI redirecionado - mas é um nome e não um ID numérico, conforme necessário.
E corresponde à linha
Last seen <span title="2015-10-03 13:15:38Z" class="relativetime">2 days ago</span>
com an <... [nr]s ago<
tentativa de capturar segundos (s), minutos (s) atrás, horas (s) atrás e agora e perder "dias semanas, meses" atrás ou as datas + horas de longo prazo. E tentando pegar 'visto pela última vez' e não os outros às vezes. (Obrigado Dennis).NB
curl
é um alias padrão paraInvoke-WebRequest
, não é o programa de curvatura padrão portado para o Windows.fonte
secs ago
,1 min ago
(nãos
), e eu acho que eu já vijust now
.R,
384350 bytesEste é para você, Peter!
Observe que isso requer o
httr
ejsonlite
pacotes a serem instalados, embora eles não têm de ser importados para este código para o trabalho, já que estamos namespaces referenciando explicitamente.Ungolfed:
Salvei 5 bytes na minha abordagem anterior e corrigi um erro na minha abordagem atual graças ao minxomat!
fonte
"/users/"
em uma variável?scan()
linhas seguintes são as que você deseja inserir no STDIN (quem sabe o porquê); portanto, o ponto e vírgula é necessário neste caso. Mas, em geral, você está certo.AutoIt,
320316308 bytes_DateDiff
calcula a diferença em dias ('D'
). Será 0 se a diferença for menor que 1 dia, para que possamos usá-lo como um valor booleano. A tag title do valor "visto pela última vez" contém um carimbo de data / hora (quase) padrão.fonte
PHP, 187 bytes
Uma abordagem bastante simplista, usando o domínio codegolf.xyz, apenas um item ligeiramente diferente aqui é que tento obter as duas variáveis ao mesmo tempo. Testado em alguns usuários com resultados corretos, informe-me se houver algumas áreas problemáticas!
Uso:
fonte
$m[1] is
aparece duas vezes. Não seria mais barato imprimir isso primeiro e usar o ternário apenas para a parte morta / viva?Sadly, ...
parte ficou no caminho ... Parece que não consigo entender!time()-strtotime($m[2])
a uma variável de caractere único. Então ecoam$m[1] is
e finalmente os mortos / vivos. Isso é como eu fiz isso - não sei se isso vai funcionar em PHP :)Groovy, 355 bytes
Fonte não compactada
fonte