소개
증기에 익숙하지 않은 사람들 또는 적어도이 특정 측면 :
사람들의 프로필에 따라 사람들은 “+ 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 바이트 더 길지만 시퀀스를 좋아합니다 ±"+"-±"-"
….