एक भाप उपयोगकर्ता के पास कितनी प्रतिष्ठा है? [बन्द है]


20

परिचय

भाप से परिचित नहीं लोगों के लिए - या कम से कम यह विशेष पहलू:

अक्सर लोगों की प्रोफाइल पर, लोग "+ rep _____" या "-rep _____" कहकर टिप्पणी छोड़ देते हैं। ये दिखाने का एक अनौपचारिक साधन हैं कि क्या आपको लगता है कि समुदाय में किसी की कई कारणों से अच्छी या बुरी प्रतिष्ठा है। इस तरह की टिप्पणियां दिखती हैं:

+ एक अच्छे खिलाड़ी को दोहराएं

+ प्रतिनिधि सहायक

-रेप हैकर

-रेप स्कैमर


कार्य

कार्यक्रम को किसी भी सहमति के माध्यम से इनपुट लेना होगा। इनपुट में वैकल्पिक newlines ( \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

बक्शीश

मुझे यह भी नहीं पता कि क्या यह संभव है, लेकिन बोनस अंक अगर आप किसी तरह स्टीम से इन टिप्पणियों को प्राप्त कर सकते हैं।


5
मान लें कि बोनस अंक काल्पनिक हैं, सही है? वे वास्तव में आपके स्कोर को प्रभावित नहीं करते हैं।
Rɪᴋᴇʀ

2
क्या हम मान सकते हैं कि केवल प्लस और माइनस संकेत '+ प्रतिनिधि' / '- प्रतिनिधि' में हैं? क्या रेप केवल लाइन के शुरू में होगा, या यह बीच में भी हो सकता है?
Rɪᴋᴇʀ

3
मैं एक परीक्षण मामले को जोड़ने की सिफारिश करूंगा जहां एक + प्रतिनिधि या -rep है जो लाइन के शुरू में नहीं है
fəˈnɪt'k

3
मेरा मानना ​​है कि उदाहरण 4 में आउटपुट होना चाहिए 0, नहीं 1
DJMcMayhem

10
हाय जैकब, और PPCG में आपका स्वागत है। आप यहाँ अपनी पहली चुनौती के लिए काफी सक्रिय बातचीत करने में कामयाब रहे हैं! चूंकि किसी और ने अभी तक इसका उल्लेख नहीं किया है, इसलिए मैं आपको सैंडबॉक्स पर निर्देशित करूंगा जहां आप मेन को चुनौती देने से पहले सार्थक प्रतिक्रिया प्राप्त कर सकते हैं और किसी भी विवरण या स्पष्टीकरण के मुद्दों को निकाल सकते हैं। भविष्य में, यह आपको डाउनवोट्स, क्लोजवोट्स और इस तरह से बचने में मदद करेगा। मुझे आशा है कि आप चारों ओर चिपकेंगे और अपने प्रवास का आनंद लेंगे!
AdmBorkBork

जवाबों:


9

05AB1E , 18 16 17 बाइट्स

सहेजे गए 2 बाइट्स ओकेएक्स
+1 बाइट की बदौलत स्पेस में बदलाव के कारण जहाँ अब स्पेस की जरूरत है।

|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

आप बदल सकते हैं ð¡0èके साथ । मैं उसी समय इस समाधान पर काम कर रहा था जब आप थे।
ओकेक्स

@ इग्नू मुझे लगता है कि मेरा विचार |ðý#D'·Ý©.åÏ®1:O14 या 15 का हो सकता है, मैं इसे देख नहीं रहा हूं। इसके अलावा 16 पर अटक गया, शायद यह आपकी मदद करेगा। मैं इसे यहाँ छोड़ दूँगा। मूल रूप से "rep" शब्द को "1" नंबर के साथ बदल दिया जाता है ताकि आप योग को निर्देशित कर सकें।
मैजिक ऑक्टोपस Urn

@carusocomputing: मुझे लगता है कि मेरे पास 14 हाँ पर है। बस कुछ और परीक्षण करना होगा :)
एमिग्ना

ऐसा होने से पहले अपरिहार्य जेली टाई को हरा देना बेहतर है;)।
मैजिक ऑक्टोपस Urn

