Codegolf - Количество Ответов И Комментариев

  • Автор темы User2
  • Обновлено
  • 20, Oct 2024
  • #1

Напишите программу, которая выводит на стандартный вывод количество ответов и количество комментариев (видимых и свернутых вопросов и ответов) к этому вопросу/странице.

Ваш скрипт должен запускаться с закрытой этой страницей при запуске.

Ожидаемый пример вывода:

 A12C40
 

Где A означает ответы, а C — комментарии.

#код-гольф #интернет

User2


Рег
30 Sep, 2004

Тем
90

Постов
193

Баллов
643
  • 26, Oct 2024
  • #2

Perl, 91 96 92 символа

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 [<EntryPoint>]
let main x= 

let d=CsQuery.CQ.CreateFromUrl("http://qr.net/1_")

printfn "A%dC%d" d.[".answer"].Length d.[".comment"].Length

0 
 

Некоторые вещи просто для того, чтобы сломать решения других ха-ха-ха :-P

показывать 93 больше комментариев

ха-ха

nt="99" (ха-ха, авария @Fez Vrasta)

а 99,показывать 99 показывать

href href href href

ха ха ха ха :-D Боже, я только что сломал свой собственный ответ! Я обнаружил, что один из вышеперечисленных трюков, который, как я думал, ничего не дает, начнет работать. после

этот ответ некоторое время не редактируется! Так что ваши решения будут работать лишь какое-то время. Вот почему вы видели еще +1 ответ в своих решениях.. Это бомба замедленного действия! Мой ответ уже склонен к этому :-) Ааа, нашел способ запустить его СЕЙЧАС...

 

Waly2k1


Рег
22 Mar, 2017

Тем
63

Постов
197

Баллов
512
  • 26, Oct 2024
  • #3
var d =CsQuery.CQ.CreateFromUrl("http://qr.net/1_");Console.Write("A"+d[".answer"].Count()+"C"+d[".comment"].Count());

XQuery, 169, 160, 165

class P{static void Main(){var d =CsQuery.CQ.CreateFromUrl("http://qr.net/1_");Console.Write("A"+d[".answer"].Count()+"C"+d[".comment"].Count());}}

Более читабельно (с пробелами):

В качестве процессора XQuery использовался BaseX.

 

Val1


Рег
25 Jan, 2006

Тем
91

Постов
178

Баллов
653
  • 26, Oct 2024
  • #4
var d = CsQuery.CQ.CreateFromUrl("http://qr.net/1_"); Console.Write("A" + d[".answer"].Count() + "C" + d[".comment"].Count());

Питон 3, 180

Я предполагаю, что на этот вопрос не будет нескольких страниц ответов.

 

JeldSeigmadal87


Рег
04 Jan, 2011

Тем
80

Постов
209

Баллов
669
  • 26, Oct 2024
  • #5
r=require;m='comments' r('http').get("http://api.stackexchange.com/2.1/questions/20277?site=codegolf&filter=!azbR89z2Zw*dg.").on('response',function(p){p.pipe(r('zlib').createGunzip(o="")).on('readable',function(){o+=this.read()}).on('end',function(){d=JSON.parse(o).items[0] r('util').print("A",d.answer_count,"C",(d[m].length+d.answers.reduce(function(p,c){return p+(c[m]?c[m].length:0)},0)))})})

BASH + AWK 163, 144, 138, 111, 110, 114, 131, 132, 105

<? // short open tag $h = file_get_contents('http://qr.net/_9'); // store in $h the content of the shortened url of the page preg_match_all('/<t.*nt="([0-9]*)/', $h, $c); // find each "show/hide X more comments" and store the numbers in $c echo 'A' // output A .substr_count($h,'rcell">') // output the count of the occurrences of 'rcell">' (short for '"answercell">') .'C' // output C .( array_sum( $c[1] ) // output the sum of the collapsed comments found before + substr_count( $h, 'mment">') // output the count of the occurrences of 'mment">' (short for '"comment">') );

То же самое, но без перенаправления в файл:

<?$h=file_get_contents('http://qr.net/_9');preg_match_all('/<t.*nt="([0-9]*)/',$h,$c);echo 'A'.substr_count($h,'rcell">').'C'.(array_sum($c[1])+substr_count($h,'mment">'));

Текущий выход

Объяснение

завиток

  • $('.comments-link').click(); setTimeout("alert('A'+$('.answer').length+'C'+$('.comment').length)",999) in A13C60 Передача URL-адреса. library(XML);F=function(x,y,f=length,z='')sum(as.double(xpathSApply(htmlParse('http://qr.net/1_'),sprintf('//%s[@class="%s"]%s',x,y,z),f)));cat("A",F("div","answer"),"C",F("a","comments-link ",xmlValue,"//b")+F("td","comment-text"),sep="") to follow redirects.
это для молчания. И

ок A13C60 ) to make sure it is not broken.

  • s=__import__("stackpy").Site("codegolf");q=s.questions(20277);a=q.answers print"A%dC%d"%(len(a),sum(len(s.answers(e.id()).comments)for e in a)+len(q.comments)) set field separators as require'open-uri';require'json' def g(o,l,f);JSON.parse(open("http://api.stackexchange.com/2.1/#{o}/#{l}/#{f}?site=codegolf").read)["items"];end q=20277 p=g("questions",q,"answers").inject([q]){|m,o|m<<o["answer_id"]} puts"A#{p.count-1}C#{p.map{|i|g("posts",i,"comments").count}.reduce(:+)}" Чтобы разобрать файл. Поскольку в некоторых ответах был код, прерывающий другие ответы, синтаксический анализ был изменен таким образом, чтобы он анализировался с начала строки. require'open-uri';require'json' q=JSON.parse(open("http://api.stackexchange.com/2.1/questions/20277?site=codegolf&filter=!azbR89z2Zw*dg.").read)["items"][0] a=q["answers"] puts"A#{a.count}C#{[q,*a].reduce(0){|m,o|m+o["comments"].to_a.count}}" . This way the text can be parsed properly for the "show XXX more comments".
  • require'open-uri';require'json' q=JSON.parse(open("http://qr.net/oyJn").read)["items"][0];a=q["answers"] puts"A#{a.count}C#{[q,*a].reduce(0){|m,o|m+o["comments"].to_a.count}}" on lines containing "spaces....>show", get the 4th field (based on (function(d){ c+=d.items.length; g.length ? document.write('<script src="http://q0x.eu/3?n='+g.pop()+'"></script>') : alert('A'+a+'C'+c) }) , q0x.eu/3?n=... separators) and add the value to the comments counter.
  • (function(d){ a=0; g=[]; d.items.map(function(f){ a++; g.push(f.answer_id) }); document.write('<script src="http://q0x.eu/3?n='+g.pop()+'"></script>') }) on lines containing "spaces...
  • q0x.eu/2 on lines containing "", increment the counter of answers.
  • (function(d){ c=d.items.length; document.write('<script src="http://q0x.eu/2"></script>') }) print the output.
или

 

Марк Олейников


Рег
24 Oct, 2020

Тем
90

Постов
221

Баллов
701
  • 26, Oct 2024
  • #6

PHP, который действительно работает (302 символа)

q0x.eu/1 ||answer||

В отличие от всех других ответов на данный момент, это возвращает правильный ответ, даже если вопрос занимает более одной страницы.

<script src=http://q0x.eu/1></script>

Р, 326

A125C499

С отступами и пояснениями: Протестировано сэта страница , выдает нужное количество комментариев (в том числе скрытых) на первой странице library(XML) h=htmlParse z=xpathApply v=xmlValue a=xmlAttrs s=sapply c="http://codegolf.stackexchange.com" f=function(b,i){do.call(sum,s(z(b,"//tbody",a)[i],function(x)as.integer(x[[1]])))+length(z(b,"//tr[@class='comment']",v))} b=h(paste0(c,"/questions/20277")) x=f(b) u=unique(s(z(b,"//div[@class='pager-answers']/a",a),`[`,1)) #Grab all URLS of pages if(length(u))x=x+sum(s(u,function(x)f(h(paste0(c,x)),-1))) #Apply comment computation of all URLs y=gsub("[^0-9]","",z(b,"//div[@id='answers-header']/div/h2",v)[[1]]) cat("A",y,"C",x,sep="") .

