हमारे लापता मृत का पता लगाएं


19

चुनौती

पीटर हमें फिर से डुप्लिकेट चुनौतियों से बचाने के लिए बढ़ गया है!

पीटर टेलर मर चुका है , और इसके बारे में कोई संदेह नहीं है (ठीक है, हमारे पास बड़ी मात्रा में संदेह के अलावा ... लेकिन बस इसे अनदेखा करें)। उसकी याद में, आपको एक प्रोग्राम लिखना होगा जो यह निर्धारित करता है कि कोई दिया गया उपयोगकर्ता जीवित है या मृत।

अग्रिम जानकारी

एक उपयोगकर्ता मर गया है अगर उन्हें एक दिन से अधिक समय तक नहीं देखा गया है, तो उससे कम किसी भी समय वे जीवित हैं। यहां मिले अंतिम अनुभाग को देखें:

अंतिम दर्शन का स्थान

इनपुट एक यूजर आईडी (उदाहरण के लिए, मेरा 30525 है, और पीटर टेलर का 194 है) होगा। मान लें कि सभी इनपुट PPCG आईडी मान्य हैं।

यदि उपयोगकर्ता जीवित है, तो आपको आउटपुट करना चाहिए:

[User name] is alive!

कहाँ आप अपने उपयोगकर्ता नाम [उपयोगकर्ता नाम] की जगह नहीं उनके प्रयोक्ता आईडी।

यदि उपयोगकर्ता मृत है, तो आपको आउटपुट करना चाहिए:

 Sadly, [User name] is dead.

एसई डेटा एक्सप्लोरर का उपयोग कर टी-एसक्यूएल प्रवेशकों को बंद कर दिया जाता है।

जीतना

बाइट्स में सबसे छोटा कार्यक्रम जीत जाता है।

लीडरबोर्ड

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
टी-एसक्यूएल / एसईडीई को क्यों न हटाया जाए?
जियोबिट्स

1
"अंतिम बार देखा गया" के लिए नंबर कहाँ खोजना है, इसका विवरण चाहिए।
feersum

@ Faersum यह अंतिम बार देखे गए मान का शीर्षक टैग है।
म्यान्कोमा m

@ Faersum काफी अच्छा है?
बीटा डेके

1
मुझे लगता है कि इंटरनेट की तुलना में पार्सिंग इसके लिए अधिक प्रासंगिक है ।
mınxomaτ

जवाबों:


4

CJam, 115 बाइट्स

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

यह विचार मेरे बैश उत्तर के समान है , सिवाय इसके कि यह उत्तर नियमित अभिव्यक्तियों का उपयोग नहीं करता है, क्योंकि सीजेएम में नियमित अभिव्यक्ति नहीं है ...

ऑनलाइन दुभाषिया वेब अनुरोध नहीं करता है, इसलिए यह केवल कमांड लाइन से काम करेगा।


8

बैश, 151 बाइट्स

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!"

हमेशा की तरह, STDERR के आउटपुट को अनदेखा किया गया है

उदाहरण चलाते हैं

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

विचार

युक्त लाइनों के लिए इस कोड को greps s="rकि जरूरत नहीं है >इसकी घटना से पहले। उदाहरण के लिए:

Last seen <span title="2015-09-17 12:00:00Z" class="relativetime">just now</span>
  • यदि मैच स्ट्रिंग द्वारा पीछा किया जाता है da, तो इसमें शब्द yesterdayया days(जैसा कि 2 days ago) होता है।
  • यदि मैच एक बड़े अक्षर के बाद होता है, तो इसमें एक महीने का नाम होता है।
  • अन्य सभी मामलों में, उपयोगकर्ता के मरे जिंदा।

उपयोगकर्ता का नाम ट्विटर मेटा टैग से निकाला गया है। उदाहरण:

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

3
मैंने अपना प्रोफ़ाइल अपडेट किया है, और अचानक मैं मर गया हूं। :(
TessellatingHeckler

5
तुम अब मेरे लिए मृत नहीं हो।
डेनिस

1
कि एक राहत की बात है!
TessellatingHeckler

उस डोमेन को किसने पंजीकृत किया था?
jimmy23013


7

जावास्क्रिप्ट ईएस 6, 234 बाइट्स

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>`)

एनोटेट संस्करण

// 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
)

मेरे नाम में अपॉस्ट्रॉफी पार्स करने में विफल रहता है, फिर भी सही ढंग से हर दूसरे चरित्र को पार्स करता है। ब्राउज़र परीक्षण के लिए XD +1
कॉनर ओ'ब्रायन

1
@ C @O'Bʀɪᴇɴ एपीआई इकाई को धिक्कार है।
जॉर्ज रीथ

7

पॉवरशेल (v4), 228 217 209 , 157 बाइट्स

$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."}

जैसे

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!"}}

(क्षमा करें, कीथ रान्डेल, आप पहली बार मुझे पहली बार मिली तारीख से 1 दिन पहले मिले थे)।

मैं ठोस, विश्वसनीय 209 बाइट था जो एपीआई कह रहा था, लेकिन स्क्रीन-स्क्रैपिंग गोल्फ के लिए जाने का रास्ता है।

  • यह अब उपयोगकर्ता नाम को पुनर्निर्देशित यूआरआई से खींचता है - लेकिन यह एक संख्यात्मक आईडी के बजाय एक नाम है, आवश्यकतानुसार।

  • और यह सेकंड (सेकंड्स) पहले, मिनट (एस), घंटे (ओं) को पकड़ने की कोशिश करने के Last seen <span title="2015-10-03 13:15:38Z" class="relativetime">2 days ago</span>साथ लाइन से मेल खाता है n <... [nr]s ago<, और अभी-अभी, और "दिन सप्ताह, महीने" पहले, या लॉन्ग टर्म डेट + बार याद आती है। और 'अंतिम बार देखे गए' को पकड़ने की कोशिश कर रहा है, न कि अन्य रिलेटिव्स को। (धन्यवाद डेनिस)।

एनबी। curlके लिए एक डिफ़ॉल्ट उपनाम है Invoke-WebRequest, यह विंडोज के लिए पोर्ट किए गए मानक कर्ल प्रोग्राम नहीं है।


2
वहाँ भी है secs ago, 1 min ago(नहीं s), और मुझे लगता है कि मैंने देखा है just now
डेनिस

@ डेनिस मुझे लगता है कि अब तय हो गया है, धन्यवाद। (आपके बैश जवाब के पीछे गिरने की कीमत पर; शायद मुझे आपके पैटर्न मैचों का उपयोग करते हुए बेशर्मी से कोशिश करनी चाहिए ...)।
TessellatingHeckler

5

आर, 384 350 बाइट्स

यह आपके लिए, पीटर!

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!")

ध्यान दें कि इसके लिए httrऔर jsonliteपैकेजों को स्थापित करने की आवश्यकता है, हालांकि उन्हें इस कोड के लिए आयात करने की आवश्यकता नहीं है क्योंकि हम स्पष्ट रूप से नामस्थान का संदर्भ दे रहे हैं।

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!")
}

मेरे पिछले दृष्टिकोण पर 5 बाइट्स सहेजे और मिनक्सोमैट के लिए मेरे वर्तमान दृष्टिकोण में त्रुटि को ठीक किया!


मुझे आर के बारे में पता नहीं है, लेकिन क्या आप स्ट्रिंग को शाब्दिक रूप "/users/"से एक चर में डालकर कुछ बाइट्स नहीं बचा सकते हैं ?
mnnxomaτ

@minxomat ज़रूर कर सकते हैं, धन्यवाद!
एलेक्स ए।

\ n और; बाइट्स की समान मात्रा लें। तो आपके कोड को ऐसा नहीं दिखना है
OganM

@ ओगनएम वास्तव में, आर में, scan()सोचेंगे कि सफल लाइनें वे सामान हैं जिन्हें आप एसटीडीआईएन (जो जानते हैं क्यों) से दर्ज करना चाहते हैं, इसलिए इस मामले में अर्धविराम आवश्यक हैं। लेकिन सामान्य तौर पर आप सही हैं।
एलेक्स ए।

5

ऑटो इट, 320 316 308 बाइट्स

#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!'))

_DateDiffदिनों ( 'D') में अंतर को शांत करता है । यह 0 होगा यदि अंतर 1 दिन से कम है, इसलिए हम इसे बूलियन मान के रूप में उपयोग कर सकते हैं। "अंतिम बार देखे गए" मान का शीर्षक टैग में (लगभग) मानक टाइमस्टैम्प है।


2
मैंने एक दशक में इसे ऑटो नहीं देखा है। भगवान, मेरा उत्थान करो।
Qix

1

PHP, 187 बाइट्स

Codegolf.xyz डोमेन का उपयोग करके बहुत ही सरल दृष्टिकोण, यहाँ केवल थोड़ा भिन्न आइटम यह है कि मैं एक ही बार में दोनों चर प्राप्त करने का प्रयास करता हूं। सही परिणाम वाले कुछ उपयोगकर्ताओं पर परीक्षण किया गया, कृपया मुझे बताएं कि क्या कुछ समस्या क्षेत्र हैं!

<?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.";

उपयोग:

php 59763.php 30525

$m[1] is दो बार दिखाई देता है। क्या पहले इसे प्रिंट करना और मृत / जीवित भाग के लिए टर्नरी का उपयोग करना सस्ता नहीं होगा?
mınxomaτ

@minxomat मैंने उसके साथ खेला था, लेकिन Sadly, ...भाग रास्ते में मिला ... इसके चारों ओर मेरा सिर नहीं मिल रहा है!
डोम हेस्टिंग्स

सैडली को पहले इको करें, फिर time()-strtotime($m[2])सिंगल-चार वेरिएबल से रिजल्ट असाइन करें । फिर गूंज $m[1] is और अंत में मृत / जीवित। यह है कि मैं यह कैसे किया - अगर यह PHP में काम करेंगे :)
mınxoma did

@minxomat आह, इतना आसान है, लेकिन मैं इसके चारों ओर अपना सिर नहीं मिला सकता है! धन्यवाद! जैसे ही मैं फिर से परीक्षण कर सकता हूं, मैं अपडेट करूंगा!
डोम हेस्टिंग्स 18

1

ग्रूवी, 355 बाइट्स

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!"

असम्बद्ध स्रोत

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!"
}

आप 42 बाइट्स बचा सकते हैं (इसे 313 बाइट्स तक ले आता है) यदि आप आयात के बजाय सिर्फ नया groovy.json.JsonSlurper और नया java.util.zip.GZIPInputStream करते हैं। यदि आप किसी वर्ग का बहुत अधिक उपयोग करते हैं तो केवल आम तौर पर आयात करना बंद हो जाता है।
एक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.