@carusocomputing: वास्तव में मेरा तरीका 0|vy4£'·Ý1:R.Vउन लाइनों के लिए काम नहीं करता है जो +/- प्रतिनिधि के साथ शुरू नहीं होती हैं। ड्राइंग बोर्ड पर वापस :(
एमिग्ना

10

पायथन 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"))


भाप से प्राप्त करना

यहां कुछ सैंपल कोड दिए गए हैं, जो केनीएस के प्रोफ़ाइल से पहले 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)))

if"rep"==i[1:4]-1 के लिए
ovs

आपको वर्ग कोष्ठक की आवश्यकता नहीं है
ovs

9

पर्ल 5 , 25 बाइट्स

कोड + -pध्वज के 24 बाइट्स ।

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

इसे ऑनलाइन आज़माएं!

/^\+rep /रिटर्न 1अगर लाइन के साथ शुरू होता है +rep; /^-rep /रिटर्न 1अगर लाइन के साथ शुरू होता है -rep(तो उनमें से केवल एक ही सबसे अधिक होगा)। हम $\परिणाम को संग्रहीत करने के लिए उपयोग करते हैं, क्योंकि यह अंत में स्पष्ट रूप से मुद्रित होता है ( -pध्वज और उन बेजोड़ के लिए धन्यवाद }{)।


दो बाइट्स जोड़ें क्योंकि
रेप के

यह कल्पना से बहुत स्पष्ट नहीं लगता है, लेकिन जब से बहुत सारे लोग इसे कर रहे हैं, मैं इसे संपादित करूंगा, जैसे ही मैं अपने हाथों को कंप्यूटर पर लाऊंगा।
दादा

मैंने इसे ऐनक में जोड़ दिया क्योंकि ओपी ने इसे एक टिप्पणी के रूप में छोड़ दिया था
fɛnɪt tok

6

पायथन 2 , 54 बाइट्स

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

इसे ऑनलाइन आज़माएं! इनपुट के रूप में एक मल्टीलाइन स्ट्रिंग लेता है।

एक newline प्रतीक के बाद स्ट्रिंग की खोज करके लाइनों के शुरू होने पर '+rep 'और '-rep 'केवल दिखाई देता है । पहली पंक्ति को पकड़ने के लिए, इनपुट के लिए एक नई रूपरेखा तैयार की जाती है।


5

रेटिना , 63 51 50 49 बाइट्स

युक्ति के साथ काफी अनुपालन नहीं किया, इसलिए मैंने कुछ मुद्दों को तय किया, लेकिन इसे बहुत आगे बढ़ाया (क्रिस्ति लिथोस के समाधान से पहली पंक्ति को उधार लेकर)।

क्रिति लिथोस को एक और बाइट धन्यवाद दिया।

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

+`\+-|-\+

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

इसे ऑनलाइन आज़माएं!

व्याख्या

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

सबसे पहले, इनपुट से सब कुछ हटा दिया जाता है, सिवाय +और -किसी से+rep या -repएक लाइन की शुरुआत में।

+`\+-|-\+

तब आसन्न जोड़े को हटा दिया जाता है +और -तब तक हटाया नहीं जाता है जब तक कि अधिक नहीं हटाया जा सकता है। इसके बाद, जो बचा है वह या तो एस का एक रन है +, एक रन है- , या कुछ भी नहीं है।

(.)+
$1$.&

फिर एक या अधिक वर्ण (या तो की एक रन +या -) चरित्र रन रन की लंबाई के बाद अप बनाने के साथ बदल दिया है। इस तरह, +सकारात्मक परिणामों के लिए शुरुआत में संरक्षित है और- नकारात्मक के लिए ।

