अपने प्रतिनिधि को पुनर्गणना में मदद करें!


12

कुछ महीने पहले, हमने मेटा पर चर्चा की थी ताकि प्रश्नों पर उत्थान के लिए सम्मानित की गई प्रतिष्ठा को बढ़ाया जा सके। यहां वोटों के लिए हमारी वर्तमान प्रतिष्ठा प्रणाली की मूल बातें हैं: 1

  • एक सवाल upvote U5 प्रतिष्ठा के लायक है।
  • एक उत्तर उत्थान u10 प्रतिष्ठा के लायक है।
  • एक प्रश्न या उत्तर डाउनवोट d-2 प्रतिष्ठा है।

एक नई प्रणाली के लिए कई अलग-अलग सुझाव दिए गए हैं, लेकिन वर्तमान सबसे लोकप्रिय उपरोक्त के समान है, लेकिन प्रश्न upvotes के साथ +10 प्रतिनिधि तक बढ़ाया गया है। यह चुनौती इस बात की गणना करने के बारे में है कि अगर इस प्रणाली को लागू किया गया तो आप कितना अधिक कमाएंगे।

आइए एक उदाहरण देखें। यदि मतदान गतिविधि होती UUUUuuuuUUUUUduuudUU, तो आप मौजूदा प्रणाली के तहत 121 कमाते:

U x 4 x  5 =  20 =  20
u x 4 x 10 =  40 =  60
U x 5 x  5 =  25 =  85
d x 1 x -2 =  -2 =  83
u x 3 x 10 =  30 = 113
d x 1 x -2 =  -2 = 111
U x 2 x  5 =  10 = 121
Total:             121

लेकिन वही गतिविधि नई प्रणाली के तहत 176 कमाएगी:

U x 4 x 10 =  40 =  40
u x 4 x 10 =  40 =  80
U x 5 x 10 =  50 = 130
d x 1 x -2 =  -2 = 128
u x 3 x 10 =  30 = 158
d x 1 x -2 =  -2 = 156
U x 2 x 10 =  20 = 176
Total:             176

आप इस परिदृश्य से 55 प्रतिनिधि प्राप्त करेंगे ।

अब तक, परिवर्तित प्रतिनिधि की गणना करना उतना कठिन नहीं है; बस 5 की संख्या को Uगिनें और 5 से गुणा करें। सौभाग्य से, रेप सिस्टम इतना सरल नहीं है: एक रीप कैप भी है , जो कि सबसे प्रतिष्ठा है जिसे आप एक यूटीसी दिन में वोट से कमा सकते हैं। यह सभी साइटों पर 200 पर सेट है।

इसके अलावा, रेप कैप वास्तविक समय में लागू होता है: यदि आपने पहले ही 196 प्रतिनिधि अर्जित कर लिया है और आपको उत्तर-अप प्राप्त होता है, तो आप अब 200 प्रतिनिधि करेंगे। यदि आपको इसके बाद एक डाउनवोट मिलता है, तो 2 प्रतिनिधि 200 से घटाया जाएगा, इसलिए आपके पास 198 प्रतिनिधि होगा।

मतदान गतिविधि के साथ UUUuuuuUUUUuuuuUUUUUUUd, आप वर्तमान प्रणाली के तहत 148 प्रतिनिधि अर्जित करेंगे:

U x 3 x  5 =  15 =  15
u x 4 x 10 =  40 =  55
U x 4 x  5 =  20 =  75
u x 4 x 10 =  40 = 115
U x 7 x  5 =  35 = 150
d x 1 x -2 =  -2 = 148
Total:             148

लेकिन आप नई प्रणाली के तहत 198 अर्जित करेंगे:

U x 3 x 10 =  30 =  30
u x 4 x 10 =  40 =  70
U x 4 x 10 =  40 = 110
u x 4 x 10 =  40 = 150
U x 7 x 10 =  70 = 200 (rep capped)
d x 1 x -2 =  -2 = 198
Total:             198

इस प्रकार, वृद्धि 50 प्रतिनिधि है

चुनौती

