Bu sorunun kaç cevabı var?


16

Bu sorunun sahip olduğu cevapların tam sayı çıktısını veren bir program veya işlev yazın. Daha fazla yanıt eklendikçe çözümünüz yine de çalışmalıdır.

Tarayıcıda çalışan diller bu sayfadayken js konsolundan çalıştırılabilir. Aksi takdirde, muhtemelen bu sayfayı indirmeniz gerekir. Çok dilli çözümler, örneğin wget, sayfayı içeri alma ve kullanarak ayrıştırma greptamam. Sadece komut satırını ve kullanılan tüm kaynakları özetleyin.

Bu kod golf; baytlarda en kısa cevap kazanır.

DÜZENLE:

Bu sayfanın URL'sinin en fazla bir kez görüntülenmesinin girdi veya kaynak olarak sayılmasına izin verelim. Hiçbir URL kısaltıcısı, get parametresi vb. Olarak depolanan hiçbir veri vb. URL'yi giriş olarak almak da iyidir. URL'nin bir kısmını kaldırmak istiyorsanız, örneğin /how-many-answers..., bunu yapabilirsiniz, ancak muhtemelen size yardımcı olmaz.


Muhtemelen şimdi buna hükmetmek için çok geç, ancak sayı silinen cevapları içermeli mi?
Dennis

2
@Dennis Silinen cevapları göremiyorum, bu yüzden kimsenin onlar için endişelenmesi gerektiğini söyleyebilirim. İsterseniz sayın. Onları saymayacağım çünkü onları göremiyorum.
Filip Haglund

İşlev URL'yi giriş olarak kabul edebilir mi? Bu durumda girdi bayt hesabına dahil olur mu?
JungHwan Min

2
@FilipHaglund, koddaki URL bayt sayısının toplam sayıdan çıkarılmasının veya girdi olarak alınmasının en mantıklı olacağını düşünüyorum, çünkü bu tür tarayıcıda çalışmayan diller için imkansız hale getiriyor kazanma şansı elde etmek
Daniel

1
Bu (bazı dillerde girdi almak daha da fazla bayt gerektirse de) veya yalnızca URL http://...kaynak kodunda kelimesi kelimesine görünüyorsa çıkarmaya izin verir .
Dennis

Yanıtlar:


14

Javascript + jQuery, 23 bayt

_=>+$("h2>span").text()

Eğer h2>spanmeydan okumada bir varsa bu başarısız olamaz mı?
Martin Ender

3
Bunu cevaba eklemek iyi olabilir. :)
Martin Ender

1
Bu çalıştırılabilir hale getirilebilir mi ("kod parçasını çalıştır")?
RudolfJelin

13
Bunun saf JavaScript olmayan jQuery kullandığını unutmayın (yani yalnızca "JavaScript" olarak etiketlenmemelidir). Dilin üstünde bulunan bir kütüphane kullanılması en azından açıkça belirtilmelidir. JQuery kullanmaya karşı tartışmıyorum, sadece ifade edilmelidir.
Makyen

1
@Makyen StackOverflow'un ağı jQuery kullanıyor. Soru, "Bir tarayıcıda çalışan diller bu sayfadayken js konsolundan çalıştırılabilir" diyor. jQuery'nin zaten yüklü olduğu için yüklenmesi gerekmez. Belki de bu yüzden jQuery belirtilmemiş.
Ismael Miguel

4

Mathematica, 33 bayt