T`+

फिर सब + को हटा दिया जाता है, इस घटना में कि प्रतिनिधि सकारात्मक है।

$^
0

अंत में, यदि स्ट्रिंग इस बिंदु पर खाली है, तो रिप्रेस 0 है, इसलिए हम 0 लिखते हैं।


आप पहली पंक्ति के बाद ड्रॉप (और सिंगल-लाइन मोड) जोड़ सकते हैंsm
क्रिक्सी लिथोस

4

जावास्क्रिप्ट, 55 बाइट्स

@ 12 बाइट को बंद करने के लिए @Neil का धन्यवाद 2 बाइट को बंद करने के लिए धन्यवाद @Arnauld

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

इसे ऑनलाइन आज़माएं!


splitइसके बजाय का उपयोग करके 12 बाइट्स सहेजें match(यह हमेशा एक सरणी देता है जो 1 लंबा है जो आप सामान्य रूप से चाहते हैं लेकिन दो 1 एस रद्द करते हैं)। मैंने भी नकल को खत्म करने की कोशिश की लेकिन यह फिर से 57 बाइट पर आ गया।
नील

3

गणितज्ञ, 47 बाइट्स (आईएसओ 8859-1 एन्कोडिंग)

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

शुद्ध फ़ंक्शन इनपुट के रूप में एक नईलाइन-पृथक स्ट्रिंग ले रहा है और एक पूर्णांक लौटा रहा है। ध्यान दें कि कोड में तीन नई सुर्खियाँ उद्धरण द्वारा फ़्लैंक की जाती हैं और इस प्रकार "\n"एक स्ट्रिंग में प्रत्येक बराबर होती हैं (लेकिन यह तरीका एक बाइट से छोटा है "\n")। StringCountभारी उठाने करता है; हम मैन्युअल रूप से स्ट्रिंग की शुरुआत में एक नई पंक्ति जोड़ते हैं ताकि उपयुक्त होने पर पहली पंक्ति मेल खाती हो। ±की पुनरावृत्ति से बचने के लिए एक unary help function है StringCount

वैकल्पिक समाधान

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

4 बाइट्स लंबा है, लेकिन मुझे अनुक्रम पसंद है ±"+"-±"-"...।


मुझे लगता है कि आपको +/- प्रतिनिधि के पीछे एक स्थान जोड़ने की आवश्यकता हो सकती है क्योंकि यह स्पष्ट रूप से आवश्यकताओं का हिस्सा था
f atn Aprt'k

3

रेटिना , 59 53 52 50 बाइट्स

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

+`\+-|-\+

-+
-$.&
\++
$.&
^$
0

इसे ऑनलाइन आज़माएं!

एक ही भाषा में बेसिक सनसेट के छोटे जवाब की जाँच करें !

व्याख्या

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

[+-]repएस को छोड़कर सब कुछ हटा देता है ।

+`\+-|-\+

-प्रत्येक +और इसके विपरीत के लिए बार-बार 1 हटाता है ।

-+
-$.&

Prepend a -(क्योंकि संख्या ऋणात्मक है)-- s के साथ s को बदलने के साथ s की संख्या के साथ -

\+
$.&

के लिए भी यही करें + , लेकिन पहले से न बताएं -

^$
0

अंत में, अगर कुछ नहीं है, तो इसे एक के साथ बदलें 0



ठीक है तो मैंने उसे वास्तविक प्रश्न में संपादित किया।
f --n 16:tɪk

3

PHP, 118 बाइट्स

function s($a,$c=0){foreach(explode("
",$a)as$b){$b=substr($b,0,1).'1';if(is_numeric($b){$c+=$b});}return$c-($a=="");}

इसे ऑनलाइन आज़माएं!

इस तरह इस्तेमाल किया:

echo s("-rep bad
+rep good
+rep very good
+rep exceeds expectation");

यह 1 आउटपुट करता है यदि आप इसे खाली स्ट्रिंग
खिलाते हैं

@ f @nghtɪk नियत
steenbergh

अपने लिंक को ठीक करने की सलाह देंगे। यदि आप इसे एक गैर +/-
रेप


1

जावा, 109 बाइट्स

l->{int i=0;for(String s:l.split("\n")){if(s.startsWith("+rep "))i++;if(s.startsWith("-rep "))i--;}return i;}

का उपयोग करते हुए इस कम करने के लिए कोशिश कर रहा Streamहै


प्रतिनिधि के बाद एक जगह की जरूरत है
fəˈnɛt Aprk

1

स्टैक्ड , 45 बाइट्स

'^([+-])rep |.'{.a:''['#'a+]a if}mrepl'0'\+#~

इसे ऑनलाइन आज़माएं!

वैकल्पिक रूप से (49 बाइट्स):

lines'^[-+]rep 'match$#'YES[0#0# '#'\+]"!''#`0\#~

