Biorąc pod uwagę ciąg znaków składający się z dowolnej wiadomości z naszego czatu witryny pobranej z listy opisanej i połączonej poniżej, wypisz wartość prawdy lub fałszu, próbując przewidzieć, czy wiadomość ta została oznaczona gwiazdką, czy nie w 50 bajtach lub mniej.
Możesz użyć dowolnych wartości prawdy lub fałszu , ale muszą one być identyczne (tzn. Powinny być tylko dwa możliwe wyniki, jedno prawdomówne i jedno fałsz). Dane wejściowe zostaną podane jako surowy HTML z usuniętymi znakami nowej linii i mogą zawierać znaki Unicode inne niż ASCII. Jeśli potrzebujesz czegoś innego niż UTF-8, powiedz to w swojej odpowiedzi.
Zwycięskie zgłoszenie do tego wyzwania będzie tym, które poprawnie przewiduje najwyższy odsetek wiadomości czatu, z poniższej listy. Jeśli dwa podane zgłoszenia mają ten sam wskaźnik sukcesu, zgłoszenie krótsze wygra.
Podaj instrukcje dotyczące uruchamiania kodu na całym zestawie komunikatów i obliczania poprawnej wartości procentowej. Najlepiej byłoby, gdyby był to fragment kodu typu „kocioł” (nie liczony do 50 bajtów), który zapętla pozytywne przypadki testowe i wyświetla liczbę poprawek, a następnie robi to samo dla negatywnych przypadków testowych. (Ogólny wynik można następnie obliczyć ręcznie za pomocą (correctPositive + correctNegative) / totalMessages
.)
Aby można było w wystarczającym stopniu przetestować kod, musi on zostać ukończony w ciągu 5 minut lub krócej dla całej listy wiadomości czatu na rozsądnym współczesnym sprzęcie.
Pełna lista wiadomości na czacie znajduje się tutaj i składa się z 1000 najnowszych wiadomości oznaczonych gwiazdką jako prawdziwych przypadków testowych i 1000 najnowszych wiadomości oznaczonych gwiazdką jako przypadków testowych fałszywych. Zauważ, że w liście znajdują się dwa pliki; przewiń mniej więcej w połowie, aby znaleźć wiadomości bez gwiazdek.
źródło
O2
Don'?t star
\^
Odpowiedzi:
Siatkówka , 50 bajtów,
71,8%72,15%Wypróbowałem trochę golfa regularnego za sugestią @ MartinBüttner. Pasuje do 704 wiadomości oznaczonych gwiazdką i nie pasuje do 739 wiadomości oznaczonych gwiazdką.
Ma
^.*( ... )
to na celu upewnienie się, że zawsze występuje dopasowanie 0 lub 1, ponieważ Retina domyślnie wyświetla liczbę dopasowań. Możesz ocenić program na plikach wejściowych, przygotowując sięm`
do trybu multilinii, a następnie uruchamiająci podobnie dla
unstarred.txt
.Analiza / wyjaśnienie
Wygenerowałem powyższe fragmenty (i wiele innych) za pomocą programu, a następnie wybrałem te, które chciałem ręcznie. Oto intuicja, dlaczego powyższe fragmenty działają:
C
: MeczePPCG
,@CᴏɴᴏʀO'Bʀɪᴇɴ
E
: Mecze@ETHproductions
,@El'endiaStarman
;
: Ponieważ przypadki testowe są w formacie HTML, odpowiada to<
i>
ಠ-ﭏ
: Pasuje do zakresu znaków Unicode, najbardziej widocznych dlaಠ_ಠ
i@Doorknob冰
tar
: Dopasowuje odmianystar
,@El'endiaStarman
(ponownie), a także tych,gravatar
które pojawiają się w oneboxes opublikowanych przez nowe posty botówol
: Mecze,rel="nofollow"
które znajdują się w wielu linkach i oneboxachl.x
: Mecze@AlexA.
,@trichoplax
eo
: Głównie pasujepeople
, ale także trzy przypadki dla@Geobits
a.u
: Głównie meczegraduation
,status
,feature
iabuse
pin
: Dopasowaniaping
i słowa kończące się naping
. Pasuje również do kilku postów w dyskusji na tematpineapple
, jako przykład nadmiernego dopasowania.nu
: Pasuje do mieszanego zestawu słów, z których najczęściej występujenumber
o.f
: Meczegolf
,conf(irm|use)
"$
: Dopasowuje podwójny cudzysłów jako ostatni znak, np@phase He means "Jenga."
Nie
[
ma w tym nic specjalnego - właśnie zostałem z postaci, więc pomyślałem, że mogę użyć jej do dopasowania jeszcze jednego przypadku.źródło
JavaScript ES6, 50 bajtów, 71,10%
Prawidłowo identyfikuje 670 gwiazdek i 752 gwiazdek.
Przekrocz barierę 70% i pokonaj wszystkich oprócz Retiny!
Zwraca,
true
jeśli wiadomość zawiera jedną z następujących rzeczy:D
,E
,R
, lubv
;tar
(zwyklestar
);a
iu
z jednym char między;l
ix
z jednym znakiem pomiędzy (zwyklealex
);eo
lubol
;C
, średnik, alboಠ
.Oto kilka bardziej owocnych meczów, które nie wydają się warte pozbycia się innych:
nf
nu
yp
n.m
To coraz bardziej zbliża się do odpowiedzi Retiny, ale większość ulepszeń znalazłem na własną rękę.
Przetestować go w konsoli jednej z tych stron: teksty gwiazdkowe , teksty NO-gwiazdkowe
Oto alternatywna wersja.
/a/.test
jest technicznie funkcją, ale nie spełnia naszych kryteriów :To daje 71,90% (697 z gwiazdkami, 741 bez gwiazdek).
Przeprowadziłem kilka analiz na listach, aby zobaczyć, które grupy wyrażeń regularnych pasują do najbardziej oznaczonych gwiazdką i najmniej nieoznaczonych postów. Analizy można znaleźć w tym Gist . Do tej pory sprawdziłem
aa
ia.a
dopasowałem.a.u
spada na około 50 z wynikiem 28, ale jest to najbardziej efektywne dopasowanie w swoim formacie ...źródło
/regexp/.test()
? Myślę, że można w tym przypadku ściśnąć jeszcze kilka.Pyth, 50 bajtów, 67,9%
Spowoduje to zakodowanie danych wejściowych w jednym z 322 segmentów i wybranie wartości logicznej w zależności od tego segmentu.
Punktacja
źródło
CJam, 45 bajtów, 65,55%
To sprawdza, czy pierwszy znak znajduje się na określonej liście, czy suma wszystkich punktów kodowych jest większa niż 8672.
Punktacja
źródło
fold
poleceniu wraz z faktyczną odpowiedzią.Matlab / Octave, 17 bajtów 60,15%
Prawidłowo klasyfikuje 490 wiadomości jako zapatrzonych, 713 wiadomości jako niezauważonych
Obecna wersja:
Sprawdzam tylko długość.
Stara wersja:
Może być przetłumaczony na inny język. Sprawdza tylko, czy wiadomość zawiera słowo gwiazda, czy nie.
score: 59/911/52.5%
Wyniki dla przypadków testowych wykorzystujących ten kod:
źródło
CJam, 32 bajty, łączny wynik 0,5605 (56%).
Prawidłowo identyfikuje 428 wiadomości oznaczonych gwiazdką i 693 wiadomości oznaczonych gwiazdką. Całkowity wynik to
(360+730)/2000=0.545
.Nie spodziewając się wygranej, nie widzę, jak się zachowuje. Powyżej znajduje się kod pojedynczej wiadomości, do wielokrotnego uruchamiania tej zmodyfikowanej wersji, która zwraca ilość wiadomości oznaczonych gwiazdką:
Po prostu przetestuj go, gdy STDIN jest surowym tekstem dowolnego pliku. Zwraca true, jeśli wiadomość zawiera „gwiazdkę” lub jeśli
length + 1 mod 4 = 0
.źródło
JavaScript ES6, 0,615 = 61,5%
342 poprawnie oznaczone jako oznaczone gwiazdką, 888 poprawnie oznaczone jako oznaczone gwiazdką,
(342+888)/2000 = 0.615
Przetestuj w ten lub inny sposób :
Wciąż mogę cię zdobyć, moja piękna!
źródło
Siatkówka, 46 bajtów, 68,55
679 gwiazdka: 692 unstar
Przełączono na Retinę, aby uzyskać więcej wyrażeń regularnych w ... Nadal nie gotowe.
źródło
C # 6.0 (.NET Framework 4.6), 50 bajtów, 63,60%
Program używany do celów testowych:
źródło