# Calculator that adds char values

Build a calculator, that takes any string, from a file, stdin or whatever, and adds up all the values of the chars.

Example

Input
Hello World!

Output
1085


# Rules

The calculator needs to accept just ASCII encoding.

The shortest code wins.

# Notes

Regarding to the comment of m.buettner, I need to say, I didn't thought of the multibyte part.
So I leave it as a bonus thing aswell.
The calculator should be run as written, so no need to modify before compiling or interpreting.

# Bonus

Thanks to Synthetica, here is one more bonus,

The program that has the lowest output when you use its code as its input wins gets a star.

I don't want to modify it completly.

If you write it additional to output the (right) value in UTF-8 you get a star.

The code that executes fastest on my Laptop (Lenovo Yoga 13 Intel Core i5 3317U 1.7Ghz, 8GB RAM, 128GB SSD, Intel HD 4000, Windows 8) gets a star.

Web codes will run first under IE11 with chakra and then in FireFox 29.0.1 with SpiderMonkey

Linux code will run on a Raspberry Pi with Raspbian.

The teststring is this:

q/%8hnp>T%y?'wNb\},9krW &D9']K$n;l.3O+tE*$*._B^s!@k\&Cl:EO1zo8sVxEvBxCock_I+2o6 yeX*0Xq:tS^f)!!7=!tk9K<6#/Eks(D'$z$\6Ac+MT&[s[]_Y(<g%"w%cW'c&q)D$0#C$QGf>?A$iawvc,}9!('c&q)D$0#C$QGf>?A$iawvc,}9!(


Have fun coding :)

# Bonusscoring

I plan to do the scoring at this Saturday so the 07.06.14, all answers after that date won't get bonus points ;)

You can download the code I gonna use for testing here feel free to fork and improve it :)

