Kullanıcının İtibarını Hesaplama


12

Meydan okuma

Bir kullanıcının adı verildiğinde (kimlik değil, zaten bu zorluğa sahibiz), mevcut itibarını ve kimliğini çıktılayın.

Giriş

Giriş, kullanıcının kullanıcı adı olan tek bir dize olacaktır. Bu kullanıcının var olduğunu varsayabilirsiniz.

Çıktı

Çıktı, kullanıcının itibarı ve kullanıcının kimliği olan STDOUT veya STDERR için iki tamsayı olacaktır. Belirli bir sırada olmaları ve herhangi bir makul biçimde çıkmaları gerekir.

Ayrıntılı Bilgiler

  • İtibar çıktısı, güncelliği 10 dakikadan fazla olmamalıdır.
  • Programınız normal yürütme sırasında herhangi bir hata atmayabilir
  • Standart boşluklar uygulanır (URL Kısaltıcıları Yok dahil)
  • Bu kullanıcı adına sahip birden fazla kullanıcı varsa, bu kullanıcı adına sahip herhangi bir kullanıcının istatistiklerini çıkarabilirsiniz. Bu nedenle kimliğin çıktısını almanız gerekir.
  • Çıktılacak itibar, kullanıcının ağ toplam puanı değil PPCG'deki saygınlığıdır.

Stack Exchange API sitesi burada bulunabilir . Belgeleri oradan okuyabilirsiniz.


Yığın değişim API'sını bağlayın.
Sihirli Ahtapot Urn

@carusocomputing Yapacak, teşekkürler. Görünüşe göre birden fazla kullanıcı aynı ada sahip olabileceğinden bir şeyi düzeltmem gerekiyor.
HyperNeutrino

Sanırım bu kural geçerli midir? Ayrıca, kullanıcının SE yerine PPCG'deki toplam itibarı olduğunu doğrulayabilir misiniz?
Arnauld

@ Evet diyeceğim. Ve bunun sadece PPCG itibarı olduğunu onaylıyorum. Bunu meydan okumada açıklığa kavuşturacağım. Teşekkürler.
HyperNeutrino

Peki bu T-SQL girişini yaptım ama yeterince güncellenmediği için kural 1'i karşılamıyor :(
ʰᵈˑ

Yanıtlar:


1

Bash + JQ , 93 bayt

Çok baytlı yanıtları doğru işlemediği için 87 baytlık sürüm geri alındı.

golfed

curl "api.stackexchange.com/users?site=codegolf&inname=$1"|zcat|jq ..\|numbers|sed -n 4p\;12p

Ayrı satırlarda ilk kullanıcı kimliği ve itibarı çıktısı alır.

Nasıl çalışır ?

1) curl + zcatJSON biçimli API yanıtını getirmek için kullanılır

2) jq ..|numbersJSON'u özyinelemeli olarak açar ve satır başına bir tane olmak üzere tüm sayısal değerleri yazdırır

...
1   35
2   8
3   2
4   3315904
5   1487694154
6   1492702469
7   4565
8   82
9   82
10  60
11  20
12  6275
...

(satır numaraları nlyalnızca örnekleme amacıyla eklenmiştir )

3) Sonra sedilk account_idve reputationmutlak satır numaralarını aramak için kullanırız

Ölçek

>./reputation zeppelin
3315904
6275

6

JavaScript (ES6), 145 139 136 125 123 117 bayt

a=>fetch(`//api.stackexchange.com/users?site=codegolf&filter=!)LgZAmQ6ls0hH&inname=`+a).then(_=>_.text()).then(alert)

Shaggy sayesinde 6 bayt ve Cyoce sayesinde 6 bayt tasarruf etti.

Aynı ada sahip tüm kullanıcılar mı yoksa bunlardan sadece biri mi çıkacağından emin değilim; bu kod hepsinin çıktısını verir.

f=a=>fetch(`//api.stackexchange.com/users?site=codegolf&filter=!)LgZAmQ6ls0hH&inname=`+a).then(_=>_.text()).then(alert)

f("tom")


Beni döv. İle 6 bayt kaydedin "//api.stackexchange.com/users?site=codegolf&inname="+a.
Shaggy

Not: Görünüşe göre (muhtemelen) yapmanız gerekenden daha fazla sonuç döndürüyorsunuz. Neyin uygun olduğuna dair HyperNeutrino'nun geri bildirimlerini almaya çalışıyorum, ancak sonucunuz adı yalnızca girdiyi içeren kullanıcılar için değerleri döndürüyor - tam olarak eşleşmiyor. Bu yüzden en iyi sonucunuz "tom" için değil, "Tom Carpenter" içindir.
Dason

_=>alert(_)Sadece yerine koymak mümkün alertmü?
Cyoce

@ Donan Yep, bu konuda emin olmadığım bir nokta; Onaylandığında cevabımı değiştireceğim.
Tom

@Cyoce Bu işe yaradı, teşekkürler!
Tom

4

Python 2, 178 169 149 Bayt

