Wprowadzenie
Dla tych, którzy nie znają pary - a przynajmniej tego konkretnego aspektu:
Często na profilach ludzi ludzie zostawiają komentarze z napisem „+ rep _____” lub „-rep _____”. Są to nieoficjalne sposoby wykazania, czy uważasz, że ktoś w społeczności ma dobrą lub złą reputację, z wielu powodów. Takie komentarze wyglądają następująco:
+ rep dobry gracz
+ pomocny przedstawiciel
-rep haker
-rep oszustwo
Zadanie
Program musi przyjmować dane w dowolny zgodny sposób. Dane wejściowe składają się z ciągu z opcjonalnymi znakami nowej linii ( \n
). Na samym początku każdej linii '+rep '
lub '-rep '
może być obecny. Resztę linii można odrzucić. Jeśli linia nie zaczyna się od '+rep '
lub '-rep '
(zwróć uwagę na spację końcową), linię należy zignorować.
Program musi następnie zachować łączny wynik reputacji. Począwszy od 0
, ten wynik powinien być zwiększany na każdej linii, która zaczyna się '+rep '
i zmniejszany na każdej linii, która zaczyna się '-rep '
.
Wynik ten powinien być generowany w dowolny uzgodniony sposób.
Przypadki testowe
Input:
+rep fast trade
+rep nice person
-rep too good
Output: 1
Input:
-rep hacker
-rep scammer
-rep was mean
Output: -3
Input:
first
i don't like him
+rep good at cs go
Output: 1
Input (note the lack of a trailing space on the third line):
+rep +rep
hi +rep
-rep
Output: 1
Input:
+ rep
Output: 0
Input:
+rep like
-thing
Output: 1
Premia
Nie wiem nawet, czy to możliwe, ale punkty bonusowe, jeśli możesz w jakiś sposób uzyskać te komentarze ze Steam.
0
, nie1
.Odpowiedzi:
05AB1E ,
181617 bajtówOszczędność 2 bajtów dzięki bajtowi Okx
+1 ze względu na zmianę specyfikacji, gdzie po rep musi następować spacja.
Wypróbuj online!
Wyjaśnienie
źródło
ð¡0è
z4£
. Pracowałem nad rozwiązaniem tego w tym samym czasie, w którym byłeś.|ðý#D'·Ý©.åÏ®1:O
może mieć 14 lub 15 lat, po prostu tego nie widzę. Utknąłem również w wieku 16 lat, może ci to pomoże. Zostawię to tutaj. Zasadniczo zastępując słowo „rep” liczbą „1”, abyś mógł bezpośrednio sumować.0|vy4£'·Ý1:R.V
nie działa dla linii, które nie zaczynają się od +/- rep. Powrót do deski kreślarskiej :(Python 3, 73 bajty
Jestem pewien, że ta odpowiedź jest śmieciowa i wkrótce zostanie pobita, ale nie ma jeszcze innych odpowiedzi w języku Python
Użyj w ten sposób:
Pobieranie z pary
Oto przykładowy kod, który pobiera pierwsze 100 komentarzy z profilu KennySa i oblicza jego powtórzenie.
źródło
if"rep"==i[1:4]
dla -1Perl 5 , 25 bajtów
24 bajty kodu +
-p
flaga.Wypróbuj online!
/^\+rep /
zwraca,1
jeśli linia zaczyna się od+rep
;/^-rep /
zwraca,1
jeśli linia zaczyna się od-rep
(więc tylko jeden z nich będzie najwyżej jeden). Używamy$\
do przechowywania wyniku, ponieważ jest on domyślnie drukowany na końcu (dzięki-p
flagom i tym niedopasowanym}{
).źródło
Python 2 , 54 bajty
Wypróbuj online! Pobiera wejściowy ciąg multilinii.
Liczy pojawienie się
'+rep '
i'-rep '
tylko na początku linii, szukając ciągu następującego po symbolu nowej linii. Aby złapać pierwszy wiersz, do wejścia jest dodawany nowy wiersz.źródło
Siatkówka ,
63515049 bajtówNie do końca byłem zgodny ze specyfikacją, więc naprawiłem kilka problemów, ale także dużo grałem w golfa (pożyczając pierwszą linię z rozwiązania Kritixi Lithos).
Zaoszczędził kolejny bajt dzięki Kritixi Lithos.
Wypróbuj online!
Wyjaśnienie
Po pierwsze, wszystko z danych wejściowych jest usuwane, z wyjątkiem
+
i-
od dowolnego+rep
lub-rep
na początku linii.Następnie sąsiednie pary
+
i-
są usuwane, dopóki nie będzie można ich usunąć. Po tym, co zostało, albo ciąg+
s, bieg-
s, albo nic.Następnie ciąg jednego lub więcej znaków (albo
+
albo-
) jest zastępowany znakiem tworzącym bieg, po którym następuje długość przebiegu. W ten sposób+
zostaje zachowany na początku dla pozytywnych wyników i-
negatywów.Następnie wszystkie
+
s są usuwane, jeśli powtórzenie jest pozytywne.Wreszcie, jeśli łańcuch jest pusty w tym momencie, powtórzenie wynosi 0, więc zapisujemy 0.
źródło
|¶
i dodaćs
(tryb pojedynczej linii) pom
pierwszej liniiJavaScript, 55 bajtów
Dzięki @Neil za grę w golfa z 12 bajtów Dzięki @ Arnauld za grę w golfa z 2 bajtów
Wypróbuj online!
Pokaż fragment kodu
źródło
split
zamiastmatch
(zawsze zwraca tablicę, która jest o 1 dłuższa niż zwykle, ale dwie 1s anulują). Próbowałem również wyeliminować duplikację, ale pojawiła się ponownie przy 57 bajtach.Mathematica, 47 bajtów (kodowanie ISO 8859-1)
Czysta funkcja przyjmująca ciąg oddzielony znakiem nowej linii jako dane wejściowe i zwracająca liczbę całkowitą. Zauważ, że trzy nowe znaki w kodzie są flankowane cudzysłowami, a zatem każdy z nich jest równoważny
"\n"
ciągowi (ale w ten sposób jest o jeden bajt krótszy niż"\n"
).StringCount
robi ciężkie podnoszenie; ręcznie dodajemy nowy wiersz na początku łańcucha, aby pierwsza linia pasowała, gdy jest to właściwe.±
to niezwykle pomocna funkcja pozwalająca uniknąć powtórzeńStringCount
.Alternatywne rozwiązanie
ma 4 bajty dłużej, ale podoba mi się sekwencja
±"+"-±"-"
....źródło
Retina ,
59535250 bajtówWypróbuj online!
Sprawdź krótszą odpowiedź Basic Sunset w tym samym języku!
Wyjaśnienie
Usuwa wszystko oprócz
[+-]rep
s.Wielokrotnie usuwa 1
-
na każdy+
i odwrotnie.Dodaj a
-
(ponieważ liczba jest ujemna) do-
s, a także zastępując-
s liczbą-
s.Zrób to samo dla
+
s, ale nie dodawaj-
.Na koniec, jeśli nic nie ma, zamień na
0
.źródło
PHP, 118 bajtów
Wypróbuj online!
Używany w ten sposób:
źródło
Röda , 53 bajty
Wypróbuj online!
źródło
Java, 109 bajtów
Próbuje zrobić to krótsze używając
Stream
„sźródło
Ułożone , 45 bajtów
Wypróbuj online!
Alternatywnie (49 bajtów):
Wyjaśnienie
Zasadniczo wyodrębnia wszystkie
+
lub-
dołączone na początku wiersza irep
. Następnie do każdego z nich przygotowuje#
. Następnie do całości0
jest dodawane a.#~
ocenia ciąg, który teraz wygląda mniej więcej tak:#+
jest przyrostem i#-
spadkiem. W ten sposób uzyskujemy pożądany rezultat.źródło
Siatkówka , 38 bajtów
Wypróbuj online!
Inne (i krótsze) rozwiązanie niż już opublikowane w Retina.
Wyjaśnienie
(Ta linia ma spację końcową). Zachowaj tylko odpowiednie części danych wejściowych, tj.
+rep
Lub-rep
na początku linii.Sortuj wszystkie znaki (w tym znaki nowej linii). spowoduje to umieszczenie + s i -s obok siebie.
Kilkakrotnie usuwaj
+-
pary, aż pozostanie co najwyżej jeden z dwóch znaków.Dopasuj pierwszy
-
(jeśli jest obecny) i wydrukuj go bez modyfikowania łańcucha.Policz pozostałą liczbę znaków i wydrukuj ją, ponieważ jest to ostatni etap programu.
źródło
C #, 87 bajtów
Anonimowa funkcja, która dzieli ciąg wejściowy za pomocą znaku nowej linii, wyszukuje ciąg „rep” poprzedzony znakiem i, jeśli go znajdzie, zwiększa reputację (
n
zmienną) o 1 lub -1.Pełny program z nieprzylepioną metodą i testami:
Zauważ, że kod ASCII dla
+
to 43, a dla-
to 45. Ta metoda przekazuje wszystkie przypadki testowe z PO. Jeśli jednak pierwsza postać jest czymś innym, doprowadzi to do błędnych odpowiedzi!Można to naprawić kosztem 17 bajtów:
Naprawiono C #, 104 bajty
Zmodyfikowana anonimowa funkcja sprawdzi,
+
czy-
znak lub jest pierwszym znakiem w każdej linii.źródło
Japt , 14 bajtów
Wypróbuj online!
+1 bajt dla
-x
flagiźródło
C ++, 144 bajty
Wypróbuj online!
źródło
C # , 104 bajty
Mimo że istnieje już jedno rozwiązanie - a moje jest dłuższe - nadal myślę, że powinienem je opublikować, ponieważ już tutaj może się nie powieść, jeśli coś takiego
'=rep '
stanie na przeszkodzie.Grał w golfa
Nie golfił
Nieczytelny czytelny
Pełny kod
Prasowe
104 bytes
- Wstępne rozwiązanie.Uwagi
Nic do dodania
źródło
Rubinowy, 46 bajtów
Zbierz wszystkie powtórzenia +/- z wejścia i ułóż je w jednym ciągu. Następnie oceń to dla rep = 1.
źródło
JavaScript ES6,
8579 bajtówSpróbuj
Nie golfił
Historia
85 bajtów
źródło