Soy un muy jugador de código informal, y no veo publicaciones con frecuencia hasta que aparecen en la barra lateral de "Preguntas de la red activa" en StackOverflow. Por lo general, llego tarde al juego, y dado que el único lenguaje que conozco es Python, no tengo mucho sentido para responder ya que ya hay varias respuestas de Python. Su desafío es averiguar si vale la pena responder una pregunta.
Entrada:
- Su código (función o programa) tomará un parámetro de entrada
i
Salida:
- Verdad o valor de Falsey para la identificación de la pregunta
i
. Salida Verdad si la pregunta tiene más de 5 respuestas, una puntuación de más de 3 preguntas y una o menos respuestas en Python (sin distinción entre versiones).
Reglas / Aclaraciones:
- El formato de entrada puede ser razonable (stdin, archivo, línea de comando), pero debe especificarse en su respuesta. Los tipos de datos y los espacios en blanco iniciales / finales no importan.
- Suponga que la identificación de la pregunta es válida para
codegolf.stackexchange.com
. - Ignorar los requisitos de preguntas específicas del idioma. (es decir, si una pregunta cumple con los votos y las respuestas, y no tiene respuestas de Python porque es solo Java, todavía da como resultado Truthy).
- Una respuesta califica como una respuesta de Python si "python" (sin distinción entre mayúsculas y minúsculas) aparece en cualquier lugar antes de la primera línea nueva de la publicación.
- Este es el código de golf, por lo que gana el código más corto en bytes.
Casos de muestra *
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 al momento de la publicación, puede haber cambiado
code-golf
internet
classification
wnnmaw
fuente
fuente
Respuestas:
05AB1E ,
167160159158156154143 bytesMaldición, casi tanto como un lenguaje normal ...Mierda ...
ya nosupera la respuesta de Ruby en 1 byte.Ahora más largo que la respuesta de Ruby, ¡argh! .Probablemente debería irme a la cama ahora mismo.
Gracias a @wnnmaw por guardar 1 byte y gracias a @R. ¡Kap para guardar otros 2 bytes!
Código:
O con más legibilidad:
Explicación:
En primer lugar, se está comprimiendo una gran cantidad de texto aquí, lo que se traduce en un buen Python. La versión sin comprimir es:
Esta parte:
en realidad muestra un valor de pila, lo copia en la url y obtiene todos los datos HTML. Los datos HTML se insertan en la parte superior de la pila usando
#.append(f.read())
.Contamos el número de respuestas , contando el número de ocurrencias de
class="answer"
.Para contar el número de votos, simplemente dividimos los datos en "útil y claro" y mantenemos solo los valores de dígitos de
[0:99]
uso®"useful and clear"¡`99£þ
. Este es el número de votos a favor.Eventualmente, debemos verificar cada respuesta si el texto
"Python"
existe antes del texto del encabezado de cierre. Para obtener todas las respuestas, simplemente dividimos los datosclass="post-text"
y dividimos cada uno de ellos nuevamente<
. Eliminamos los dos primeros elementos para obtener la parte en la que se muestra el idioma y verificamos si la versión en minúscula está en esta cadena.Entonces, ahora nuestra pila se ve así para id =
79273
:Esto también se puede ver con la
-d
bandera de ebug en el intérprete.Entonces, solo es cuestión de procesar los datos:
Utiliza la codificación CP-1252 . Puede descargar el intérprete aquí .
fuente
;)
ppcg.lol/q/id
compresión?Python 3.5,
280272260242240 bytes:(¡ Gracias a Adnan por el truco sobre el uso del
*
operador en las comparaciones que resultan en 2 bytes guardados! )Suficientemente simple. Utiliza la
urllib
biblioteca integrada de Python para ir al sitio de la pregunta, y luego usa expresiones regulares para encontrar el recuento de votos, el recuento de respuestas y el recuento de respuestas específicas de Python en el texto descodificado devuelto desde el sitio web. Finalmente, estos valores se comparan con las condiciones requeridas para devolver untruthy
valor, y si satisfacen todas las condiciones,True
se devuelven. DeFalse
lo contrario es.Lo único que me puede preocupar aquí es que las expresiones regulares dan mucho margen en términos de la cantidad de respuestas específicas de Python para guardar bytes, por lo que a veces puede ser un poco inexacto, aunque probablemente sea lo suficientemente bueno para Los propósitos de este desafío. Sin embargo, si desea uno mucho más preciso, he agregado uno a continuación, aunque es más largo que el anterior. El que se muestra a continuación tiene actualmente 298 bytes, ya que utiliza una expresión regular mucho más larga, una que no podría saber cuánto tiempo tardé en descubrir, para contar las respuestas de Python que mi función original en aras de la precisión. Este debería funcionar durante al menos 80% a 90% de todos los casos de prueba que se le presenten.
Pero, ¿qué pasa con esas preguntas con múltiples páginas de respuestas? Ninguno de los anteriores funcionará muy bien en esa situación, si, por ejemplo, 1 respuesta de Python está en la primera página y otra está en la segunda. Bueno, me tomé la libertad de solucionar este problema creando otra versión de mi función (que se muestra a continuación) que verifica cada página de respuestas, si existen varias, para las respuestas de Python, y ha funcionado bastante bien en muchos de los casos de prueba que Lo he tirado. Bueno, sin más preámbulos, aquí está la función nueva y actualizada:
Bastante largo, ¿no es así? Realmente no iba mucho por el golf de código con esto, aunque, si quieres, puedo jugar un poco más. De lo contrario, me encanta y no podría estar más feliz. Oh, casi lo olvido, como un bono adicional, esto también genera el número total de respuestas de Python en la pregunta, el total de votos en la pregunta y el número total de respuestas en la pregunta si la pregunta
id
corresponde a una pregunta con más de 1 página de respuestas De lo contrario, si la pregunta solo consta de una sola página de respuestas, solo genera eltruthy/falsy
valor. Realmente me dejé llevar por este desafío.Cada uno de ellos toma la pregunta
id
en forma de cadena .Pondría
Try It Online!
enlaces aquí para cada función, pero desafortunadamente,repl.it
niIdeone
permitir ni buscar recursos a través de laurllib
biblioteca de Python .fuente
http://codegolf.stackexchange.com/q/
para buscar la pregunta. Además, ¿eshttp://
obligatorio?unknown url type
error.ppcg.lol/q/id
también funcionaJulia, 275 bytes
Esta es una función que acepta un entero y devuelve un booleano. Se conecta a la API de Stack Exchange y cada ejecución de la función realiza 2 solicitudes de API, así que no la ejecutes demasiadas veces o agotarás tu cuota de 300 solicitudes / día.
Sin golf:
fuente
ppcg.lol
enterarme como un breve enlace a todo lo relacionado con codegolf, la versión API simplemente no era suficienteRaqueta, 339 bytes
Todavía hay mucho para jugar al golf.
fuente
Rubí + HTTParty ,
170146145142139138 + 11 (-rhttparty
flag) =181157156153150149 bytesNo creo que haya casos extremos que puedan romper mis patrones de expresiones regulares, espero ...
Actualizado al enlace corto proporcionado por @WashingtonGuedes y descubriendo que HTTParty no se queja si empiezo con en
//
lugar dehttp://
.Actualizado para expresiones regulares un poco más seguras. De todos modos, guardé bytes descubriendo que los objetos de respuesta HTTParty heredan de String, lo que significa que ni siquiera necesito usarlos
.body
para hacer coincidir la expresión regular.@manatwork señaló una adición accidental de caracteres que me quedaba, y por el bien del golf,
i
debe ser aceptada como una Cadena ahora.Regexes actualizados.
Mismo largo.-1 byte cortando un par.Notas adicionales:
"post-text"
, con la que coincidimosst.*xt"
. Una versión más segura habría agregado un espacio después, pero estamos sacrificando eso por el bien del golf.net/http
módulos nativos debido al manejo de redireccionamiento adecuado para la URL dada."up*?\d
fue la secuencia más corta que encontré que correspondía con el número de votos. Solo necesitamos el primero, así que afortunadamente las respuestas no afectan esto.fuente
ppcg.lol/q/#{i}
también funcionappcg.ga/q#{i}
tal vez? (No sé Ruby)ppcg.lol/q#{i}
es aplicable, creo? (a/#b
es lo mismo quea#b
)"
está arruinando la/"e-c.*?(\d+)/
expresión regular. Por cierto, el requisito decir sobre la entrada que “Tipos de datos (...) no importa.” Así que mejor pasar el parámetro i como cadena, por lo que puede sustituir a la sustitución con la concatenación:"//ppcg.lol/q/"+i
.Groovy,
179161157Gracias a Timtech 17 caracteres guardados.
La palabra clave def tampoco es necesaria.
fuente