Kayıp ölülerimizi bulun


19

Meydan okuma

Peter bizi tekrarlayan zorluklardan kurtarmak için tekrar ayağa kalktı!

Peter Taylor öldü ve bu konuda hiçbir şüphe yok (iyi, şüphelendiğimiz büyük miktarda şüphe dışında ... ama bunu görmezden gel). Hafızasında, belirli bir kullanıcının hayatta olup olmadığını belirleyen bir program yazmalısınız.

Daha fazla bilgi

Bir kullanıcı bir günden fazla bir süredir görülmediyse öldü, bundan daha azı hayatta. Burada bulunan son görülen bölümü kontrol edin:

Son görülme yeri

Giriş bir kullanıcı kimliği olacaktır (örneğin, benimki 30525 ve Peter Taylor'ın 194'dur). Tüm girişlerin geçerli PPCG kimlikleri olduğunu varsayın.

Kullanıcı yaşıyorsa, çıktı almalısınız:

[User name] is alive!

Kullanıcı kimlikleri için değil , kullanıcı adları için [Kullanıcı adı] yerine geçtiğiniz yerler.

Kullanıcı ölmüşse çıktı almalısınız:

 Sadly, [User name] is dead.

SE Veri Gezgini kullanan T-SQL girişlerine izin verilmez.

Kazanan

Bayt cinsinden en kısa program kazanır.

Liderler Sıralaması

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>


2
Neden T-SQL / SEDE'ye izin verme?
Geobits

1
"Son görülme" sayısının nerede bulunacağı konusunda bir açıklama gerekiyor.
feersum

@feersum En son görülen değerin başlık etiketidir.
5x15

@feersum Yeterince iyi mi?
Beta Çürümesi

1
Ayrıştırma bunun internetten daha alakalı olduğunu düşünüyorum .
5x15

Yanıtlar:


4

CJam, 115 bayt