व्याख्या

'^([+-])rep |.'{.a:''['#'a+]a if}mrepl'0'\+#~

यह मूल रूप से सभी +या -लाइन की शुरुआत से जुड़ा हुआ है और rep। फिर, प्रत्येक के लिए, यह एक प्रस्तुत करता है #। फिर, पूरी बात के लिए, एक 0पूर्व निर्धारित है। #~स्ट्रिंग का मूल्यांकन करता है, जो अब कुछ इस तरह दिखता है:

0#+#+#-

#+वेतन वृद्धि है और वेतन वृद्धि #-है। इस प्रकार, हम अपना वांछित परिणाम प्राप्त करते हैं।


1

रेटिना , 38 बाइट्स

M!m`^[+-]rep 
Os`.
+`\+-

*\M1!`-
[+-]

इसे ऑनलाइन आज़माएं!

रेटिना में पहले से तैनात लोगों की तुलना में एक अलग (और छोटा) समाधान।

व्याख्या

M!m`^[+-]rep 

(इस लाइन में एक अनुगामी स्थान है)। इनपुट के केवल प्रासंगिक भागों को रखें, +repया -repएक पंक्ति की शुरुआत में।

Os`.

सभी वर्णों को क्रमबद्ध करें (newlines सहित)। यह एक दूसरे के बगल में + s और s डाल देगा।

+`\+-

+-जब तक दो में से एक संकेत शेष रहता है, तब तक जोड़े को बार-बार हटाएं ।

*\M1!`-

पहले -(यदि मौजूद है) से मिलान करें और स्ट्रिंग को संशोधित किए बिना इसे प्रिंट करें।

[+-]

शेष संकेतों की संख्या की गणना करें, और इसे प्रिंट करें क्योंकि यह कार्यक्रम का अंतिम चरण है।


0

सी #, 87 बाइट्स

s=>{int n=0;foreach(var t in s.Split('\n'))n+=t.IndexOf("rep ")==1?44-t[0]:0;return n;}

अनाम फ़ंक्शन जो न्यूलाइन वर्ण का उपयोग करके इनपुट स्ट्रिंग को विभाजित करता है, एक चरित्र द्वारा उपसर्ग "रेप" स्ट्रिंग को खोजता है और, यदि यह मिल जाता है, तो प्रतिष्ठा ( nचर) को 1 या -1 से बढ़ाता है ।

पूर्ण कार्यक्रम ungolfed विधि और परीक्षण मामलों के साथ:

using System;

