Steam 사용자의 평판은 어느 정도입니까? [닫은]

소개

증기에 익숙하지 않은 사람들 또는 적어도이 특정 측면 :

사람들의 프로필에 따라 사람들은 “+ rep _____”또는 “-rep _____”라는 말을 남깁니다. 여러 가지 이유로 커뮤니티의 누군가가 좋은 평판을 얻는다고 생각하는지 여부를 나타내는 비공식적 인 수단입니다. 이러한 의견은 다음과 같습니다.

좋은 선수를 + 답변

+ 답변 도움

-rep 해커

-rep 사기꾼


태스크

프로그램은 합의 된 방식으로 의견을 수렴해야합니다. 입력은 선택적인 개행 ( \n) 이있는 문자열로 구성됩니다 . 각 줄의 맨 처음에 '+rep '또는 '-rep '있을 수 있습니다. 나머지 줄은 버릴 수 있습니다. 줄이 '+rep '또는로 시작하지 않으면 '-rep '(뒤 공백을 참고) 줄을 무시해야합니다.

그런 다음 프로그램은 총 평판 점수를 유지해야합니다. 에서 시작 0하면이 점수는로 시작하는 모든 줄에서 증가하고로 시작 '+rep '하는 모든 줄에서 감소해야합니다 '-rep '.

이 결과는 합의 된 방식으로 출력되어야합니다.


테스트 사례

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

보너스

가능한지 모르겠지만 Steam 에서이 의견을 얻을 수 있다면 보너스 포인트가 있습니다.



답변

05AB1E , 18 16 17 바이트

rep 다음에 공백이 와야하는 스펙의 변경으로 인해 Okx
+1 바이트 덕분에 2 바이트 가 절약되었습니다.

|vy5£„+-S„·Ý «QÆO

온라인으로 사용해보십시오!

설명

|v                   # for each line of input
  y5£                # get the first 4 chars of input
     „+-S„·Ý «       # push the list ['+rep ','-rep ']
              Q      # check each for equality
                     # results in either [1,0] for +rep, [0,1] for -rep or [0,0] for others
               Æ     # reduce by subtraction, gives either 1, -1 or 0
                O    # sum

답변

파이썬 3, 73 바이트

나는이 답변이 쓰레기이고 곧 이길 것이라고 확신하지만 아직 다른 파이썬 답변은 없습니다.

lambda x:sum(["- +".index(i[0])-1for i in x.split('\n')if i[1:4]=="rep"])

다음과 같이 사용하십시오.

f = lambda x:sum(["- +".index(i[0])-1for i in x.split('\n')if i[1:4]=="rep"])
print(f("PUT INPUT HERE"))

스팀에서 가져 오기

다음은 KennyS의 프로파일에서 처음 100 개의 주석을 가져오고 그의 담당자를 계산하는 샘플 코드입니다.

import requests
from bs4 import BeautifulSoup

# Kenny's profile as Steam ID 64
# You can adjust this to whatever numbers you want
STEAM_PROFILE_URL = "76561198024905796"
payload =  {"start" : 0, "count" : 100}
r = requests.post("http://steamcommunity.com/comment/Profile/render/{}/-1/".format(STEAM_PROFILE_URL), payload)

# Comments are html inside a json object
soup = BeautifulSoup(r.json()["comments_html"], "html.parser")

# Get raw text for every comment.
# The " ".join() strips out the newlines and tabs which are part of html
comments = [" ".join(s.text.split()) for s in soup.find_all("div", {"class" : "commentthread_comment_text"})]

calculateRep = lambda x:sum(["- +".index(i[0])-1for i in x.split('\n')if i[1:4]=="rep"])

print(calculateRep("\n".join(comments)))

답변

펄 5 , 25 바이트

24 바이트의 코드 + -p플래그.

