Je suis un golfeur de code très occasionnel, et je ne vois pas souvent de messages jusqu'à ce qu'ils apparaissent dans la barre latérale "Hot Network Questions" sur StackOverflow. Habituellement, je suis en retard dans le jeu, et puisque le seul langage que je connais est le Python, il est inutile de répondre car il existe déjà plusieurs réponses Python. Votre défi consiste à déterminer si une question mérite que je réponde.
Contribution:
- Votre code (fonction ou programme) prendra un paramètre d'entrée
i
Sortie:
- Valeur Truthy ou Falsey pour l'identifiant de la question
i
. Sortez Truthy si la question a plus de 5 réponses, un score supérieur à 3 et une ou moins de réponses en Python (aucune distinction entre les versions).
Règles / clarifications:
- Le format d'entrée peut être quelque chose de raisonnable (stdin, fichier, ligne de commande), mais doit être spécifié dans votre réponse. Les types de données et les espaces de début / fin n'ont pas d'importance.
- Supposons que l'ID de la question est valide pour
codegolf.stackexchange.com
. - Ignorez les exigences de questions spécifiques à la langue. (c.-à-d. si une question rencontre des votes et des réponses, et n'a pas de réponses Python parce qu'elle n'est que Java, cela donne toujours Truthy).
- Une réponse est considérée comme une réponse Python si "python" (insensible à la casse) se produit n'importe où avant la première nouvelle ligne du message.
- C'est le golf de code, donc le code le plus court en octets gagne.
Exemples de cas *
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)
* Vérifié au moment de la publication, peut avoir changé
code-golf
internet
classification
wnnmaw
la source
la source
Réponses:
05AB1E ,
167160159158156 156154143 octetsMerde, presque aussi longtemps qu'une langue normale ...Merde ...
plusbat actuellement la réponse Ruby de 1 octet.Maintenant plus long que la réponse Ruby, argh! .Je devrais probablement aller me coucher maintenant.
Merci à @wnnmaw d'avoir sauvé 1 octet et merci à @R. Kap pour économiser encore 2 octets!
Code:
Ou avec plus de lisibilité:
Explication:
Tout d'abord, beaucoup de texte est compressé ici, ce qui se traduit par un bon vieux Python. La version non compressée est:
Cette partie:
fait apparaître une valeur de pile, la copie dans l'url et récupère toutes les données HTML. Les données HTML sont poussées en haut de la pile à l'aide de
#.append(f.read())
.Nous comptons le nombre de réponses , en comptant le nombre d'occurrences de
class="answer"
.Pour compter le nombre de votes, nous venons de diviser les données à "utiles et claires" et de ne garder que les valeurs numériques de l'
[0:99]
utilisation®"useful and clear"¡`99£þ
. Ceci est le nombre de votes positifs.Finalement, nous devons vérifier chaque réponse si le texte
"Python"
existe avant le texte de l'en-tête de fermeture. Pour obtenir toutes les réponses, nous divisons simplement les donnéesclass="post-text"
et nous les divisons à nouveau<
. Nous supprimons les deux premiers éléments pour obtenir la partie dans laquelle la langue est affichée et vérifions si la version minuscule est dans cette chaîne.Donc, maintenant notre pile ressemble à ceci pour id =
79273
:Cela peut également être vu avec le
-d
drapeau ebug dans l'interpréteur.Il s'agit donc simplement de traiter les données:
Utilise l' encodage CP-1252 . Vous pouvez télécharger l'interprète ici .
la source
;)
ppcg.lol/q/id
compression?Python 3.5,
280272260242240 octets:( Merci à Adnan pour l'astuce sur l'utilisation de l'
*
opérateur dans les comparaisons résultant en 2 octets enregistrés! )Assez simple. Utilise la
urllib
bibliothèque intégrée de Python pour accéder au site de la question, puis utilise des expressions régulières pour trouver le nombre de votes, le nombre de réponses et le nombre de réponses spécifiques à Python dans le texte décodé renvoyé par le site Web. Enfin, ces valeurs sont comparées aux conditions requises pour renvoyer unetruthy
valeur, et si elles remplissent toutes les conditions, ellesTrue
sont renvoyées. Sinon,False
c'est.La seule chose qui peut m'inquiéter ici, c'est que les expressions régulières donnent beaucoup de latitude en termes de nombre de réponses spécifiques à python pour économiser des octets, donc cela peut être un peu inexact parfois, bien que ce soit probablement assez bon pour les objectifs de ce défi. Cependant, si vous en voulez un beaucoup plus précis, j'en ai ajouté un ci-dessous, bien que son plus long que celui ci-dessus. Celui montré ci-dessous est actuellement de 298 octets car il utilise une expression régulière beaucoup plus longue - celle que vous ne pouviez pas savoir combien de temps il m'a fallu pour découvrir - pour compter les réponses Python que ma fonction d'origine pour des raisons de précision. Celui-ci devrait fonctionner pour au moins 80% à 90% de tous les cas de test qui y sont lancés.
Mais qu'en est-il de ces questions avec plusieurs pages de réponses? Aucune des réponses ci-dessus ne fonctionnera très bien dans cette situation, si, disons, 1 réponse python se trouve sur la première page et une autre sur la seconde. Eh bien, j'ai pris la liberté de résoudre ce problème en créant une autre version de ma fonction (illustrée ci-dessous) qui vérifie chaque page de réponses, s'il en existe plusieurs, pour les réponses Python, et cela a très bien fonctionné sur de nombreux cas de test que je l'ont jeté. Eh bien, sans plus tarder, voici la nouvelle fonction mise à jour:
Assez longtemps, non? Je n'allais pas vraiment beaucoup pour le golf de code avec cela, bien que, si vous voulez, je puisse le jouer un peu plus. Sinon, je l'adore et je ne pourrais pas être plus heureux. Oh, j'ai presque oublié, en bonus supplémentaire, cela génère également le nombre total de réponses Python sur la question, le nombre total de votes sur la question et le nombre total de réponses sur la question si la question
id
correspond à une question de plus de 1 page des réponses. Sinon, si la question ne se compose que d'une seule page de réponses, elle renvoie simplement latruthy/falsy
valeur. J'ai vraiment été un peu emporté par ce défi.Ceux-ci prennent chacun la question
id
sous la forme d'une chaîne .Je mettrais des
Try It Online!
liens ici pour chaque fonction, mais malheureusement,repl.it
niIdeone
autoriser la récupération de ressources via laurllib
bibliothèque de Python .la source
http://codegolf.stackexchange.com/q/
pour récupérer la question. Aussi, est-cehttp://
obligatoire?unknown url type
erreur.ppcg.lol/q/id
fonctionne égalementJulia, 275 octets
Il s'agit d'une fonction qui accepte un entier et renvoie un booléen. Il se connecte à l'API Stack Exchange et chaque exécution de la fonction fait 2 demandes d'API, alors ne l'exécutez pas trop de fois ou vous épuiserez votre quota de 300 demandes / jour.
Non golfé:
la source
ppcg.lol
comme un lien court vers tout le codegolf, la version de l'API n'était tout simplement pas suffisanteRaquette, 339 octets
Il y a encore beaucoup à jouer au golf.
la source
Ruby + HTTParty ,
170146145142139138 + 11 (-rhttparty
drapeau) =181157156153150149 octetsJe ne pense pas qu'il y ait des cas marginaux qui pourraient casser mes schémas d'expression rationnelle, j'espère ...
Mise à jour du lien court fourni par @WashingtonGuedes et découverte que HTTParty ne se plaint pas si je commence par
//
au lieu dehttp://
.Mis à jour pour des expressions rationnelles légèrement plus sécurisées. J'ai quand même économisé des octets en découvrant que les objets de réponse HTTParty héritent de String, ce qui signifie que je n'ai même pas besoin d'utiliser pour faire
.body
correspondre l'expression régulière!@manatwork a souligné un ajout de personnage accidentel que j'avais laissé et, pour le golf,
i
doit maintenant être accepté comme une chaîne.Regex mis à jour.
Même longueur.-1 octet en supprimant une paren.Notes supplémentaires:
"post-text"
, avec laquelle nous avons fait correspondrest.*xt"
. Une version plus sécurisée aurait ajouté un espace après, mais nous sacrifions cela pour le golf.net/http
modules natifs en raison de la bonne gestion de la redirection pour l'URL donnée."up*?\d
était la séquence la plus courte que j'ai trouvée qui correspondait au nombre de votes. Nous n'avons besoin que du premier, donc heureusement les réponses n'affectent pas cela.la source
ppcg.lol/q/#{i}
fonctionne égalementppcg.ga/q#{i}
peut-être? (Je ne connais pas Ruby)ppcg.lol/q#{i}
applicable je pense? (a/#b
est le même quea#b
)"
ruine l'/"e-c.*?(\d+)/
expression régulière. Soit dit en passant, par exemple l'exigence de l'entrée que « types de données (...) n'a pas d' importance. » Il vaudrait donc mieux passer le paramètre i sous forme de chaîne, de sorte que vous pouvez remplacer la substitution par concaténation:"//ppcg.lol/q/"+i
.Groovy,
179161157 157Merci à Timtech 17 caractères sauvés.
Mot - clé def est pas nécessaire.
la source