Little update because of the bonus, my laptop is partially broken so I will do it probably next weekend, I am really sorry for that :(

• I get 1085 for Hello World! using two different languages for ASCII values on my computer. – Kyle Kanos Jun 5 '14 at 14:21
• He probably forgot to add the '!'. edit you were 3 seconds faster... – gxtaillon Jun 5 '14 at 14:22
• Could one please explain the downvotes? – Knerd Jun 5 '14 at 14:33
• My guess is that the downvotes indicate that it's not really a good problem. – Kyle Kanos Jun 5 '14 at 14:37
• @Knerd mainly, because it's a bit too trivial in most languages (as you can see from the length of the submissions you already got) – Martin Ender Jun 5 '14 at 14:43

# GolfScript, 4 characters

{+}*


Simply uses the fold operator (*) to add up all the characters.

If it has to work with the empty string, 9 chars:

{{+}*}0if


Thanks to @PeterTaylor for providing an alternative 6-char version that works with empty string:

0\{+}/

• Does not work on the empty string. – Howard Jun 5 '14 at 14:32
• @Howard Good point; edited. – Doorknob Jun 5 '14 at 14:35
• 0\{+}/ supports empty string – Peter Taylor Jun 5 '14 at 14:40
• @Doorknob sorry for the stupid question, how to I input data? I use golfscript.apphb.com – Knerd Jun 5 '14 at 15:21
• @immibid A cyclops with a weirdly shaped eye. :-P (or, in GolfScript, the "swap-and-add-each" face!) – Doorknob Jun 6 '14 at 11:49

# APL (8)

+/⎕UCS⍞


Explanation:

• +/ sum of
• ⎕UCS unicode values of
• ⍞ character input
• What would be the result for Hello World!? – Knerd Jun 5 '14 at 14:30
• @Knerd: 1085. It wouldn't be correct if it gave another output. It sums the values of the Unicode codepoints of the characters. – marinus Jun 5 '14 at 14:43
• ok, I didn't got what the ⍞ means ;) – Knerd Jun 5 '14 at 14:44
• @knerd: ⍞ means read a line from the keyboard – marinus Jun 5 '14 at 14:49
• Do you know an APL interpreter that is free? – Knerd Jun 5 '14 at 17:05

main=interact$show.sum.map fromEnum  • From where does it read the text? – Knerd Jun 5 '14 at 14:47 • stdin. $ printf "Hello World!" | ./charsum – gxtaillon Jun 5 '14 at 14:50
• ok, I couldn't get it run on my Windows machine, I gonna try it on the rpi when I am at home – Knerd Jun 5 '14 at 14:54
• When I execute your code, I just get the string "Hello World!" as Output. This is my commandline: ECHO "Hello World! | ghci charsum.hs – Knerd Jun 5 '14 at 16:25
1085

# gs2, 1 byte

d


d (0x64 / sum), of course, sums up all bytes in standard input.

# Python 3 - 28 bytes

print(sum(map(ord,input())))


Example run:

$./sum_string.py <<< 'Hello World!' 1085  Gets input from stdin, maps the ord function to it to get the ASCII value of each character, sums it and prints. • Ninja'd, I had the exact same idea. +1 for that. – seequ Jun 5 '14 at 15:16 • @TheRare So did I, even though mine was longer, because I used Python 2.7. I'm getting rusty ;) – ɐɔıʇǝɥʇuʎs Jun 5 '14 at 15:17 • @Synthetica I always use Python 2.7, on which the answer would have been print sum(map(ord,raw_input())) – seequ Jun 5 '14 at 15:18 • @TheRare Which was my exact answer ;) – ɐɔıʇǝɥʇuʎs Jun 5 '14 at 15:19 • Nitpicking here, but you can make it perform better by changing map(ord,input()) to input().encode(). Bytes objects can still be summed, and it stays the same length. – cjfaure Jun 6 '14 at 14:30 # CJam, 3 bytes (sum 260) q1b  You can try it online. Thanks jimmy23013 for helping chop off 2 characters :) Explanation: q read the input into a string 1b convert from base 1, treating each character as its numeric value  • q1b is shorter. – jimmy23013 Jan 4 '16 at 3:24 ## Befunge98, 6 bytes, sum: 445 2j@.~+  Any interpreter should be fine. I use CCBI. Use as follows: printf 'Hello World!' | ccbi calc.fg  Works for multibyte chars and empty strings. Explanation • 2j - jump over the next two instructions (@ and . - see below) • ~ - put the next char on the stack • + - add the code value of the new char to the current sum. The instruction pointer wraps to the beginning and the cycle repeats • when ~ encounters an EOF it inverses the direction of the pointer and the two "hidden" instructions are executed: • . - print the sum • @ - exit ## Ruby, 13 12 bytes p~9+gets.sum  sum is a built-in function that sums the characters of a string. Subtracts 10 to account for the newline at the end of gets's return value. (Edited 4 years later to change x-10 to ~9+x... the value of ~9 is -10, but it lets us remove the space between p and its argument, saving a byte.) • I am not familiar with Ruby at all, could you explain your code please? – Knerd Jun 5 '14 at 14:30 • gets is a function that reads a string from standard in until a newline is read, it returns a String. String#sum adds the values of each character, which returns a Fixnum. Fixnum#- is just subtraction. p is a method for outputting the debug value of something on a line. – Kyle Smith Jun 5 '14 at 14:35 # Python, 24 bytes This is shorter than any Python solution so far: an unnamed anonymous function, which takes the string as an argument, and returns the sum. lambda x:sum(x.encode())  Try it online! First, x.encode() transforms it into a bytes object. Then, sum adds the char-code values. As this is a lambda function, the value is implicity returned. Additionally, one could have lambda x:sum(map(ord,x)) for the same byte count. ## PowerShell - 27 [char[]]$args[0]|measure -s


Example

> SumChars.ps1 'Hello World!'

Count    : 12
Average  :
Sum      : 1085
Maximum  :
Minimum  :
Property :

• 26 if you use [char[]]"$args"|measure -s as long as there is only one$arg entry. – TessellatingHeckler Jan 5 '19 at 8:34

# Julia - 11 7 characters, resultant sum = 943 536

Since the question allows the input to come from whatever source you want, I choose an existing variable. Assume that A contains the string we wish to evaluate.

sum(A)1


As it turns out, you can sum the string directly, and it will evaluate... however, due to the way that summing of chars is handled, if there is an odd number of characters in the string, it will output a character, rather than an integer of any sort. As such, we force it to cast to int by multiplying by 1.

Old version:

sum(A.data)


Will output in a hexadecimal notation (if the sum is less than 256, it'll be 0x??, otherwise it'll be 8 byte as 0x????????). If used in code where the result is used, it will operate just like any other number (it's just how Julia displays unsigned ints).

To see the value of the result in decimal, enclose the above in int(), as in int(sum(A.data)).

For anybody who doesn't know Julia, you assign to A exactly the same way you do other assignments to variables. So, A="Hello World!" or A="sum(n.data)". In the case where you need to put in " or ' characters, there are multiple options, the easiest of which (because it avoids need for knowledge of the nuances of Julia string literals) is A=readline(), followed by simply typing in the string into STDIN (won't handle newlines, though). The escape sequence for newline is, as usual, \n, but I don't believe you can use that with readline().

• +1 for the god damn clever solution ^^ Could you post, how to assign the test value to the variable n? I don't know Julia at all ;) – Knerd Jun 6 '14 at 7:09
• @Knerd - I've edited it in. Hope that helps. – Glen O Jun 6 '14 at 11:12
• Great, thank you. I try to test it later :) – Knerd Jun 6 '14 at 11:14
• Minor change - switched variable from n to A to reduce the resultant sum from 988 to 943. – Glen O Jun 6 '14 at 17:22
• OK, much bigger change - I realised that you can sum the string directly, rather than extracting the characters with .data; but because they're characters, they produce a character result for an odd number of characters. Multiplication by 1 corrects that. – Glen O Jun 6 '14 at 17:29

# K5, 2 bytes (function), 5 bytes (program)

## Function

+/


## Program

+/0:


Not sure if K5 was created before or after this challenge was posted. Regardless...THIS IS AWESOME!!

In K5, if you perform arithmetic operations on strings, it converts the characters to their ASCII codes. So this just uses the sum operator +/ (actually, it's plus + over).

# Matlab/Octave 4 bytes (bonus: 405)

This code is an anonymous function, that does the job, it will take a string, and return the required number.

@sum

• I am not sure about the gs2 answer, but at least with the same approach as the Julia answer, I should still write sum(A). I think sum alone is not ok (wouldn't even be valid code=). – flawr Jan 6 '16 at 17:33

# Go (59 characters)

func d(s string)(t int){for _,x:=range s{t+=int(x)};return}


Everything in Go is utf8 by default. Codetext in  delimeters run through itself gives an output of: 5399.

• I have to say I'm rather surprised there's no math.Sum for use with map or similar – cat Jan 2 '16 at 14:37

# Jolf, 2 bytes (non-competing)

Try it here!

ui
u  sum of
i  the input string


Umm... I don't know what else to say.

# Gol><>, 4 bytes (non-competing)

Note: this language is newer than the challenge.

iEh+

• Is it pronounced like 'Golfish?' – cat Jan 2 '16 at 18:01
• @cat Yes, it's golfish. – randomra Jan 2 '16 at 18:08
• @randomra is that "gol•fish" or "golf•ish"? As in a fish with gol, or something kind of like golf? – Cyoce Jan 6 '16 at 15:22

# Javascript ES6, 41 bytes

_=>[..._].map(y=>x+=y.charCodeAt(),x=0)|x


Thanks to @ETHproductions for 2 bytes saved!

• How about _=>[..._].map(y=>x+=y.charCodeAt(),x=0)|x? – ETHproductions Jan 4 '16 at 2:57

fun$x=foldl op+0(map ord(explode x))  Converts String to char array, calculates ascii number of each value and calculates the sum of all ascii numbers. # C 32 f(char*s){return*s?*s+f(s+1):0;}  • main(int argc,char **argv){return(argc?main(0,&(argv[1])):(**argv?**argv+main(0,argv)+((*argv)++?0:0):0));} (107 chars) though it ignores the first character for some reason. Also, POSIX exit codes are only 8 bits; in bash, echo$?. – user21677 Jun 5 '14 at 19:27
• the rules were a little bit broad so i didn't use main. i'll work on something shorter maybe – bebe Jun 5 '14 at 19:51
• @bebe I changed the rules a bit, to make it clear what is needed ;) – Knerd Jun 6 '14 at 7:11

## D (function: 60)

Definitely not in it to win it.

Assuming it doesn't need to be a complete program

int c(string i){int s;foreach(e;i){s+=cast(int)e;}return s;}


Called like so

void main ()
{
import std.stdio;
auto hw = "Hello World!";
writefln("%s = %d", hw, c(hw));
}


Output:

Hello World! = 1085


## D (program: 133)

Does not count line breaks.

void main(){import std.algorithm,std.stdio;stdin.byLine.map!((a){int s;foreach(e;a){s+=cast(int)e;}return s;}).reduce!"a+b".writeln;}


With more whitespace and longer variable names for readability

void main () {
import std.algorithm, std.stdio;

stdin.byLine
.map!((line) {
int sum;
foreach (ch; line) {
sum += cast(int)ch;
}
return sum;
})
.reduce!"a+b"
.writeln;
}


To support line breaks in the input, I could either use byLine(KeepTerminator.yes) — the correct way, for 20 characters — or append a '\n' to my line — which breaks single-line input and may give the wrong sum on Windows because of CRLF, for 18 characters.

• +1 for posting even if you know, that you won't win – Knerd Jun 5 '14 at 18:09

## JavaScript (ES6) 54 58

alert([].reduce.call(prompt(),(v,c)=>v+c.charCodeAt(0),0))


54 bytes thanks to nderscore:

alert([...prompt()].reduce((v,c)=>v+c.charCodeAt(),0))

• Works good, I tried it by now in es6fiddle.net – Knerd Jun 5 '14 at 17:20
• You could just use Firefox ;) – core1024 Jun 5 '14 at 17:30
• I was at work so :D – Knerd Jun 5 '14 at 17:40
• 54: alert([...prompt()].reduce((v,c)=>v+c.charCodeAt(),0)) – nderscore Jun 6 '14 at 0:37
• Got it down to 51 now :) alert([...prompt(x=0)].map(y=>x+=y.charCodeAt())|x) – nderscore Jun 6 '14 at 16:05

# Delphi (87 83)

function x(s:string):int64;var c:char;begin x:=0;for c in s do x:=result+ord(c)end;


### Ungolfed

function x(s:string):int64;
var
c:char;
begin
x:=0;
for c in s do
x:=result+ord(c)
end;


Loops through S adding the ord value of the char to the result. where x==result

## Edits:

Saved 4 characters by switching to int64 and changing the adding to the sum.

• Do you have a free version of Delphi (insert you version here) availiable? – Knerd Jun 6 '14 at 14:54
• Hm.. Not really sorry. But I can explain un-golfed what happens where and do some testcases if you want. Free pascal has more or less the same syntax so you could do that. – Teun Pronk Jun 6 '14 at 14:57
• Ok, I gonna check that out. – Knerd Jun 6 '14 at 15:02

# k (8 chars)

+/6h$0:0  Q translation sum int$read0 0


Bonus value:

k)+/6h$0:0 +/6h$0:0
438i


