सकारात्मक पूर्णांकों का योग। [बन्द है]


14

मुसीबत:

पूर्णांक के एक सेट को देखते हुए, इसमें सभी सकारात्मक पूर्णांकों का योग खोजें।

इनपुट:

  • टी - परीक्षण के मामलों की संख्या [ टी <1000]
  • प्रत्येक अगली टी लाइनों पर, एक पूर्णांक N [-1000 ≤ N next 1000]

उत्पादन

कार्यक्रम को सभी सकारात्मक पूर्णांकों के योग का उत्पादन करना चाहिए।

ऑनलाइन जज में अपना कोड जांचें

स्कोर

स्कोर ASCII कोड। 32 वाले प्रतीकों को छोड़कर आपके कार्यक्रम के स्रोत कोड के आकार के बराबर है।

यहाँ सर्वश्रेष्ठ स्कोर सूची है: पायथन बेस्ट स्कोर (सर्वश्रेष्ठ स्कोर 29 है)


13
वहाँ एक बहुत में और अधिक codegolf चुनौतियां हैं spoj.pl/SHORTEN । हालांकि उन्हें यहाँ नकल करने की बात नहीं दिखती।
हॉलवबो

3
यह प्रश्न अजगर को क्यों टैग किया गया है .. क्या हम केवल अजगर समाधान में रुचि रखते हैं?
अमन ZeeK वर्मा

24
मुझे नहीं लगता कि प्रतियोगिता स्थलों के प्रश्न यहां पोस्ट किए जाने चाहिए।
fR0DDY

2
मैंने पहले से ही SPOJ पर ऐसा किया है। कुछ समय पहले उन्होंने Python2 के सभी Python2 उत्तरों का प्रचार किया, भले ही उनमें से कुछ Python3 के तहत चल रहे हों और Python3 में लंबे समय तक रहेंगे - उदाहरण के लिए इनपुट () और प्रिंट (x) के बजाय int (इनपुट) () का उपयोग करना होगा प्रिंट x का। इसलिए मैं अब SPOJ को गंभीरता से नहीं लेता। मैं टिम पीटर्स के साथ बंधा हुआ हूं और मेरे लिए यह काफी अच्छा है :)
gnibbler

4
मैं सिर्फ यह बताना चाहता हूं, कि T(संख्या ... इर्र ... ... (?)) को Tछोड़ना एक विकल्प नहीं है ... क्योंकि टेस्टकेस में नंबर के बाद अतिरिक्त डेटा शामिल होता है ... आपका कोड SPOJ पर विफल हो जाएगा। हर कोई (नीचे 3 उत्तर) लगता है कि पहले पूर्णांक को बड़ी चतुराई से छोड़ दिया था।
st0le

जवाबों:


34

व्हॉट्सएप, ०

मैं विरोध नहीं कर सका। S= space, T= tab, N= newline, सभी में ASCII कोड <= 32 हैं।

SSSSNSSSSNTTSSSSSTNTNTTNSSSNSSSSTNTTTNTSTNSSSSTNSSSSTNTTTSSSSTNTSSTTTSSSSSTSNTNTTSSSSTSNTTTNTTSNSSSSNSSSSTSNTTTSSSSNTTTTSSSTTSNSNSNNSSTNSSSSNTTTTNSTSSSSTSTSNTNSSNNN

Base64 आसान कॉपी और पेस्ट के लिए एन्कोड किया गया।

ICAgIAogICAgCgkJICAgICAJCgkKCQkKICAgCiAgICAJCgkJCQoJIAkKICAgIAkKICAgIAkKCQkJ
ICAgIAkKCSAgCQkJICAgICAJIAoJCgkJICAgIAkgCgkJCQoJCSAKICAgIAogICAgCSAKCQkJICAg
IAoJCQkJICAgCQkgCiAKIAoKICAJCiAgICAKCQkJCQogCSAgICAJIAkgCgkKICAKCgo=

3
(+1) अच्छा कार्यक्रम! एक छोटा "एफडब्ल्यूआईडब्ल्यू": Sकिसी संख्या के द्विआधारी कोडिंग में एक अनावश्यक के 9 उदाहरणों के कारण 9 वर्णों को हटाया जा सकता है । ये प्रपत्र के सभी में धक्का-संख्या-टू-ढेर निर्देश दिए गए हैं SSSS...N, जहां 4 Sकोड एक ज़रूरत से ज़्यादा प्रमुख 0. (। बेशक यह स्कोर पर कोई प्रभाव नहीं है)
रेस

13

तत्व, 17 अक्षर प्लस 1 स्थान

_'[_ 2:n;0>[n~+]]`

यह मेरी पहली निर्मित भाषा है। यह बहुत कॉम्पैक्ट और मानव पठनीय होने के लिए डिज़ाइन किया गया है। सभी निर्देश एक वर्ण लंबे होते हैं और एक ही कार्य करते हैं।

स्मृति संरचनाओं के रूप में तत्व में दो ढेर और एक हैश होता है। दो स्टैक को मुख्य स्टैक और कंट्रोल स्टैक कहा जाता है। मुख्य स्टैक है जहाँ अंकगणित, I / O और हैश हेरफेर होता है। कंट्रोल स्टैक वह जगह है जहाँ लॉजिक ऑपरेशंस होते हैं, और यह स्टैक लूप्स के लिए कुछ समय के लिए कंट्रोल करता है।

तत्व के पीछे मूल विचार यह है कि एक हैश है जो संख्याओं / तारों को संग्रहीत करता है, जबकि स्टैक का उपयोग इन संख्याओं पर गणना करने के लिए किया जाता है। इन गणनाओं के परिणामों को भविष्य के उपयोग के लिए हैश में एक निश्चित स्थान सौंपा जा सकता है। हैश की विभिन्न सामग्रियों को तत्व कहा जाता है, इसलिए यह एक सरणी के समान है लेकिन इसमें गैर-संख्यात्मक नाम हो सकते हैं।

संपादित करें: आप एक (पर्ल में लिखा) तत्व के लिए दुभाषिया पा सकते हैं यहाँ

यहां ऑपरेटरों की सूची दी गई है: इनमें से कुछ उदाहरणों में, m और n पहले से ही स्टैक पर संख्याओं का प्रतिनिधित्व करते हैं।

text  --pushes the string "text" onto the main stack
'     --pops from main stack and pushes onto control stack
"     --pops from control stack and pushes onto main stack
#     --pops from main stack and destroys
[]    --FOR statement (view the top number number from control stack and eval those many times)
{}    --WHILE (loop until top number on control stack is 0)
(     --pops from main stack, removes first character, pushes the remaining string onto stack, and pushes the removed character onto stack
)     --pops from main stack, removes last character, pushes the remaining string onto stack, and pushes the removed character onto stack
~     --pops from main stack, pushes contents of the element with that name
+-*/%^ --pops two most recently named elements, adds/negates/multiplies/divides/modulates/exponentiates them, and places the result on the stack
mn;   --pops m and n and assigns element n the value of m
mn@   --pops m and n and moves mth thing in stack to move to place n in stack
m$    --pops m and pushs size of m onto the stack
mn:   --pops m and n and pushes m onto the stack n times
mn.   --pops m and n and pushes m concatonated with n
m?    --pops m and pushes 0 onto control stack if m is '0' or and empty string, else pushes 1 
\     --escapes out of next character, so it isn't an operator and con be pushed onto the stack
><=   --pops two numbers off of stack and tests, pushes 1 onto control stack if true and 0 if false
`     --pops from main stack and prints
&|    --pops two items from control stack, performs and/or respectively, and pushes result back onto control stack
!     --pops a number off of control stack, pushes 1 if 0 or empty string, 0 otherwise
_     --inputs a word and pushes onto main stack
m,    --pops m from main stack, coverts it to char and pushes, converts to num and pushes
Newlines and spaces separate different elements to be pushed onto the stack individually, but can pushed onto the stack using \

कार्यक्रम कैसे काम करता है, इसका एक पूर्वाभास है:

_'[    --take the first line of input, transfer it to the control stack, and start a for loop
_ 2:   --take one more line of input, and duplicate it so that there are two copies
n;     --take one copy and put into element n
0>     --push a zero onto the stack, remove the zero and the other copy of the input, and compare. A 1 will be placed on the control stack if the input was greater than zero, a 0 otherwise.
[      --starts another for loop if the comparison was true. This loop will be repeated once if the comparison was true and no times if it was false, so it is the same as an IF statement.
n~     --pushes n onto the main stack, then pops it ans replaces it with the contents of n, which is the number stored earlier
+      --takes the number and adds it to the running total, which is contained as the last item on the stack
]      --ends the inner for loop
]      --ends the outer for loop
`      --print the top item (also the only item) on the stack to output

6
इस तरह एक प्रविष्टि एक काम के माहौल के लिए एक सूचक के साथ बहुत सुधार होगा।
dmckee --- पूर्व-मध्यस्थ ने बिल्ली

5
मुझे नहीं लगता कि आप समझते हैं कि "मानव-पठनीय" का क्या मतलब है।
wchargin

3
@Chargin वह पर्ल के लिए प्रयोग किया जाता है ...
Caridorc

@Chargin जब तक आप इसे नहीं सीखते तब तक हर भाषा अप्राप्य है। ;)
मार्टिन एंडर

8

पर्ल, ३१

<>;$i+=$_*($_>0)while<>;print$i

sayयह सिर्फ एक छोटा सा बनाने का उपयोग नहीं होगा ? यह 29 चरित्र के साथ सबसे अच्छा टाई होगा।
श्री लामा

नहीं, क्योंकि sayअंतर्निहित नहीं है (और कम से कम) को कमांड-लाइन स्विच की आवश्यकता होती है जो वर्ण गणना की ओर गिना जाएगा।
टिमवी

इसके $\ बजाय 29 बाइट्स को छोटा किया जा सकता है $i:<>;$\+=$_*($_>0)while<>;print
Heiko Oberdiek

5

रूबी 1.9.2, 37

p eval [*$<].join.gsub(/\A\d+|-\d+|\n/, '+0')

रूबी स्क्रिप्टनाम फ़ाइल_विथ_ चिह्न की तरह कॉल करें।


मैं बहुत रूबी नहीं पढ़ सकता, लेकिन क्या यह भी परीक्षण के मामलों की संख्या पढ़ता है?
जॉय

नहीं, यह नहीं है ...
st0le

@ st0le: बस ध्यान दिया जाता है कि जाहिरा तौर पर कोई समाधान वर्तमान में कार्य को हल नहीं करता है।
जॉय


5

हास्केल, ५ask

केवल tपूर्णांकों पर सही तरीके से काम करता है । यह Spoj के खिलाफ नहीं चला क्योंकि मैं सिर्फ वहाँ रजिस्टर करने के लिए परवाह नहीं है।

f (x:l) = take x l
main = interact $ show . sum . f . map (max 0.read) . lines

" tपूर्णांक" क्या हैं ?
वॉचर्जिन

4

कोड 89 वर्णों में


x="%d";  main(b,a,t)  {  
  for(scanf(x,&t);t;t--)
    {  scanf(x,&a); a>0?b+=a:a; }  printf(x,b-1);
       return 0; }

मैंने अपने कोड को 63 बाइट्स से कम करने की बहुत कोशिश की, लेकिन मैं इसे केवल 89 बाइट्स तक ही कम कर सकता हूं। कृपया मुझे इसे 63 बाइट या उससे भी कम करने में मदद करें।


1) मैंने 90 अक्षर गिने हैं। 2) return 0;आवश्यक नहीं है, forचक्र को अनुबंधित किया जा सकता है for(scanf(x,&t);t--;scanf(x,&a),a>0?b+=a:a);== जो कि 78 वर्ण बनाते हैं ...
VX

Gcc के साथ संकलित नहीं करता है 4.8.1error: initializer element is not computable at load time x="%d"
mann mn

4

पर्ल, ३३

<>;while(<>){$i+=$_ if$_>0}print$i

हालांकि अंतरिक्ष आवश्यक है, इसलिए इसे गिनना मुश्किल नहीं है। ओह ठीक है, नियम नियम हैं।

हम्म। मैं शायद एक चर नाम का उपयोग करके दूर हो सकता हूं जो या तो कुल की ओर नहीं गिनता है। बात यह है, मुझे यकीन नहीं है कि मैं कोड कैसे चिपकाऊंगा।


बस उन्हें $ ^ A - $ ^ Z के रूप में दिखाएं, लेकिन सावधान रहें कि उनमें से कई चर के विशेष अर्थ हैं।
नन्हलज

3

क्लोजर, 71

(reduce + (filter pos? (map #(Integer/parseInt %) (next (line-seq *in*)))))

यह किसी भी उत्पादन का उत्पादन नहीं करता है, और कारण विफल रहता है *in*एक नहीं है java.io.BufferedReaderके रूप में के लिए आवश्यक, line-seq
जॉन क्रॉमार्टी

इसके अलावा यह लाइनों इनपुट टी की संख्या की अनदेखी करता है
जॉन क्रॉमार्टी

3

मेमोरियम में डेनिस एम। रिची

यूनिक्स 57¹ 72:

n=$(head -n1 i); echo $(($(head -n $((n+1)) i | tail -n $n | grep -v "-" | tr '\n' '+')0))

मुझे लगता है कि फ़ाइल है, जिसमें इन्टस हैं।

¹) गलत था, जिसमें लाइनों की संख्या शामिल थी, और 1 पंक्ति को बहुत कम जोड़ा गया था।

इको $ (($ (कैट आई | हेड-एन $ (हेड-एन 1 आई) | grep -v "-" | tr '\ n' '+') 0))


2

हास्केल, 51

main = interact $ show . f . lines
f (x:l) = foldl (+) 0 $ map read l

(स्पष्टता के लिए अतिरिक्त स्थान, क्योंकि वे गिनती नहीं करते हैं)

हास्केल है ... दिलचस्प है, क्योंकि आप महत्वपूर्ण स्थानों की एक महत्वपूर्ण संख्या के साथ कार्यक्रम प्राप्त करते हैं।


2
आप भूल गए ए filter (>0)
फूजएक्सएक्सएल

2

सी, 88


x="%d";  main(b,a,t)  {  
for(scanf(x,&t);t--;)  
{  scanf(x,&a); a>0?b+=a:0; }  printf(x,b-1);
return 0; }

एक और बड़े प्रयास के बाद, कोड एक वर्ण कम है, कृपया मुझे इसे कम करने में मदद करें।


6
बस अगली बार मूल उत्तर को संपादित करें
शाफ़्ट सनकी

निकालें ( return 0;) और (के {}लिए for)
l0n3sh4rk

b,x="%d";main(a,t){for(scanf(x,&t);t--&&scanf(x,&a);)b+=(a>0)*a;printf(x,b);}<- 77 बाइट्स
चलने के लिए

@walpen: उन्होंने इस तथ्य का उपयोग किया, कि उनका "argc" जैसा पैरामीटर 1 पर सेट किया गया था, आपका b अनैतिक है ...
VX

2

Befunge-98 (24)

(सुनिश्चित करें कि आप एक दुभाषिया का उपयोग करते हैं जो नकारात्मक संख्याओं को पढ़ सकता है (कुछ हद तक सामान्य बग लगता है, लेकिन RcFunge काम करता है)

<;-1\+*`0:&\_\#;.@;:;#&0 

पर्ल (25)

(पर्ल चर नामों में नियंत्रण वर्णों को अनुमति देता है, मैंने अपने चर ^ B (ASCII 2) को नाम दिया है ताकि यह लक्ष्य की ओर न बढ़े।)

<>, $ ^ B + = $ _ *! / - </> के लिए, $ ^ B प्रिंट करें

(सामान्य संस्करण (27 वर्ण)):

<>;$B+=$_*!/-/for<>;print$B

जब मैंने चर का नामकरण देखा तो मैंने आपके पहले उत्तर को अनदेखा कर दिया और पूरी तरह से उसके नीचे के उत्कृष्ट को याद किया
ardnew

2

एपीएल (10)

+/{0⌈⎕}¨⍳⎕

स्पष्टीकरण:

  • ⍳⎕: एक पंक्ति पढ़ता है, उपयोगकर्ता के इनपुट एन के लिए एक सूची [1..N] देता है
  • ¨: इस सूची में प्रत्येक तत्व के लिए ... (यानी एन बार करते हैं)
  • 0⌈⎕: एक पंक्ति पढ़ें, अधिकतम 0 और एन दर्ज करें
  • अब हमारे पास उपयोगकर्ता द्वारा दर्ज की गई सभी सकारात्मक एनएस के साथ एक सूची है, और जहां उपयोगकर्ता ने कुछ नकारात्मक दर्ज किया है।
  • +/ इस सूची का योग देता है।
  • परिणाम डिफ़ॉल्ट रूप से आउटपुट होता है (क्योंकि हम इसके साथ कुछ और नहीं कर रहे हैं)।

2

गणितज्ञ: १। १६

Boole[#>0]&/@x.x

अच्छा कार्य, लेकिन यह निर्दिष्ट न्यूलाइन-अलग इनपुट को कैसे संभालता है? यह राशि के भाग के रूप में परीक्षण मामलों की संख्या t को कैसे शामिल नहीं करता है? यह केवल निर्दिष्ट किए गए परीक्षण मामलों की संख्या तक कैसे योग करता है, भले ही अधिक दिए गए हों?
जोनाथन वान मैट्रे


1

क्यू, 12

{0+/x(&)x>0}

नमूना उपयोग

q){0+/x(&)x>0} 1 -1 2 3 -1
6

1

befunge, ३५ २४

:0`j&1-\&:0`*+\:0`3*j$.@

मारिनस के उत्तर को देखकर थोड़ी प्रेरणा के साथ, मैंने 24 पात्रों को भी प्रबंधित किया है। लेकिन मुझे एक पूरी तरह से अलग तरीका मिला है।



1

C, 70 72 अक्षर

s;main(i,c){for(;c--;i>0?s+=i:0)scanf("%d",s?&i:&c);printf("%d",s-1);}

SPOJ साइट पर परिणाम निश्चित रूप से अवास्तविक लगते हैं - मुझे नहीं पता कि इसे नीचे 63 में कैसे लाया जाए।

हालाँकि, अपरिभाषित व्यवहार का दुरुपयोग करके कुछ संकलक पर 68 अक्षर उपलब्ध हैं। निम्नलिखित 32-बिट gcc के साथ x86 लिनक्स पर काम करता है, जिस पर सभी तर्क स्टैक पर पारित किए जाते हैं।

s;main(i,c){for(;c--;i>0?s+=i:0)scanf("%d",&i+!s);printf("%d",s-1);}

1

एक्सेल, २,

=SUM(INDIRECT("A2:A"&1+A1))

A1 में काउंट करें, बाकी डेटा a2 और नीचे


1

लौंग, 108

(let [[n & m] (->> *in* java.io.BufferedReader. line-seq (map read-string))]
  (->> m (take n) (filter pos?) (apply +) println))

मैं वास्तव में चाहता हूं कि मैं इस java.io.BufferedReader.भाग से बच सकूं, क्योंकि इसकी लागत 24 चार्ट ही है। लेकिन AFAIK को इसके बिना STDIN की लाइनों को पढ़ने की कोई सुविधा नहीं है।


1

पर्ल, २०

मुझे पता है कि यह पुराना और तुच्छ है, लेकिन पर्ल के उत्तर में अभी भी सुधार किया जा सकता है:

#!perl -p
$.<2or$\+=$_*!/-/}{

यह कमाल का है! लेकिन क्या }{मतलब है / करते हैं?
डेनिएरो

0

सी ++:

#include<iostream>
using namespace std;
int main()
{
    int c,n,s=0;cin>>c;
    while(c--)
    {
        cin>>n;s+=n*(n>0);
    }
cout<<s;return 0;
}

115 अक्षर लंबे। इसे 90 में अनुकूलित करने की आवश्यकता है। कोई सुझाव?


2
बस मानक चाल: मानक C ++ या C99 में वापसी अनावश्यक है, इसमें निहित return 0है main। वैरिएबल को वैश्विक बनाकर आप =0इनिशियलाइज़ेशन को छोड़ सकते हैं । अंत में, for(;;)वर्णों की समान संख्या है, while()लेकिन आपको अभिव्यक्ति देने के लिए दो अतिरिक्त स्थान मिलते हैं।
11:25 पर

यह पहले से ही पुराना है, लेकिन यह भी, लेखन std::से पहले cinऔर coutऔर से छुटकारा पाने के using namespace std;5 अधिक वर्ण बचा सकता है।
मोरविन


0

अजगर: (92 अक्षर)

t = int(raw_input())
n = [int(raw_input()) for i in range(t)]
print(sum([n[i] for i in range(t) if n[i]>0]))

का उपयोग करते हुए a=raw_inputऔर r=rangeऔर का उपयोग कर a()और r()बाद में काफी कुछ पात्रों बचा सकता है।
मोरवीन जू


0

सी

void main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
     {
     if(i>0)
     sum=sum+i;
     }
printf("sum of positive numbers is %d",sum);
}

1
CodeGolf.SE में आपका स्वागत है! यदि आप अन्य उत्तर को देखते हैं, तो आप देखेंगे कि उनके पास प्रारूपित कोड है और कार्यान्वयन भाषा को ध्यान में रखते हुए एक न्यूनतम हेडर है; अधिक जटिल चुनौतियों पर कई के पास कार्यान्वयन और किसी भी सीमा या कोड में आश्चर्य के नोट भी हैं। इसमें से कुछ के बिना, आप उत्तर देते हैं कि यह अच्छी तरह से प्राप्त होने की संभावना नहीं है।
dmckee --- पूर्व-संचालक बिल्ली का बच्चा

मैंने वर्णों को गिना, कोड-लेआउट कार्य करने के लिए इंडेंटेशन जोड़ा, और आउटपुट की सजावट को हटा दिया। ओह - अब मुझे फिर से गिनना होगा। :)
उपयोगकर्ता अज्ञात

भाषा का नाम जोड़ा गया। यहां कटौती के लिए बहुत जगह है - sumको कम किया जा सकता है s, आउटपुट स्ट्रिंग बस हो सकता है "%d", आदि
गैरेथ


0

अजगर में 45 चरस

c=0
j=input
for i in j()*[0]:
    b=j()
    c+=b*(b>0)
print c

1
आपने कैसे गिना? यह मुझे ५४ अक्षर देता है।
मैनटवर्क

@manatwork, इस प्रश्न में गैर-मानक स्कोरिंग नियम हैं जो व्हॉट्सएप की गिनती नहीं करते हैं।
पीटर टेलर

अरे! माफ़ करना। मैंने यह खो दिया। धन्यवाद, @PeterTaylor
मैनेटवर्क
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.