Wiem, że pojawiło się wiele wyzwań związanych z „dwoma najlepszymi golfistami na świecie”, ale ten jest nieco bardziej wyjątkowy, ponieważ jest w rundzie 1 w serii (przyszłych) wyzwań z udziałem tych dwóch.
Twoim zadaniem jest napisanie programu lub funkcji, która zwraca dwa różne ciągi znaków ASCII niebiałych, odpowiadające temu, który ma większą reputację w momencie uruchomienia programu, między Dennis ♦ a Martinem Enderem ♦ . Problem polega na tym, że musisz podać dokładny ciąg „remis” w przypadku, gdy reputacja jest identyczna (mało prawdopodobna), a dwa różne ciągi znaków ASCII niebiałych białych znaków powinny być inne niż „remis” * .
Nie można pobierać danych wejściowych, takich jak nazwy użytkowników lub identyfikatory użytkowników. Jak zwykle, skracacze adresów URL są zabronione, podobnie jak typowe luki.
Przykłady:
Let the chosen string for Dennis be "D" and the chosen one for Martin Ender be "M" (should be specified)
If Dennis' rep > Martin Ender's rep => D
If it's the other way around => M
If it's a tie => tie
WAŻNY! Głosowanie na posty Dennis & Martin wyłącznie w celu wpłynięcia na remis w celu przetestowania poniższych rozwiązań stanowi ukierunkowane głosowanie, które jest zabronione w sieci Stack Exchange. Jeśli chcesz sprawdzić, czy rozwiązanie poprawnie wyświetla dane wyjściowe,
tie
zmień w nim identyfikatory na 2 użytkowników, o których wiesz, że są powiązani. Zobacz ten post Meta, aby uzyskać więcej informacji.
* Myślę, że i tak nikt by tego nie użył
źródło
Odpowiedzi:
05AB1E ,
6564 bajtówKod:
Wykorzystuje kodowanie 05AB1E .
Wyjaśnienie:
•в=6{•
konwertuje liczbęв=6{
z bazy 255 na bazę 10, co daje 1201208478 . Pierwsza połowa to ID Dennisa (12012), a druga połowa to ID Martina (8478). Podziel na kawałki po 5,5ô
aby uzyskać następującą tablicę:Na szczęście od tego czasu możemy pozostawić wiodące zero z identyfikatora Martina to nadal będzie działać (sprawdź link przed kliknięciem, aby zobaczyć wiodące zero).
Teraz zapętlamy tę tablicę, używając
vy
i konstruujemy następujący ciąg z tego kodu 05AB1E:Natomiast
ÿ
jest bieżącym elementem iteratora (wykorzystującym interpolację łańcuchów) Wypróbuj online!Po zbudowaniu linku
.w
odczytuje wszystkie dane z linku, co powoduje powstanie ogromnej ilości tekstu. Aby z tego zrzucić reputację, musimy rozdzielić sznurektitle="reputation"
. Lub w wersji bardziej skompresowanego:’„Ö="ˆ"’
. Podziel na ten kawałek sznurka (z¡
) i uzyskaj drugi element (z1è
) i zachowaj pierwszych 100 znaków (zт£
).Teraz nasz zeskrobany tekst wygląda trochę tak:
Ta część jest łatwa, usuwamy tylko cyfry aby pozostać numerem reputacji, dla którego mamy wbudowane (
þ
). Kończymy pętlę i zawijamy wszystko do tablicy}})
.Wreszcie możemy przejść do przetwarzania numerów reputacji:
Co powoduje albo
D
,M
albotie
.źródło
1è) and keep the first **100 characters** (with т£
. ”) Powinna znajdować się całkowicie w blokach kodu, czy powinna być „ drugim elementem (z1è
) i zachować pierwsze 100 znaków (zт£
). ” Zamiast tego? literówka, ale jeśli tak ma być, to jestem zdezorientowany ..Dennis: 140,033
;Martin: 140,003
, ale próbowałem tutaj twojego kodu tio.run/nexus/05ab1e#@/… , to dajetie
. CzyD
zamiast tego nie powinien wypływać ?.w
wymaga dostępu do sieci, co jest ograniczone w TIO (działa w trybie awaryjnym 05AB1E). W tłumaczu offline powinien on działać.PowerShell v3 +,
14712311910310196 bajtówZapisano 24 bajty przy użyciu danych wyjściowych true / false zamiast nazw.
Uratował kolejne 4, restrukturyzując końcowe kontrole.
zapisano 16, uzyskując tylko reputację dwóch użytkowników z żądania, oszczędzając konieczności korzystania z
|% r*n
więcej niż raz, oznacza to również, że możemy pozbyć się miliona nawiasów i dwóch bezużytecznych zmiennych.-2 dzięki TessellatingHeckler - użycie znaku ucieczki zamiast dwóch podwójnych cudzysłowów dla adresu URL również usunęło
@
z tablicy niepotrzebną (oopsie)zastosowałem dziwną
.ToString
sztuczkę, o której istnieniu nie wiedziałem, do tej pory polecaną przez TessellatingHeckler -5, a ostatecznie poniżej 100.Wersja zwracająca nazwy:
wygląda to dość niechlujnie z powodu skrócenia nazw parametrów.
gdziekolwiek się
|% r*n
pojawia, otrzymujemyReputatioN
i|% d*
jestDisplay_name
zastosowania
Invoke-RestMethod
(aliasirm
) do kwerendy API, sklepy wynik nazwieItems
(dostał za pomocą|% I*
), do dwóch zmiennych$a
i$b
, po jednym dla każdego pro golfa, TheToString
(|% T*g
) Wyniki trick w jednej z wartościD
,M
lubTie
jeśli liczba jest nieparzysta / parzysta / zero.źródło
103! = 9.902900716486180407546715254581773349090165822114492483005280554699... × 10^163
długość bajtów ..? : PToString
działał tak z liczbami +/-, zapamięta na przyszłość.Python 2 , 160 bajtów
Nie najkrótsza odpowiedź w języku Python, ale jak dotąd najkrótsza, która nie przyjmuje żadnych założeń.
Drukuje,
1
jeśli Martin ma więcej przedstawicieli,-1
jeśli tak.źródło
JavaScript (ES6),
167156146144141132103 bajtówGłupi
fetch
i jego głupi, drogiPromise
łańcuch!Zakłada, jak obecnie dozwolone, że Dennis & Martin zawsze będzie 2 najwyżej ocenianymi użytkownikami. Musi być uruchamiany z poziomu katalogu głównego
api.stackexchange.com
. ZwracaPromise
obiekt (co jest teraz dozwolone przez konsensus ) zawierającytie
lub obiekt JSON dla tego, kto ma w tej chwili najwięcej powtórzeń. Jeśli obiekt JSON nie jest uważany za prawidłowy wynik, dodaj 5 bajtów dla.link
.link
zamiast pierwszej literydisplay_name
, co zapewnia lepszą ochronę przed zmianami nazw użytkowników, zaczynając od tej samej litery!Spróbuj
Alternatywny
Jeśli przyjdzie czas, że Dennis i Martin nie są na szczycie i nadal chcemy wiedzieć, kto ma najwięcej powtórzeń między nimi, potrzebowalibyśmy następujących, kosztem dodatkowych 10 bajtów.
źródło
.display_name[0]
na.display_name
, albo nawet krócej alternatywa, która nadal jest unikalny dla obu z nich:.link
. ;) Lub tylko cały JSON, ale nie jestem pewien, czy pasuje do wyskakującego okienka.link
, ale użyłem filtrowanego zapytania API, aby zwrócić tylko potrzebne informacje.alert
ing obiekt JSON, po prostu się wyświetli[object Object]
.Python 3,
160157151 bajtów-3 bajty dzięki @KevinCruijssen
Drukuje link do użytkownika mającego lepszą reputację
Zakłada, że są na numerach 1 i 2
Nie przyjmując żadnych założeń, Python 2, 157 bajtów :
źródło
Python,
226225221 bajtówCzuję, że to jest za długie.
Drukuje,
"True"
jeśli Martin ma więcej przedstawicieli niż Dennis,"False"
jeśli Dennis ma więcej przedstawicieli niż Martin i"tie"
jeśli mają takie same (teoretycznie. Nie mogę przetestować: P).https
->http
za 1 bajt dzięki @KevinCruijssen!re as r, r.sub
->re, re.sub
dla 4 bajtów dzięki @ovs!źródło
https
sięhttp
? Wiem, że PPCG jest teraz całkowicie https, ale może automatycznie przekierowuje do HTTPS, kiedy nawigujesz do HTTP w Pythonie, tak jak robi to w przeglądarce?re as R
. Wystarczy użyćimport requests as r,re
ire.sub
cmp
funkcji, aby zaoszczędzić trochę bajtów, zastępując ostatnie trzy wiersze czymś takimprint['tie',0,1][cmp(f('8478'),f('12012'))]
PHP, 167 bajtów
drukuje -1 dla Dennisa, 1 dla Martina Endera. remis w przypadku remisu
źródło
Python 2 ,
228223204199 bajtówZrobiłem to na mobilnym hotspocie, więc ... to nie jest świetne ...
Zakładam, że oba będą zawsze w tej samej setce tysięcy.Teraz nic nie zakłada. :REDrukuje,
True
jeśli Dennis ma większą reputację niż Martin, wFalse
przeciwnym razie iTie
jeśli są ... związani.źródło
Bash + jq ,
140133 bajtówSformatowane i wyjaśnione
Po pierwsze,
curlw3m API(i wykorzystania:--compressed
lub zwarcie--com
do UN-gzip)To trochę JSON. Zauważ, że kolejność jest stabilna, a nie oparta na reputacji. Następnie JQ przetwarza JSON, do czego został stworzony.
Używamy
1/x
powyżej, aby wygenerować błąd dzielenia przez zero, gdy min == max, więc w sytuacji remisu.||echo tie
Połowów że bash.Zauważ, że w tym przypadku ostrzeżenie jest drukowane na stderr przez JQ, ale bierzemy pod uwagę tylko rzeczywisty wynik programu;)
źródło
w3m
zamiastcurl --com
zapisać kilka bajtów. Ponadto uważam, że warto wspomnieć, że wymaga to jq 1.5, ponieważ jq 1.4 nie zgłosił błędu podziału przez zero.Stackexchange API Data Explorer ,
184180 bajtówDzięki @Kevin Cruijssen za -4 bajty
Drukuje 1 dla Dennisa i 2 dla Martina
Ponieważ dopiero wczoraj dowiedziałem się o SEADE powinno to być bardzo .
Wypróbuj tutaj
źródło
'D'
i'M'
do0
i1
.