class P
{
    static void Main()
    {
        Func<string, int> f =
        s=>
        {
            int n = 0;
            foreach (var t in s.Split('\n'))
                n += t.IndexOf("rep ") == 1 ?
                    44 - t[0]
                    :
                    0;

            return n;
        };

        // test cases:
        Console.WriteLine(f(@"+rep fast trade
+rep nice person
-rep too good"));       // 1

        Console.WriteLine(f(@"-rep hacker
-rep scammer
-rep was mean"));       // -3

        Console.WriteLine(f(@"first
i don't like him
+rep good at cs go"));  // 1

        Console.WriteLine(f(@"+rep +rep
hi +rep
-rep"));            // 1

        Console.WriteLine(f(@"+ rep"));     // 0

        Console.WriteLine(f(@"+rep like
-thing"));          // 1
    }
}

ध्यान दें कि ASCII कोड +43 है और -45 के लिए है। यह विधि ओपी से सभी परीक्षण मामलों को पारित करती है। हालांकि, अगर पहला चरित्र कुछ और है, तो यह गलत उत्तर देगा!

यह 17 बाइट्स की लागत पर तय किया जा सकता है:

सी # तय, 104 बाइट्स

s=>{int n=0;foreach(var t in s.Split('\n'))n+=t.IndexOf("rep ")==1?t[0]==43?1:t[0]==45?-1:0:0;return n;}

संशोधित अनाम फ़ंक्शन प्रत्येक पंक्ति में पहले वर्ण के रूप में +या -संकेत के लिए जाँच करेगा ।




0

सी # , 104 बाइट्स


मौजूदा पहले से ही एक समाधान के बावजूद - और मेरा लंबा होने के बावजूद - मुझे अभी भी लगता है कि मुझे इसे पोस्ट करना चाहिए, क्योंकि पहले से ही यहां पर विफल हो सकता है अगर कुछ इस तरह से '=rep 'हो जाता है।


golfed

i=>{var c=0;foreach(var o in i.Split('\n'))c+=o.IndexOf("rep ")!=1?0:o[0]==43?1:o[0]==45?-1:0;return c;}

Ungolfed

i => {
   var c = 0;

   foreach( var o in i.Split( '\n' ) )
      c += o.IndexOf( "rep " ) != 1
         ? 0
         : o[ 0 ] == 43
            ? 1
            : o[ 0 ] == 45
               ? -1
               : 0;

   return c;
}

अनपढ़ पठनीय

i => {
   // Counter for the 'reputation'
   var c = 0;

   // Cycle through every line
   foreach( var o in i.Split( '\n' ) )
      // Check if the "rep " string has index 1
      //   ( Index 0 should be the sign )
      c += o.IndexOf( "rep " ) != 1
         // Add 0 if the rep isn't on the right position
         ? 0
         // Check for the '+' sign
         : o[ 0 ] == 43
            // Add 1 if the sign is found
            ? 1
            // Check for the '-' sign
            : o[ 0 ] == 45
               // Add -1 if the sign is found
               ? -1
               // Add 0 if another char is found
               : 0;

   // Return the 'reputation'
   return c;
}

पूर्ण कोड

using System;
using System.Collections.Generic;

namespace Namespace {
   class Program {
      static void Main( String[] args ) {
         Func<String, Int32> f = i => {
            var c = 0;

            foreach( var o in i.Split( '\n' ) )
               c += o.IndexOf( "rep " ) != 1
               ? 0
                  : o[ 0 ] == 43
                  ? 1
                  : o[ 0 ] == 45
                     ? -1
                     : 0;

            return c;
         };

         List<String>
            testCases = new List<String>() {
               @"+rep fast trade
+rep nice person
-rep too good",
               @"-rep hacker
-rep scammer
-rep was mean",
               @"first
i don't like him
+rep good at cs go",
               @"+rep +rep
hi +rep
-rep",
               @"+ rep",
               @"+rep like
-thing",
         };

         foreach( String testCase in testCases ) {
            Console.WriteLine( $"{testCase}\n{f( testCase )}\n" );
         }

         Console.ReadLine();
      }
   }
}

विज्ञप्ति

  • v1.0 - 104 bytes- प्रारंभिक समाधान।

टिप्पणियाँ

कुछ भी जोड़ने के लिए नहीं है


0

रूबी, 46 बाइट्स

->x{rep=1;eval ?0+x.map{|a|a[/^[+-]rep /]}*''}

इनपुट से सभी +/- प्रतिनिधि प्राप्त करें, और एक ही स्ट्रिंग में एक साथ रखें। फिर rep = 1 के लिए मूल्यांकन करें।


0

जावास्क्रिप्ट ईएस 6, 85 79 बाइट्स

l=>eval(l.split`
`.map(i=>(r=i.slice(0,5))==`+rep `?1:r==`-rep `?-1:0).join`+`)

कोशिश करो

f=l=>eval(l.split`
`.map(i=>(r=i.slice(0,5))==`+rep `?1:r==`-rep `?-1:0).join`+`);

console.log(f(`+rep fast trade
+rep nice person
-rep too good`));

console.log(f(`-rep hacker
-rep scammer
-rep was mean`));

console.log(f(`first
i don't like him
+rep good at cs go`));

console.log(f(`+rep +rep
hi +rep
-rep`));

console.log(f(`+ rep`));

console.log(f(`+rep like
-thing`));


Ungolfed

const repcount=list=>{
    let array=list.split("\n");
    let values=array.map(item=>{
        let rep=item.slice(0,5);
        return rep==="+rep "?1:rep==="-rep "?-1:0;
    });
    let result=values.reduce((a,b)=>a+b);
    return result;
};

इतिहास

85 बाइट्स

l=>l.split`\n`.map(i=>(r=i.slice(0,5))=="+rep "?1:r=="-rep "?-1:0).reduce((a,b)=>a+b)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.