आपकी चुनौती एक प्रोग्राम या फ़ंक्शन लिखना है जो एक बहु-पंक्ति स्ट्रिंग में लेता है और उपरोक्त एल्गोरिथ्म के साथ प्राप्त होने वाले कुल प्रतिनिधि को आउटपुट करता है। प्रत्येक पंक्ति 1 यूटीसी दिन के रूप में गिना जाता है, इसलिए प्रतिनिधि टोपी केवल प्रति पंक्ति एक बार लागू होती है।

परीक्षण के मामलों

(इनपुट की एक या अधिक लाइनें, आउटपुट पूर्णांक द्वारा पीछा किया जाता है।)

UUUuudd
15

UUUuUUUUuUuuUUUUudUUUUuU
57

UUUuUUUUuUuuUUUUudUUUUuU
UUUuudd
72

uuuuuuu
uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
uuuuuuuuuuuuuuuuuuuu
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
0

UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
5

(empty string)
0

UUUuuuuuUUUuuUUUUUUuuuUUUuuUUUUuuuuUUUdddddddUU
4

UUUuuuuuUUUuuUUUUUUuuuUUUuuUUUUuuuuUUUdddddddUU
UuuUUUudUU
UUUUUUUUUuuuuuuUUUUUUuuUUUUUUuuuuuUUUUUUUUuUUUuuuuUUUUuuuUUUuuuuuuUUUUUUUUuuUUUuuUU
UUu
U
d
UU
UUUUUUUUUUUU
119

यह कोड गोल्फ है, इसलिए बाइट्स जीत में सबसे छोटा कोड है।

संबंधित चुनौतियां: एक वेक्टर की बंधी हुई संचयी राशि की गणना करें , अपने स्टैक एक्सचेंज की प्रतिष्ठा की गणना करें

1 यह सिस्टम का उच्च सरलीकृत संस्करण है। आप किसी उत्तर को डाउनवोट करने के लिए 1 प्रतिनिधि भी खो देते हैं, और इसमें अनप्वॉट मौजूद होते हैं, जो अजीब होते हैं और अपने स्वयं के नियमों का पालन करते हैं ; और अनडूवोट्स, जिनका पालन ​​करने के नियम भी नहीं हैं


1
अच्छी चुनौती है। बहुत बुरा यह होने की संभावना नहीं है ...
AdMBorkBork

2
V आप सवालों को नीचा दिखाने से नहीं चूकते; बस जवाब। मेरा भरोसा करें: P
Geobits

@ संभव संभव है, लेकिन मुझे निम्नलिखित अंतर दिखाई देते हैं: ए) पूर्ण संचयी सरणी की आवश्यकता नहीं है, बस अंतिम शब्द। बी) कोई निचली सीमा नहीं है, और ऊपरी सीमा तय है। सी) इनपुट एक स्ट्रिंग है, जैसा कि संख्या की एक सरणी के विपरीत है। घ) इन तारों की मनमानी मात्रा, नई कथनों द्वारा अलग, प्रत्येक के माध्यम से अलग-अलग होनी चाहिए और परिणाम प्राप्त करने के लिए सारांशित होना चाहिए।
ETHproductions

1
@ETHproductions B को छोड़कर सभी I / O अंतर हैं। मूल समस्या अभी भी वही है।
मेगो

जवाबों:


0

पर्ल, 104 91 + 2 = 93 बाइट्स

sub f{200*$.>$_[0]?$_[0]:200*$.}for(/./g){$a=/d/?-2:10;$s=f$s+$a;$o=f$o+$a-5*/U/}}{$_=$s-$o

-pध्वज की आवश्यकता है :

$ echo UUUuUUUUuUuuUUUUudUUUUuU | perl -p recalc.pl
57
$ echo "UUUuUUUUuUuuUUUUudUUUUuU
UUUuudd" | perl -p recalc.pl
72

टूट - फूट:

sub f {
  # '$.' contains the line number (1, 2, ... n)
  200*$. > $_[0] ? $_[0] : 200*$.
}
for(/./g){
  $a= /d/ ? -2  : 10;
  $s=f( $s + $a );
  # /U/ returns `1` if true
  $o=f( $o + $a - 5*/U/ )
}
}{ # Eskimo exit while loop (do this after the outer (from -p) iteration)
$_=$s-$o

2

ईएस 6, 104 बाइट्स

s=>s.split`
`.map(l=>(g=U=>[...l].map(c=>(r+=eval(c))>200?r=200:0,r=0)|r,t+=g(10)-g(5)),u=10,d=-2,t=0)|t

पहले और बाद में प्रत्येक पंक्ति के लिए गणना करता है। मेरा पहला उपयोग eval!


2

हास्केल, 98 93 बाइट्स

इसके लिए आगे गोल्फ में ब्लैककैप के लिए धन्यवाद। अब, मुझे लगता है कि बाद की चुनौतियों में लंबोदर को आजमाना है।

x#'U'=x
_#'u'=10
_#'d'=(-2)
a&b=foldl1(\d g->min 200$d+a#g)
g=sum.map(\x->(10&x)-(5&x)).lines

पहली 3 पंक्तियाँ स्कोरिंग हैं, एक & b है, स्कोर है, f का अंतर है और g विनिर्देशन को मापने वाला फ़ंक्शन है।

उपयोग:

g"UUUuuuuuUUUuuUUUUUUuuuUUUuuUUUUuuuuUUUdddddddUU" -- 4

आप दो अंतिम पंक्तियों को मर्ज कर सकते हैं और 1 बाइट कमा सकते हैं: g = sum.map (\ x -> (10 & x) - (5 & x))। लाइनें आप अन्य चार बाइट्स के लिए कोष्ठक को भी हटा सकते हैं: g = summap (\) x-> 10 & x-5 & x) .lines
ब्लैककैप

और 3 और बाइट्स यदि आप नक्शे और तह को मर्ज करते हैं: a & b = foldl (\ d g-> मिनट 200 $ d + a # g) 0b
BlackCap

1

लुआ, 196 बाइट्स

यह कार्यक्रम इनपुट के रूप में एकल बहु-पंक्ति तर्क लेता है, और प्रतिनिधि में कुल अंतर को प्रिंट करता है '

e,f,a=0,0,{u=10,U=10,d=-2}arg[1]:gsub(".-\n",function(s)x=0 y=0 s:gsub("[^\n]",function(c)t=x+a[c]x,t=t>199 and 200 or t,y+a[c]-(c<"V"and 5 or 0)y=t>199 and 200 or t end)e=e+x f=f+y end)print(e-f)

मुझे लगा कि मुझे इनपुट में एक नई लाइन के लिए पूछने की अनुमति है, अगर मैं नहीं हूं, तो यहां 204 बाइट्स समाधान है जिसे इसकी आवश्यकता नहीं है।

e,f,a=0,0,{u=10,U=10,d=-2}(arg[1].."\n"):gsub(".-\n",function(s)x=0 y=0 s:gsub("[^\n]",function(c)t=x+a[c]x,t=t>199 and 200 or t,y+a[c]-(c<"V"and 5 or 0)y=t>199 and 200 or t end)e=e+x f=f+y end)print(e-f)

अपुष्ट और स्पष्टीकरण

a={u=10,U=10,d=-2}            -- define the table containing the vote values
e,f=0,0                       -- initialize the total sums of rep'

arg[1]:gsub(".-\n",function(s)-- iterate over each line
  x=0                         -- score by the new scoring method for this UTC day
  y=0                         -- score by the old method
  s:gsub("[^\n]",function(c)  -- iterate over each non new-line character
    t=x+a[c]                  -- new score for today
    x=t>199 and 200 or t      -- reduce it to 200 if >=200
                        -- Do the same thing with the old scoring method
    t=y+a[c]-(c<"V"and 5 or 0)-- if c=="U", this question vote gives only 5
    y=t>199 and 200 or t      
  end)
  e=e+x f=f+y                 -- sum the scores over multiple days
end)
print(e-f)                    -- output the difference
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.