Eu sou um jogador de código muito casual e quase não vejo postagens até que elas apareçam na barra lateral "Hot Network Questions" no StackOverflow. Normalmente, estou atrasado para o jogo e, como a única linguagem que conheço é Python, não adianta responder porque já existem várias respostas em Python. Seu desafio é descobrir se vale a pena responder a uma pergunta.
Entrada:
- Seu código (função ou programa) terá um parâmetro de entrada
i
Saída:
- Valor Truthy ou Falsey para o ID da pergunta
i
. Saída Verdadeiramente se a pergunta tiver mais de 5 respostas, maior que 3 pontos e uma ou menos resposta no Python (sem distinção entre versões).
Regras / Esclarecimentos:
- O formato de entrada pode ser qualquer coisa razoável (stdin, arquivo, linha de comando), mas deve ser especificado em sua resposta. Tipos de dados e espaços em branco à esquerda / à direita não importam.
- Suponha que o ID da pergunta seja válido para
codegolf.stackexchange.com
. - Ignore os requisitos de perguntas específicas do idioma. (ou seja, se uma pergunta encontra votos e respostas e não possui respostas em Python porque é apenas Java, ainda resulta em Truthy).
- Uma resposta se qualifica como resposta em Python se "python" (sem distinção entre maiúsculas e minúsculas) ocorrer em qualquer lugar antes da primeira nova linha da postagem.
- Este é o código golf, pelo que o código mais curto em bytes vence.
Casos de amostra *
id = 79082 => True
id = 78591 => False (less than 5 answers, also hella hard)
id = 78410 => True
id = 76428 => False (greater than 1 Python answer)
id = 78298 => False (not high enough question score)
* Verificado no momento da postagem, pode ter sido alterado
code-golf
internet
classification
wnnmaw
fonte
fonte
Respostas:
05AB1E ,
167160159158156154143 bytesPorra, quase enquanto uma linguagem normal ...Porcaria ...
maisatualmente batendo a resposta do Ruby por 1 byte.Agora mais do que a resposta do Ruby, argh! .Eu provavelmente deveria ir para a cama agora.
Obrigado a @wnnmaw por economizar 1 byte e obrigado a @R. Kap por salvar outros 2 bytes!
Código:
Ou com mais legibilidade:
Explicação:
Primeiro de tudo, muito texto está sendo compactado aqui, o que se traduz no bom e velho Python. A versão não compactada é:
Esta parte:
na verdade, exibe um valor de pilha, copia-o no URL e busca todos os dados HTML. Os dados HTML são colocados no topo da pilha usando
#.append(f.read())
.Contamos o número de respostas , contamos o número de ocorrências de
class="answer"
.Para contar o número de votos, apenas dividimos os dados em "úteis e claros" e mantemos apenas os valores dos dígitos de
[0:99]
uso®"useful and clear"¡`99£þ
. Este é o número de votos.Eventualmente, precisamos verificar todas as respostas se o texto
"Python"
existir antes do texto do cabeçalho de fechamento. Para obter todas as respostas, basta dividir os dados emclass="post-text"
e dividir cada uma delas novamente<
. Removemos os dois primeiros elementos para obter a parte em que o idioma é exibido e verificamos se a versão em minúscula está nessa sequência.Então, agora nossa pilha fica assim para id =
79273
:Isso também pode ser visto com o
-d
sinalizador ebug no intérprete.Portanto, é apenas uma questão de processar os dados:
Usa a codificação CP-1252 . Você pode baixar o intérprete aqui .
fonte
;)
ppcg.lol/q/id
compactação?Python 3.5,
280272260242240 bytes:( Obrigado a Adnan pelo truque sobre o uso do
*
operador nas comparações que resultam em 2 bytes salvos! )Simples o suficiente. Usa a
urllib
biblioteca interna do Python para acessar o site da pergunta e, em seguida, usa expressões regulares para encontrar a contagem de votos, a contagem de respostas e a contagem de respostas específicas do Python no texto decodificado retornado do site. Por fim, esses valores são comparados com as condições necessárias para retornar umtruthy
valor e, se satisfizerem todas as condições,True
retornados. Caso contrário,False
é.A única coisa que me preocupa aqui é que as expressões regulares dão muita margem de manobra nos termos do número de respostas específicas de python para salvar bytes, portanto pode ser um pouco impreciso às vezes, embora provavelmente seja bom o suficiente para os propósitos deste desafio. No entanto, se você quiser uma mais precisa, adicionei uma abaixo, embora seja mais longa que a acima. O mostrado abaixo tem atualmente 298 bytes, pois usa uma expressão regular muito mais longa - uma que você não sabia quanto tempo levou para descobrir - para contar respostas em Python do que minha função original por uma questão de precisão. Este deve funcionar para pelo menos 80% a 90% de todos os casos de teste lançados nele.
Mas, e essas perguntas com várias páginas de respostas? Nenhuma das opções acima funcionará muito bem nessa situação, se, por exemplo, 1 resposta python estiver na primeira página e outra na segunda. Bem, tomei a liberdade de corrigir esse problema criando outra versão da minha função (mostrada abaixo) que verifica todas as páginas de respostas, se existirem múltiplas, para respostas do Python, e tem se saído muito bem em muitos dos casos de teste que eu jogou nele. Bem, sem mais delongas, aqui está a função nova e atualizada:
Muito tempo, não é? Eu realmente não estava gostando muito de código de golfe com isso, embora, se você quiser, eu possa jogar um pouco mais. Caso contrário, eu amo isso e não poderia ser mais feliz. Ah, eu quase esqueci, como um bônus adicional, isso também gera o número total de respostas Python na pergunta, total de votos na pergunta e número total de respostas na pergunta, se a pergunta
id
corresponder a uma pergunta com mais de uma página de respostas. Caso contrário, se a pergunta consistir apenas em uma única página de respostas, ela emitirá apenas otruthy/falsy
valor. Eu realmente me empolguei um pouco com esse desafio.Cada um deles leva a pergunta
id
na forma de um string .Eu colocaria
Try It Online!
links aqui para cada função, mas infelizmente,repl.it
nemIdeone
permitimos a busca de recursos através daurllib
biblioteca do Python .fonte
http://codegolf.stackexchange.com/q/
para buscar a pergunta. Além disso, éhttp://
obrigatório?unknown url type
erro.ppcg.lol/q/id
também funcionaJulia, 275 bytes
Esta é uma função que aceita um número inteiro e retorna um booleano. Ele se conecta à API do Stack Exchange e cada execução da função faz 2 solicitações de API. Portanto, não execute-a muitas vezes ou você esgotará sua cota de 300 solicitações / dia.
Ungolfed:
fonte
ppcg.lol
como um link curto para todas as coisas codegolf, a versão da API só não foi suficienteRaquete, 339 bytes
Ainda há muito para jogar golfe.
fonte
Ruby + HTTParty ,
170146145142139138 + 11 (-rhttparty
sinalizador) =181157156153 153150149 bytesEu acho que não há casos extremos que causem a quebra dos meus padrões regex, espero ...
Atualizado para o atalho fornecido por @WashingtonGuedes e descobrindo que HTTParty não reclama se eu começar com em
//
vez dehttp://
.Atualizado para regexes um pouco mais seguras. De qualquer maneira, salvei bytes ao descobrir que os objetos de resposta HTTParty herdam da String, o que significa que eu nem preciso usar
.body
ao corresponder ao regex!O @manatwork apontou que um acréscimo acidental de caracteres que eu havia deixado, e pelo bem do golfe,
i
deve ser aceito como uma String agora.Regexes atualizadas.
Mesmo comprimento.-1 byte cortando um paren.Notas extras:
"post-text"
, com a qual combinamosst.*xt"
. Uma versão mais segura teria acrescentado um espaço a seguir, mas estamos sacrificando isso por causa do golfe.net/http
módulos nativos devido ao tratamento adequado do redirecionamento para a URL especificada."up*?\d
foi a sequência mais curta que achei que correspondia ao número de votos. Precisamos apenas do primeiro, então, felizmente, as respostas não afetam isso.fonte
ppcg.lol/q/#{i}
também funcionappcg.ga/q#{i}
talvez? (Não conheço Ruby)ppcg.lol/q#{i}
é aplicável, eu acho? (a/#b
é o mesmo quea#b
)"
está a arruinar a/"e-c.*?(\d+)/
expressão regular. By the way, a exigência dizer sobre a entrada que “tipos de dados (...) não importa.” Então é melhor passar o parâmetro i como corda, para que você possa substituir substituição com concatenação:"//ppcg.lol/q/"+i
.Groovy,
179161157Graças ao Timtech 17 caracteres salvos.
A definição de palavra- chave também não é necessária.
fonte