Odpowiedz na stosunek głosów

18

To pytanie jest inspirowane faktem, że uwielbiam widzieć pytania o równym głosowaniu i odpowiedzi się liczą ...


Więc oto prosty wyzwanie dla was wszystkich:

Wyzwanie:

Biorąc pod uwagę codegolf.stackexchangeidentyfikator pytania, wypisz stosunek między głosami pytania a liczbą odpowiedzi (np votes/answers.).

Specyfika:

  • Możesz uzyskać dostęp do Internetu, ale możesz uzyskać dostęp tylko do stackexchange.comróżnych jego subdomen. Nie możesz używać skracaczy URL.

  • Możesz przyjmować dane wejściowe i przekazywać dane wyjściowe w dowolnym standardowym formacie.

  • Musisz wypisać stosunek jako liczbę dziesiętną w podstawie 10, z co najmniej 4 {dokładnymi} cyframi po przecinku (zera mogą zostać obcięte).

  • Jeśli pytanie pozostanie bez odpowiedzi, twój program może wywołać niezdefiniowane zachowanie.

  • Powinieneś użyć scorepytania jako liczby głosów, patrz tutaj .

To jest , najmniej bajtów w każdym języku wygrywa dla tego języka, najmniej bajtów ogólnie wygrywa.

Oto przykładowy program w Python 3 + requests:

import requests
import json

id = input("id> ")
url = "https://api.stackexchange.com/2.2/questions/" + id + "?site=codegolf"
content = requests.get(url).text
question = json.loads(content)["items"][0]

print(float(question["score"]) / question["answer_count"])
Socratic Phoenix
źródło
Czy stosunek wymaga co najmniej 4 cyfr dziesiętnych po punkcie dziesiętnym, nawet jeśli są zerowe? Np. 41/4 = 10,25 lub 10,2500
pizzapanty184
@ pizzapants184 10.25 jest w porządku
Socratic Phoenix
Co się stanie, jeśli wyzwanie nie zostanie udzielone? Czy stosunek byłby nieskończony?
Pan Xcoder,
Masz na myśli wynik lub całkowitą liczbę głosów na pytanie?
AdmBorkBork
@ Mr.Xcoder w takim przypadku niezdefiniowane zachowanie jest w porządku
Socratic Phoenix,

Odpowiedzi:

10

JavaScript (ES6), 103 102 bajtów

Musi być uruchamiany z poziomu katalogu głównego api.stackexchange.com. Zwraca Promiseobiekt zawierający wynik.

n=>fetch(`questions/${n}?site=codegolf`).then(r=>r.json()).then(({items:[j]})=>j.score/j.answer_count)

Jeśli wymaga się, aby było uruchamiane z określonej ścieżki, jest to dozwolone, to staje się 92 90 bajtów.

n=>fetch(n+`?site=codegolf`).then(r=>r.json()).then(({items:[j]})=>j.score/j.answer_count)

Spróbuj

Dodano pełny adres URL, aby umożliwić jego działanie tutaj.

f=
n=>fetch(`//api.stackexchange.com/questions/${n}?site=codegolf`).then(r=>r.json()).then(({items:[j]})=>j.score/j.answer_count)
onchange=_=>f(+i.value).then(t=>o.innerText=t)
<input id=i type=number><pre id=o>

Kudłaty
źródło
7
Wymień i=>(j=i.items[0])się ({items:[j]})=>jzapisać bajt.
kamoroso94,
Dobra sztuczka, dzięki, @ kamoroso94. Będę musiał to pamiętać.
Shaggy
8

Stratos , 40 bajtów

-4 bajty dzięki Shaggy

f"¹⁵s/%²"r"⁷s"@0
{s"answer_⁰"
⁰s"score"/

Spróbuj!

Stratos specjalizuje się w pytaniach dotyczących .

Wyjaśnienie:

Kod dekompresuje się w następujący sposób:

f"api.stackexchange.com/questions/%?site=codegolf"r"items"@0
{s"answer_count"
⁰s"score"/

Począwszy od pierwszego wiersza, Stratos ocenia diady od prawej do lewej.

f"api.stackexchange.com/questions/%?site=codegolf"r"items"@0oznacza „oceń diadem @za pomocą argumentu po lewej stronie f"api.stackexchange.com/questions/%?site=codegolf"r"items"i argumentu po prawej stronie 0. @pobiera n-ty element tablicy JSON.

Aby ocenić f"api.stackexchange.com/questions/%?site=codegolf"r"items", będziemy następnie oceniać diadę rz argumentem po lewej stronie f"api.stackexchange.com/questions/%?site=codegolf"i argumentem po prawej stronie "items". rpobiera tablicę JSON o określonej nazwie.

Następnie będziemy musieli ocenić f"api.stackexchange.com/questions/%?site=codegolf". Najpierw %zastępuje się wejściem. foznacza „pobierz zawartość tego adresu URL”.

Teraz możemy przejść do drugiej linii. Nowy wiersz oznacza „dodaj to, co oceniliśmy, do niejawnej listy argumentów”

Następnie oceniamy s(otrzymujemy ciąg znaków w obiekcie JSON o określonej nazwie) za pomocą {i "answer_count". {pobiera element z niejawnego stosu argumentów, zwraca go i dodaje z powrotem do stosu.

Następnie dodajemy wynik tego do niejawnego stosu argumentów.

Aby ocenić ⁰s"score"/, stosujemy diad /(dzielenie) ⁰s"score"i element z niejawnego stosu argumentów.

Do oceny ⁰s"score"otrzymujemy ciąg "score"z obiektu JSON z elementu 0 w stosie argumentów implict.

Teraz wyjście /jest drukowane i program się kończy.

Okx
źródło
Zaoszczędź 4 bajty, porzucając wersję API ( 2.2/).
Shaggy
1
@Shaggy Nie wiedziałem, że wersja API nie jest wymagana, dzięki. Bez przekreślenia 44: P
Okx,
5

R + jsonlite , 111 bajtów

function(n,x=jsonlite::fromJSON(sprintf('http://api.stackexchange.com/questions/%s?site=codegolf',n))$i)x$s/x$a

Link do skrzypca R.

jsonlite jest ładną biblioteką konwersji JSON <-> R, która działa całkiem dobrze. Nie zamierzałem grać w parser JSON dla R ...

Giuseppe
źródło
Możesz zapisać bajt za pomocą httpprotokołu. Zgaduję też, że 142729nie powinno się tam na stałe wpisywać?
Shaggy
@Shaggy dobre połączenie, dziękuję. Skopiowałem i wkleiłem zbyt szybko.
Giuseppe,
4

T-SQL, 64 54 bajtów

Rzadko zdarza się, że SQL potrafi pokonać (większość) innych języków! Zamiast adresu URL interfejsu API poszedłem bezpośrednio do Eksploratora danych stosu wymiany :

SELECT 1.0*Score/AnswerCount FROM Posts WHERE Id=##i##

To ##i##nie jest standardowy SQL, to format stosu Exchange Exchange z monitem o wprowadzenie danych.

Pamiętaj, że źródło eksploratora danych jest aktualizowane tylko co noc, więc wartości nie są aktualne.

Wyrzuci błąd dzielenia przez zero na pytania bez odpowiedzi.

Edycja : Zapisano 10 bajtów, mnożąc przez 1,0 zamiast jawnie CONVERTdo FLOAT.

BradC
źródło
można pokonać innych, ale nie wszystkich :)
Okx,
O rany, miałem inne rozwiązanie, ale byłem w szkole, więc nigdy nie skończyłem z publikowaniem ... Czy moja odpowiedź jest zbyt podobna do twojej? Czy powinienem usunąć mój?
całkowicie ludzki,
@icrieverytim Ha, tak, wygląda na to samo zapytanie, chociaż właśnie edytowałem moje, aby zaoszczędzić 10 dodatkowych bajtów.
BradC
@BradC Zredagowałem moją odpowiedź na lol w odpowiedzi Mathematica.
całkowicieludzki
3

PowerShell , 130 bajtów

($a=(ConvertFrom-Json(iwr("http://api.stackexchange.com/questions/"+$args+"?site=codegolf")).content).items).score/$a.answer_count

Wykonuje Invoke- Web ReQUEST przeciwko URL, dostaje .contentich, robi ConvertFrom-Jsonz tych treści, i dostaje .itemsz tego obiektu JSON. Przechowuje to $ai wyciąga .scorejako licznik. Mianownikiem jest .answer_count. Ta wartość pozostawia się w potoku, a dane wyjściowe są niejawne.

Jeśli pytanie nie zostanie udzielone, powinno to spowodować błąd „Podziel przez zero”.

AdmBorkBork
źródło
3

Japt , 83 82 bajty

Chciałem spróbować, jak to się sprawdzi, ponieważ Japt nie może natywnie tego dokonać. Zasadniczo wszystko to robi evalskompresowana wersja mojego rozwiązania JS . Ponieważ Japt to JS, możemy wymagać, aby uruchamiało się to z poziomu katalogu głównego, api.stackexchange.coma także zwracało Promiseobiekt zawierający wynik.

Ox`fet®("quÀËs/{U}?ÐÒ=¬¸golf").È(r=>r.js()).È(i=>(j=i.ems[0]).sÖ/j.s³r_Öt)
  • Zobacz
  • Wypróbuj - dodatkowe bajty w tej wersji są uwzględnione przez włączenie //api.stackexchange.com/do adresu URL, console.logdzięki czemu można zobaczyć, że działa
Kudłaty
źródło
1
o0 Dlaczego kod został utworzony jako link? Nawet bałagan z wyświetlaniem liczby bajtów skryptu użytkownika lol. i.imgur.com/SO2zgAy.png
totalnie ludzki,
2

Mathematica, 124 bajty

N@("score"/.(u="items"/.Import["http://api.stackexchange.com/questions/"<>#<>"?site=codegolf","JSON"]))/("answer_count"/.u)&

Mathematica ma wywoływany typ danych Rule, co mnie dezorientuje. : P

całkowicie ludzki
źródło
1

Żądania w języku Python 3 +, 149 bajtów

-1 bajt dzięki Mr. Xcoder.

from requests import*
u=get('http://api.stackexchange.com/questions/%s?site=codegolf'%input()).json()['items'][0]
print(u['score']/u['answer_count'])
całkowicie ludzki
źródło
Link jest do Pythona 2. Btw, generuje błąd zarówno w Pythonie 2, jak i Pythonie 3 (w TIO).
Brak dostępu do Internetu w TIO whoops. Właśnie użyłem TIO do formatowania odpowiedzi lol.
całkowicie ludzki,
Myślę, że (na razie) httpwystarczy.
Pan Xcoder,
125 bajtów
LyricLy,
0

PHP, 167 bajtów

<?$f=json_decode(gzdecode(file_get_contents('https://api.stackexchange.com/2.2/questions/'.$argv[1].'?site=codegolf')))->items[0];echo $f->score/$f->answer_count;

Turbo-szybki crack w tym. Zapisz jako plik i uruchom w terminalu tak:

php -f file.php 143083

Może to być sposób na zmniejszenie tego.

Orfeusz
źródło