Length@Import[#,"Data"][[4,2]]-1&

Girdi, bu sayfanın url'sidir.


4

Python 2, 120 bayt, 79 URL olmadan

Python'un bu meydan okuma için yapıldığını söyleyemem.

import urllib
print[l for l in urllib.urlopen("http://codegolf.stackexchange.com/q/96298")if"answerCount"in l][0][83:-9]

Ne yazık ki, satır içi içe aktarma aynı uzunluktadır :(

Bu daha fazla golf ile herhangi bir yardım büyük mutluluk duyacağız!

URL (41 baytlık - bayt sayımın 1 / 3'ünden fazlası) giriş olarak alınabiliyorsa, 82 bayttır:

import urllib
lambda u:[l for l in urllib.urlopen(u)if"answerCount"in l][0][83:-9]

1
requestsKütüphaneyi kullanmayı deneyin
noɥʇʎԀʎzɐɹƆ

Bence sondaki eğik çizgi atlanabilir ...?
TheInitializer

@Initializer, oh evet teşekkürler!
Daniel

Hattı import urllibolarak değiştirirseniz import urllib as u3 bayt kaydedebilirsiniz
sonrad10

@ sonrad10, nasıl yani? Aynı uzunlukta olur, değil mi?
Daniel

3

Javascript, 67 bayt

alert($(".answers-subheader").children().first().children().html())

Bu görünüm çok uzun


3

Javascript (ES5), 46 44 40 38 33 bayt

_=>parseInt($('#answers').text())

Ismael Miguel sayesinde 5 bayt kurtardı

Not: Bu oldukça yavaştır ve PPCG-Design kullanıcı metniniz varsa çalışmaz.


Bu, diğer Javascript yanıtından çok farklı değil . Aslında, bu sadece optimize edilmemiş bir versiyonudur.
Ismael Miguel

@IsmaelMiguel 1. Bu yazılmıştır önce diğeri ve 2. öğesini kullanan önce gizli bir başka cevap kullanımları.
Sadece ASCII

Yeterince adil. Ama kullanabilirsiniz parseInt($('#answers').text()), hangi işe yarayacak. Bu size birkaç bayt kazandırır.
Ismael Miguel

3

CJam, 15 bayt

lg"2>"/1=A>S/0=

Bu sayfanın URL'sini girdi olarak bekliyor.

Nasıl çalışır

l                e# Read a line (the URL) from STDIN.
 g               e# Fetch the resource the URL points to.
  "2>"/          e# Split the source at occurrences of "2>".
       1=        e# Select the second chunk, i.e., everything between the first
                 e# <h2> and the first </h2>.
         A>      e# Discard the first 10 characters (a linefeed and 9 tabs).
           S/0=  e# Split at spaces and select the first chunk.

1

171 bayt bash + 3 tuşlu vaşak

lynx -cfg=<(echo PRINTER:Answercount:grep [0-9]*.Answers %s|less:FALSE:999') http://codegolf.stackexchange.com/questions/96298/how-many-answers-does-this-question-have

Sayım Sayım 5'ten 6'ya ;-) yükseldi
Roman Czyborra

1
Sen yerini alabilecek http:// ... ilehttp://codegolf.stackexchange.com/q/96298
Junghwan Min

171-49 = 122 ile bile umutsuzca geride kalacağım için sıfır yönlendirmeyi tercih ettim.
Roman Czyborra

1

99 bayt sh + curl + jq + stackexchange API'sı

curl -s --compressed api.stackexchange.com/questions/96298/answers?site=codegolf|jq .items\|length

API kullanarak, sayfa biçimlendirme ve html ile ilgili sorunları önlemek mümkün. Ne yazık ki, cevabımın 60 baytı, bu belirli api sorgusu için maksimum golf edilmiş url ve sorgulamanın sonucunu açmak için curl için başka bir 13 bayt, çünkü stackexchange api aracılığıyla sıkıştırılmamış veri sunmayı reddediyor.

Gerçek "mantık" bu yazının cevapları ile bir json yanıtı istemek için api kıvırmak geliyor. Bu sıkıştırılmamış ve daha sonra "items" dizisini ayıklayan ve uzunluğunu çıkaran bir json ayrıştırıcısı olan jq'ye aktarılır.

Api'nin sadece cevap sayısını döndürmesine etkileyici bir şekilde yaklaşabilirsiniz, ancak ne kadar gelebileceğimden, yolun% 100'ünü alamazsınız ve yaklaşmak, jq'den geçmekten daha fazla bayta mal olur.

{"Total":} döndürülecek 101 bayt:

curl -s --compressed api.stackexchange.com/questions/96298/answers?site=codegolf&filter=!)V)MSZJUgX_

API sorgularındaki filtre parametresi çok güçlüdür, ancak "sadece bir URL'yi kıvırın" çözümü sağlamada yetersiz kalır. Burada, daha kısa bir yanıt alabileceğiniz ve daha sonra satırları sayabileceğiniz veya sayıyı çıkarabileceğiniz bir orta yol olabilir, ancak ne yazık ki filtre dizeleri ayarlanmış bir uzunluktur ve gerekli jq komutu zaten daha verimlidir.


Güzel. Bir URL kısaltmasını kullanarak ve kıvrım izleme yönlendirmelerini yapmak için -L seçeneğini ekleyerek birçok bayt kaydedebileceğinizi unutmayın; örneğincurl -sL --compressed bit.ly/2ebw404|jq .total
sergioFC


@Dennis bunu bilmiyordum, teşekkür ederim.
sergioFC

1

PHP, 76 (Kod) + 41 (URL) = 117 bayt

preg_match_all('<h2>(.*) answers<span',file_get_contents("http://codegolf.stackexchange.com/q/96298"),$o);
echo $o[0];

1

Java, 230 269-41 = 228 bayt

interface A{static void main(String[]a)throws Exception{System.out.print(new java.util.Scanner(new java.net.URL("http://codegolf.stackexchange.com/q/96298").openStream()).useDelimiter("\\Z").next().replaceAll("\n|\r","").replaceAll("^.+?\\s+(\\d+) Answers.+$","$1"));}}

(Yalnızca silinmemiş cevapları sayar)


0

JavaScript + jQuery (zaten sayfaya dahil edilmiştir), 20 bayt

+$('h2>span').text()

Bu, geçerli sayfa için konsolda yürütülmesi amaçlanan bir programdır ( F12 ). Tırnak işareti olmadan cevap sayısını verir. Chrome, Firefox, IE11 ve Edge'de çalışır. Diğer tarayıcılarda çalışması gerekir, ancak yalnızca listelenenlerde test ettim.

Buradaki diğer JavaScript çözümlerinin aksine, ES6 ok işlevi gösterimini kullanan bir işlev ifadesi yerine kendi başına bir programdır . Ayrıca bu çözümlerden farklı olarak, aslında konsolda cevap sayısı ile çıktı üretir (tırnak işaretleri olmadan) (yalnızca çıktı üretmeyen bir fonksiyon ifadesi olmaktan ziyade). Çıktı üretmek, her tarayıcı konsolundaki bir ifadenin değerinin, o ifade değerlendirildikten sonra çıktısının alındığı özelliğe dayanır.

Bu <span>, bir <h2>öğe olan bir üst öğeye sahip olan ve yalnızca metin içeriği olarak cevapların sayısını içeren sayfaya dayanır . Deney sonra bu görünür durumda olması ve kasıtlı bir oluşturmak mümkün görünmemektedir <h2>bir ile <span>düzenleyici kullanarak çocuğa: Bütün açıkça eklenen <span>elemanlar soyulmuş ve hiçbir Markdown Stack Exchange'de kullanıldığı gibi, gerçek bir oluşturur <span>bir mesafede <h2>. Birisi, 'h2>span'seçicinin artık benzersiz olmayacak şekilde sayfanın değiştirilebileceği bir durum gösterebilirse , bunun revize edilmesi gerekir.

Sayı yerine bir dizeyi değerlendirmek kabul edilebilirse,

JavaScript + jQuery (sayfada zaten var), 19 bayt

$('h2>span').text()

Bununla birlikte, bu, dahil etmeyi değerlendirmese de "", test edilen tüm konsollarda, içine alınmış çıktı üretir "". Filip Haglund'un soru hakkındaki yorumlarını bu çıktıyı engellediği için okudum.


0

R, 80 bayt

Yanıt, readLinesdüzenli ifadeler kullanılarak döndürülen vektörde arama yapılmasına dayanır . Bunun yorumlarda / cevaplarda (muhtemelen kendi metinlerimde) metin tarafından kırılabileceğini tahmin ediyorum. Varsa silinecektir. Ayrıca desen de gofled olabilir, ancak bunun yanlış bir değer elde etme olasılığını artıracağından emin değilim.

x=readLines(scan(,""));regmatches(x,regexpr("(?<=answerCount\">).*?(?=<)",x,,T))
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.