$\+=/^\+rep /-/^-rep /}{

온라인으로 사용해보십시오!

/^\+rep /1줄이 다음으로 시작하면를 반환 합니다 +rep. 행이 시작하면를 /^-rep /리턴 1합니다 -rep(그중 하나만 최대 하나). 우리 $\는 결과가 마지막에 암시 적으로 인쇄되므로 결과를 저장하는 데 사용 합니다 ( -p플래그 및 일치하지 않는 결과 }{).


답변

파이썬 2 , 54 바이트

q=('\n'+input()).count;print q('\n+rep ')-q('\n-rep ')

온라인으로 사용해보십시오! 여러 줄 문자열을 입력으로받습니다.

줄 바꿈 기호 다음에 나오는 문자열을 검색하여 줄의 시작 부분 '+rep '과 모양의 '-rep '시작 부분 만 계산합니다 . 첫 번째 줄을 잡기 위해 줄 바꿈이 입력 앞에 붙습니다.


답변

망막 , 63 51 50 49 바이트

사양을 준수하지 않았기 때문에 몇 가지 문제를 해결했지만 많은 문제를 겪었습니다 (Kritixi Lithos의 솔루션에서 첫 번째 라인을 빌려서).

Kritixi Lithos 덕분에 다른 바이트를 절약했습니다.

ms`(?!^[+-]rep ).

+`\+-|-\+

(.)+
$1$.&
T`+
$^
0

온라인으로 사용해보십시오!

설명

ms`(?!^[+-]rep ).

첫째, 입력에 이르기까지 모든이를 제외하고, 삭제 +하고 -하나에서 +rep또는 -rep라인의 시작.

+`\+-|-\+

그런 다음 더 이상 제거 할 수 없을 때까지 +와의 인접한 쌍이 -제거됩니다. 이 후, 무엇을 왼쪽 것은 하나의 실행 +의의 실행 -의, 또는 아무것도.

(.)+
$1$.&

그런 다음 하나 이상의 문자 ( +또는 또는 -)의 런이 런을 구성하는 문자와 런 길이로 대체됩니다. 이런 식으로 +긍정적 인 결과와 -부정적인 결과를 위해 처음에 보존됩니다 .

T`+

그런 다음 +담당자가 긍정적 인 경우 모든 s가 제거됩니다.

$^
0

마지막으로이 시점에서 문자열이 비어 있으면 rep는 0이므로 0을 씁니다.


답변

자바 스크립트, 55 바이트

12 바이트에서 골프를 해주셔서 감사합니다 @Neil 2 바이트에서 골프를 해주셔서 감사합니다 @Arnauld

x=>x.split(/^\+rep /m).length-x.split(/^-rep /m).length

온라인으로 사용해보십시오!

var y=x=>(x.match(/^\+rep /gm)||'').length-(x.match(/^-rep /gm)||'').length

document.querySelector('div').innerText=y(document.querySelector('textarea').value)
textarea{
  width: 95%;height: 100px;
  }
<textarea oninput = "document.querySelector('div').innerText=y(this.value)">
-rep Cheater!!
+rep very good, fun to play with
+rep my friend +rep
good
</textarea>
<div></div>

답변

Mathematica, 47 바이트 (ISO 8859-1 인코딩)

c_:=StringCount["
"<>#,c];±"
+rep""
-rep")&

개행으로 분리 된 문자열을 입력으로 받아서 정수를 리턴하는 순수 함수. 코드에서 세 줄 바꿈은 따옴표로 묶여 있으므로 "\n"문자열에서 각각 동일 합니다 (그러나이 방법은보다 1 바이트 짧습니다 "\n"). StringCount무거운 물건 들기; 적절한 경우 첫 줄이 일치하도록 문자열의 시작 부분에 줄 바꿈을 수동으로 추가합니다. ±반복을 피하는 단조 도움 기능StringCount .

대체 솔루션

(±c_:=StringCount["
"<>#,"
"<>c<>"rep"];±"+"-±"-")&

4 바이트 더 길지만 시퀀스를 좋아합니다 ±"+"-±"-"….