Jestem bardzo zwyczajnym golfistą i nie widzę często postów, dopóki nie pojawią się na pasku bocznym „Hot Network Questions” na StackOverflow. Zazwyczaj spóźniam się na grę, a ponieważ jedynym językiem, który znam, jest Python, nie ma sensu odpowiadać na mnie, ponieważ jest już kilka odpowiedzi w Pythonie. Twoim zadaniem jest dowiedzieć się, czy warto mi odpowiedzieć na pytanie.
Wkład:
- Twój kod (funkcja lub program) przyjmuje jeden parametr wejściowy
i
Wydajność:
- Wartość Prawda lub Falsey dla identyfikatora pytania
i
. Wyjście Prawda, jeśli pytanie ma więcej niż 5 odpowiedzi, więcej niż 3 wynik pytania i jedną lub mniej odpowiedzi w Pythonie (bez rozróżnienia między wersją).
Zasady / wyjaśnienia:
- Format wejściowy może być dowolny rozsądny (standardowy, plik, wiersz poleceń), ale powinien zostać określony w odpowiedzi. Typy danych i początkowe / końcowe białe znaki nie mają znaczenia.
- Załóżmy, że identyfikator pytania jest ważny dla
codegolf.stackexchange.com
. - Zignoruj wymagania dotyczące konkretnych pytań. (tzn. jeśli pytanie spełnia liczbę głosów i odpowiedzi i nie ma odpowiedzi w języku Python, ponieważ jest to tylko Java, nadal daje wynik Prawda).
- Odpowiedź kwalifikuje się jako odpowiedź w języku Python, jeśli „python” (case insenstive) występuje gdziekolwiek przed pierwszą nową linią postu.
- To jest kod golfowy, więc wygrywa najkrótszy kod w bajtach.
Przykładowe przypadki *
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)
* Zweryfikowane w momencie publikacji, mogły ulec zmianie
code-golf
internet
classification
wnnmaw
źródło
źródło
Odpowiedzi:
05AB1E ,
167160159158156154143 bajtówCholera, prawie tak długo jak normalny język ...Bzdura ...
jużobecnie bije odpowiedź Ruby o 1 bajt.Teraz dłużej niż odpowiedź Ruby, argh! .Prawdopodobnie powinienem już teraz iść spać.
Dzięki @wnnmaw za uratowanie 1 bajtu i dzięki @R. Kap za zapisanie kolejnych 2 bajtów!
Kod:
Lub z większą czytelnością:
Wyjaśnienie:
Przede wszystkim kompresuje się tutaj dużo tekstu, co przekłada się na stary, dobry Python. Wersja nieskompresowana to:
Ta część:
faktycznie wyskakuje wartość stosu, kopiuje ją do adresu URL i pobiera wszystkie dane HTML. Dane HTML są wypychane na stos za pomocą
#.append(f.read())
.Bieżemy liczbę odpowiedzi , licząc liczbę wystąpień
class="answer"
.Aby policzyć liczbę głosów, po prostu podzieliliśmy dane na „użyteczne i jasne” i zachowujemy tylko wartości cyfrowe
[0:99]
użycia®"useful and clear"¡`99£þ
. To jest liczba pozytywnych opinii.W końcu musimy sprawdzić każdą odpowiedź, jeśli tekst
"Python"
istnieje przed końcowym tekstem nagłówka. Aby uzyskać wszystkie odpowiedzi, po prostu podzieliliśmy daneclass="post-text"
i ponownie podzieliliśmy każdą z nich<
. Usuwamy dwa pierwsze elementy, aby uzyskać część, w której wyświetlany jest język, i sprawdzamy, czy w tym ciągu znajduje się mała wersja.Więc teraz nasz stos wygląda tak dla id =
79273
:Można to również zobaczyć po
-d
włączeniu flagi ebug w tłumaczu.Tak więc to tylko kwestia przetwarzania danych:
Wykorzystuje kodowanie CP-1252 . Możesz pobrać tłumacza tutaj .
źródło
;)
ppcg.lol/q/id
kompresji?Python 3.5,
280272260242240 bajtów:( Podziękowania dla Adnana za sztuczkę
*
związaną z użyciem operatora w porównaniach dających 2 zapisane bajty! )Wystarczająco proste. Używa wbudowanej
urllib
biblioteki Pythona, aby przejść do strony pytania, a następnie używa wyrażeń regularnych, aby znaleźć liczbę głosów, liczbę odpowiedzi i liczbę konkretnych odpowiedzi w języku Python w zdekodowanym tekście zwróconym ze strony internetowej. Na koniec wartości te są porównywane z warunkami wymaganymi do zwróceniatruthy
wartości, a jeśli spełniają wszystkie warunki,True
są zwracane. W przeciwnym razieFalse
jest.Jedyne, o co mogę się tutaj martwić, to to, że wyrażenia regularne dają wiele swobodnego zrozumienia pod względem liczby specyficznych odpowiedzi na python, aby zaoszczędzić bajty, więc czasami może być nieco niedokładne, chociaż prawdopodobnie jest wystarczająco dobre dla cele tego wyzwania. Jeśli jednak chcesz mieć znacznie dokładniejszy, dodałem jeden poniżej, chociaż jest on dłuższy niż powyższy. Ten pokazany poniżej ma obecnie 298 bajtów, ponieważ używa znacznie dłuższego wyrażenia regularnego - takiego, którego nie mogłem wiedzieć, ile czasu zajęło mi odkrycie - do zliczania odpowiedzi w Pythonie niż moja pierwotna funkcja ze względu na dokładność. Ten powinien działać przez około 80% do 90% wszystkich rzuconych na niego przypadków testowych.
Ale co z tymi pytaniami z wieloma stronami odpowiedzi? Żadne z powyższych nie zadziała bardzo dobrze w tej sytuacji, jeśli powiedzmy, że 1 odpowiedź na python znajduje się na pierwszej stronie, a inna na drugiej. Pozwoliłem sobie rozwiązać ten problem, tworząc kolejną wersję mojej funkcji (pokazanej poniżej), która sprawdza każdą stronę odpowiedzi, jeśli istnieje wiele odpowiedzi, pod kątem odpowiedzi w języku Python, i całkiem nieźle poradziła sobie w wielu przypadkach testowych I rzuciłem na to. Cóż, bez zbędnych ceregieli, oto nowa i zaktualizowana funkcja:
Dość długo, prawda? Tak naprawdę nie grałem w golfa kodowego, ale jeśli chcesz, mogę trochę pograć w golfa. W przeciwnym razie uwielbiam to i nie mogłabym być szczęśliwsza. Och, prawie zapomniałem, jako dodatkowy bonus, daje to również całkowitą liczbę odpowiedzi Pythona na pytanie, całkowitą liczbę głosów na pytanie i całkowitą liczbę odpowiedzi na pytanie, jeśli pytanie
id
odpowiada więcej niż jednej stronie odpowiedzi. W przeciwnym razie, jeśli pytanie składa się tylko z jednej strony odpowiedzi, po prostu wyświetlatruthy/falsy
wartość. Naprawdę dałem się ponieść wyzwaniu.Każdy z nich przyjmuje pytanie
id
w formie ciągu .Umieściłbym
Try It Online!
tutaj linki do każdej funkcji, ale niestety nie pozwalarepl.it
aniIdeone
na pobieranie zasobów przezurllib
bibliotekę Pythona .źródło
http://codegolf.stackexchange.com/q/
aby pobrać pytanie. Czy jest równieżhttp://
obowiązkowy?unknown url type
błąd.ppcg.lol/q/id
działa równieżJulia, 275 bajtów
Jest to funkcja, która przyjmuje liczbę całkowitą i zwraca wartość logiczną. Łączy się z interfejsem API wymiany stosów i każde uruchomienie tej funkcji powoduje wysłanie 2 żądań interfejsu API, więc nie uruchamiaj jej zbyt wiele razy, w przeciwnym razie wyczerpiesz swoje 300 żądań dziennie.
Nie golfowany:
źródło
ppcg.lol
krótkim linkiem do wszystkich rzeczy codegolf, wersja API po prostu nie wystarczyłaRakieta, 339 bajtów
Wciąż jest wiele do golfa.
źródło
Ruby + HTTParty ,
170146145142139138 + 11 (-rhttparty
flaga) =181157156153150 150149 bajtówNie sądzę, aby były jakieś przypadki krawędzi, które spowodowałyby zerwanie moich wzorców wyrażeń regularnych, mam nadzieję ...
Zaktualizowano do krótkiego linku dostarczonego przez @WashingtonGuedes i odkrywam, że HTTParty nie narzeka, jeśli zacznę od
//
zamiasthttp://
.Zaktualizowano dla nieco bardziej bezpiecznych wyrażeń regularnych. I tak zapisałem bajty, odkrywając, że obiekty odpowiedzi HTTParty dziedziczą po String, co oznacza, że nie muszę ich nawet używać
.body
podczas dopasowywania wyrażenia regularnego!@manatwork zwrócił uwagę na przypadkowe dodanie postaci, które zostawiłem, i ze względu na golfa
i
należy teraz zaakceptować jako String.Zaktualizowano wyrażenia regularne.
Ta sama długość.-1 bajt, wycinając paren.Dodatkowe uwagi:
"post-text"
, z którym dopasowaliśmyst.*xt"
. Bardziej bezpieczna wersja dodałaby po niej spację, ale poświęcamy to ze względu na golfa.net/http
modułach macierzystych ze względu na odpowiednią obsługę przekierowań dla podanego adresu URL."up*?\d
była najkrótszą sekwencją, którą znalazłem, odpowiadającą liczbie głosów. Potrzebujemy tylko pierwszego, więc na szczęście odpowiedzi na to nie wpływają.źródło
ppcg.lol/q/#{i}
działa równieżppcg.ga/q#{i}
może? (Nie znam Ruby)ppcg.lol/q#{i}
to możliwe myślę? (a/#b
jest taki sam jaka#b
)"
Rujnuje/"e-c.*?(\d+)/
wyrażenie regularne. Nawiasem mówiąc, wymóg powiedzieć o wejście że „Typy danych (...) nie ma znaczenia.” Więc lepiej zdać í parametr jako ciąg, więc można zastąpić Podstawienie konkatenacji:"//ppcg.lol/q/"+i
.Groovy,
179161157Dzięki Timtech zapisano 17 znaków.
Słowo kluczowe def również nie jest konieczne.
źródło