# J (7)

So close, yet so far... Oh well, I guess 7 is decent enough, since this answer also accepts empty strings. (I'm basing my usage of a variable as input on the phrase from a file, stdin or whatever)

+/a.i.b


## Explanation:

a.

┌┬┐├┼┤└┴┘│─ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_abcdefghijklmnopqrstuvwxyz{|}~��������������������������������������������������������������������������������������������������������������������������������  a. contains all ASCII chars.  'people' i. 'pow' 0 2 6  x i. y is similar to python's [x.index(i) for i in y].  a. i. 'Hello World!' 72 101 108 108 111 32 87 111 114 108 100 33  Therefor, a. i. y converts y to an array of its ASCII values  +/1 2 3 4 5 6 21  +/ is like sum: +/1 2 3 4 5 6 means 1+2+3+4+5+6  +/ a. i. 'Hello World!' 1085  The whole thing in action For the bonus:  b=:'+/a.i.b' +/a.i.b 482  Not bad, I guess.  b=:'0\{+}/' +/a.i.b 478  Well, darn.  A=:'+/a.i.A' +/a.i.A 449  Thanks @algorithmshark  A=:'+/3 u:A' +/3 u:A 413  Thanks @marinus • +1 for the great explanation. One little question, where can I best execute J? – Knerd Jun 5 '14 at 15:07 • @Knerd From the makers (jsoftware.com) I guess, I don't know any online interpreters. (Fun fact: they have an official console for Android.) jsoftware.com/download/j801 – ɐɔıʇǝɥʇuʎs Jun 5 '14 at 15:10 • @Synthectica That is cool :D Now I need an Android smartphone :P – Knerd Jun 5 '14 at 15:11 • Renaming b to A results in a score of 449. – algorithmshark Jun 5 '14 at 16:20 • @algorithmshark Oh, right! I'll claim that star for now ;) – ɐɔıʇǝɥʇuʎs Jun 5 '14 at 16:42 ## R, 35 characters (sum of 3086) 26 bytes (sum of 2305) sum(utf8ToInt(readline()))  readline() is one character longer than scan(,"") but scan split the input on spaces by default. Usage: > sum(utf8ToInt(readline())) Hello World! [1] 1085 > sum(utf8ToInt(readline())) sum(utf8ToInt(readline())) [1] 2305 > sum(utf8ToInt(readline())) q/%8hnp>T%y?'wNb\},9krW &D9']K$n;l.3O+tE*$*._B^s!@k\&Cl:EO1zo8sVxEvBxCock_I+2o6 yeX*0Xq:tS^f)!!7=!tk9K<6#/Eks(D'$z$\6Ac+MT&[s[]_Y(<g%"w%cW'c&q)D$0#C$QGf>?A$iawvc,}9!('c&q)D$0#C$QGf>?A\$iawvc,}9!(
[1] 14835


# Japt, 6 bytes (non-competing)

This answer is non-competing because Japt was created after this challenge was posted.

U¬mc x


Pretty simple. Try it online!

### How it works

U¬mc x  // Implicit: U = input string
U¬      // Split U into chars.
mc    // Map each item to its char code.
x  // Sum.
// Implicit: output last expression

• Out of curiosity, why didn't you assign ¬ to a negation of some sort? – Conor O'Brien Jan 6 '16 at 0:49
• @CᴏɴᴏʀO'Bʀɪᴇɴ Because I was in a hurry and just assigned them as I saw need, without planning ahead. I have a set that makes more sense ready to be rolled out, by changing one line of code, but I'm leery about that because it'd invalidate nearly every existing answer. – ETHproductions Jan 6 '16 at 19:51
• That's an easy fix. Add a conditional to the header (e.g., url/interpreter.html#new=1); anything without it uses the old character set, and anything with it uses the new character set. – Conor O'Brien Jan 6 '16 at 19:53
• @CᴏɴᴏʀO'Bʀɪᴇɴ Thanks, I'll consider that. – ETHproductions Jan 6 '16 at 19:54

# PlatyPar, 2 bytes (non-competing)

us


u generates an array of all charcode values in the input string, and s finds their sum.

When run on itself, it returns 232.

This is similar to Conor's Jolf answer, except that I use a byte to convert the string into an array of character codes (which is implicit in Jolf), whereas he uses a byte to retrieve the input (which is implicit in PlatyPar).