и нужное количество ответов, т.е. е. И вот решение на 482 символа

library(XML);h=htmlParse;z=xpathApply;v=xmlValue;a=xmlAttrs;s=sapply;c="http://codegolf.stackexchange.com";f=function(b,i){do.call(sum,s(z(b,"//tbody",a)[i],function(x)as.integer(x[[1]])))+length(z(b,"//tr[@class='comment']",v))};b=h(paste0(c,"/questions/20277"));x=f(b);u=unique(s(z(b,"//div[@class='pager-answers']/a",a),`[`,1));if(length(u))x=x+sum(s(u,function(x)f(h(paste0(c,x)),-1)));y=gsub("[^0-9]","",z(b,"//div[@id='answers-header']/div/h2",v)[[1]]);cat("A",y,"C",x,sep="")

которые соберут правильное количество комментариев, если вопрос в конечном итоге распространится на несколько страниц:

A23C63

С отступом: Примерял этот вопрос library(XML) b=htmlParse("https://codegolf.stackexchange.com/questions/20277") z=xpathApply x=do.call(sum,sapply(z(b,"//tbody",xmlAttrs), #Take the first attribute of tag tbody function(x)as.integer(x[[1]]))) #And sum them (=nb of hidden comments +length(z(b,"//tr[@class='comment']",xmlValue)) #+nb of visible comments y=gsub("[^0-9]","", #This is more straightforward as the number of answers is given on front page. z(b,"//div[@class='subheader answers-subheader']/h2",xmlValue)[[1]]) cat("A",y,"C",x,sep="") .

и выведено:

 

Hitmaniac


Рег
31 Dec, 2006

Тем
59

Постов
218

Баллов
523
  • 26, Oct 2024
  • #7

HTML, 37

library(XML);b=htmlParse("https://codegolf.stackexchange.com/questions/20277");z=xpathApply;x=do.call(sum,sapply(z(b,"//tbody",xmlAttrs),function(x)as.integer(x[[1]])))+length(z(b,"//tr[@class='comment']",xmlValue));y=gsub("[^0-9]","",z(b,"//div[@class='subheader answers-subheader']/h2",xmlValue)[[1]]);cat("A",y,"C",x,sep="")

Извините, за этим следует явное нарушение правил!

<?function g($a,$b,$i){return json_decode(gzinflate(substr(file_get_contents("http://api.stackexchange.com/2.1/$a/$i/$b?site=codegolf"),10,-8)))->items;}$i=array(20277);foreach(g("questions","answers",20277)as$x)$i[]=$x->answer_id;echo"A".(count($i)-1)."C".count(g("posts","comments",implode(";",$i))); redirects to: http://api.stackexchange.com/2.1/questions/20277/comments?site=codegolf&callback=...

Объяснение

END{print "A"a"C"c}

/^<td.*rcell">/{++a} redirects to http://api.stackexchange.com/2.1/questions/20277/answers?site=codegolf&callback=...

/^[ ]*<tr.*s="comm/{++c}

где обратный вызов: > redirects to http://api.stackexchange.com/2.1/answers/.../comments?site=codegolf&callback=...

<

и

Изначально я пытался сделать это законно и, возможно, еще попробую, но, тем не менее, это было весело!

 

W00zy


Рег
01 Nov, 2012

Тем
73

Постов
203

Баллов
588
  • 26, Oct 2024
  • #8
/^[\t]*>show <b>/{c+=$4}

Ruby 175 (считается по страницам, используя API вместо DOM)

>

Это 242 без сокращенного URL:

<

Предыдущий 291 ответ:

Благодарим Питера Тейлора за идею использования API и Чарльза за указание на лучший API.

 

ImmideNeuntee96


Рег
25 Oct, 2024

Тем
68

Постов
187

Баллов
537
  • 26, Oct 2024
  • #9
Питон с 160

сложенный

-F'[<>]'

Выполнение

(^

Выход

Примечание

Вчера я подумывал об использовании API stackexchange, но мне потребовалось некоторое время, чтобы понять, как он работает. Сегодня я увидел пару ответов на одну и ту же тему. Чтобы сделать мой ответ немного другим, я решил использовать внешнюю библиотеку.

Также поймите, что другие ответы, основанные на анализе таких шаблонов, как

скорее всего, сломаются в ближайшее время, поэтому более определенный ответ — полагаться на надежный метод, подобный этому.

 

Павел3


Рег
28 Apr, 2013

Тем
67

Постов
170

Баллов
535
  • 26, Oct 2024
  • #10
-L

239 рэндов

curl ||answer||

После того, как я опубликовал свой ответ, результат:

Не могу поверить, что до сих пор никто этого не придумал! Самое прямое решение для использования :-)

jQuery, 116 101 символ (вне конкурса)

Возможно, это не соответствует правилам, я сохраняю это просто для развлечения - решение jQuery не может отсутствовать :) Хотя бы в качестве справочника для тестирования ваших скриптов!!! ;-)