Bunun için istekleri kullanırdım:

from requests import*
a=get("http://api.stackexchange.com/users?site=codegolf&inname="+input()).json()["items"][0]
print a["reputation"],a["user_id"]

Temel olarak, bilgileri JSON olarak almak için yığının api'sini kullanır ve sonra "itibar" öğesini alır. Ayrıca, API birçok ekstra parametre özellikli, ben de onları traş.

Cömert katkılar: carusocomputing, ElPedro, Malivil, Keerthana Prabhakaran


["items"][0]Bu sadece ilk sonucu alır, birden fazla kullanıcı durumunda yanılmıyorsam ekstraları görmezden gelir.
Sihirli Ahtapot Urn

import requests as rve r.get(...4 bayt kaydeder.
ElPedro

@ElPedro güncelledi, giriş için teşekkürler.
Neil

1
Parametreleri ?site=codegolf&inname="
okunacak

1
Kullanmak from requests import*;a=get()bayt azaltır!
Keerthana Prabhakaran

3

Groovy, 144 156 bayt

{new groovy.json.JsonSlurper().parse(new URL("http://api.stackexchange.com/2.2/users/?site=codegolf&inname=$it")).items.collect{[it.user_id,it.reputation]}}

Anonim kapatma.

EDIT: groovy.json.JSON Slurper + 14 bayt için ithalat kullanmayı unuttum .

Örnek çıktı [[UserID, Reputation],...]:

[[20260, 60695], [20469, 21465], [3103, 8856], [41805, 7783], [134, 6829], [42643, 5622], [45268, 4389], [10732, 3976], [32, 3635], [53745, 3392], [10801, 3216], [49362, 2418], [2104, 2160], [3563, 1988], [18280, 1491], [742, 1466], [59487, 1362], [19039, 1330], [56642, 1133], [9522, 951], [34438, 886], [1744, 793], [52661, 778], [18187, 768], [11426, 751], [26850, 711], [178, 637], [29451, 631], [19700, 616], [15862, 601]]

8
JsonSlurper ... o_O
HyperNeutrino

slurrrrrrrrrp
Sihirli Ahtapot Urn

@HyperNeutrino, bakma şansınız olursa, en sevdiğim JSON ayrıştırma kütüphanesini düşünüyorum. O kadar kolay.
Sihirli Ahtapot Urn

Pekala, teşekkürler! Ben bir göz atacağım.
HyperNeutrino

0

Swift, 225202 bayt

import Foundation;var f:(String)->Any={return try!JSONSerialization.jsonObject(with:Data(contentsOf:URL(string:"http://api.stackexchange.com/users?site=codegolf&filter=!)LgZAmQ6ls0hH&inname=\($0)")!))}

Un-golfed:

import Foundation

var f:(String) -> [String: Any] = {
    return try! JSONSerialization.jsonObject(with:Data(contentsOf:URL(string:"http://api.stackexchange.com/users?site=codegolf&filter=!)LgZAmQ6ls0hH&inname=\($0)")!)) as! [String:Any]
}

Örnek çıktı:

["items": <__NSArrayI 0x6180001ffc00>(
{
    reputation = 2820;
    "user_id" = 42295;
},
{
    reputation = 2468;
    "user_id" = 31203;
},
{
    reputation = 2106;
    "user_id" = 2800;
},
{
    reputation = 1479;
    "user_id" = 6689;
},
{
    reputation = 1287;
    "user_id" = 64424;
},
{
    reputation = 1037;
    "user_id" = 64070;
},
{
    reputation = 644;
    "user_id" = 25193;
},
{
    reputation = 641;
    "user_id" = 3171;
},
{
    reputation = 639;
    "user_id" = 743;
},
{
    reputation = 590;
    "user_id" = 33233;
},
{
    reputation = 571;
    "user_id" = 26993;
},
{
    reputation = 563;
    "user_id" = 1730;
},
{
    reputation = 321;
    "user_id" = 18570;
},
{
    reputation = 309;
    "user_id" = 39156;
},
{
    reputation = 291;
    "user_id" = 7880;
},
{
    reputation = 281;
    "user_id" = 25190;
},
{
    reputation = 261;
    "user_id" = 40820;
},
{
    reputation = 231;
    "user_id" = 14154;
},
{
    reputation = 206;
    "user_id" = 2774;
},
{
    reputation = 196;
    "user_id" = 48231;
},
{
    reputation = 181;
    "user_id" = 1230;
},
{
    reputation = 176;
    "user_id" = 64077;
},
{
    reputation = 171;
    "user_id" = 31365;
},
{
    reputation = 171;
    "user_id" = 43455;
},
{
    reputation = 163;
    "user_id" = 21469;
},
{
    reputation = 161;
    "user_id" = 11845;
},
{
    reputation = 157;
    "user_id" = 25181;
},
{
    reputation = 131;
    "user_id" = 263;
},
{
    reputation = 131;
    "user_id" = 3922;
},
{
    reputation = 128;
    "user_id" = 67227;
}
)
]
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.