"codegolf.xyz/u/"r+g_N/{"s=\"r"/_0='>&!*1>s_"da"#)\_el=!|}#)"Sadly, %s is dead.""%s is alive!"?\"\"User "/1='"/1<e%

Fikir, Bash cevabımdakiyle aynı , ancak bu cevap düzenli ifadeler kullanmıyor, çünkü CJam'ın düzenli ifadeleri yok ...

Çevrimiçi yorumlayıcı web istekleri gerçekleştirmez, bu nedenle yalnızca komut satırından çalışır.


8

Bash, 151 bayt

r="curl -L codegolf.xyz/u/$1";u=`$r|grep -Pom1 '(?<="User )[^"]*'`
$r|grep -Pq '^[^>]*s="r.*(da|[A-Z])'&&echo "Sadly, $u is dead."||echo "$u is alive!"

Her zamanki gibi STDERR çıktısı yok sayılır .

Örnek çalışma

$ ./is-dead 30525 2>&-
Beta Decay is alive!
$ ./is-dead 44935 2>&-
Sadly, Alpha Decay is dead.

Fikir

Bu kod, oluşmadan önce s="rolmayan satırlar için açılır >. Örneğin:

Last seen <span title="2015-09-17 12:00:00Z" class="relativetime">just now</span>
  • Eşleşmenin ardından dize dageliyorsa yesterdayveya days(olduğu gibi 2 days ago) sözcüğünü içerir .
  • Eşleşmeyi büyük bir harf izliyorsa, ayın adını içerir.
  • Diğer tüm durumlarda, kullanıcı ölümsüzdür .

Kullanıcının adı bir Twitter meta etiketinden çıkarılır. Misal:

<meta name="twitter:title" property="og:title" itemprop="title name" content="User Dennis">

3
Profilimi güncelledim ve aniden öldüm. :(
TessellatingHeckler

5
Artık benim için ölmedin.
Dennis

1
Bu bir rahatlama!
15:26

Bu alanı kim kaydetti?
jimmy23013

@ jimmy23013 minxomat
Dennis

7

Javascript ES6, 234 bayt

document.write(`<script src="//api.stackexchange.com/users/${prompt(a=d=>{n=(x=d.items[0]).display_name,alert((Date.now()/1e3)-x.last_access_date>86400?`Sadly, ${n} is dead.`:n+' is alive!')})}?site=codegolf&callback=a">\x3C/script>`)

Ek açıklamalı sürüm

// Inserts a script tag to perform a JSONP callback request on the stackexchange API
document.write(`
  <script src="//api.stackexchange.com/users/${
    prompt( // interpolate user input into url
      a = d =>{ // declare a in global scope
        n = (x = d.items[0]).display_name, // alias the user object and name
        alert(
          (Date.now() / 1e3) - x.last_access_date > 86400 
          ? `Sadly, ${n} is dead.` // a day or less since last seen
          : n + ' is alive!' // more than a day since last seen
        )
      }
    )
  }?site=codegolf&callback=a">\x3C/script>` // escaping that prevents early termination of enclosing script tag
)

Benim adımda kesme işaretini ayrıştıramadı, ancak diğer tüm karakterleri doğru şekilde ayrıştırır. Tarayıcı içi testler için XD +1
Conor O'Brien

1
@ CᴏɴᴏʀO'Bʀɪᴇɴ Lanet olsun API varlığı onu kodlar.
George Reith

7

PowerShell (sürüm 4), 228217209 , 157 bayt

$u=($x=curl "codegolf.xyz/u/$args").BaseResponse.ResponseURI.Segments[-1]
if($x-match'n <(.*?)((c|n|ur)s* ago|w)<'){"$u is alive!"}else{"Sadly, $u is dead."}

Örneğin

PS C:\> test.ps1 30525
beta-decay is alive!

C:\> test.ps1 67
Sadly, keith-randall is dead.


#Previous 209 byte version:
$f={$u=((curl "api.stackexchange.com/2.2/users/$($args)?&site=codegolf"
)|ConvertFrom-Json).Items;$d=$u.display_name;if((get-date -U %s)-
$u.last_access_date-gt86400){"Sadly, $d is dead."}else{"$d is alive!"}}

(Üzgünüm, Keith Randall, son göründüğüm tarihten bu yana> 1 gün önce bulduğum ilk hesaptın).

API'yı çağıran sağlam, güvenilir 209 baytlık birinden memnun kaldım, ancak ekran kazıma golf için gitmek için bir yoldur.

  • Bu, şimdi kullanıcı adını yeniden yönlendirilen URI'den alıyor - ancak gerektiği gibi sayısal bir kimlik yerine bir ad.

  • Ve bu satır Last seen <span title="2015-10-03 13:15:38Z" class="relativetime">2 days ago</span>, n <... [nr]s ago<saniye önce, dakika önce, saat önce ve şimdi yakalamaya çalışmak ve "günler haftalar, aylar" önce veya uzun vadeli tarihleri ​​+ kez kaçırmakla aynı çizgiyle eşleşir . Ve diğer göreli zamanları değil, 'son görüleni' yakalamaya çalışıyoruz. (Teşekkürler Dennis).

NB. curliçin varsayılan bir takma Invoke-WebRequestaddır, Windows'a taşınan standart kıvırma programı değildir.


2
Ayrıca var secs ago, 1 min ago(hayır s), ve sanırım gördüm just now.
Dennis

@Dennis sanırım şimdi düzeltildi, teşekkürler. (Bash cevap gerisinde pahasına; belki gerektiğini ... senin desen eşleşmeleri kullanarak utanmadan deneyin).
TessellatingHeckler

5

R, 384 350 bayt

Bu senin için, Peter!

u=scan();D=as.POSIXlt;J=jsonlite::fromJSON(gsub("/\\*\\*/a|[()]|;$","",httr::content(httr::GET(paste0("http://api.stackexchange.com/2.2/users/",u,"?site=codegolf&callback=a")),,"text")))$items;l=D(J$last_access_date,z<-"UTC","1970-01-01");n=D(Sys.time(),z);U=J$display_name;if(as.Date(n)-as.Date(l)>1)cat("Sadly,",U,"is dead.")else cat(U,"is alive!")

Ad alanlarına açıkça atıfta bulunduğumuz için bu kodun çalışması için içe aktarılmaları gerekmese de bunun httrve jsonlitepaketlerinin yüklenmesini gerektirdiğini unutmayın .

Ungolfed:

# Read a user ID from STDIN
u <- scan()

# Create a request object using the SE API v2.2
request <- httr::GET(paste0("http://api.stackexchange.com/2.2/users/", u,
                            "?site=codegolf&callback=a"))

# Read the contents of the request into a ill-formed JSON string
body <- httr::content(request, type = "text")

# Parse out a valid string and get the associated fields
J <- jsonlite::fromJSON(gsub("/\\*\\*/a|[()]|;$", "", body))$items

# Get the last accessed date as a POSIX datetime object
l <- as.POSIXlt(J$last_access_date, "UTC", "1970-01-01")

# Get the current date
n <- as.POSIXlt(Sys.time(), "UTC")

# Extract the username
U <- J$display_name

# Determine whether the user has died
if (as.Date(n) - as.Date(l) > 1) {
    cat("Sadly," U, "is dead.")
} else {
    cat(U, "is alive!")
}

Önceki yaklaşımımda 5 bayt kaydedildi ve minxomat sayesinde mevcut yaklaşımımdaki bir hatayı düzelttim!


R hakkında bilmiyorum, ama u "/users/"bir değişkeni dize değişmez koyarak koyarak bazı bayt kaydedemiyor ?
5x15

@minxomat Emin olabilirsiniz, teşekkürler!
Alex A.

\ n ve; aynı miktarda bayt alır. Yani kodunuzun böyle görünmesi gerekmez
OganM

@OganM Aslında, R'de, scan()sonraki satırların STDIN'den (nedenini bilen) girmek istediğiniz şeyler olduğunu düşünecek, bu nedenle noktalı virgüller bu durumda gereklidir. Ama genel olarak haklısın.
Alex

5

AutoIt, 320 316 308 bayt

#include<String.au3>
#include<Date.au3>
$0=_StringBetween
$1=BinaryToString(InetRead('http://codegolf.xyz/u/'&ClipGet()))
$2=_DateDiff('D',StringReplace($0($1,'Last seen <span title="',' ')[0],'-','/'),@YEAR&'/'&@MON&'/'&@MDAY)
ConsoleWrite(($2?'Sadly, ':'')&$0($1,'r ','- P')[0]&'is '&($2?'dead.':'alive!'))

_DateDiffgün cinsinden farkı hesaplar ( 'D'). Fark 1 günden az ise 0 olacaktır, bu yüzden boole değeri olarak kullanabiliriz. "Son görülme" değerinin başlık etiketi (neredeyse) standart bir zaman damgası içerir.


2
On yıldır otomatik olarak görmedim. Tanrım, benim oyumu al.
Qix

1

PHP, 187 bayt

Oldukça basit bir yaklaşım, codegolf.xyz etki alanını kullanarak, burada biraz farklı bir öğe, her iki değişkeni bir kerede almaya çalışıyorum. Doğru sonuçları veren birkaç kullanıcı üzerinde test edildi, lütfen bazı sorunlu alanlar olup olmadığını bize bildirin!

<?preg_match('/"User ([^"]+)".+?"([^"]+)" class="r/s',file_get_contents("http://codegolf.xyz/u/$argv[1]"),$m);echo time()-strtotime($m[2])<86400?"$m[1] is alive!":"Sadly, $m[1] is dead.";

Kullanımı:

php 59763.php 30525

$m[1] is iki kez görünür. İlk önce bunu yazdırmak ve üçlüleri sadece ölü / canlı kısım için kullanmak daha ucuz olmaz mı?
6x15

@minxomat Bununla oynadım, ama Sadly, ...parça yoluna girdi ... Kafamı bulamıyorum !
Dom Hastings

Önce ne yazık ki yankılayın, ardından sonucu time()-strtotime($m[2])tek bir char değişkenine atayın . Sonra yankı $m[1] is ve son olarak ölü / diri. Ben böyle yaptım - bu PHP'de çalışacak olursa bilmiyorum :)
mınxomaτ

@minxomat Ahhh, çok basit, Ama başımı bulamadım! Teşekkürler! Tekrar test edebildiğimde güncelleme yapacağım!
Dom Hastings

1

Groovy, 355 bayt

import groovy.json.JsonSlurper;import java.util.zip.GZIPInputStream;def d = new JsonSlurper().parseText(new GZIPInputStream(new URL("http://api.stackexchange.com/2.2/users/${args[0]}?site=codegolf").newInputStream()).getText()).items[0];def n = d.display_name;println d.last_access_date*1000l<new Date().time-8.64E7?"Sadly, ${n} is dead.":"${n} is alive!"

Sıkıştırılmamış kaynak

import groovy.json.JsonSlurper;
import java.util.zip.GZIPInputStream;

def rawText = new GZIPInputStream(new URL("http://api.stackexchange.com/2.2/users/${args[0]}?site=codegolf").newInputStream()).getText()
def json = new JsonSlurper().parseText(rawText).items[0]
def name = json.display_name
//We have to correct for java date returning in millis
def lastAccess = json.last_access_date * 1000l
def yesterday = new Date().time - 86400000
if (lastAccess < yesterday) {
    println "Sadly, ${name} is dead."
} else {
    println "${name} is alive!"
}

İthalat yerine yeni groovy.json.JsonSlurper ve yeni java.util.zip.GZIPInputStream yaparsanız 42 bayt (313 bayta indirir) kaydedebilirsiniz. İçe aktarma işlemi genellikle bir sınıfı çok kullanırsanız işe yarar.
bir
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.