-s

Попробуйте запустить из консоли FireBug:


Если у вас медленное соединение, увеличьте время ожидания :-) Спасибо @Fez Vrasta за прекрасную идею нажать ссылку «показать больше»! Некоторые другие вещи, которые могут нарушить решение других, class="comment" и бомба замедленного действия. ха

ха

 

Bagggartzu


Рег
18 May, 2020

Тем
66

Постов
195

Баллов
555
  • 26, Oct 2024
  • #11
A16C76

PHP: 184 172

curl -sL http://qr.net/_9>f awk -F'[<>]' '/^[\t]*>s/{c+=$4}/<tr.*"c/{++c}/<t.*"a/{++a}END{print "A"a"C"c}' f

Объяснение:


Впервые PHP превосходит другие языки в гольф-скриптах :')

Некоторая дополнительная разметка к этой теме, чтобы избежать «читов» регулярных выражений: 9999 показывать

больше комментариев

 

Дмитрий Северин


Рег
29 Oct, 2020

Тем
78

Постов
225

Баллов
625
  • 26, Oct 2024
  • #12
curl -sL http://qr.net/_9|awk -F'[<>]' '/^[\t]*>s/{c+=$4}/<tr.*"c/{++c}/<t.*"a/{++a}END{print "A"a"C"c}'

Узел, 403

Обращение к API только один раз... вероятно, можно сократить, но я новичок в Node.

 

Bacek91


Рег
19 Oct, 2019

Тем
91

Постов
221

Баллов
686
  • 26, Oct 2024
  • #13

153 151 147, C# и CsQuery

import lxml.html as h s=h.parse('http://qr.net/1_').find('body').cssselect print('A',len(s('.answer')),'C',len(s('.comment'))+sum(int(e.text)for e in s('.comments-link b')),sep='')

C# с CsQuery:

let $d:= html:parse(fetch:binary('http://qr.net/1_')) return "A" || count($d//*[@class="answer"]) || "C" || count($d//*[@class="comment"]) + sum($d//*[@class="comments-link"]/b)

Полная программа:

118 C# и CsQuery в LINQPad или Roslyn

let$d:=html:parse(fetch:binary('http://qr.net/1_'))return"A"||count($d//*[@class="answer"])||"C"||count($d//*[@class="comment"])+sum($d//*[@class="comments-link"]/b)

Если запуск через LINQPad разрешен, то:

Производит:

А14С48

Еще немного веселья.

$_=`curl -sL qr.net/_9`;s/<[^>]+nt="(.+)/$c+=$1/ge;say"A",s/<td.*"ans//g,C,$c+s/<tr.*"com//g
 

GennadiyZag


Рег
29 Mar, 2011

Тем
80

Постов
179

Баллов
609
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно