Desafío
¡Peter ha resucitado para salvarnos de los desafíos duplicados!
Peter Taylor está muerto , y no hay duda al respecto (bueno, aparte de la gran cantidad de dudas que tenemos ... pero solo ignórenlo). En su memoria, debe escribir un programa que determine si un usuario determinado está vivo o muerto.
Más información
Un usuario está muerto si no ha sido visto por más de un día, menos que eso, entonces está vivo. Verifique la última sección vista aquí:
La entrada será una identificación de usuario (por ejemplo, la mía es 30525 y la de Peter Taylor es 194). Suponga que todas las entradas son ID de PPCG válidas.
Si el usuario está vivo, debe generar:
[User name] is alive!
Donde reemplaza [Nombre de usuario] por su nombre de usuario, no su ID de usuario.
Si el usuario está muerto, debe generar:
Sadly, [User name] is dead.
Los participantes de T-SQL que usan el Explorador de datos SE no están permitidos.
Victorioso
El programa más corto en bytes gana.
Tabla de clasificación
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>
Respuestas:
CJam, 115 bytes
La idea es la misma que en mi respuesta Bash , excepto que esta respuesta no usa expresiones regulares, porque CJam no tiene expresiones regulares ...
El intérprete en línea no realiza solicitudes web, por lo que solo funcionará desde la línea de comandos.
fuente
Bash, 151 bytes
Como de costumbre, se ignora la salida a STDERR .
Ejecución de ejemplo
Idea
Este código greps para líneas
s="r
que contienen que no tienen>
antes de su aparición. Por ejemplo:da
, contiene la palabrayesterday
odays
(como en2 days ago
).muertoviviente.El nombre del usuario se extrae de una metaetiqueta de Twitter. Ejemplo:
fuente
Javascript ES6, 234 bytes
Versión anotada
fuente
PowerShell (v4),
228 217 209, 157 bytesp.ej
(Lo siento, Keith Randall, fuiste solo la primera cuenta que encontré con> 1 día desde la última vez que vi)
Estaba contento con el sólido y confiable byte uno de 209 que llama a la API, pero el raspado de pantalla es el camino a seguir para el golf.
Esto ahora extrae el nombre de usuario del URI redirigido, pero es un nombre en lugar de una identificación numérica, según sea necesario.
Y coincide con la línea
Last seen <span title="2015-10-03 13:15:38Z" class="relativetime">2 days ago</span>
con eln <... [nr]s ago<
intento de capturar hace segundos, hace minutos, hace horas, y justo ahora, y omite "días semanas, meses" o las fechas a largo plazo + veces. Y tratando de atrapar 'visto por última vez' y no los otros tiempos relativos (Gracias Dennis)NÓTESE BIEN.
curl
es un alias predeterminado paraInvoke-WebRequest
, no es el programa curl estándar portado a Windows.fuente
secs ago
,1 min ago
(sins
), y yo creo que he vistojust now
.R,
384350 bytes¡Este es para ti, Peter!
Tenga en cuenta que esto requiere que se instalen los paquetes
httr
yjsonlite
, aunque no es necesario importarlos para que este código funcione, ya que estamos haciendo referencia explícitamente a espacios de nombres.Sin golf:
¡Ahorré 5 bytes en mi enfoque anterior y corregí un error en mi enfoque actual gracias a minxomat!
fuente
"/users/"
en una variable?scan()
pensará que las líneas siguientes son las cosas que desea ingresar desde STDIN (quién sabe por qué), por lo que los puntos y comas son necesarios en este caso. Pero en general tienes razón.AutoIt,
320316308 bytes_DateDiff
calcula la diferencia en días ('D'
). Será 0 si la diferencia es inferior a 1 día, por lo que podemos usarlo como un valor booleano. La etiqueta del título del valor "visto por última vez" contiene una marca de tiempo (casi) estándar.fuente
PHP, 187 bytes
Enfoque bastante simplista, usando el dominio codegolf.xyz, solo un elemento ligeramente diferente aquí es que intento obtener ambas variables a la vez. Probado en algunos usuarios con resultados correctos, ¡avíseme si hay algunas áreas problemáticas!
Uso:
fuente
$m[1] is
aparece dos veces ¿No sería más barato imprimir esto primero y usar el ternario solo para la parte muerta / viva?Sadly, ...
parte se interpuso ... ¡Parece que no puedo entenderlo!time()-strtotime($m[2])
a una variable de un solo carácter. Luego eco$m[1] is
y finalmente los muertos / vivos. Así es como lo hice - no sé si esto funcionará en PHP :)Groovy, 355 bytes
Fuente sin comprimir
fuente