Skip to content

Instantly share code, notes, and snippets.

@yzyzsun
Last active July 29, 2021 18:12
Show Gist options
  • Save yzyzsun/8248274b9560628f6beac46c6bfca08b to your computer and use it in GitHub Desktop.
Save yzyzsun/8248274b9560628f6beac46c6bfca08b to your computer and use it in GitHub Desktop.
A polyglot summation challenge
The summation challenge, extended from the classical a-plus-b problem, is a
programming challenge for beginners. A programmer is asked to write a program to
read multiple integers separated by whitespace from a single line and then print
out their sum. Although not difficult, different solutions to this problem can
exhibit different characteristics of programming languages. Once I start to
learn a new language, I will add a new solution here.
#include <stdio.h>
int main(void) {
int s = 0, n;
while (scanf("%d", &n) == 1) s += n;
printf("%d\n", s);
return 0;
}
(use '[clojure.string :only (split)])
(println (reduce + (map read-string (split (read-line) #" "))))
#include <iostream>
int main() {
int s = 0, n;
while (std::cin >> n) s += n;
std::cout << s << std::endl;
return 0;
}
using System;
using System.Linq;
class sum {
static void Main() {
Console.WriteLine(Console.ReadLine().Split().Sum(x => Int32.Parse(x)));
}
}
import 'dart:io';
void main() {
int sum = stdin.readLineSync()!.split(' ').fold(0, (s, n) => s + int.parse(n));
print(sum);
}
#!/usr/bin/env escript
main(_) ->
io:format("~w~n",
[lists:foldl(fun(X, Sum) -> element(1, string:to_integer(X)) + Sum end,
0, string:split(io:get_line(""), " ", all))]).
#!/usr/bin/env elixir
IO.gets("")
|> String.split
|> Stream.map(&String.to_integer/1)
|> Enum.sum
|> IO.puts
open System
open System.Linq
Console.ReadLine().Split().Sum(fun x -> Int32.Parse(x))
|> Console.WriteLine
package main
import (
"bufio"
"fmt"
"os"
"strconv"
)
func main() {
sum := 0
scanner := bufio.NewScanner(os.Stdin)
scanner.Split(bufio.ScanWords)
for scanner.Scan() {
if i, err := strconv.Atoi(scanner.Text()); err == nil {
sum += i
}
}
fmt.Printf("%d\n", sum)
}
main :: IO ()
main = interact $ show . sum . map read . words
import java.util.Scanner;
public class sum {
public static void main(String[] args) {
var sum = 0;
var sc = new Scanner(System.in);
while (sc.hasNextInt()) sum += sc.nextInt();
System.out.println(sum);
}
}
readline() |>
split |>
a -> map(x -> parse(Int, x), a) |>
sum |>
show
#!/usr/bin/env node
const readline = require('readline');
const rl = readline.createInterface({ input: process.stdin });
rl.on('line', line => {
const sum = line.split(' ').map(x => Number(x)).reduce((x, y) => x + y);
console.log(sum);
rl.close();
});
(require :uiop)
(print (loop for i in (uiop:split-string (read-line)) sum (parse-integer i)))
@import Foundation;
int main(void) {
@autoreleasepool {
NSFileHandle *stdin = [NSFileHandle fileHandleWithStandardInput];
NSFileHandle *stdout = [NSFileHandle fileHandleWithStandardOutput];
NSString *input = [[NSString alloc] initWithData:stdin.availableData encoding:NSASCIIStringEncoding];
NSArray *array = [input componentsSeparatedByString:@" "];
int sum = 0;
for (NSString *number in array) {
sum += number.intValue;
}
[stdout writeData:[[NSString stringWithFormat:@"%d\n", sum] dataUsingEncoding:NSASCIIStringEncoding]];
}
return 0;
}
#!/usr/bin/env ocaml
read_line ()
|> String.split_on_char ' '
|> List.map int_of_string
|> List.fold_left (+) 0
|> print_int
program sum;
var
s, n: integer;
begin
s := 0;
while not eoln do
begin
read(n);
s := s + n;
end;
writeln(s);
end.
#!/usr/bin/env python3
print(sum(map(int, input().split())))
cat(sum(strtoi(unlist(strsplit(readline(), " ")))))
#!/usr/bin/env raku
my $list = get.split(' ').map: *.Numeric;
say $list.sum;
#!/usr/bin/env ruby
puts gets.split.collect(&:to_i).inject(:+)
use std::io;
fn main() {
let mut input = String::new();
io::stdin().read_line(&mut input).unwrap();
let sum: i32 = input
.split_whitespace()
.map(|x| x.parse::<i32>().unwrap())
.sum();
println!("{}", sum);
}
import scala.io.StdIn.readLine
object sum {
def main(args: Array[String]): Unit = {
println(readLine split ' ' map (_.toInt) reduce (_+_))
}
}
(display (do ((n 0 (read)) (s 0 (+ s n))) ((eof-object? n) s)))
#!/bin/sh
read input
echo $((${input// /+}))
let
val input = valOf (TextIO.inputLine TextIO.stdIn)
val numbers = String.tokens Char.isSpace input
val sum = foldl (fn (n, s) => s + valOf (Int.fromString n)) 0 numbers
in
print (Int.toString sum)
end
#!/usr/bin/env gst
strings := stdin nextLine subStrings: ' '.
integers := strings collect: [ :x | x asInteger ].
sum := integers inject: 0 into: [ :sum :x | sum + x ].
Transcript showCr: sum asString.
print(readLine()!.split(separator: " ").map({ Int($0)! }).reduce(0, +))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment