# Sum of positive integers. [closed]

## Problem:

Given a set of integers, find the sum of all positive integers in it.

### Input:

• t – number of test cases [t < 1000]
• On each of next t lines, an integer N [-1000 ≤ N ≤ 1000]

### Output

The program should output the sum of all the positive integers.

Check your code in online judge

### Score

Score is equal to size of source code of your program except symbols with ASCII code ≤ 32.

Here is the best score list: Python Best Scores (Best score is 29)

• There are a lot more codegolf challenges at spoj.pl/SHORTEN. Don't see the point of duplicating them here though. Commented Feb 24, 2011 at 12:22
• why is this question tagged python.. Are we interested in python solution only? Commented Feb 24, 2011 at 13:56
• I don't think questions from contest sites should be posted here. Commented Feb 24, 2011 at 14:01
• I already did this one on SPOJ. A while ago they promoted all the Python2.6 answers to Python3 even though some of them wont run under Python3 and would be longer in Python3 - eg have to use int(input()) instead of input() and print(x) instead of print x. So I don't take SPOJ very seriously anymore. I'm tied with Tim Peters and that's good enough for me :) Commented Feb 24, 2011 at 21:22
• I just want to point out, that skipping the T (number of ...errr...numbers (?) ) is not an option...since the testcases involve extra data after T numbers...your code will fail at SPOJ. Everyone (3 answers below) seemed to have cleverly skipped the first integer. Commented Feb 25, 2011 at 9:36

## Perl, 30

so close to that python best of 29, but had to add +1 for the -p switch

$s.=$_}{$s=~s/\s\d+/$_+=$&/eg  • This can be modified into an alternative 20 char solution: -p0 s/\n\d+/$\+=$&/ge}{. 19 when not counting \n. Commented Feb 11, 2015 at 10:21 # Python 3, score: 63 61 r=0 q=input w=int for i in[1]*w(q()): t=w(q()) r+=t+abs(t) print(r/2)  I don't really know python, so I'm having a considerably difficult time making this any smaller. # Python, score: 49 48 r=0 q=input for i in[1]*q(): t=q() r+=t+abs(t) print r/2  Same as above, but python 2 doesn't need the casting to int, apparently. • So do I. I'm not entirely sure where 49 came from. Commented Jul 9, 2013 at 19:34 • my mistake -- apparently characters with ascii value < 33 are discounted. Commented Jul 9, 2013 at 19:49 • if whitespace etc doesn't count, then it's shorter to put "compound" statements like r,q,w=0,input,int as single statements on separate lines; r=0 q=input w=int (where space is newline) Commented Jul 10, 2013 at 11:40 • The reason for casting to int in Python 3 is input is not the same function : see this SO answer Commented Feb 2, 2014 at 11:04 # Python One-statement Solution ## Python 3 (60 chars, 66 with spaces) print(sum(x for x in(int(input())for _ in[1]*int(input()))if x>0))  ## Python 2 (48 chars, 55 with spaces) print sum(x for x in(input()for _ in[1]*input())if x>0)  May be shortened by one character i=input print sum(x for x in(i()for _ in[1]*i())if x>0)  # C# using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication1 { static class Program { static void Main(string[] args) { Console.WriteLine(Console.In.ReadToEnd().Split('\n').Sum(l => { Int32 v; return Int32.TryParse(l, out v) ? v.To(1000).Where(x => x > 0).Sum() : 0; })); } static IEnumerable<int> To(this int a, int b) { for (var i = a; a <= b; a++) { yield return i; } } } }  # PERL, 21 chars (score 20) $a+=<>for 1..<>;say\$a

• I don't get it, how this eliminates negative numbers from the sum? Commented Feb 11, 2015 at 10:04

# dc, 22 chars

0?[sa?+la1-d0<b]dsbxrp


Negative numbers must be specified in the dc notation, i.e. with underscore: _20.

# Smalltalk, 79

b:=[:x|Number readFrom:Stdin].(((1 to:(b value:1))collect:b)select:[:i|i>0])sum


## Windows Batch, 68 (characters >= 32)

I was about to post an extremely simple solution, but then I realised you have to read the number of test cases. Initially I just had for %%a in (%*)do set/a"i+=%%a" echo %i%.

set/p t=
for /l %%i in (1 1 %t%)do call :a
echo %i%
:a
set/p N=
if %n% geq 0 set/a"i+=N"


It reads t, then each N from stdin.

## Python, 41

i=input
print sum(len(" "*i())for j in[0]*i())


## Python, 42

c=""
i=input
exec'c+=" "*i();'*i()
print len(c)

• This is a pretty smart solution. FWIW, I think the \n should count as two characters, as that's what it is in your source code before being executed. Commented Mar 5, 2014 at 11:07

# J - 22 char

All these inputs blowing up the character count. Envious of APL here...

+/0>.".1!:1#&1".1!:1]1


Explained:

• 1!:1]1 - Read in a line of input (1!:1) from input (file handle 1).
• #&1". - Convert to an integer (".) and create a list of 1s that long (#&1).
• ".1!:1 - Read in a line for each 1 in the list, and convert them to integers.
• 0>. - Take the greater of each integer and 0, effectively zeroing the negative numbers.
• +/ - Sum all the integers together.

Usage:

   +/0>.".1!:1#&1".1!:1]1
3
11
909
-67
920

• You can use echo for the output. Commented Jul 19, 2015 at 11:59

# K - 20 char -2 = 18 pts

Had two 20 char solutions, and this one has more whitespace.

(. 0:){x+0|. 0:}/0


Explained:

• n f/0 - Apply the function f to 0, n times.

• (. 0:) - Read in a line (0:) from input (file handle ) and convert to integer (.).

• {x+0|. 0:} - Read in an integer (. 0:), take the greater of it and zero (0|), and add it to the argument (x+).

Usage:

  (. 0:){x+0|. 0:}/0
4
123
-99
12
9
144


# JavaScript 93

Works for t integers, but said integers need to be entered with spaces in between.

y=(x=prompt().replace(/-\d{1,4}/g,"").replace(/ /g,"")).length;for(s=0;y--;)s+=+x[y];alert(s)

Takes the prompt, strips negative numbers and spaces, and adds the numbers...

# Pyth - 7

Input in pyth is only one line, so it accepts comma-delimited instead of newline delimited. Pyth is not on Spoj, but there wasn't any rule saying it had to be.

sf>TZtQ


Very simple:

s      sum
f      filter by
>TZ    filter arg greater than zero
tQ     run filter on all but first element of evaluated input


# C#, score: 174

using System;

class P
{
static void Main(string[] a)
{
uint s = 0, t, n;
for (uint.TryParse(Console.ReadLine(), out t); t-- > 0; uint.TryParse(Console.ReadLine(), out n), s += n) ;
Console.WriteLine(s);
}
}


## C, 60 characters

There doesn't seem to be much to improve.

c;

main(x)
{
while (0 < scanf("%d", &x))
c += x * (x > 0);

printf("%d", c);
}


# Factor, 95 bytes

[ [ readln dup string>number ] [ string>number dup [ 2 * ] [ ] if ] produce [ 0 max ] map sum ]


Like a lambda; use it with call.

# C++ (96 points)

#include<iostream>
main()
{
int t,n,s=0;
for(std::cin>>t;t;std::cin>>n, --t, n>0?s+=n:s);
std::cout<<s;
}


# Python, 43

c=0
i=input
exec'b=i();c+=b*(b>0);'*i()
print c

• Please use code block formatting, so scripts like Code Golf UserScript Enhancement Pack can insert the code block length. Commented Jul 19, 2015 at 11:20

Python 52 Characters

c = 0
for i in range(t):
k = input()
if k>0:
c+=k
print c

• Welcome to PPCG! It appears that neither spaces nor newlines should be included in the score, so I count your answer as 43, not 52. Also, it looks like three lines of your code are missing the indentation required by the for loop. Commented Sep 24, 2015 at 10:58
• @MartinBüttner Thanks for the correction. When i submitted my code, 52 was what i saw. Commented Sep 24, 2015 at 14:46