# A+B

A+B
You are encouraged to solve this task according to the task description, using any language you may know.

A+B   ─── a classic problem in programming contests,   it's given so contestants can gain familiarity with the online judging system being used.

Given two integers,   A and B.

Their sum needs to be calculated.

Input data

Two integers are written in the input stream, separated by space(s):

${\displaystyle (-1000\leq A,B\leq +1000)}$

Output data

The required output is one integer:   the sum of A and B.

Example
input   output
2 2 4
3 2 5

## 0815

|x|+%

## 11l

Translation of: Python
print(sum(input().split(‘ ’, group_delimiters' 1B).map(i -> Int(i))))

## 360 Assembly

*        A+B                       29/08/2015
APLUSB   CSECT
USING  APLUSB,R12
LR     R12,R15
OPEN   (MYDATA,INPUT)
LOOP     GET    MYDATA,PG          read a single record
XDECI  R4,PG              input A, in register 4
XDECI  R5,PG+12           input B, in register 5
AR     R4,R5              A+B, add register 5 to register 4, R4=R4+R
XDECO  R4,PG+24           edit A+B
XPRNT  PG,36              print A+B
B      LOOP               repeat
ATEND    CLOSE  MYDATA
RETURN   XR     R15,R15
BR     R14
LTORG
PG       DS     CL24               record
DC     CL12' '
YREGS
END    APLUSB
Input:
          27          53
123         321
999           1

Output:
          27          53          80
123         321         444
999           1        1000


## 8th

gets dup . space eval n:+ . cr


## 8080 Assembly

As often happens with assembly of any kind, dealing with the I/O requirements turns the whole task into a grand tour of the language and environment, as one needs to read and parse decimal numbers, and then write back another decimal number. But simple addition is easy, even 16-bit addition. The 8080 is otherwise an 8-bit processor, but it includes a 16-bit add instruction (and only an add, not even a subtract), namely dad (for "double add"), which can take four forms:

	dad	b	; HL += BC (i.e., add BC reg pair to HL reg pair)
dad	d	; HL += DE
dad	h	; HL += HL (also known as "mul HL by two")
dad	sp	; HL += SP (actually the only way to get at SP at all)

Merely doing A+B, with 16-bit numbers so that ${\displaystyle (-1000\leq A,B\leq +1000)}$ will fit, would look like this:

	lxi	h,123
lxi	d,456
; HL is now 579

Then, the following is what is required to wrap it all in a CP/M command line utility. Computers based on the 8080 (or processors that are backwards compatible with it, such as the 8085 and Z80) usually ran the CP/M operating system (or something that is backwards compatible with it, such as MSX-DOS or ZSDOS). This program assembles to an 128-byte binary, which fits exactly in one CP/M block.

fcb1n:	equ	5Ch+1	; "Filename" in first FCB
fcb2n:	equ	6Ch+1	; "Filename" in second FCB
puts:	equ	9	; CP/M call to write string to console
bdos:	equ	5	; CP/M syscall address
org	100h
lxi	d,fcb1n	; Get first "file name" (i.e, first number on cmdline)
call	parse	; Parse it
push	h	; Store the number on the stack
lxi	d,fcb2n	; Get the second one
call	parse	; Parse that one too
pop	d	; Retrieve our first number and put it in DE
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;	Routine: print the signed integer in HL. 		    ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
puthl:	mov	a,h	; Get the sign bit of the integer,
ral		; which is the top bit of the high byte
sbb	a	; A=00 if positive, FF if negative
sta	negf	; Store it as the negative flag
cnz	neghl	; And if HL was negative, make it positive
lxi	d,num	; Load pointer to end of number string
push	d	; Onto the stack
lxi	b,-10	; Divide by ten (by trial subtraction)
digit:	lxi	d,-1	; DE = quotient. There is no 16-bit subtraction,
inx	d
jc	dgtdiv	; while that overflows.
mvi	a,'0'+10	; The loop runs once too much so we're 10 out
add	l 	; The remainder (minus 10) is in L
xthl		; Swap HL with top of stack (i.e., the string pointer)
dcx	h	; Go back one byte
mov	m,a	; And store the digit
xthl		; Put the pointer back on the stack
xchg		; Do all of this again with the quotient
mov	a,h	; If it is zero, we're done
ora	l
jnz	digit	; But if not, there are more digits
mvi	c,puts	; Prepare to call CP/M and print the string
pop	d	; Put the string pointer from the stack in DE
lda	negf	; See if the number was supposed to be negative
inr	a
jnz	bdos	; If not, print the string we have and return
dcx	d	; But if so, we need to add a minus in front
mvi	a,'-'
stax	d
jmp	bdos	; And only then print the string
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;	Routine: parse (possibly negative) 16-bit integer at [DE],  ;;;
;;;	result in HL.                                               ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
parse:	lxi	h,negf	; Zero out the negative flag
mvi	m,0
ldax	d	; Get first byte of number string
cpi	'-'	; If minus, it should be negative
jnz	prspos	; If not, parse as positive number
inr	m	; Set negative flag
inx	d	; The actual number starts one byte further on
prspos:	lxi	h,0	; Set our 16-bit accumulator to zero
prsdgt:	ldax	d	; Get current digit
sui	'0'	; It's ASCII, so subtract '0'
cpi	10	; Check if it is a valid digit (<10)
jnc	prsdon	; If not, that was the last character, we're done
dad	h	; Multiply accumulator by ten
mov	b,h	; There is no MUL instruction, but 10*HL = 5*(2*HL),
mov	c,l	; = 2*HL + 8*HL. BC=2*HL
dad	h	; HL *= 2
dad	h	; HL *= 2
dad	b	; HL += BC
mov	c,a	; Then, add the digit, extended to 16 bits
mvi	b,0	; by setting the top byte to zero.
inx	d	; Then, get the next digit
jmp	prsdgt
prsdon:	lda	negf	; Check if the result was supposed to be negative
dcr	a
rnz		; If not, we're done, otherwise, fall through into...
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;	Routine: negate the 16-bit integer in HL. 		    ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
neghl:	mov	a,h	; HL = -HL; i.e. HL = (~HL) + 1
cma		; Get bitwise complement of the high byte,
mov	h,a
mov	a,l	; And the low byte
cma		; We have to do it byte for byte since it is an 8-bit
mov	l,a	; processor.
inx	h	; Then add one
ret
negf:	db	0	; Space for negative flag
db	'-00000'
num:	db	'' ; Space for number Output: A>add 10 10 20 A>add 10 -5 5 A>add -1000 1000 0 A>add -1234 5678 4444 ## AArch64 Assembly Works with: as version Raspberry Pi 3B version Buster 64 bits /* ARM assembly AARCH64 Raspberry PI 3B */ /* program addAetB.s */ /*******************************************/ /* Constantes */ /*******************************************/ .equ STDOUT, 1 // linux output .equ WRITE, 64 // call system Linux 64 bits .equ EXIT, 93 // call system Linux 64 bits /*******************************************/ /* Initialized data */ /*******************************************/ .data szMessError: .asciz "Error : addAetB <number1> <number2>\n" szMessResult: .asciz "Result = " szRetourLigne: .asciz "\n" /*******************************************/ /* Uninitialized data */ /*******************************************/ .bss sZoneConv: .skip 100 .text .global main main: mov fp,sp // fp <- adresse début ldr x0,[fp] // load parameters number in command line cmp x0,3 // number in command line blt 99f // no -> error ldr x0,[fp,16] // recup address of number 1 in command line bl conversionAtoD // convert string in number in registre x0 mov x1,x0 // save number1 ldr x0,[fp,24] // recup address of number 2 in command line bl conversionAtoD // convert string in number in registre x0 mov x2,x0 // save number2 add x0,x1,x2 // addition number1 number2 ldr x1,qAdrsZoneConv bl conversion10S // result decimal conversion ldr x0,qAdrszMessResult bl affichageMess // call function display ldr x0,qAdrsZoneConv bl affichageMess // call function display ldr x0, qAdrszRetourLigne bl affichageMess mov x0,0 // return code OK b 100f 99: ldr x0, qAdrszMessError // adresse of message bl affichageMess // call function mov x0,1 // return code error 100: // standard end programm mov x8,EXIT // request to exit program svc 0 // perform the system call qAdrszMessError: .quad szMessError qAdrszMessResult: .quad szMessResult qAdrsZoneConv: .quad sZoneConv qAdrszRetourLigne: .quad szRetourLigne /******************************************************************/ /* String display with size compute */ /******************************************************************/ /* x0 contains string address (string ended with zero binary) */ affichageMess: stp x0,x1,[sp,-16]! // save registers stp x2,x8,[sp,-16]! // save registers mov x2,0 // size counter 1: // loop start ldrb w1,[x0,x2] // load a byte cbz w1,2f // if zero -> end string add x2,x2,#1 // else increment counter b 1b // and loop 2: // x2 = string size mov x1,x0 // string address mov x0,STDOUT // output Linux standard mov x8,WRITE // code call system "write" svc 0 // call systeme Linux ldp x2,x8,[sp],16 // restaur 2 registres ldp x0,x1,[sp],16 // restaur 2 registres ret // retour adresse lr x30 /******************************************************************/ /* Decimal conversion signed */ /******************************************************************/ /* x0 contains the value */ /* x1 contains the address of receiving area length >= 21 */ /* the receiving area return a string ascii left aligned */ /* et avec un zero final */ /* x0 return length string whitout zero final */ .equ LGZONECONV, 21 conversion10S: stp x5,lr,[sp,-16]! // save registers stp x3,x4,[sp,-16]! // save registers stp x1,x2,[sp,-16]! // save registers cmp x0,0 // is negative ? bge 11f // no mov x3,'-' // yes neg x0,x0 // number inversion b 12f 11: mov x3,'+' // positive number 12: strb w3,[x1] mov x4,#LGZONECONV // position last digit mov x5,#10 // decimal conversion 1: // loop conversion start mov x2,x0 // copy starting number or successive quotients udiv x0,x2,x5 // division by ten msub x3,x0,x5,x2 //compute remainder add x3,x3,#48 // conversion ascii sub x4,x4,#1 // previous position strb w3,[x1,x4] // store digit cbnz x0,1b // end if quotient = zero mov x2,LGZONECONV // compute string length (21 - dernière position) sub x0,x2,x4 // no instruction rsb in 64 bits !!! // move result to area begin cmp x4,1 beq 3f // full area ? mov x2,1 // no -> begin area 2: ldrb w3,[x1,x4] // load a digit strb w3,[x1,x2] // and store at begin area add x4,x4,#1 // last position add x2,x2,#1 // et begin last postion cmp x4,LGZONECONV - 1 // end ? ble 2b // no -> loop 3: mov w3,0 strb w3,[x1,x2] // zero final add x0,x0,1 // string length must take into account the sign 100: ldp x1,x2,[sp],16 // restaur 2 registers ldp x3,x4,[sp],16 // restaur 2 registers ldp x5,lr,[sp],16 // restaur 2 registers ret // return address lr x30 /******************************************************************/ /* conversion ascii string to number */ /******************************************************************/ /* x0 contains string address ended by 0x0 or 0xA */ /* x0 return the number */ conversionAtoD: stp x5,lr,[sp,-16]! // save registers stp x3,x4,[sp,-16]! // save registers stp x1,x2,[sp,-16]! // save registers mov x1,#0 mov x2,#10 // factor ten mov x4,x0 // save address in x4 mov x3,#0 // positive signe by default mov x0,#0 // init résult to zéro mov x5,#0 1: // loop to remove space at begin of string ldrb w5,[x4],1 // load in w5 string octet cbz w5,100f // string end -> end routine cmp w5,#0x0A // string end -> end routine beq 100f cmp w5,#' ' // space ? beq 1b // yes -> loop 2: cmp x5,#'-' // first character is - bne 3f mov x3,#1 // negative number b 4f // previous position 3: // begin loop compute digit cmp x5,#'0' // character not a digit blt 4f cmp x5,#'9' // character not a digit bgt 4f // character is a digit sub w5,w5,#48 mul x0,x2,x0 // multiply last result by factor smulh x1,x2,x0 // hight cbnz x1,99f // overflow ? add x0,x0,x5 // no -> add to result 4: ldrb w5,[x4],1 // load new octet and increment to one cbz w5,5f // string end -> end routine cmp w5,#0xA // string end ? bne 3b // no -> loop 5: cmp x3,#1 // test register x3 for signe cneg x0,x0,eq // if equal egal negate value cmn x0,0 // carry to zero no error b 100f 99: // overflow adr x0,szMessErrDep bl affichageMess cmp x0,0 // carry to one error mov x0,#0 // if error return zéro 100: ldp x1,x2,[sp],16 // restaur 2 registers ldp x3,x4,[sp],16 // restaur 2 registers ldp x5,lr,[sp],16 // restaur 2 registers ret // retur address lr x30 szMessErrDep: .asciz "Number too large: overflow of 64 bits. :\n" .align 4 // instruction to realign the following routines ## ABAP report z_sum_a_b. data: lv_output type i. selection-screen begin of block input. parameters: p_first type i, p_second type i. selection-screen end of block input. at selection-screen output. %_p_first_%_app_%-text = 'First Number: '. %_p_second_%_app_%-text = 'Second Number: '. start-of-selection. lv_output = p_first + p_second. write : / lv_output.  ## Acornsoft Lisp Translation of: Common Lisp Evaluate: (print (plus (read) (read))) 3 2 5  ## Action! BYTE FUNC Find(CHAR ARRAY s CHAR c BYTE POINTER err) BYTE i FOR i=1 TO s(0) DO IF s(i)=c THEN err^=0 RETURN (i) FI OD err^=1 RETURN (0) INT FUNC Decode(CHAR ARRAY s BYTE start,stop BYTE POINTER err) CHAR ARRAY tmp(20),tmp2(20) INT value IF s(start)='+ THEN start==+1 FI SCopyS(tmp,s,start,stop) value=ValI(tmp) ;Check if conversion failed IF value=0 AND s(start)#'0 THEN err^=1 RETURN (0) FI ;Check if value is out of range IF value<-1000 OR value>1000 THEN err^=1 RETURN (0) FI err^=0 RETURN (value) PROC Main() CHAR ARRAY s(20) BYTE pos,err,err2,value INT a,b,sum DO PrintE("Enter two integer numbers between -1000 and 1000, separated by a space or Q for quit") InputS(s) IF s(0)=1 AND (s(1)='Q OR s(1)='q) THEN EXIT FI pos=Find(s,' ,@err) IF err=0 THEN a=Decode(s,1,pos-1,@err) b=Decode(s,pos+1,s(0),@err2) err=err OR err2 FI IF err=0 THEN sum=a+b PrintF("Their sum is %I%E",sum) ELSE PrintE("Invalid input!") FI PutE(); OD RETURN Output: Enter two integer numbers between -1000 and 1000, separated by a space or Q for quit -320 547 Their sum is 227 Enter two integer numbers between -1000 and 1000, separated by a space or Q for quit 512 -1234 Invalid input! Enter two integer numbers between -1000 and 1000, separated by a space or Q for quit  ## Ada -- Standard I/O Streams with Ada.Integer_Text_Io; procedure APlusB is A, B : Integer; begin Ada.Integer_Text_Io.Get (Item => A); Ada.Integer_Text_Io.Get (Item => B); Ada.Integer_Text_Io.Put (A+B); end APlusB;  Using appropriate user defined types: with Ada.Text_IO; procedure A_Plus_B is type Small_Integers is range -2_000 .. +2_000; subtype Input_Values is Small_Integers range -1_000 .. +1_000; package IO is new Ada.Text_IO.Integer_IO (Num => Small_Integers); A, B : Input_Values; begin IO.Get (A); IO.Get (B); IO.Put (A + B, Width => 4, Base => 10); end A_Plus_B;  ## Agena Tested with Agena 2.9.5 Win32 scope local f := trim( io.read() ) split " "; # read a line and split into fields local a := tonumber( f[ 1 ] ); local b := tonumber( f[ 2 ] ); print( a + b ) epocs ## Aime file f; list l; f_affix(f, "/dev/stdin"); f_list(f, l, 0); o_integer(atoi(l[0]) + atoi(l[1])); o_newline(); ## ALGOL 60 Works with: A60 begin comment A+B; integer a,b; ininteger(0,a); ininteger(0,b); outinteger(1,a+b) end Input: 1 2  Output:  3  ## ALGOL 68 Translation of: python Works with: ALGOL 68 version Standard - no extensions to language used Works with: ALGOL 68G version Any - tested with release 1.18.0-9h.tiny ### Console print((read int + read int)) Input: 1 2  Output:  +3  ### File open(stand in, "input.txt", stand in channel); open(stand out, "output.txt", stand out channel); print((read int + read int)) Input "input.txt": 3 4  Output "output.txt":  +7  ## ALGOL W begin integer a, b; read( a, b ); write( a + b ) end. ## Amazing Hopper #include <hbasic.h> #import lib/input.bas.lib #include include/input.h Begin Token Init Cls Locate(5,1),Print(Utf8("Ingrese dos números, separados por espacio: "))
msg=""
Token Sep(" ")
Print("Suma : ", Token(1),Val(Token$(msg)) Plus (Token(2),Val(Token$(msg))), Newl)
End
Output:
Ingrese dos números, separados por espacio: -200 10
Suma : -190
Press any key to continue...


Version dos: hopper-BASIC acepta "programación fluída"

#include <hbasic.h>

#import lib/input.bas.lib
#include include/input.h

#define getValueOf(__X__)  Token(__X__),Val(Token$(msg)) #define-a »»(__X__) ;Move to(__X__) Begin Token Init Cls Locate(5,1),Print(Utf8$("Ingrese dos números, separados por espacio: "))
msg=""
Token Sep(" ")
A=0, get Value Of(1)»»(A), CLamp(-1000,1000,A)
B=0, get Value Of(2)»»(B), CLamp(-1000,1000,B)
Print("Suma : ")
Take(A, B), and Add It; then Print It with a Newl
End
Output:
Ingrese dos números, separados por espacio: -1005 500
Suma : -500
Press any key to continue...


## Apex

static Integer sumOfTwoNums(Integer A, Integer B) {
return A + B;
}

System.debug('A = 50 and B = 25: ' + sumOfTwoNums(50, 25));
System.debug('A = -50 and B = 25: ' +sumOfTwoNums(-50, 25));
System.debug('A = -50 and B = -25: ' +sumOfTwoNums(-50, -25));
System.debug('A = 50 and B = -25: ' +sumOfTwoNums(50, -25));

'''Output'''
A = 50 and B = 25: 75
A = -50 and B = 25: -25
A = -50 and B = -25: -75
A = 50 and B = -25: 25

## APL

 ⎕+⎕


## AppleScript

Open the AppleScript Editor and save this as A+B.scpt on your Desktop

on run argv
try
return ((first item of argv) as integer) + (second item of argv) as integer
on error
return "Usage with -1000 <= a,b <= 1000: " & tab & " A+B.scpt a b"
end try
end run


To make this run in Terminal open the Terminal.app and type osascript ~/Desktop/A+B.scpt -3 78 followed by enter.

Result: 75

## Arc

(prn (+ (read)
(read)))

## Argile

Translation of: C
Works with: Argile version 1.0.0
(: Standard input-output streams :)
use std, array
Cfunc scanf "%d%d" (&val int a) (&val int b)
printf "%d\n" (a + b)
(: Input file : input.txt :)
(: Output file: output.txt :)
use std, array
let  in = fopen "input.txt" "r"
let out = fopen "output.txt" "w"
let int x, y.
Cfunc fscanf in "%d%d" (&x) (&y) (:fscanf not yet defined in std.arg:)
fprintf out "%d\n" (x+y)
fclose in
fclose out

## ARM Assembly

Works with: gcc version Linux

Exploiting C standard library functions (scanf and printf). Requires arm-linux-gnueabi-gcc and qemu-arm. Compile with:

arm-linux-gnueabi-as src.s -o src.o && arm-linux-gnueabi-gcc -static src.o -o run && qemu-arm run
.text
.global main
.extern printf
.extern scanf

main:
push {lr}
ldr r0, =scanf_lit
ldr r1, =num_a
ldr r2, =num_b
bl scanf             // scanf("%d %d", &num_a, &num_b);
ldr r0, =printf_lit
ldr r1, =num_a
ldr r1, [r1]
ldr r2, =num_b
ldr r2, [r2]
bl printf            // printf("%d\n", num_a + num_b);
pop {pc}

.data
scanf_lit:      .asciz "%d %d"
printf_lit:     .asciz "%d\n"
.align 4
.bss
num_a:  .skip 4
num_b:  .skip 4
Works with: gcc version Linux

Todo: -need to print numbers w/o the leading 0's. Replace them with spaces, so alignment is still the same.

Read two strings from stdin, convert to integers calculate their sum, print to stdout. A valid int is a value between -2^31 (-2147483647) and 2^31-1 (2147483647). We do not allow -2147483648 as input, but it is a valid result. E.g. -1 -2147483647. Maximum number of digits is 10. Leading 0's are counted as number length. We read signed values. We ignore leading '+'s and allow '-' for negative values. If multiple plus or minus signs precede a number, only the last one counts. minval and maxval can be used to specify any valid range, (e.g. -1000 and +1000). The range is inclusive. If 0 is specified for both ranges, range checks are not done.

Tested on RaspberryPi model B (GNU/Linux, ARMv6) Save in ab.S Build with:

as -o ab.o ab.S
ld -o a.out ab.o
.data
.align   2
.code 32

.section .rodata
.align   2
.code 32

overflow_msg:  .ascii  "Invalid number. Overflow.\n"
overflow_msglen = . - overflow_msg
range_err_msg:  .ascii  "Value out of range.\n"
range_err_msglen = . - range_err_msg
io_error_msg:  .ascii  "I/O error.\n"
io_error_msglen = . - range_err_msg

sys_exit  = 1
sys_write = 4
max_rd_buf = 14
lf = 10
m10_9 = 0x3b9aca00
maxval = 1000
minval = -1000

.text

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@ void main()
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
.align   2
.code 32
.type _start STT_FUNC
.global _start
_start:
stmfd   sp!, {r4,r5,lr}

ldr r0, =max_rd_buf
mov r4, r0
bl printint
mov r0, r4
bl range_check

ldr r0, =max_rd_buf
mov r5, r0
bl printint
mov r0, r5
bl range_check

.sum_and_print:
bvs overflow
bl printint

.main_exit:
mov r0, #0
bl exit
ldmfd   sp!, {r4,r5,pc}

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@ Read from stdin until we encounter a non-digit, or we have read bytes2rd digits.
@@ Return value to the caller converted to a signed int.
@@ return value to two's complement.
@@ The argument is max number of bytes to read from stdin.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
.align   2
.code 32
stmfd   sp!, {r4,r5,r6,r7,lr}
@@@@@@@@@@@@@@@
@@ r0 : #0 for stdin arg to read.
@@ r1 : ptr to current pos in local buffer.
@@ r2 : #1 to read one byte at a time.
@@ r3,r7 : tmp.
@@ r4 : number of bytes read.
@@ r5 : value of current byte.
@@@@@@@@@@@@@@@
sub sp, sp, r0
mov r1, sp
mov r3, #0
push {r3}        @ sp,#4: local var @isnegative. return in r1. Default value is 0/false. Positive number.
push {r0}        @ sp,#0: local var @maxbytes. const.
mov r2, #1
mov r4, #0

mov r6, #0
b .rd
@ we get here if r6 is 0.
@ if space, goto .rd.
@ else set r6 to 1 and goto .noleading.
mov r0, r5
bl isspace
cmp r0, #1
beq .rd

.sign_chk:
mov r0, r5
push {r1}
bl issign
cmp r0, #1
streq r0, [sp,#8]   @ sp,#4 + 4 for the pushed r1.
movhi r1, #0
strhi r1, [sp,#8]   @ sp,#4 + 4 for the pushed r1.
pop {r1}
bhs .rd

mov r6, #1

.rd:
mov r0, #0
cmp r0, #1
bne .sum_digits_eof  @ eof
mov r5, #0
ldrb r5, [r1]
cmp r6, #0

mov r0, r5
bl isdigit
cmp r0, #1
bne .sum_digits_nan @ r5 is non-digit

@ max chars to read is received in arg[0], stored in local var at sp.
@ Only 10 can be valid, so the default of 12 leaves space for separator.
ldr r3, [sp]
cmp r4, r3
beq .sum_digits_maxrd  @ max bytes read.
b .rd

@@@@@@@@@@@@@@@
@ We have read r4 (0..arg[0](default 12)) digits when we get here. Go through them
@ and add/mul them together to calculate a number.
@ We multiply and add the digits in reverse order to simplify the multiplication.
@@@@@@@@@@@@@@@
@ r0: return value.
@ r1: local variable for read buffer.
@ r2: tmp for conversion.
@ r3,r6,r7: tmp
@ r4: number of chars we have read.
@ r5: multiplier 1,10,100.
@@@@@@@@@@@@@@@
.sum_digits_nan:
mov r0, r5
bl isspace
cmp r0, #1
.sum_digits_maxrd:
.sum_digits_eof:
mov r0, #0
mov r5, #1
.count:
cmp r4, #0
sub r4, r4, #1
sub r1, #1
ldrb r2, [r1]
sub r2, r2, #48
mov r3, r2

@ multiply r3 (char value of digit) with r5 (multiplier).
@ possible overflow.
@ MI means negative.
@ smulls multiples two signed 32 bit vals and returns a 64 bit result.
@ If we get anything in r7, the value has overflowed.
@ having r2[31] set is overflow too.
smulls r2, r7, r3, r5
cmp r7, #0
bne overflow
cmp r2, #0
bmi overflow

@@ possible overflow.
bvs overflow
bmi overflow

@@ end of array check.
@@ check is needed here too, for large numbers, since 10 billion is not a valid 32 bit val.
cmp r4, #0

@@ multiple multiplier by 10.
@@ possible overflow.
@@ too many digits is input. happens if input is more than 10 digits.
mov r3, #10
mov r6, r5
smulls r5, r7, r3, r6
cmp r7, #0
bne overflow
cmp r5, #0
bmi overflow
b .count

ldr r1, [sp,#4] @ read isnegative value.
cmp r1, #0
rsbne r0, r0, #0
pop {r2}
ldmfd   sp!, {r4,r5,r6,r7,pc}

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@ int isdigit(int)
@@ #48..#57 ascii range for '0'..'9'.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
.align   2
.code 32
.type isdigit STT_FUNC
.global isdigit
isdigit:
stmfd   sp!, {r1,lr}
cmp r0, #48
blo .o_range
cmp r0, #57
bhi .o_range
mov r0, #1
ldmfd   sp!, {r1,pc}
.o_range:
mov r0, #0
ldmfd   sp!, {r1,pc}

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@ int isspace(int)
@@ ascii space = 32, tab = 9, newline 10, cr = 13.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
.align   2
.code 32
.type isspace STT_FUNC
.global isspace
isspace:
stmfd   sp!, {lr}
cmp   r0, #32
cmpne r0, #9
cmpne r0, #10
cmpne r0, #13
beq .is_space
mov r0, #0
ldmfd   sp!, {pc}
.is_space:
mov r0, #1
ldmfd   sp!, {pc}

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@ Return value is 1 for '-' 2 for '+'.
@@ int isspace(int)
@@ '+' = 43 and '-' = 45.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
.align   2
.code 32
.type issign STT_FUNC
.global issign
issign:
stmfd   sp!, {lr}
cmp   r0, #43
beq .plus_sign
cmp r0, #45
beq .minus_sign
mov r0, #0
ldmfd   sp!, {pc}
.plus_sign:
mov r0, #2
ldmfd   sp!, {pc}
.minus_sign:
mov r0, #1
ldmfd   sp!, {pc}

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@ ARGS:
@@ r0 : in out arg (current int value)
@@ r1 : in out arg (ptr to current pos in buffer)
@@ r2 : in arg (const increment. 1000_000_000, 100_000_000, 10_000_000, 1000_000, 100_000, 10_000, 1000, 100, 10, 1.)
@@
@@ r4 : tmp local. Outer scope must init to #10 and count down to #0.
@@      Special case is INTMAX. Must init to 5 if r4 >= 1000_000_000 (0x3b9aca00 = m10_9).
@@ r5: tmp
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
.align   2
.code 32
.type get_digit STT_FUNC
.global get_digit
get_digit:
stmfd  sp!, {r2,r4,r5,lr}
ldr r5, =m10_9
cmp r2, r5
movlo r4, #10
movhs r4, #5
.get_digit_loop:
sub r4, #1
mul r5, r4, r2
cmp r0, r5
blo .get_digit_loop
sub r0, r5
strb r4, [r1], #1
ldmfd   sp!, {r2,r4,r5,pc}

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@ A quick way to divide (numbers evenly divisible by 10) by 10.
@@ Most ARM cpus don't have a divide instruction,
@@ so this will always work.
@@ A generic div function is long and not needed here.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
.align   2
.div_r2_10:
stmfd   sp!, {r0,r1,r3,lr}
mov r0, #1
mov r1, #10
.find_x:
mul r3, r0, r1;
cmp r3, r2
movlo r0, r3
blo .find_x
mov r2, r0
ldmfd   sp!, {r0,r1,r3,pc}

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
.align   2
.print_neg_sign:
stmfd   sp!, {r0,r1,r2,lr}
@ 45 = '-'
mov r1, #45
push {r1}
mov r2, #1
@ r1 is ptr to our local variable (holding '-').
mov r1, sp
mov r0, #1
bl write
cmp r0, #0
blne io_error
pop {r1}
ldmfd   sp!, {r0,r1,r2,pc}

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@ void printint(int val)
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
.align   2
.code 32
.type printint STT_FUNC
.global printint
printint:
stmfd   sp!, {r4,r5,r6,lr}
mov r1, #1
ands r1, r1, r0, LSR #31
rsbne r0, r0, #0
blne .print_neg_sign
sub sp, sp, #20
mov r1, sp
mov r3, sp

ldr r2, =m10_9
.getc_loop:
bl get_digit
cmp r2, #1
beq .exit_getc_loop
bl .div_r2_10
b .getc_loop
.exit_getc_loop:
ldr r0, =lf
strb r0, [r1], #1

sub r2, r1, r3
mov r1, r3
mov r0, #1
bl write
cmp r0, #0
blne io_error
ldmfd   sp!, {r4,r5,r6,pc}

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
.align   2
range_check:
stmfd   sp!, {r4,r5,lr}
ldr r4, =minval
ldr r5, =maxval
cmp   r4, #0
cmpeq r5, #0
beq .skip_range_check
cmp r0, r4
bllt range_err
cmp r0, r5
blgt range_err
.skip_range_check:
ldmfd   sp!, {r4,r5,pc}

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ void range_err()
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
.align   2
range_err:
stmfd   sp!, {lr}
ldr r2, =range_err_msglen
ldr r1, =range_err_msg
mov r0, #2
bl write
mov   r0, #-1
bl exit
ldmfd   sp!, {pc}

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ void overflow()
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
.align   2
overflow:
stmfd   sp!, {lr}
ldr r2, =overflow_msglen
ldr r1, =overflow_msg
mov r0, #2
bl write
mov   r0, #-1
bl exit
ldmfd   sp!, { pc}

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
.align   2
stmfd   sp!, {lr}
mov r0, #2
bl write
mov   r0, #-1
bl exit
ldmfd   sp!, {pc}

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ void io_error()
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
.align   2
io_error:
stmfd   sp!, {lr}
ldr r2, =io_error_msglen
ldr r1, =io_error_msg
mov r0, #2
bl write
mov   r0, #-1
bl exit
ldmfd   sp!, {pc}

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ void exit(int)
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
.align   2
.code 32
.type _start STT_FUNC
.global exit
exit:
stmfd   sp!, {r7, lr}
ldr r7, =sys_exit
svc #0
ldmfd   sp!, {r7, pc}

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ int write(int fd,char*buf,int len)
@ Return 0 if we successfully write all bytes. Otherwise return the error code.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
.align   2
.code 32
.type _start STT_FUNC
.global write
write:
stmfd   sp!, {r4,r7, lr}
mov r4, r2
.wr_loop:
ldr r7, =sys_write
svc #0
@ If r0 is negative, it is more than r4 with LO (unsigned <).
cmp r0, r4
sublo r4, r0
blo .wr_loop
moveq r0, #0
ldmfd   sp!, {r4,r7, pc}

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ Return number of bytes successfully read. Ignore errors.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
.align   2
.code 32
.type _start STT_FUNC
stmfd   sp!, {r7, lr}
svc #0
cmp r0, #0
movlt r0, #0
ldmfd   sp!, {r7, pc}

## Arturo

while ø [
x: map split.words input "give me 2 numbers:" 'x -> to :integer x
]

Output:
give me 2 numbers:3 4
7
give me 2 numbers:2 5
7

<

 &-#$-\ .-#?-[+] .-#?--/ ## ATS (* ****** ****** *) // #include "share/atspre_staload.hats" // staload UN =$UNSAFE
//
(* ****** ****** *)

(* ****** ****** *)

implement
main0() = let
var A: int
var B: int
val () =
$extfcall (void, "scanf", "%d%d", addr@A, addr@B) // end of [val] in println! ($UN.cast2int(A) + $UN.cast2int(B)) end // end of [main0] (* ****** ****** *) ## AutoHotkey This handles more than two inputs Gui, Add, Edit, vEdit ;Enter your A+B, i.e. 5+3 or 5+3+1+4+6+2 Gui, Add, Button, gAdd, Add Gui, Add, Edit, ReadOnly x+10 w80 Gui, Show return Add: Gui, Submit, NoHide Loop, Parse, Edit, + ;its taking each substring separated by "+" and its storing it in A_LoopField var += A_LoopField ;here its adding it to var GuiControl, Text, Edit2, %var% ;here it displays var in the second edit control var := 0 ;here it makes sure var is 0 so it won't contain the value from the previous addition return  ## AutoIt ;AutoIt Version: 3.2.10.0$num = "45  54"
consolewrite ("Sum of " & $num & " is: " & sum($num))
Func sum($numbers)$numm = StringSplit($numbers," ") Return$numm[1]+$numm[$numm[0]]
EndFunc


### Example2

This version can handle any amount of numbers in the input:

ConsoleWrite("# A+B:" & @CRLF)

Func Sum($inp) Local$num = StringSplit($inp, " "),$sum = 0
For $i = 1 To$num[0]
;~ 		ConsoleWrite("# num["&$i&"]:" &$num[$i] & @CRLF) ;;$sum = $sum +$num[$i] Next Return$sum
EndFunc ;==>Sum

$inp = "17 4"$res = Sum($inp) ConsoleWrite($inp & " --> " & $res & @CRLF)$inp = "999 42 -999"
ConsoleWrite($inp & " --> " & Sum($inp) & @CRLF)

; In calculations, text counts as 0,
; so the program works correctly even with this input:
Local $inp = "999x y 42 -999",$res = Sum($inp) ConsoleWrite($inp & " --> " & $res & @CRLF)  Output: # A+B: 17 4 --> 21 999 42 -999 --> 42 999x y 42 -999 --> 42 ## AWK {print$1 + $2}  ## BabyCobol  * NB: COBOL's ACCEPT does not work with multiple identifiers IDENTIFICATION DIVISION. PROGRAM-ID. PLUS. DATA DIVISION. 01 A PICTURE IS S9999. 01 B LIKE A. PROCEDURE DIVISION. DISPLAY "Enter two numbers: " WITH NO ADVANCING. ACCEPT A B. ADD A TO B. DISPLAY "A+B =" B.  ## BASIC DEFINT A-Z tryagain: backhere = CSRLIN INPUT "", i$
i$= LTRIM$(RTRIM$(i$))
where = INSTR(i$, " ") IF where THEN a = VAL(LEFT$(i$, where - 1)) b = VAL(MID$(i$, where + 1)) c = a + b LOCATE backhere, LEN(i$) + 1
PRINT c
ELSE
GOTO tryagain
END IF


### Applesoft BASIC

10 BH = PEEK(37)
20 INPUT ""; A$: I$ = A$: VTAB BH : A = PEEK(40) + PEEK(41) * 256 : FOR S = 0 TO 39 : IF PEEK(A + S) = 160 THEN NEXT S : S = 0 40 IF LEN(I$) THEN IF MID$(I$, LEN(I$), 1) = " " THEN I$ = MID$(I$, 1, LEN(I$) - 1) : GOTO 40RTRIM 50 IF LEN(I$) < 3 THEN 10"TRY AGAIN
60 FOR WHERE = 1 TO LEN(I$) : IF MID$(I$, WHERE, 1) <> " " THEN NEXT WHERE : GOTO 10"TRY AGAIN 70 A% = VAL(LEFT$(I$, WHERE - 1)) 80 B% = VAL(MID$(I$, WHERE + 1, LEN(I$)))
90 C% = A% + B%
100 VTAB BH
110 HTAB LEN(A$) + 2 + S 120 PRINT C% ### BaCon ' A+B INPUT d$
PRINT VAL(TOKEN$(d$, 1)) + VAL(TOKEN$(d$, 2))


### BASIC256

dim a(2)
input "Enter two numbers separated by a space?", t$a = explode(t$," ")
print t$& " " & int(a[0]) + int(a[1]) ### BBC BASIC  REPEAT hereY% = VPOS INPUT LINE "" q$
hereX% = LEN(q$) + 1 WHILE LEFT$(q$, 1) = " " q$ = MID$(q$, 2)
ENDWHILE
space% = INSTR(q$, " ") IF space% THEN a = VAL(LEFT$(q$, space% - 1)) b = VAL(MID$(q$, space% + 1)) PRINT TAB(hereX%, hereY%) ; a + b ENDIF UNTIL FALSE That seems overly complicated. What's wrong with:  REPEAT INPUT LINE "" q$
PRINT VAL(LEFT$(n$,(LEN(STR$(VAL(n$))))))+VAL(RIGHT$(n$,(LEN(n$)-LEN(STR$(VAL(n$)))-1))) END  ### IS-BASIC 100 DO 110 INPUT PROMPT "Ener two integers separated by a comma: ":A,B 120 IF ABS(A)>1000 OR ABS(B)>1000 OR IP(A)<>A OR IP(B)<>B THEN 130 PRINT "Both integers must be in the interval [-1000..1000] - try again.":PRINT 140 ELSE 150 PRINT "Their sum is";A+B 160 EXIT DO 170 END IF 180 LOOP ### Liberty BASIC input, n$
print  eval(word$(n$,1);" + ";word$(n$,2))

### Minimal BASIC

Works with: QBasic
Works with: QuickBasic
Works with: Applesoft BASIC
Works with: BASICA
Works with: Chipmunk Basic
Works with: GW-BASIC
Works with: IS-BASIC
Works with: MSX Basic
Works with: Just BASIC
Works with: Liberty BASIC
Works with: Run BASIC
Works with: Yabasic
10 PRINT "ENTER NUMBER A";
20 INPUT A
30 PRINT "ENTER NUMBER B";
40 INPUT B
50 PRINT A+B
60 END


### MSX Basic

The Chipmunk Basic solution works without any changes.

### OxygenBasic

uses console
int i
string s
do
print "Enter 2 numbers separated by space "
s=input
s=ltrim(s)
exit if not s
i=instr(s," ")
exit if i<2
print val(s)+val(mid(s,i))+cr
loop


### Sinclair ZX81 BASIC

10 INPUT A$20 LET I=1 30 IF A$(I)=" " THEN GOTO 60
40 LET I=I+1
50 GOTO 30
60 PRINT VAL A$( TO I-1)+VAL A$(I+1 TO )


### SmallBASIC

input "Enter number A: "; a
input "Enter number B: "; b
print "A + B = "; a + b

### Tiny BASIC

REM Rosetta Code problem: https://rosettacode.org/wiki/A+B
REM by Jjuanhdez, 06/2022

10  LET C = 0
LET D = 0
PRINT "Enter an integer: "
INPUT A
IF A < 0 THEN LET C = A * -1
PRINT "Enter other integer: "
INPUT B
IF B < 0 THEN LET D = B * -1
IF C > 1000 THEN GOTO 60
IF D > 1000 THEN GOTO 60
50  PRINT "Their sum is ", A + B
GOTO 70
60  PRINT "Both integers must be in the range [-1000..1000] - try again."
GOTO 10
70  END

### True BASIC

DO
INPUT PROMPT "Enter two integers separated by a comma: ": A, B
IF ABS(A)>1000 OR ABS(B)>1000 OR IP(A)<>A OR IP(B)<>B THEN
PRINT "Both integers must be in the interval [-1000..1000] - try again."
PRINT
ELSE
PRINT "Their sum is";A+B
EXIT DO
END IF
LOOP
END


### uBasic/4tH

s = FUNC(_GetInt(1000)) + FUNC(_GetInt(1000))
Print "The sum is: ";s
End

_GetInt
Param (1)
Local (1)

Do
Input "Enter a value: ", b@
Until (b@ > -a@-1 ) * (b@ < a@+1)
Print "Wrong, must be between "; -a@; " and "; a@; ". Try again.."
Loop
Return (b@)


### XBasic

Works with: Windows XBasic
PROGRAM	"A+B"
VERSION	"0.0000"

DECLARE FUNCTION  Entry ()

FUNCTION  Entry ()
a$= INLINE$("Enter integer A: ")
a = SLONG(a$) b$ = INLINE$("Enter integer B: ") b = SLONG(b$)
DO WHILE 1
IF ABS(a) > 1000 OR ABS(b) > 1000 THEN
PRINT "Both integers must be in the interval [-1000..1000] - try again."
PRINT
ELSE
PRINT "Their sum is"; a + b
EXIT DO
END IF
LOOP
END FUNCTION
END PROGRAM


## Batch File

Prompts version

::aplusb.cmd
@echo off
setlocal
set /p a="A: "
set /p b="B: "
set /a c=a+b
echo %c%
endlocal

All on the commandline version

::aplusb.cmd
@echo off
setlocal
set a=%1
set b=%2
set /a c=a+b
echo %c%
endlocal

Formula on the command line version

::aplusb.cmd
@echo off
setlocal
set /a c=%~1
echo %c%
endlocal

Example of 'Formula on the command line version'

>aplusb 123+456
579
>aplusb "1+999"
1000


Parse the input stream version (thanks to Tom Lavedas on alt.msdos.batch.nt)

::aplusb.cmd
@echo off
setlocal
set /p a="Input stream: "
echo %res%
endlocal
goto :eof

set /a res=res+%1
shift
if "%1" neq "" goto :add

Example of 'parse the input stream version'

>aplusb
Input stream: 1234 5678
6912
>aplusb
Input stream: 123 234 345 456 567 678 789 890
4082

## bc

Works with: GNU bc
read() + read()


## Befunge

&&+.@


## Bird

use Console Math

define Main
$a Console.Read$b Console.Read
Console.Println Math.Add $a$b
end

## BlooP

BlooP and FlooP can't actually read from stdin, but here's the procedure it would use, if it could.

DEFINE PROCEDURE ''ADD'' [A, B]:
BLOCK 0: BEGIN
OUTPUT <= A + B;
BLOCK 0: END.

## bootBASIC

Both numbers are entered separately.

10 print "Number 1";
20 input a
30 print "Number 2";
40 input b
50 print a+b

## BQN

Works with: [CBQN]
#!/usr/bin/env bqn

# Cut 𝕩 at occurrences of 𝕨, removing separators and empty segments
# (BQNcrate phrase).
Split ← (¬-˜⊢×·+»⊸>)∘≠⊔⊢

# Natural number from base-10 digits (BQNcrate phrase).
Base10 ← 10⊸×⊸+˜´∘⌽

# Parse any number of space-separated numbers from string 𝕩.
ParseNums ← {Base10¨ -⟜'0' ' ' Split 𝕩}

# •GetLine and •_while_ are nonstandard CBQN extensions.
{•Show +´ ParseNums 𝕩 ⋄ •GetLine@} •_while_ (@⊸≢) •GetLine@


## Bracmat

filter is a pattern that checks that input is a non-fractional number not less than -1000 and not greater than 1000. The filter is applied to each input.

( out
$( put$"Enter two integer numbers between -1000 and 1000:"
& (filter=~/#%:~<-1000:~>1000)
& get':(!filter:?a) (!filter:?b)
& !a+!b
| "Invalid input. Try again"
)
);

## Brainf***

INPUT AND SUMMATION
TODO if first symbol is a minus sign print Qgo awayQ
+>                                                  initialize sum to one
++[                                                 loop for each input ie twice
[>>,----------[----------------------[-<+>]]<]      eat digits until space or newline
<[<]>>>
>[<                                                 until no next digit
----------------                                    subtract ascii zero minus what we subtracted above
[->++++++++++<]                                     add ten timess that to the next digit
<[->+<]<[->+<]>>                                    shift sum and loop counter
>>
]
<----------------                                   subtract as above from last digit as well
<-
]
<-                                                  subtract original one from sum

OUTPUT
[                                                                                                   while a number divided by ten is bigger than zero
[->+<[->+<[->+<[->+<[->+<[->+<[->+<[->+<[->+<[->--------->+<<[->>>+<<<]]]]]]]]]]>>>[-<<<+>>>]<<<]   divide by ten
>++++++++++++++++++++++++++++++++++++++++++++++++>                                                  convert remainder to ascii digit
]
<[.<<]                                                                                              print ascii digits

## Brat

numbers = g.split[0,1].map(:to_i)
p numbers[0] + numbers[1]  #Prints the sum of the input

## Bruijn

:import std/Combinator .
:import std/String .
:import std/Number .
:import std/Char C

main (split-by (C.eq? ' ')) → &(add ⋔ string→number)

## Burlesque

ps++

## C

// Standard input-output streams
#include <stdio.h>
int main()
{
int a, b;
scanf("%d%d", &a, &b);
printf("%d\n", a + b);
return 0;
}

// Input file: input.txt
// Output file: output.txt
#include <stdio.h>
int main()
{
freopen("input.txt", "rt", stdin);
freopen("output.txt", "wt", stdout);
int a, b;
scanf("%d%d", &a, &b);
printf("%d\n", a + b);
return 0;
}

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv) //not sure if argv counts as input stream... certainly it is brought here via input stream.
{
printf("%d\n", atoi(*(argv+1)) + atoi(*(argv+2)));
return 0;
}


## C#

using System;
using System.Linq;

class Program
{
static void Main()
{
}
}


Another way (not recommended since it does not work with more than two numbers):

using System;

class Program
{
static void Main()
{
int index = input.IndexOf(" ");
int num1 = int.Parse(input.Substring(0, index));
int num2 = int.Parse(input.Substring(index + 1));
int sum = num1 + num2;
Console.WriteLine(sum.ToString());
}
}


## C++

// Standard input-output streams
#include <iostream>
using namespace std;
int main()
{
int a, b;
cin >> a >> b;
cout << a + b << endl;
}

// Input file: input.txt
// Output file: output.txt
#include <fstream>
using namespace std;
int main()
{
ifstream in("input.txt");
ofstream out("output.txt");
int a, b;
in >> a >> b;
out << a + b << endl;
return 0;
}


## Ceylon

shared void run() {

if (exists input) {
value tokens = input.split().map(Integer.parse);
if (tokens.any((element) => element is ParseException)) {
return;
}
value numbers = tokens.narrow<Integer>();
if (numbers.size != 2) {
}
else if (!numbers.every((Integer element) => -1k <= element <= 1k)) {
print("only numbers between -1000 and 1000, please");
}
else if (exists a = numbers.first, exists b = numbers.last) {
print(a + b);
}
else {
print("something went wrong");
}
}
}


## CFEngine

There is no concept of CFEngine policy reading from stdin so I will read from a file.

$cat sum.cf bundle agent main { vars: "line_count" int => readintarray( "input", "${this.promise_dirname}${const.dirsep}input.txt", "#[^\n]*", " ", "inf", "inf" ); "indices" slist => getindices( "input" ); reports: "${with}" with => format( "%d", eval( "${input[${indices}][0]} + ${input[${indices}][1]}" ));
DEBUG::
"line_count is ${line_count}"; "input is${with}" with => storejson( "input" );
"input[${indices}] is${with}" with => storejson( "input[${indices}]" ); }$ cat input.txt
2 3
2 2

$cf-agent -KIf ./sum.cf R: 5 R: 4 The "R:" prefix is for a report promise and the only way to output to stdout with policy. You could also output to a file I suppose. ## Clojure (println (+ (Integer/parseInt (read-line)) (Integer/parseInt (read-line)))) 3 4 =>7  (eval (read-string (str "(+ " (read-line) " )") )) 3 3 6  Translation of Common Lisp version: (println (+ (read) (read))) 3 4 7  Safely and without reader tricks: (let [ints (map #(Integer/parseInt %) (clojure.string/split (read-line) #"\s") )] (println (reduce + ints))) 3 4 =>7  or same as above, but without "let": (println (reduce + (map #(Integer/parseInt %) (clojure.string/split (read-line) #"\s") ))) 3 4 =>7  ## COBOL  IDENTIFICATION DIVISION. PROGRAM-ID. A-Plus-B. DATA DIVISION. WORKING-STORAGE SECTION. 01 A PIC S9(5). 01 B PIC S9(5). 01 A-B-Sum PIC S9(5). PROCEDURE DIVISION. ACCEPT A ACCEPT B ADD A TO B GIVING A-B-Sum DISPLAY A-B-Sum GOBACK .  A second version.  IDENTIFICATION DIVISION. PROGRAM-ID. A-Plus-B. AUTHOR. Bill Gunshannon. INSTALLATION. Home. DATE-WRITTEN. 25 December 2021. ************************************************************ ** Program Abstract: ** A re-worked version that more closely matches the ** desired format. Both numbers are taken in on one ** line separated by spaces. Sum is formated to remove ** leading zeros and/or spaces. ************************************************************ DATA DIVISION. WORKING-STORAGE SECTION. 01 Input-Data PIC X(16). 01 A PIC S9(5). 01 B PIC S9(5). 01 A-B-Sum PIC -----9. PROCEDURE DIVISION. DISPLAY "Input pairs of numbers separated by spaces." DISPLAY "Enter q to exit." PERFORM WITH TEST BEFORE UNTIL Input-Data = "q" or Input-Data = "Q" ACCEPT Input-Data IF Input-Data NOT = "q" and Input-Data NOT = "Q" UNSTRING Input-Data DELIMITED BY SPACES INTO A B ADD A TO B GIVING A-B-Sum DISPLAY "Sum = " FUNCTION TRIM(A-B-Sum) END-IF END-PERFORM. STOP RUN.  ## CoffeeScript Translation of: JavaScript <html> <script type="text/javascript" src="http://jashkenas.github.com/coffee-script/extras/coffee-script.js"></script> <script type="text/coffeescript"> a = window.prompt 'enter A number', '' b = window.prompt 'enter B number', '' document.getElementById('input').innerHTML = a + ' ' + b sum = parseInt(a) + parseInt(b) document.getElementById('output').innerHTML = sum </script> <body> <div id='input'></div> <div id='output'></div> </body> </html> Works with: Node.js { stdin } = process sum = ( a, b ) -> a + b display = ( messages... ) -> console.log messages... parse = ( input ) -> parseInt x for x in ( x.trim() for x in input.split ' ' ) when x?.length check = ( numbers... ) -> return no for x in numbers when isNaN x return no for x in numbers when not ( -1000 < x < 1000 ) yes prompt = -> display 'Please enter two integers between -1000 and 1000, separated by a space:' stdin.once 'data', ( data ) -> [ a, b ] = parse data if check a, b display "#{ a } + #{ b } = #{ sum a, b }" else display "Invalid input: #{ a }, #{ b }" do prompt return # Resume input and set the incoming encoding. stdin.resume() stdin.setEncoding 'utf8' # Start the main loop. do prompt  ## Common Lisp (write (+ (read) (read)))  ## Component Pascal BlackBox Component Builder MODULE AB; IMPORT StdLog, DevCommanders,TextMappers; PROCEDURE DoAB(x,y: INTEGER); BEGIN StdLog.Int(x);StdLog.Int(y);StdLog.Int(x + y);StdLog.Ln; END DoAB; PROCEDURE Go*; VAR params: DevCommanders.Par; s: TextMappers.Scanner; p : ARRAY 2 OF INTEGER; current: INTEGER; BEGIN current := 0; params := DevCommanders.par; s.ConnectTo(params.text); s.SetPos(params.beg); s.Scan; WHILE(~s.rider.eot) DO IF (s.type = TextMappers.int) THEN p[current] := s.int; INC(current); END; s.Scan; END; IF current = 2 THEN DoAB(p[0],p[1]) END; END Go; END AB. Execute: AB.Go 12 23 ~ Output: 12 23 35  ## Computer/zero Assembly  STP ; wait for input a: 0 b: 0 LDA a ADD b STP ## Crystal puts gets.not_nil!.split.map(&.to_i).sum  The not_nil! call on gets is needed because gets might return nil and the compiler forces us to deal with it. In the case of nil a runtime exception will be thrown. To handle the nil case we could do: if line = gets puts line.split.map(&.to_i).sum else puts "No input" end  ## D ### From Console import std.stdio, std.conv, std.string; void main() { string[] r; try r = readln().split(); catch (StdioException e) r = ["10", "20"]; writeln(to!int(r[0]) + to!int(r[1])); }  Output: 30 ### From File void main() { import std.stdio, std.file; immutable ab = "sum_input.txt".slurp!(int, int)("%d %d")[0]; "sum_output.txt".File("w").writeln(ab[0] + ab[1]); }  ## Dart import 'dart:io'; // a little helper function that checks if the string only contains // digits and an optional minus sign at the front bool isAnInteger(String str) => str.contains(new RegExp(r'^-?\d+$'));

void main() {
while(true) {
var chunks = input.split(new RegExp(r'[ ]+')); // split on 1 or more spaces
if(!chunks.every(isAnInteger)) {
print("not an integer!");
} else if(chunks.length > 2) {
print("too many numbers!");
} else if(chunks.length < 2) {
print('not enough numbers!');
} else {
// parse the strings into integers
var nums = chunks.map((String s) => int.parse(s));
if(nums.any((num) => num < -1000 || num > 1000)) {
} else {
print(nums.reduce((a, b) => a + b));
}
}
}
}

Output:
1 2
3
3 4
7

## dc

? + psz

The question mark ? reads and executes a line of input. The user must enter a dc program that pushes two numbers to the stack, such as 2 3 or 5 _1. (The user must use underscore _ for negative numbers.)

## DCL

$read sys$command line
$a = f$element( 0, " ", line )
$b = f$element( 1, " ", line )
$write sys$output a, "+", b, "=", a + b

## Delphi

Console version.

program SUM;

{$APPTYPE CONSOLE} uses SysUtils; procedure var s1, s2:string; begin ReadLn(s1); Readln(s2); Writeln(StrToIntDef(s1, 0) + StrToIntDef(s2,0)); end.  ## Diego set_namespace(rosettacode)_me(); begin_instuct(A + B); ask_human()_msg(Please enter two integers between -1000 and 1000, separated by a space:)_split( )_var(A, B); with_var(A, B)_trim()_parse({integer})_test([A]<=-1000)_test([B]>=1000) : with_human[]_msg(Invalid input: [A], [B]); exec_instruct[]; ; add_var(sum)_calc([A]+[B]); with_human[]_msg([A] + [B] = [sum]); end_instruct[]; exec_instruct(A + B)_me(); reset_namespace[]; ## DMS number a = GetNumber( "Please input 'a'", a, a ) // prompts for 'a' number b = GetNumber( "Please input 'b'", b, b ) // prompts for 'b' Result( a + b + "\n" ) ## Dragon select "graphic" select "types" a = int(prompt("Enter A number")) b = int(prompt("Enter B number")) showln a + b ## DWScript Ghetto GUI version var a := StrToInt(InputBox('A+B', 'Enter 1st number', '0')); var b := StrToInt(InputBox('A+B', 'Enter 2nd number', '0')); ShowMessage('Sum is '+IntToStr(a+b));  ## Déjà Vu Translation of: Python ### Console 0 for k in split !prompt "" " ": + to-num k !print ## EasyLang a$ = input
repeat
i += 1
until i > len a$or substr a$ i 1 = " "
.
a = number substr a$1 i b = number substr a$ i 99
print a + b

## EchoLisp

(+ (read-number 1 "value for A") (read-number 2 "value for B"))


## EDSAC order code

The EDSAC does not support input of data while a program is running, so A and B are pre-set to 37 and 28. Other values can of course be substituted: note the slightly idiosyncratic format in which integer data is written (the least significant bit set using an alphabetic character). The result of the computation is displayed in binary in the first address of storage tank 3.

[ A plus B
========

A program for the EDSAC

the sum at the top of storage
tank 3

Works with Initial Orders 2 ]

GK    [ Base addr (theta) here ]

[ Orders ]

T96F  [ Clear accumulator    ]
A5@   [ Acc += C(theta + 5)  ]
A6@   [ Acc += C(theta + 6)  ]
T96F  [ C(96) = Acc; Acc = 0 ]

ZF    [ Halt ]

[ Pseudo-orders (data) ]

P18D  [ 5@: 18*2 + 1 = 37 ]
P14F  [ 6@: 14*2 + 0 = 28 ]

EZPF  [ Branch to load point ]
Output:
00000000001000001

### Alternative

This is a more elaborate solution, to demonstrate how the same program can be applied to different sets of data (cf. Wilkes, Wheeler and Gill, 1951 edition, page 47).

In the program below, the two integers to be added are placed at the end. On the original EDSAC, they would be on the same paper tape as the program. With Martin Campbell-Kelly's EdsacPC simulator, reading the data from a separate tape can be simulated as follows:

1. Remove the two integers from the end of this program and store them, or another pair of integers, in a separate text file. Each integer must be terminated by a non-digit or a blank tape row (represented by a full stop in the simulator).

2. Run the altered program. The simulator will stop with a message "End of input tape encountered".

3. Dismiss the message, make the file with the two integers the active file, and click Reset. The simulator will continue, read the integers, and print them together with their sum.

 [A + B for Rosetta Code.
Read two integers and find their sum.
EDSAC program, Initial Orders 2.]

[Print signed number, up to 10 digits, right-justified.
Modification of library subroutine P7.
T   56 K
H17@S17@A43@G23@UFS43@T1FV4DAFG50@SFLDUFXFOFFFSFL4FT4DA49@T31@
A1FA43@G20@XFP1024FP610D@524D!FO46@O26@XFO46@SFL8FT4DE39@

[Subroutine to read signed number from input, up to 10 digits.
Partly based on library subroutine R2. Result in 4D.
Working registers: 0F = dump to clear acc
1F < 0 if number starts with minus, = 0 if not.
6D = character code, as double-word value]
T  120 K
G      K
A    3 F  [make link for return]
T   36 @  [plant in code; clear acc]
H    7 @  [mult reg := 10/32]
T    4 D  [initialize result to 0]
T    1 F  [no minus sign yet]
T    6 D  [ensure 7F and sandwich bit are 0]
[Loop until find valid first character of integer, namely
decimal digit (char codes 0..9), plus (13), or minus (22).]
[6]   I    6 F  [char code from input]
[7]   T      F  [clear acc; also serves as constant 10/32]
S    6 F  [load negative of char code]
E   24 @  [if decimal digit, out]
E    6 @  [if 10..12, try again]
E   20 @  [if plus, out with acc = 0]
G    6 @  [if 23..31, try again]
S   37 @  [subtract 1]
E    6 @  [if 14..21, try again]
T    1 F  [minus, acc = -1, store in sign]
[Loop to read characters after first. Assumes acc = 0 here.]
[20]   I    6 F  [next char from input]
S    6 F  [negative to acc]
G   30 @  [finished if not digit]
[24]   T      F  [clear acc]
V    4 D  [acc := 10/32 times partial sum]
L    8 F  [shift 5 left]
A    6 D  [add latest digit]
T    4 D  [update partial sum]
E   20 @  [loop for next char]
[Here when no more digits]
[30]   T      F  [clear acc]
A    1 F  [load sign of result]
E   36 @  [exit (with acc = 0) if >= 0]
T      F  [< 0, clear acc]
S    4 D  [subtract number]
T    4 D  [store back negated; clear acc]
[36]   E      F  [exit with acc = 0 (EDSAC convention)]
[Constants]
[37]   P      D  [1]
[38]   P    1 D  [3]
[39]   P    4 D  [9]

[Main routine]
T  200 K
G      K
[Variables]
[0]   P F   P F [integer A]
[2]   P F   P F [integer B]
[Constants]
[4]   #      F  [figures]
[5]   @      F  [carriage return]
[6]   &      F  [line feed]
[7]   K 4096 F  [null char]
[Enter with acc = 0]
[8]   O    4 @  [set teleprinter to figures]
A    9 @
G  120 F  [read integer A from input]
U     #@  [save]
T      D  [to 0D for printing]
A   14 @
G   56 F  [print A]
O    5 @  [followed by new line]
O    6 @
A   18 @
G  120 F  [read integer B from input]
U    2#@  [save]
T      D  [to 0D for printing]
A   23 @
G   56 F  [print B]
O    5 @  [followed by new line]
O    6 @
T      D  [A + B to 0D for printing]
A   30 @
G   56 F  [print A + B]
O    5 @  [followed by new line]
O    6 @
O    7 @  [print null to flush teleprinter buffer]
Z      F  [stop]
E    8 Z
P      F
-987.123.
Output:
       -987
123
-864


## EGL

package programs;

// basic program
//
program AplusB type BasicProgram {}
function main()
try
arg1 string = SysLib.getCmdLineArg(1);
arg2 string = SysLib.getCmdLineArg(2);
int1 int = arg1;
int2 int = arg2;
sum int = int1 + int2;
SysLib.writeStdout("sum1: " + sum);
onException(exception AnyException)
SysLib.writeStdout("No valid input. Provide 2 integer numbers as arguments to the program.");
end
end
end

## Eiffel

argument(0) contains the path of the executable - thus we start at argument(1)

class
APPLICATION
inherit
ARGUMENTS
create
make
feature {NONE} -- Initialization
make
-- Run application.
do
print(argument(1).to_integer +	argument(2).to_integer)
end
end


Alternatively ...

	make
-- Run application.
note
synopsis: "[
The specification implies command line input stream and also
implies a range for both A' and B' (e.g. (-1000 <= A,B <= +1000)).
To test in Eiffel Studio workbench, one can set Execution Parameters
of "2 2", where the expected output is 4. One may also create other
test Execution Parameters where the inputs are out-of-bounds and
confirm the failure.
]"
do
if attached {INTEGER} argument (1).to_integer as a and then
attached {INTEGER} argument (2).to_integer as b and then
(a >= -1000 and b >= -1000 and a <= 1000 and b <= 1000) then
print (a + b)
else
print ("Either argument 1 or 2 is out-of-bounds. Ensure: (-1000 <= A,B <= +1000)")
end
end


## Ela

open monad io string list

a'b() = do
putStrLn <| show <| sum <| map gread <| string.split " " <| str

a'b() ::: IO
Output:
1 2 3 4 5 6
21

## Elena

ELENA 6.0 :

import extensions;

public program()
{
var A := Integer.new();
var B := Integer.new();

}

Or more generic solution:

import system'routines;
import extensions;

public program()
{
.split()
.selectBy(mssgconst toInt<intConvertOp>[1])
.summarize())
}

## Elixir

IO.gets("Enter two numbers seperated by a space: ")
|> String.split
|> Enum.map(&String.to_integer(&1))
|> Enum.sum
|> IO.puts


## Elm

--To write this function directly run cmd
--Type elm-repl to start
--Next enter this code
sum x y=x+y

--This creates a sum function
--When you enter sum A B
--You get output as A+B : number
--END


## Emacs Lisp

(let* ((input (read-from-minibuffer ""))
(numbers (mapcar #'string-to-number (split-string input)))
(a (car numbers))
(message "%d" (+ a b)))


## EMal

fun main = int by List args
text input = when(args.length == 1, args[0], ask(text, "Enter n integers separated by a space: "))
int sum, count
for each text word in input.split(" ")
word = word.trim()
if word.isEmpty() do continue end # ignore empty words
int nr = int!word # this can raise an exception
if abs(nr) > 1000
Event.error(0, "Integers must be in the interval [-1000, 1000]").raise()
end
sum += nr
++count
end
if count < 2 do Event.error(1, "At least two integers must be provided").raise() end
writeLine("The sum of " + count + " integers is: " + sum)
return 0
end
exit main(Runtime.args)
Output:
emal.exe Org\RosettaCode\Aplusb.emal "  9   8 "
The sum of 2 integers is: 17


## Emojicode

🏁🍇
🆕🔡▶️👂🏼❗️ ➡️ input 💭 Get numbers as input string
🔫 input 🔤 🔤❗ ➡️ nums 💭 Split numbers by space
🍺🔢 🐽 nums 0❗ 10❗ ➡️ A 💭 Retrieve first number
🍺🔢 🐽 nums 1❗ 10❗ ➡️ B 💭 Retrieve second number
😀 🔤🧲A➕B🧲🔤 ❗ 💭 Output sum
🍉️

## Erlang

-module(aplusb).
-export([start/0]).

start() ->
eof -> ok;
{ok, [A,B]} ->
io:format("~w~n",[A+B]),
start()
end.


## ERRE

PROGRAM SUM2

BEGIN

LOOP
INPUT(LINE,Q$) EXIT IF Q$=""


## Euler Math Toolbox

>s=lineinput("Two numbers seperated by a blank");
Two numbers seperated by a blank? >4 5
>vs=strtokens(s)
4
5
>vs[1]()+vs[2]()
9

## Euphoria

include get.e

function snd(sequence s)
return s[2]
end function

integer a,b

a = snd(get(0))
b = snd(get(0))

printf(1," %d\n",a+b)

## Excel

Take any 3 columns of any row or rows. Let's say A1,B1 and C1 are taken. In C1 type in :

=A1+B1

The value of C1 will change as the values of A1 and B1 are changed

1	2	3


## F#

open System

let SumOf(str : string) =
str.Split() |> Array.sumBy(int)

[<EntryPoint>]
let main argv =
0


## Factor

USING: math.parser splitting ;
: a+b ( -- )
[ string>number ] bi@ +
number>string print ;

( scratchpad ) a+b
2 2
4


## FALSE

[0[^$$'9>'0@>|~]['0-\10*+]#%]n: {read an integer} n;!n;!+. ## Fantom class APlusB { public static Void main () { echo ("Enter two numbers: ") Str input := Env.cur.in.readLine Int sum := 0 input.split.each |n| { sum += n.toInt } echo (sum) } } ## FBSL Using stdin and stdout #APPTYPE CONSOLE DIM %a, %b SCANF("%d%d", @a, @b) PRINT a, "+", b, "=", a + b PAUSE  ## Fennel Translation of: Lua (let [(a b) (io.read :*number :*number)] (print (+ a b)))  ## Fhidwfe function listint scanint (num:ptr) {// as of writing, fhidwfe has no builtin int scanning reset negative read = num num1 = 0 num2 = 0 while ~ = deref_ubyte read ' ' { char = deref_ubyte read if = char '-' { set negative } { num1 = + * 10 num1 as - char '0' int } read = + read 1u } if negative { num1 = !num1 } ; reset negative read = + read 1u while ~ = deref_ubyte read 0ub { char2 = deref_ubyte read if = char2 '-' { set negative } { num2 = + * 10 num2 as - char2 '0' int } read = + read 1u } if negative { num2 = !num2 } ; return (num1 num2) } //the real program text = malloc 12u//worst input is -1000 -1000, or 11 bytes + null terminator getline text inp = scanint text free text puti + access_word inp 0u access_word inp 1u free inp ## Fish i:o:"-"=?v168*-v v >~01-0 > >i:o:" "=?v68*-a*+ >~*i:o:"-"=?v168*-v v >~01-0 > >i:o:d=?v68*-a*+ >~*+aonao;  ## Forth pad dup 80 accept evaluate + .  ## Fortran program a_plus_b implicit none integer :: a,b read (*, *) a, b write (*, '(i0)') a + b end program a_plus_b  And in Fortran 77  READ (1,100) I,J 100 FORMAT(2I5) WRITE (2,200) I+J 200 FORMAT(1X,I5) END  ## Free Pascal program SUMA; uses SysUtils; var s1, s2:integer; begin ReadLn(s1); Readln(s2); WriteLn(IntToStr(s1 + s2)); end.  ## Frink This program handles arbitrarily-large integers, or even floating-point or rational numbers or complex numbers (as long as they're not internally separated with spaces, of course, which are the delimiters for this task.) It can even handle units of measure (with no embedded spaces) such as "3.3meter 2feet" and does the right thing when summing those units. It can handle any number of arbitrary whitespace characters separating the numbers. It also works whether the input is user-interactive, or input comes from stdin or a pipe. (It will bring up a user dialog for input when run in a graphical environment.) sum[eval[split[%r/\s+/, input[""]]]] ## FunL println( sum(map(int, readLine().split(' +'))) ) ## Furor cin sto mystring #s dec mystring @mystring sprintnl #g ."The length of the input is: " @mystring~ print ." characters.\n" mylist @mystring 32 strtolist ."Quantity of the items: " mylist~ printnl mylist~ mem sto nums mylist 10 ![ ."Item #" [:] #g print ." = " [|] sprintnl @nums [:] [|] #s (#g) [^] ] ."Sum = " 0 #g mylist~ {| @nums {} [] + |} printnl @nums free @mystring free @mylist free end { „mystring” } { „mylist” } { „nums” } Output: echo "23 6 11 7" | furor aplusb.upu 23 6 11 7 The length of the input is: 9 characters. Quantity of the items: 4 Item #0 = 23 Item #1 = 6 Item #2 = 11 Item #3 = 7 Sum = 47 echo "20 11" | furor aplusb.upu 20 11 The length of the input is: 5 characters. Quantity of the items: 2 Item #0 = 20 Item #1 = 11 Sum = 31  ## FutureBasic The input statement was removed from FB several years ago. However, it's trivial to write our own input field which compiles as a stand-alone Macintosh application. _window = 1 begin enum 1 _label _input _result end enum void local fn BuildWindow window _window, @"A + B", ( 0, 0, 260, 200 ) textlabel _label, @"Enter two signed integers separated by a comma, space/s or plus sign. Enter return to calculate.", ( 20, 130, 220, 48 ), _window textfield _input,,,( 20, 90, 220, 24 ), _window TextFieldSetMaximumNumberOfLines( _input, 1 ) ControlSetFormat( _input, @"0123456789 ,+-", YES, 0, NULL ) ControlSetAlignment( _input, NSTextAlignmentCenter ) textlabel _result,, ( 20, 50, 220, 24 ), _window ControlSetAlignment( _result, NSTextAlignmentRight ) WindowMakeFirstResponder( _window, _input ) end fn local fn DoCalc NSInteger value1, value2 CFStringRef calcStr = fn ControlStringValue( _input ) calcStr = fn StringByReplacingOccurrencesOfString( calcStr, @",", @"\t" ) calcStr = fn StringByReplacingOccurrencesOfString( calcStr, @"+", @"\t" ) calcStr = fn StringByReplacingOccurrencesOfString( calcStr, @" ", @"\t" ) CFArrayRef calcArr = fn StringComponentsSeparatedByString( calcStr, @"\t" ) value1 = fn StringIntegerValue( fn ArrayFirstObject( calcArr ) ) value2 = fn StringIntegerValue( fn ArrayLastObject( calcArr ) ) ControlSetStringValue( _result, fn StringWithFormat( @"%ld + %ld = %ld", value1, value2, value1 + value2 ) ) end fn void local fn DoDialog( ev as long, tag as long, wnd as long ) select ( ev ) case _textFieldDidEndEditing : fn DoCalc case _windowWillClose : end end select end fn on dialog fn DoDialog fn BuildWindow HandleEvents Output: -250 1000 = 750 or -250,1000 = 750 or -250 + 1000 = 750  ## Gambas Public Sub Main() Dim sInput As String = InputBox("Input 2 numbers seperated by a space", "A + B") Print Split(sInput, " ")[0] & " + " & Split(sInput, " ")[1] & " = " & Str(Val(Split(sInput, " ")[0]) + Val(Split(sInput, " ")[1])) End Output: 999 + 888 = 1887  ## Gastona Taking A and B from command line arguments #listix# <main> "@<p1> + @<p2> = " =, p1 + p2 Using Graphical interface #javaj# <layout of main> EVALAYOUT, 6, 6, 3, , A , A , lA , eA , lB , eB , bSum, eRes #listix# <-- bSum> MSG, eRes data!,, @<suma> <suma> =, eA + eB ## GDScript Requires Godot 4. Runs as a tool script using the input and output properties. Does not check for zero lines of input. @tool extends Node @export var input: String: set(value): input = value # Save the input field var fields := value.split(" ", false) # Split by spaces if len(fields) == 2: # Basic input validation output = str(int(fields[0]) + int(fields[1])) else: # Invalid input output = "" @export var output: String  ## Gema <D> <D>=@add{1;2} ## Genie [indent=4] /* A+B in Genie valac aplusb-genie.gs ./aplusb-genie */ init a:int64 = 0 b:int64 = 0 leftover:string = "" print "Enter A and B, two numbers separated by space" line:string = stdin.read_line() res:bool = int64.try_parse(line, out a, out leftover) res = int64.try_parse(leftover, out b) warning:string = " outside range (-1000, 1000), but it's ok, no one will tell" if a < -1000 or a > 1000 print "A" + warning if b < -1000 or b > 1000 print "B" + warning print "From %s\nA + B = %llu", line, a+b Output: prompt valac aplusb-genie.gs prompt ./aplusb-genie Enter A and B, two numbers separated by space 20 22 From 20 22 A + B = 42 prompt echo '123 234' | ./aplusb-genie Enter A and B, two numbers separated by space From 123 234 A + B = 357 prompt echo '123 2345' | ./aplusb-genie Enter A and B, two numbers separated by space B outside range (-1000, 1000), but it's ok, no one will tell From 123 2345 A + B = 2468 ## GML var add, a, b; add = argument0; // get the string with the numbers to add a = real(string_copy(add, 1, string_pos(" ", add))); b = real(string_copy(add, string_pos(" ", add) + 1, string_length(add) - string_pos(" ", add))); return(a + b); ## Go package main import "fmt" func main() { var a, b int fmt.Scan(&a, &b) fmt.Println(a + b) }  ## Golfscript ~+ ## Golo #!/usr/bin/env golosh ---- This module asks for two numbers, adds them, and prints the result. ---- module Aplusb import gololang.IO function main = |args| { let line = readln("Please enter two numbers (just leave a space in between them) ") let numbers = line: split("[ ]+"): asList() require(numbers: size() == 2, "we need two numbers") try { let a, b = numbers: map(|i| -> i: toInt()) require(a >= -1000 and a <= 1000 and b >= -1000 and b <= 1000, "both numbers need to be between -1000 and 1000") println(a + b) } catch (e) { println("they both need to be numbers for this to work") } }  ## Gosu uses java.io.InputStreamReader uses java.util.Scanner uses java.lang.System var scanner = new Scanner( new InputStreamReader( System.in ) ) var a = scanner.nextInt() var b = scanner.nextInt() print( a + b )  ## Groovy def abAdder = { def reader = new Scanner(System.in) def a = reader.nextInt(); def b = reader.nextInt(); assert (-1000..1000).containsAll([a,b]) : "both numbers must be between -1000 and 1000 (inclusive)" a + b } abAdder()  ## GUISS We cannot use variables, but we can find the sum of two numbers.Here we add 3 + 2: Start,Programs,Accessories,Calculator,Button:3,Button:[plus], Button:2,Button:[equals] ## Harbour PROCEDURE Main() LOCAL GetList := {} LOCAL bValid := { |n| iif(n>-1001, iif(n<1001, .T.,.F.),.F.) } LOCAL a := 0 , b := 0 SetColor( "G+/N" ) CLS @ 10, 01 SAY "Enter two integers (range -1000...+1000):" GET a VALID Eval(bValid,a) @ Row(), Col() + 1 GET b VALID Eval(bValid,b) READ @ 12, 01 SAY "Sum of given numbers is " + hb_ntos(a+b) RETURN Screen output: Enter two numbers (range -1000...+1000): -56 98 Sum of given numbers is 42 ## Haskell main = print . sum . map read . words =<< getLine  ## hexiscript fun split s delim let ret dict 32 let l len s let j 0 let ret[0] "" for let i 0; i < l; i++ if s[i] = delim if len ret[j] > 0 let ret[++j] "" endif continue endif let ret[j] (ret[j] + s[i]) endfor return ret endfun let nums split (scan str) ' ' let a tonum nums[0] let b tonum nums[1] println a + b ## HicEst A and B are input via edit controls with spinners limiting inputs to +-1000. DLG(Edit=A, DNum, MIn=-1000, MAx=1000, E=B, DN, MI=-1000, MA=1000) WRITE(Messagebox, Name) A, B, "Sum = ", A+B ## Hoon |= [a=@ud b=@ud] (add a b)  ## Hope This being my first hope program, and having no clue how to (have hope) read from stdin, I installed hope (but not hopeless) from https://github.com/dmbaturin/hope, read the Byte magazine article from 1980s which is a recast of the tutorial found in the github archive. Congratulations, the program worked on my first attempt.  cd lib  ../src/hope >: dec add : num # num -> num; >: --- add(a,b) <= a + b; >: add(3,99) >: ^D >> 102 : num  ## Huginn import Algorithms as algo; import Text as text; main() { print( "{}\n".format( algo.reduce( algo.map( text.split( input().strip(), " " ), integer ), @( x, y ){ x + y; } ) ); ); } ## Hy (print (sum (map int (.split (input)))))  Alternatively, with the "threading tail" macro: (->> (input) (.split) (map int) (sum) (print))  ## i main: print(integer(in(' '))+integer(in('\n'))); ignore ## Icon and Unicon procedure main() numChars := '-'++&digits read() ? { A := (tab(upto(numChars)), integer(tab(many(numChars)))) B := (tab(upto(numChars)), integer(tab(many(numChars)))) } write((\A + \B) | "Bad input") end  ## Idris main : IO() main = do line <- getLine print  sum  map cast  words line  ## Insitux (+ (to-num (prompt "Enter first number: ")) (to-num (prompt "Enter second number: "))) ## J Typically, in J, you would find the sum of two numbers (let us say 2 and 3) by entering both of them on a line with a + sign between them:  2+3 5  Next we describe then implement a command line program to add some numbers. 1) In the following expression, 1!:1(3) reads a line from STDIN; -.LF drops the line ending character; ". converts the remaining text to a sequence of numbers which are then summed using +/. +/". (1!:1(3))-.LF  2) Here's a little script, called "a+b.ijs": #!/usr/bin/ijconsole echo +/". (1!:1(3))-.LF exit ''  3) Here is an execution of the script: echo 2 3 | ./a+b.ijs 5  Note: under OSX, you should probably install a symbolic link at /usr/bin/ijconsole which links to something like /Applications/j602/bin/jconsole. ## Java The task description is somewhat vague, if the 'input stream' is in reference to the data provided at the command line, then Java will parse these values into a String array, accessible via the args parameter of the main method. public static void main(String[] args) { int A = Integer.parseInt(args[0]); int B = Integer.parseInt(args[1]); System.out.println(A + B); }  If the 'input stream' is the standard-in, you can use the following. The Scanner class can be used to "scan" the standard-in stream from left to right, returning the next value requested. public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int A = scanner.nextInt(); int B = scanner.nextInt(); System.out.println(A + B); }  If the 'input stream' is referring to any abstraction, then you can use the following. In this example, the data is considered to be under a specific charset, so the integer values are parsed using UTF-8. import static java.nio.charset.StandardCharsets.UTF_8; import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader;  int sum(InputStream input) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(input)); String line = reader.readLine(); reader.close(); /* split parameter here is a regex */ String[] values = line.split(" +"); int A = Integer.parseInt(values[0]); int B = Integer.parseInt(values[1]); return A + B; }  An alternate implemenation import java.util.Scanner; public class Sum2 { public static void main(String[] args) { Scanner in = new Scanner(System.in); // Standard input System.out.println(in.nextInt() + in.nextInt()); // Standard output } }  Object of class Scanner works slow enough, because of that contestants prefer to avoid its use. Often, longer solution works faster and easily scales to problems. import java.io.*; import java.util.*; public class SumDif { StreamTokenizer in; PrintWriter out; public static void main(String[] args) throws IOException { new SumDif().run(); } private int nextInt() throws IOException { in.nextToken(); return (int)in.nval; } public void run() throws IOException { in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in))); // Standard input out = new PrintWriter(new OutputStreamWriter(System.out)); // Standard output solve(); out.flush(); } private void solve() throws IOException { out.println(nextInt() + nextInt()); } }  The following code uses a StreamTokenizer instead of a Scanner. import java.io.*; import java.nio.charset.Charset; public class AplusB { public static void main(String[] args) throws IOException { StreamTokenizer in = new StreamTokenizer(new InputStreamReader(System.in, Charset.defaultCharset())); in.nextToken(); int a = (int) in.nval; in.nextToken(); int b = (int) in.nval; try (Writer out = new OutputStreamWriter(System.out, Charset.defaultCharset())) { out.write(Integer.toString(a + b)); } } }  grammar aplusb ; options { language = Java; } aplusb : (WS* e1=Num WS+ e2=Num NEWLINE {System.out.println(e1.text + " + " + e2.text + " = " + (Integer.parseInt(e1.text) + Integer.parseInt(e2.text)));})+ ; Num : '-'?('0'..'9')+ ; WS : (' ' | '\t') ; NEWLINE : WS* '\r'? '\n' ;  Produces: >java Test 1 2 23 89 13 567 -75 6 -75 -29 ^Z 1 + 2 = 3 23 + 89 = 112 13 + 567 = 580 -75 + 6 = -69 -75 + -29 = -104  ## JavaScript ### ES5 Client side: <html> <body> <div id='input'></div> <div id='output'></div> <script type='text/javascript'> var a = window.prompt('enter A number', ''); var b = window.prompt('enter B number', ''); document.getElementById('input').innerHTML = a + ' ' + b; var sum = Number(a) + Number(b); document.getElementById('output').innerHTML = sum; </script> </body> </html> Server side (with node.js): process.openStdin().on ( 'data', function (line) { var xs = String(line).match(/^\s*(\d+)\s+(\d+)\s*/) console.log ( xs ? Number(xs[1]) + Number(xs[2]) : 'usage: <number> <number>' ) process.exit() } )   node io.js 2 3 5  node io.js x 3 usage: <integer> <integer>  ### ES6 Node.js in a terminal: process.stdin.on("data", buffer => { console.log( (buffer + "").trim().split(" ").map(Number).reduce((a, v) => a + v, 0) ); });    node io.js 2 3 5  ### JScript Windows Script Host Version 5.8 var a = WScript.StdIn.ReadLine(); var b = WScript.StdIn.ReadLine(); WSH.echo(a, " + " , b , " = " , Number(a)+Number(b));  ## Joy ### Console get get +. ### File "input.txt" include "output.txt" "w" fopen get get + fput pop quit. ## jq Since the given task is simply to add two numbers, the simplest approach in jq is illustrated by the following transcript:  jq -s add 3 2 5 This will work provided the numbers are neither too small nor too large. However, the above program will add **all** the numbers presented on the stream (assuming only numbers are presented). If the task were to add consecutive pairs of numbers, then the approach illustrated in the following transcript can be used, in conjunction with the jq "-s" option: def addpairs: if length < 2 then empty else (.[0] + .[1]), (.[2:] | addpairs) end; addpairs For example, here is a transcript that assumes the program is in a file named AB.jq:  jq -s -f AB.jq 1 2 3 4 5 6 3 7 11 ## Jsish /* A+B in Jsish */ var line = console.input(); var nums = line.match(/^\s*([+-]?[0-9]+)\s+([+-]?[0-9]+)\s*/); if (nums) { var A = Number(nums[1]); var B = Number(nums[2]); if (A <= 1000 && A >= -1000 && B <= 1000 && B >= -1000) { printf("%d\n", A + B); } else { puts("error: A and B both need to be in range -1000 thru 1000 inclusive"); } } else { puts("error: A+B requires two numbers separated by space"); }  Output: prompt jsish A+B.jsi a b error: A+B requires two numbers separated by space prompt jsish A+B.jsi 1234 123 error: A and B both need to be in range -1000 thru 1000 inclusive prompt jsish A+B.jsi -1000 +1000 0 prompt jsish A+B.jsi 123 -234 -111 ## Julia Run from the command line: input = parse.(Int, split(readline(stdin))) println(stdout, sum(input))  Output: >julia AB.jl 1 1 2 In the next solution, an error is returned if the entry is not constituted from exactly two integers. Any number of spaces can follow an integer. julia> println(parse(Int, readuntil(stdin, ' ')) + parse(Int, readuntil(stdin, '\n'))) 1 2 3  ## K  split:{(a@&~&/' y=/: a:(0,&x=y)_ x) _dv\: y} ab:{+/0split[0:;" "]} ab[] 2 3 5  ## Keg +. Or, using flags (-hr): + ## Kite #!/usr/bin/kite import "System.file"; in = System.file.stdin; line = in|readline; while(not (line is null)) [ arry = line|split(" "); result = (arry[0])|int + (arry[1])|int; result|print; line = in|readline; ]; Output:  kite a_plus_b.kt <<EOF 5 6 EOF 11  ## Klong  {(1:(*x?0c )#x)+1:(1+*|x?0c )_x}@.rl() 2 3 5  ## Kotlin // version 1.0.5-2 fun main(args: Array<String>) { val r = Regex("""-?\d+[ ]+-?\d+""") while(true) { print("Enter two integers separated by space(s) or q to quit: ") val input: String = readLine()!!.trim() if (input == "q" || input == "Q") break if (!input.matches(r)) { println("Invalid input, try again") continue } val index = input.lastIndexOf(' ') val a = input.substring(0, index).trimEnd().toInt() val b = input.substring(index + 1).toInt() if (Math.abs(a) > 1000 || Math.abs(b) > 1000) { println("Both numbers must be in the interval [-1000, 1000] - try again") } else { println("Their sum is {a + b}\n") } } }  Output: Enter two integers separated by space(s) or q to quit: 2 2 Their sum is 4 Enter two integers separated by space(s) or q to quit: 3 2 Their sum is 5 Enter two integers separated by space(s) or q to quit: q  ## KQL datatable(Input:string)[ '2 2', '3 2' ] | parse Input with A:int ' ' B:int | project Input, Output = A + B ## L++ (main (decl int a) (decl int b) (>> std::cin a b) (prn (+ a b))) ## Lambdatalk Lambdatalk works in a wiki, lambdatank. 1) Open the wiki frame-editor and define a contenteditable box {def box {pre {@ contenteditable style="box-shadow:0 0 8px #000; padding:5px;" ondblclick="this.innerHTML=LAMBDATALK.eval_forms(this.innerHTML)" }}} -> blockedit 2) create this box {box} and close the wiki frame-editor. The wiki-page displays a shadowed box, (here simulated as a space between square brackets) [ ] 3) Enter any valid lambdatalk expression, for instance 1+2+3 is equal to {+ 1 2 3} then double-click. The expression is evaluated and the box displays [ 1+2+3 is equal to 6 ] Several boxes can be created in the wiki page with any valid lambdatalk expressions. ## Lang fn.print(First number:\s) a = fn.int(fn.input()) fn.print(Second number:\s) b = fn.int(fn.input()) fn.println(Result: parser.op(a + b)) ## Lang5 read read + . read " " split expand drop + . ## Lasso [a + b] ## LIL # A+B, in LIL # Requires lil shell readline routine set in [readline] set A [index in 0] set B [index in 1] if [expr A < -1000 || A > 1000] { print "A out of range: A"; exit 1 } if [expr B < -1000 || B > 1000] { print "B out of range: B"; exit 1 } print [expr A + B] Output: prompt echo '40 2' | lil AB.lil 42 ## Lisaac Section Header + name := A_PLUS_B Section Public - main <- ( (IO.read_integer; IO.last_integer) + (IO.read_integer; IO.last_integer) ).println; ## Little void main() { string a, b; scan(gets(stdin), "%d %d", &a, &b); puts(((int)a + (int)b)); } ## Little Man Computer Note: Both numbers are entered separately. This is the "add" example from V1.3 of the implementation of Little Man Computer by Peter Higginson. Assembly  INP STA 99 INP ADD 99 OUT HLT // Output the sum of two numbers Machine code 00 INP 01 STA 99 02 INP 03 ADD 99 04 OUT 05 HLT ## LiveCode Using Livecode Server script <?lc if isNumber(0) and isNumber(1) then put 0 + 1 else put 0 && 1 end if ?> A graphical version using an input dialog on mouseUp ask "Enter two numbers" set itemdelimiter to space put it into nums if isNumber(item 1 of nums) and isNumber(item 2 of nums) then answer item 1 of nums + item 2 of nums else answer item 1 of nums && item 2 of nums end if end mouseUp ## Logo show apply "sum readlist ## Lua a,b = io.read("*number", "*number") print(a+b) ## M2000 Interpreter Def Range(X%)=Abs(X%)<=1000 Do { Input A%, B% } Until Range(A%) And Range(B%) Print A%+B% ## M4  define(sumstr', eval(patsubst(1', ',+'))') sumstr(1 2) 3 ## Maple  convert( scanf( "%d %d" ), '+' ); 23 34 57 ## Mathematica/Wolfram Language Interactive in a notebook Input[] + Input[] ## MATLAB / Octave function sumOfInputs = APlusB() inputStream = input('Enter two numbers, separated by a space: ', 's'); numbers = str2num(inputStream); %#ok<ST2NM> if any(numbers < -1000 | numbers > 1000) warning('APlusB:OutOfRange', 'Some numbers are outside the range'); end sumOfInputs = sum(numbers); end ## Maude ### Built-in red 3 + 4 . ### With restrictions fmod ADD is protecting INT . op undefined : -> Int . op _add_ : Int Int -> Int [assoc comm] . vars A B : Int . eq A add B = if (A < -1000 or B < -1000) or (A > 1000 or B > 1000) then undefined else A + B fi . endfm ## Maxima in_stream: openr("/dev/stdin"); unless (line: readline(in_stream), line=false) do ( q: map('parse_string, split(line, " ")), print(q[1]+q[2]) ); close(in_stream); ## Mercury :- module a_plus_b. :- interface. :- import_module io. :- pred main(io::di, io::uo) is det. :- implementation. :- import_module int, list, string. main(!IO) :- io.read_line_as_string(Result, !IO), ( if Result = ok(Line), [AStr, BStr] = string.words(Line), string.to_int(AStr, A), string.to_int(BStr, B) then io.format("%d\n", [i(A + B)], !IO) else true ). ## min Works with: min version 0.19.3 gets " " split 'bool filter 'int map sum puts! ## MiniScript The input intrinsic in MiniScript isn't available in all implementations, so we've just hard-coded the input here: s = " 2 3 " fields = s.split for i in range(fields.len-1, 0) if fields[i] == "" then fields.remove i end for if fields.len < 2 then print "Not enough input" else print val(fields[0]) + val(fields[1]) end if Output: 5 ## mIRC Scripting Language alias a+b { echo -ag calc(1 + 2) } ## МК-61/52 С/П + С/П  ## ML/I The two numbers are read from 'standard input' or its equivalent. MCSKIP "WITH" NL "" A+B "" assumes macros on input stream 1, terminal on stream 2 MCSKIP MT,<> MCINS %. MCDEF SL SPACES NL AS <MCSET T1=%A1. MCSET T2=%A2. %T1+T2. MCSET S10=0 > MCSKIP SL WITH * MCSET S1=1 *MCSET S10=2 ## Modula-2 MODULE ab; IMPORT InOut; VAR A, B : INTEGER; BEGIN InOut.ReadInt (A); InOut.ReadInt (B); InOut.WriteInt (A + B, 8); InOut.WriteLn END ab. ## Modula-3 MODULE Ab EXPORTS Main; IMPORT IO; VAR A,B:INTEGER; BEGIN TRY A := IO.GetInt(); B := IO.GetInt(); EXCEPT | IO.Error => IO.Put("Invalid number!\n"); END; IO.PutInt(A+B); IO.Put("\n"); END Ab. ## MoonScript a,b = io.read '*number','*number' print a + b ## Mosaic proc main = int a, b print "?" readln a, b println a + b end ## MUMPS ANB NEW A,B,T,S READ !,"Input two integers between -1000 and 1000, separated by a space: ",S SET A=PIECE(S," ",1),B=PIECE(S," ",2) SET T=(A>=-1000)&(A<=1000)&(B>=-1000)&(B<=1000)&(A\1=A)&(B\1=B) IF T WRITE !,(A+B) IF 'T WRITE !,"Bad input" QUIT ## Nanoquery // get a line of input line = input() // split the line strings = split(line, " ") // add the two numbers and print the result println int(strings[0]) + int(strings[1]) ## Neko /** A+B, Rosetta Code, in Neko Tectonics: nekoc a+b.neko echo '4 5' | neko a+b.n */ /* load some primitives */ var regexp_new = loader.loadprim("regexp@regexp_new", 1) var regexp_match = loader.loadprim("regexp@regexp_match", 4) var regexp_matched = loader.loadprim("regexp@regexp_matched", 2) var stdin = loader.loadprim("std@file_stdin", 0)() var file_read_char = loader.loadprim("std@file_read_char", 1) /* Read a line from file f into string s returning length without any newline */ var NEWLINE = 10 var readline = function(f, s) { var len = 0 var ch while true { try ch = file_read_char(f) catch a break; if ch == NEWLINE break; if sset(s, len, ch) == null break; else len += 1 } return len } /* Trim a string of trailing NUL and spaces, returning substring */ var SPACE = 32 var trim = function(s) { var len = ssize(s) var ch while len > 0 { ch = sget(s, len - 1) if ch != 0 && ch != SPACE break; else len -= 1 } return ssub(s, 0, len) } /* The A+B task */ var RECL = 132 try { /* whitespace(s), digit(s), whitespace(s), digit(s) */ var twonums = regexp_new("^\\s*(\\d+)\\s+(\\d+)\\b") var s = smake(RECL) var len = readline(stdin, s) s = trim(s) var valid = regexp_match(twonums, s, 0, ssize(s)) if valid { var first = regexp_matched(twonums, 1) var second = regexp_matched(twonums, 2) first = int(first) second = int(second) if first < -1000 || first > 1000 throw("First value out of range -1000,1000") if second < -1000 || second > 1000 throw("Second value out of range -1000,1000") print(int(first) + int(second), "\n") } else print("Need two numbers, separated by whitespace\n") } catch with print("Exception: ", with, "\n") Output: prompt nekoc a+b.neko prompt echo '2 2' | neko a+b 4 prompt neko a+b 2 3 5 ## Nemerle Translation of: C# using System; using System.Console; using System.Linq; module AplusB { Main() : void { WriteLine(ReadLine().Split().Select(int.Parse).Sum()); } } ## NetRexx /* NetRexx */ options replace format comments java symbols binary parse ask a b . say a '+' b '=' a + b ## newLISP (println (apply + (map int (parse (read-line))))) ## Nim A+B: # Takes 2 inputs of Floats and adds them (which is not correct for the exercise, will revisit, Thank you from strutils import parseFloat, formatFloat, ffDecimal proc aplusb(a,b: float): float = return a + b proc getnumber(): float = try: parseFloat(readLine(stdin)) except ValueError: echo("Please enter a number: ") getnumber() echo("First number please: ") let first: float = getnumber() echo("Second number please: ") let second: float = getnumber() echo("Result: " & formatFloat(aplusb(first, second), ffDecimal, 2)) The puzzle requires 1 input, 2 INTS separated by a space, than a+b Needs to be revisited ## Nit Generic non-robust version (source: the Nit’s official repository): module ab var words = gets.split(" ") if words.length != 2 then print "Expected two numbers" return end print words[0].to_i + words[1].to_i ## NS-HUBASIC 10 INPUT "ENTER NUMBER A: ",A 20 INPUT "ENTER NUMBER B: ",B 30 PRINT A+B ## Nu input | parse "{a} {b}" | first | values | into int | math sum ## Nutt module main imports native.io{input.hear,output.say} vals a=hear(Int),b=hear(Int) say(a+b) end ## Nyquist ### SAL Syntax ;nyquist plug-in ;version 1 ;type tool ;name "A+B" ;debugflags trace define variable a = 1 define variable b = 9 print a + b return "" ### Audacity plug-in (SAL syntax) ;nyquist plug-in ;version 1 ;type tool ;name "A+B" ;debugflags trace define variable a = 1 define variable b = 9 print a + b return "" ## Oberon-2 MODULE ab; IMPORT In, Out; VAR A, B : INTEGER; BEGIN In.Int (A); In.Int (B); Out.Int (A + B, 8); Out.Ln END ab. Producing 12 34 46  ## Objeck bundle Default { class Vander { function : Main(args : String[]) ~ Nil { values := IO.Console->ReadString()->Split(" "); if(values->Size() = 2) { (values[0]->Trim()->ToInt() + values[1]->Trim()->ToInt())->PrintLine(); }; } } } ## OCaml Scanf.scanf "%d %d" (fun a b -> Printf.printf "%d\n" (a + b)) ## Oforth Works with any number of integers separated by a space. import: mapping System.Console accept words map( #>integer) reduce( #+ ) printcr . ## Ol Note: input data must be separated by newline ([Enter] key press). ; simplest (+ (read) (read)) ; safe (let ((a (read)) (b (read))) (if (not (number? a)) (runtime-error "a is not a number! got:" a)) (if (not (number? b)) (runtime-error "b is not a number! got:" b)) (print a " + " b " = " (+ a b))) ## Onyx Prompt { \nEnter two numbers between -1000 and +1000,\nseparated by a space: ' print flush } def GetNumbers { mark stdin readline pop # Reads input as a string. Pop gets rid of false. cvx eval # Convert string to integers. } def CheckRange { # (n1 n2 -- bool) dup -1000 ge exch 1000 le and } def CheckInput { counttomark 2 ne {You have to enter exactly two numbers.\n' print flush quit} if 2 ndup CheckRange exch CheckRange and not {The numbers have to be between -1000 and +1000.\n' print flush quit} if } def Answer { add cvs The sum is ' exch cat .\n' cat print flush } def Prompt GetNumbers CheckInput Answer ## ooRexx ### version 1 Translation of: REXX Numeric digits 1000 /*just in case the user gets ka-razy. */ Say 'enter some numbers to be summed:' parse pull y yplus=add_plus(y) sum=0 Do While y<>'' Parse Var y n y If datatype(n)<>'NUM' Then Do Say 'you entered something that is not recognized to be a number:' n Exit End sum+=n End Say yplus '=' sum/1 Exit add_plus: Parse arg list list=space(list) return translate(list,'+',' ') Output: enter some numbers to be summed: 1e10+7.777+33 = 10000000040.777 ### version 2 extend for negative numbers Numeric digits 1000 Say 'enter some numbers to be summed:' parse pull y sum=0 yplus='' Do i=1 By 1 While y<>'' Parse Var y n y If datatype(n)<>'NUM' Then Do Say 'you entered something that is not recognized to be a number:' n Exit End Select When i=1 Then yplus=n When n>0 Then yplus||='+'abs(n) Otherwise yplus||=n End sum+=n End Say yplus '=' sum/1 Exit ## OpenEdge/Progress DEFINE VARIABLE a AS INTEGER NO-UNDO FORMAT "->>>9". DEFINE VARIABLE b AS INTEGER NO-UNDO FORMAT "->>>9". IF SESSION:BATCH THEN DO: INPUT FROM "input.txt". IMPORT a b. INPUT CLOSE. END. ELSE UPDATE a b. MESSAGE a + b VIEW-AS ALERT-BOX ## Openscad There is no means of run-time input in Openscad a = 5 + 4; echo (a); ## Order Since Order is implemented in the C pre-processor, which cannot express arithmetic operations, this program has been built around Order's standard library simulated natural number arithmetic implementation, extended to handle a sign bit. To run this Order program, you must define the macros A and B to values of the form 8int(SIGN, 8nat(VALUE)), where SIGN is 1/0 to represent signed/unsigned numbers, and VALUES is any comma-separated list of decimal digits. For example, to evaluate the sum of A=-150, B=275, define A to be 8int(1, 8nat(1,5,0)) and B to be 8int(0, 8nat(2,7,5)). #define ORDER_PP_DEF_1int_is_positive \ ORDER_PP_FN(8fn(8X, 8is_0(8tuple_at_0(8X)))) #define ORDER_PP_DEF_1int_get_unsigned \ ORDER_PP_FN(8fn(8X, 8tuple_at_1(8X))) #define ORDER_PP_DEF_1int_add_impl \ ORDER_PP_FN(8fn(8A, 8B, 8S, 8int(8S, 8add(8A, 8B)))) #define ORDER_PP_DEF_1int_sub_impl \ ORDER_PP_FN(8fn(8A, 8B, \ 8if(8greater(8A, 8B), \ 8int(0, 8sub(8A, 8B)), \ 8int(1, 8sub(8B, 8A))))) #define ORDER_PP_DEF_8int_add \ ORDER_PP_FN(8fn(8A, 8B, \ 8cond((8and(1int_is_positive(8A), 1int_is_positive(8B)), \ 1int_add_impl(1int_get_unsigned(8A), 1int_get_unsigned(8B), 0)) \ (8and(1int_is_positive(8A), 8not(1int_is_positive(8B))), \ 1int_sub_impl(1int_get_unsigned(8A), 1int_get_unsigned(8B))) \ (8and(8not(1int_is_positive(8A)), 1int_is_positive(8B)), \ 1int_sub_impl(1int_get_unsigned(8B), 1int_get_unsigned(8A))) \ (8and(8not(1int_is_positive(8A)), 8not(1int_is_positive(8B))), \ 1int_add_impl(1int_get_unsigned(8A), 1int_get_unsigned(8B), 1))))) #define ORDER_PP_DEF_8int_to_lit \ ORDER_PP_FN(8fn(8X, \ 8if(1int_is_positive(8X), \ 8to_lit(1int_get_unsigned(8X)), \ 8adjacent(8(-), 8to_lit(1int_get_unsigned(8X)))))) #define ORDER_PP_DEF_8int \ ORDER_PP_FN(8fn(8S, 8N, 8pair(8S, 8N))) ORDER_PP(8int_to_lit(8int_add(A, B))) ## Oxygene // Sum 2 integers read fron standard input // // Nigel Galloway - April 16th., 2012 // namespace aplusb; interface uses System.Text.RegularExpressions.*; type aplusb = class public class method Main; end; implementation class method aplusb.Main; var gc: GroupCollection; m : Match; begin m := new Regex('^\s*(?<a>-?[1-9]\d{0,2}|0|-?1000)\s+(?<b>-?[1-9]\d{0,2}|0|-?1000)\s*').Match(Console.ReadLine()); if m.Success then begin gc := m.Groups; Console.WriteLine("{0} + {1} = {2}", gc['a'].Value, gc['b'].Value, Integer.Parse(gc['a'].Value) + Integer.Parse(gc['b'].Value)); end else Console.WriteLine("Invalid Input"); end; end. Produces: >aplusb 23 -99 23 + -99 = -76  ## Oz declare class TextFile from Open.file Open.text end StdIn = {New TextFile init(name:stdin)} fun {ReadInt} {String.toInt {StdIn getS()}} end in {Show {ReadInt}+{ReadInt}} ## PARI/GP User input: input()+input() File input: read("file1")+read("file2") ## PascalABC.NET ## var (a,b) := ReadInteger2; Writeln(a + b); ## Pascal var a, b: integer; begin readln(a, b); writeln(a + b); end. Same with input from file input.txt and output from file output.txt. var a, b: integer; begin reset(input, 'input.txt'); rewrite(output, 'output.txt'); readln(a, b); writeln(a + b); close(input); close(output); end. ### Version 2. Following the rules { Task: A + B Sum of A + B while A, B >= -1000 and A,B <= 1000 Author: Sinuhe Masan (2019) } program APlusB; var A, B : integer; begin repeat write('Enter two numbers betwen -1000 and 1000 separated by space: '); readln(A, B); until ((abs(A) < 1000) and (abs(B) < 1000)); writeln('The sum is: ', A + B); end. ## Perl my (a,b) = split(' ', scalar(<STDIN>)); print "a b " . (a + b) . "\n"; ### using the List::Util module say sum split /\s+/, scalar <STDIN>; ## Phix -- demo\rosetta\AplusB.exw string s = prompt_string("Enter two numbers separated by a space : ") sequence r = scanf(s,"%d %d") if length(r)=1 then integer {a,b} = r[1], c = a+b printf(1,"%d + %d = %d\n",{a,b,c}) else printf(1,"invalid input\n") end if  Output: Enter two numbers separated by a space : 2 3 2 + 3 = 5  ### GUI version Library: Phix/pGUI (The above console version is now just a comment in the distributed file.) -- demo\rosetta\AplusB.exw with javascript_semantics include pGUI.e Ihandle lab, tab, res, dlg function valuechanged_cb(Ihandle tab) string s = IupGetAttribute(tab,"VALUE") sequence r = scanf(s,"%d %d") if length(r)=1 then integer {a,b} = r[1] s = sprintf("%d + %d = %d", {a, b, a+b}) IupSetStrAttribute(res,"TITLE",s) IupRefresh(res) end if return IUP_DEFAULT end function procedure main() IupOpen() lab = IupLabel("Enter two numbers separated by a space") tab = IupText("VALUECHANGED_CB", Icallback("valuechanged_cb"),"EXPAND=HORIZONTAL") res = IupLabel("") dlg = IupDialog(IupVbox({IupHbox({lab,tab},"GAP=10,NORMALIZESIZE=VERTICAL"), IupHbox({res})},"MARGIN=5x5"),TITLE="A plus B") IupShow(dlg) if platform()!=JS then IupMainLoop() IupClose() end if end procedure main()  ## Phixmonti /# Rosetta Code problem: http://rosettacode.org/wiki/A+B by Galileo, 05/2022 #/ include ..\Utilitys.pmt def valid dup -1000 >= swap 1000 <= and enddef true while clear cls "Enter two numbers (betwen -1000 ... +1000) separated by space: " input split pop pop drop tonum swap tonum over valid over valid and not endwhile over over + >ps nl "The sum of " print print " and " print print " is: " print ps> print /# swap over over + >ps >ps >ps nl ( "The sum of " ps> " and " ps> " is: " ps> ) lprint #/ Output: Enter two numbers (betwen -1000 ... +1000) separated by space: 2 3 The sum of 2 and 3 is: 5 === Press any key to exit === ## PHP fscanf(STDIN, "%d %d\n", a, b); //Reads 2 numbers from STDIN echo (a + b) . "\n"; in = fopen("input.dat", "r"); fscanf(in, "%d %d\n", a, b); //Reads 2 numbers from file in fclose(in); out = fopen("output.dat", "w"); fwrite(out, (a + b) . "\n"); fclose(out); ## Picat go => println("Write two integers (and CR)"), println(read_int()+read_int()). Output: Picat> go Write two integers (and CR) 2 5 7  Or directly in the REPL: Picat> read_int()+read_int()=X 2 5 X = 7  ## PicoLisp (+ (read) (read)) 3 4 -> 7 ## Piet The code is fairly straightforward. The individual commands are as follows: in(num) in(num) add out(num) ## Pike string line = Stdio.stdin->gets(); sscanf(line, "%d %d", int a, int b); write(a+b +"\n"); ## PL/I get (a, b); put (a+b); ## Plain English To run: Start up. Read a number from the console. Read another number from the console. Output the sum of the number and the other number. Wait for the escape key. Shut down. To output the sum of a number and another number: If the number is not valid, write "Invalid input" to the console; exit. If the other number is not valid, write "Invalid input" to the console; exit. Write the number plus the other number then " is the sum." to the console. To decide if a number is valid: If the number is not greater than or equal to -1000, say no. If the number is not less than or equal to 1000, say no. Say yes. ## Pony actor Main let _env:Env new create(env:Env)=> _env=env env.input(object iso is InputNotify let _e:Main=this fun ref apply(data:Array[U8] iso)=> _e(consume data) fun ref dispose()=> None end, 512) be apply(s:Array[U8] iso)=> let c=String.from_iso_array(consume s) let parts:Array[String]=c.split(" ",0) var sum:I32=0 try for v in parts.values() do sum=sum+match v.read_int[I32](0)? |(let x:I32,_)=>x end end end _env.out.print(sum.string()) ## PostScript (%stdin) (r) file % get stdin dup token pop % read A exch token pop % read B add = ## Potion # The numbers are entered, piped, or redirected in via STDIN and the format is proper (i.e., "%d %d"). input = read i = 0 while (i < input length): if (input(i) == " "): break . i++ . (input slice(0, i) number + input slice(i, nil) number) print # The numbers are manually inputted, but the format is improper (i.e., "%d\n%d\n"). (read number + read number) print ## PowerShell a,b = -split "input" [int]a + [int]b This solution does not work interactively, while the following only works interactively: a,b = -split (Read-Host) [int]a + [int]b I think this works better and doesn't require string input (following the task closer): filter add { return [int]args[0] + [int]args[1] } Can be called in one line with add 2 3 ## Processing ### Rudimentary User Interface Click on either side to add 1 to its value. int a = 0; int b = 0; void setup() { size(200, 200); } void draw() { fill(255); rect(0, 0, width, height); fill(0); line(width/2, 0, width/2, height * 3 / 4); line(0, height * 3 / 4, width, height * 3 / 4); text(a, width / 4, height / 4); text(b, width * 3 / 4, height / 4); text("Sum: " + (a + b), width / 4, height * 7 / 8); } void mousePressed() { if (mouseX < width/2) { a++; } else { b++; } } ## ProDOS With the math module: editvar /newvar /value=a /title=Enter an integer: editvar /newvar /value=b /title=Enter another integer: editvar /newvar /value=c do add -a-,-b-=-c- printline -c- Without the math module: editvar /newvar /value=a /title=Enter an integer: editvar /newvar /value=b /title=Enter another integer: editvar /newvar /value=c=-a-+-b- printline -c- ## Prolog Works with: SWI-Prolog plus :- read_line_to_codes(user_input,X), atom_codes(A, X), atomic_list_concat(L, ' ', A), maplist(atom_number, L, LN), sumlist(LN, N), write(N). output : ?- plus. |: 4 5 9 true. ## Pure using system; printf "%d\n" (x+y) when x,y = scanf "%d %d" end; ## PureBasic ### Console x=Input() a=Val(StringField(x,1," ")) b=Val(StringField(x,2," ")) PrintN(str(a+b)) ### File If ReadFile(0,"in.txt") x=ReadString(0) a=Val(StringField(x,1," ")) b=Val(StringField(x,2," ")) If OpenFile(1,"out.txt") WriteString(1,str(a+b)) CloseFile(1) EndIf CloseFile(0) EndIf ## Python ### Console In Python 2, input returns ints, while raw_input returns strings. In Python 3, input returns strings, and raw_input does not exist. The first two lines allow the program to be run in either Python 2 or 3. In Python 2, raw_input exists, and the lines are effectively skipped. In Python 3, calling raw_input triggers an error, so the except loop activates and assigns "raw_input" the value of Python 3's "input" function. Regardless of version, these two lines make sure that raw_input will return a string. try: raw_input except: raw_input = input print(sum(map(int, raw_input().split()))) ### File For Python 2.X and 3.X taking input from stdin stream which can be redirected to be file input under Unix import sys for line in sys.stdin: print(sum(map(int, line.split()))) ### Console, Python 3 only a = int(input("First number: ")) b = int(input("Second number: ")) print("Result:", a+b) ## QB64 DIM a AS INTEGER, b AS INTEGER DIM c AS LONG INPUT "Enter A: ", a INPUT "Enter B: ", b c = a + b PRINT "" PRINT "A + B = " + LTRIM(STR(c)) Fully implemented version: CBTJD: 2020/03/13 • Task description requires: • Both integers entered on one line. • Integers between -1000 and +1000. START: PRINT "Enter two integers between -1000 and +1000 separated by at least one space: " INPUT "> "; n ' | Enter two numbers with at least one space between. n = _TRIM(n) ' | TRIM any leading or trailing spaces. bpos = INSTR(n, " ") ' | Find the first space between the two numbers. a = VAL(LEFT(n, bpos - 1)) ' | Parse the first number from the input string. b = VAL(_TRIM(MID(n, bpos))) ' | Parse the second number from the input string. IF (a < -1000 OR a > 1000) OR (b < -1000 OR b > 1000) THEN PRINT "A number is outside of limit (-1000 to +1000). Try again.": PRINT GOTO START ' | Check both number are within prescribed limit. END IF a = LTRIM(STR(a)) ' | Clean up both numbers and the sum for better printing. b = LTRIM(STR(b)) ' | " sum = LTRIM(STR(a + b)) ' | " PRINT "The sum of the two integers a + b = "; a; " + "; b; " = "; sum ## Quackery As a dialogue in the Quackery shell: /O>  "Please enter two numbers separated by a space: " input ... say "Their sum is: " quackery + echo cr ... Please enter two numbers separated by a space: 2 3 Their sum is: 5 Stack empty. ## Quite BASIC 10 input "Enter number A: ";a 20 input "Enter number B: ";b 30 print a+b ## R sum(scan("", numeric(0), 2)) ## Ra class Sum **Adds two given integers** on start args := program arguments if args empty print to Console.error made !, "No arguments given" exit program with error code if args.count = 1 print to Console.error made !, "Only one argument given" exit program with error code try print integer.parse(args[0]) + integer.parse(args[1]) catch FormatException print to Console.error made !, "Arguments must be integers" exit program with error code catch OverflowException print to Console.error made !, "Numbers too large" exit program with error code ## Racket #lang racket (+ (read) (read)) Or, with additional error checking: #lang racket (define a (read)) (unless (number? a) (error 'a+b "number" a)) (define b (read)) (unless (number? b) (error 'a+b "number" b)) (displayln (+ a b)) ## Raku (formerly Perl 6) Works with: rakudo version 2015.12 Short version with very little "line noise": get.words.sum.say; Reduction operator [+], and say as a function: say [+] get.words; Long version: my (a, b) = *IN.get.split(" "); say a + b; ## REBOL forever [x: load input print x/1 + x/2] Output: 1 2 3 2 2 4 3 2 5 ## Red x: load input print x/1 + x/2 Output: 1 2 3 2 2 4 3 2 5 Alternative implementations: print (first x: load input) + x/2 print head insert load input 'add print load replace input " " " + " ## Relation set input = "2 2" set a = regexreplace(input,"^(-?\d+)\s+(-?\d+)+","1") set b = regexreplace(input,"^(-?\d+)\s+(-?\d+)+","2") echo a + b ## Retro :try ("-n) s:get s:to-number s:get s:to-number + n:put ; try 1 2 ## REXX ### version 1, unnormalized The numbers can be any valid REXX number (integer, fixed point decimal, floating point (with exponential notation, ···). /*REXX program obtains two numbers from the input stream (the console), shows their sum.*/ parse pull a b /*obtain two numbers from input stream.*/ say a+b /*display the sum to the terminal. */ /*stick a fork in it, we're all done. */ ### version 2, normalizied If the user entered 4.00000 and wanted to add 5 to that, and expects 9, then the output needs to be normalized before displaying the result. Normally, REXX will keep the greatest precision in the results; adding 4.00000 and 5 will normally yield 9.00000 Dividing by one normalizes the number. /*REXX program obtains two numbers from the input stream (the console), shows their sum.*/ parse pull a b /*obtain two numbers from input stream.*/ say (a+b) / 1 /*display normalized sum to terminal. */ /*stick a fork in it, we're all done. */ ### version 3, extended precision Using the numeric digits statement allows more decimal digits to be used, the default is 9. /*REXX program obtains two numbers from the input stream (the console), shows their sum.*/ numeric digits 300 /*the default is nine decimal digits.*/ parse pull a b /*obtain two numbers from input stream.*/ z= (a+b) / 1 /*add and normalize sum, store it in Z.*/ say z /*display normalized sum Z to terminal.*/ /*stick a fork in it, we're all done. */ ### version 4, multiple numbers This REXX version adds all the numbers entered (not just two). /*REXX program obtains some numbers from the input stream (the console), shows their sum*/ numeric digits 1000 /*just in case the user gets ka-razy. */ say 'enter some numbers to be summed:' /*display a prompt message to terminal.*/ parse pull y /*obtain all numbers from input stream.*/ many= words(y) /*obtain the number of numbers entered.*/ = 0 /*initialize the sum to zero. */ do j=1 for many /*process each of the numbers. */ =  + word(y, j) /*add one number to the sum. */ end /*j*/ /*stick a fork in it, we're all done. */ say 'sum of ' many " numbers = " /1 /*display normalized sum  to terminal.*/ ### version 5, multiple numbers, tongue in cheek /*REXX program obtains some numbers from the input stream (the console), shows their sum*/ numeric digits 1000 /*just in case the user gets ka-razy. */ say 'enter some numbers to be summed:' /*display a prompt message to terminal.*/ parse pull y /*obtain all numbers from input stream.*/ y=space(y) y=translate(y,'+',' ') Interpret 's='y say 'sum of ' many " numbers = " s/1 /*display normalized sum s to terminal.*/ ## Ring give Numbers Numbers = split(Numbers) sum = 0 for x in Numbers sum += x next see sum func Split Str for x in str if x = " " x = nl ok next return str2list(str) ## Robotic input string "Input A:" set "A" to "input" input string "Input B:" set "B" to "input" * "('A' + 'B')" end Although the function in the first and third line asks for a string as the input, so long as the variable isn't made to store a string, it will default to an integer instead. Inserting a string to this will return a 0. ## Rockstar Minimized: Listen to A number Listen to B Say A number plus B Idiomatic: Listen to my voice Listen to your thoughts Shout your thoughts with my voice ## RPL Related task is natively implemented in RPL. +  2 2 + 2 3 +  Output: 2: 4 1: 5  ## Ruby puts gets.split.sum(&:to_i) ## Run BASIC input, x print val(word(x,1)) + val(word(x,2)) ## Rust use std::io; fn main() { let mut line = String::new(); io::stdin().read_line(&mut line).expect("reading stdin"); let mut i: i64 = 0; for word in line.split_whitespace() { i += word.parse::<i64>().expect("trying to interpret your input as numbers"); } println!("{}", i); } or use std::io; fn main() { let mut line = String::new(); io::stdin().read_line(&mut line).expect("reading stdin"); let sum: i64 = line.split_whitespace() .map(|x| x.parse::<i64>().expect("Not an integer")) .sum(); println!("{}", sum); } ## S-lang % A+B from stdin, sans error checking variable input, a, b; () = fgets(&input, stdin); input = strtrim_end(input, "\n"); () = sscanf(input, "%d%d", &a, &b); print(a + b); Output: prompt echo "12 34" | slsh A+B.sl 46 % A+B from stdin, basic validity testing variable input, a, b, rc; () = fgets(&input, stdin); input = strtrim_end(input, "\n"); rc = sscanf(input, "%d%d", &a, &b); if ((rc == 2) && (a >= -1000) && (a <= 1000) && (b >= -1000) && (b <= 1000)) { print(a + b); } else { message("input invalid or out of range (-1000,1000): input"); } ## Scala println(readLine().split(" ").map(_.toInt).sum) This will work if the input is exactly as specified, with no extra whitespace. A slightly more robust version: val s = new java.util.Scanner(System.in) val sum = s.nextInt() + s.nextInt() println(sum) or println(readLine().split(" ").filter(_.length>0).map(_.toInt).sum) ## Scheme (display (+ (read) (read))) ## Scratch Scratch is a graphical programming language. Follow the link to see an example solution for A + B Scratch A + B Since Scratch is an educational language, I've included comments in the code for new programmers to better understand what the program is doing. ## sed Sed is for string processing and has no facility for manipulating numbers as numeric values. However, being Turing complete, sed can be coerced into performing mathematics. : Loop # All done /^-*00* /s/// / -*00*/s/// t # Negative Check /^$$-*$$[0-9].* \1[0-9]/!b Negative # Create magic lookup table s/$$.[0-9]*$$ $$.[0-9]*$$/\1;987654321000009999000999009909 \2;012345678999990000999000990090/ s/ $$-$$*$$9*;$$/ \10\2/ # Decrement 1st number s/$$[^0]$$$$0*$$;[^0]*\1$$.$$.*\2$$9*$$.* $$.*$$/\3\4 \5/ # Increment 2nd s/$$[^9]$$$$9*$$;[^9]*\1$$.$$.*\2$$0*$$.*/\3\4/ t Loop : Negative # Create magic lookup table s/$$.[0-9]*$$ $$.[0-9]*$$/\1;987654321000009999000999009909 \2;987654321000009999000999009909/ # Decrement 1st number s/$$[^0]$$$$0*$$;[^0]*\1$$.$$.*\2$$9*$$.* $$.*$$/\3\4 \5/ # Decrement 2nd s/$$[^0]$$$$0*$$;[^0]*\1$$.$$.*\2$$9*$$.*/\3\4/ t Loop Another method, based off of this StackExchange answer: #!/bin/sed -f # Add a marker in front of each digit, for tracking tens, hundreds, etc. s/[0-9]/<&/g # Convert numbers to, in essence, tally marks s/0//g; s/1/|/g; s/2/||/g; s/3/|||/g; s/4/||||/g; s/5/|||||/g s/6/||||||/g; s/7/|||||||/g; s/8/||||||||/g; s/9/|||||||||/g # Multiply by ten for each digit from the back they were. :tens s/|</<||||||||||/g t tens # We don't want the digit markers any more s/<//g # Negative minus negative is the negation of their absolute values. s/^-$$|*$$ *-/-\1/ # Negative plus positive equals positive plus negative, and we want the negative at the back. s/^-$$|*$$ \+$$|*$$/\2-\1/ # Get rid of any space between the numbers s/ //g # A tally on each side can be canceled. :minus s/|-|/-/ t minus s/-// # Convert back to digits :back s/||||||||||/</g s/<$$[0-9]*$$/<0\1/g s/|||||||||/9/g; s/|||||||||/9/g; s/||||||||/8/g; s/|||||||/7/g; s/||||||/6/g; s/|||||/5/g; s/||||/4/g; s/|||/3/g; s/||/2/g; s/|/1/g; s/</|/g t back s/^/0/ ## Seed7  include "seed7_05.s7i"; const proc: main is func local var integer: a is 0; var integer: b is 0; begin read(a); read(b); writeln(a + b); end func; ## Self Works with positive and negative integers, and also more than two integers. ((stdin readLine splitOn: ' ') mapBy: [|:e| e asInteger]) sum printLine. ## SenseTalk ask "Enter the first number:" put it into a ask "Enter the second number:" put it into b put a + b put file "input.txt" into inputFile split inputFile by space put sum of inputFile ## SequenceL import <Utilities/Conversion.sl>; main(args(2)) := stringToInt(args[1]) + stringToInt(args[2]); Output: cmd:> main.exe 3 4 7 cmd:> main.exe -5 7 2 cmd:> main.exe -12 -10 -22 ## SETL read(A, B); print(A + B); ## Shiny if (io.line 'stdin').match ~(\d+)\s+(\d+)~ say "a b %(a+b)d" end ## Sidef Works with both positive and negative integers. say STDIN.readline.words.map{.to_i}.sum More idiomatically: say read(String).words»to_i()»«+» Explicit summation: var (a, b) = read(String).words.map{.to_i}... say a+b ## Simula BEGIN WHILE NOT LASTITEM DO BEGIN OUTINT(ININT + ININT, 0); OUTIMAGE; END; END. ## Smalltalk Most Smalltalk implementations do not have the notion of a standard input stream, since it has always been a GUI based programming environment. I've included test methods to demonstrate one way to create an input stream with two integers can be created. Opening a text file would be another. 'From Squeak3.7 of ''4 September 2004'' [latest update: #5989] on 8 August 2011 at 3:50:55 pm'! Object subclass: #ABTask instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'rosettacode'! "-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "! ABTask class instanceVariableNames: ''! !ABTask class methodsFor: 'demo'! parseInteger: inputStream ^ Integer readFrom: inputStream skipSeparators! ! !ABTask class methodsFor: 'demo'! sum: inputStream ^ (self parseInteger: inputStream) + (self parseInteger: inputStream)! ! !ABTask class methodsFor: 'demo'! test2Plus2 ^ self sum: (ReadStream on: '2 2')! ! !ABTask class methodsFor: 'demo'! test3Plus2 ^ self sum: (ReadStream on: '3 2')! ! but all have a stream hierarchy, so the task could be restated to pass input and output as stream arguments: Works with: Smalltalk/X |task| task := [:inStream :outStream | |processLine| processLine := [ |a b| a := Integer readFrom: inStream. b := Integer readFrom: inStream. "is validation part of the task?" self assert:( a between:-1000 and: 1000). self assert:( b between:-1000 and: 1000). outStream print (a+b); cr. ]. [ inStream atEnd ] whileFalse:processLine. ]. task value: ( 'dataIn.txt' asFilename readStream) value:Transcript. or: task value: Stdin value: Stdout. ## smart BASIC INPUT n PRINT VAL(LEFT(n,(LEN(STR(VAL(n))))))+VAL(RIGHT(n,(LEN(n)-LEN(STR(VAL(n)))-1))) NOTE: This is a horribly forced way of doing this. smart BASIC has commands to SPLIT strings. Surely someone can provide better code than what I've written here. ;@) And someone did... A FAR more elegant solution was provided by "Dutchman" on the smart BASIC Support Forum: INPUT n SPLIT n TO m,n WITH " " PRINT m(0),m(1),m(0)+m(1) NOTE: smart BASIC will intelligently interpret the contents of a string as a numeric value if necessary. Other versions of BASIC would require the values stored in a string to be converted to numeric values before calculation. ## SmileBASIC INPUT A INPUT B PRINT A+B ## SNOBOL4 Simple-minded solution (literally "two somethings separated by space")  input break(" ") . a " " rem . b output = a + b end "Integer aware" solution:  nums = "0123456789" input span(nums) . a break(nums) span(nums) . b output = a + b end ## SPAD Works with: FriCAS Works with: OpenAxiom Works with: Axiom One of several possibilities: (1) -> integer READ()Lisp + integer READ()Lisp 333 444 (1) 777 Type: PositiveInteger Domain:SExpression ## SparForte As a structured script. #!/usr/local/bin/spar pragma annotate( summary, "aplusb" ) @( description, "A+B - in programming contests, classic problem, which is given so" ) @( description, "contestants can gain familiarity with online judging system being used. " ) @( description, "A+B is one of few problems on contests, which traditionally lacks fabula." ) @( description, "Given 2 integer numbers, A and B. One needs to find their sum. " ) @( category, "tutorials" ) @( author, "Ken O. Burtch" ) @( see_also, "http://rosettacode.org/wiki/A%2BB" ); pragma license( unrestricted ); pragma software_model( nonstandard ); pragma restriction( no_external_commands ); procedure aplusb is s : string; a : integer; b : integer; begin s := get_line; a := numerics.value( strings.field( s, 1, ' ' ) ); b := numerics.value( strings.field( s, 2, ' ' ) ); ? a+b; end aplusb; ## SPARK -- By Jacob Sparre Andersen -- Validates with SPARK GPL 2010's Examiner/Simplifier with SPARK_IO; --# inherit SPARK_IO; --# main_program; procedure A_Plus_B --# global in out SPARK_IO.Inputs, SPARK_IO.Outputs; --# derives SPARK_IO.Inputs from SPARK_IO.Inputs & --# SPARK_IO.Outputs from SPARK_IO.Inputs, SPARK_IO.Outputs; is subtype Small_Integers is Integer range -1_000 .. +1_000; A, B : Integer; A_OK, B_OK : Boolean; begin SPARK_IO.Get_Integer (File => SPARK_IO.Standard_Input, Item => A, Width => 0, Read => A_OK); A_OK := A_OK and A in Small_Integers; SPARK_IO.Get_Integer (File => SPARK_IO.Standard_Input, Item => B, Width => 0, Read => B_OK); B_OK := B_OK and B in Small_Integers; if A_OK and B_OK then SPARK_IO.Put_Integer (File => SPARK_IO.Standard_Output, Item => A + B, Width => 4, Base => 10); else SPARK_IO.Put_Line (File => SPARK_IO.Standard_Output, Item => "Input data does not match specification.", Stop => 0); end if; end A_Plus_B; ## SPL n = #.split(#.input("Input two numbers, separated by space:")," ") #.output(n[1],"+",n[2],"=",#.val(n[1])+#.val(n[2])) Input: Input two numbers, separated by space: 2 3  Output: 2+3=5  ## SQL select A+B Example: select 2+3 This should produce a result set containing the value 5. Note however that declaration of variables is outside the scope of the ANSI SQL standards, unless by variables you mean tables (which would complicate the example considerably). ## SQL PL Works with: Db2 LUW With SQL only: CREATE OR REPLACE FUNCTION splitadd (instring VARCHAR(255)) RETURNS INTEGER NO EXTERNAL ACTION F1: BEGIN ATOMIC declare first INTEGER; declare second INTEGER; set first = REGEXP_SUBSTR(instring, '[0-9]+',1,1); set second = REGEXP_SUBSTR(instring, '[0-9]+',1,2); return first + second; END Output: VALUES DBA.SPLITADD(VARCHAR('1234 2345')) 1 ---- 3579  ## SSEM The SSEM has no Add instruction, so we rely on the fact that a + b = -(-a - b). 10100000000000100000000000000000 0. -5 to c acc = -A 01100000000001010000000000000000 1. Sub. 6 acc -= B 11100000000001100000000000000000 2. c to 7 X = acc 11100000000000100000000000000000 3. -7 to c acc = -X 00000000000001110000000000000000 4. Stop 10100100000000000000000000000000 5. 37 A 00111000000000000000000000000000 6. 28 B 00000000000000000000000000000000 7. 0 X ## Standard ML (* * val split : string -> string list * splits a string at it spaces *) val split = String.tokens Char.isSpace (* * val sum : int list -> int * computes the sum of a list of numbers *) val sum = foldl op+ 0 (* * val aplusb : unit -> int * reads a line and gets the sum of the numbers *) fun aplusb () = let val input = valOf (TextIO.inputLine TextIO.stdIn) in (sum o List.mapPartial Int.fromString o split) input end Output: - aplusb(); 123 456 val it = 579 : int  ## Swift Works with: Swift version 2 Requires sending EOF. import Foundation let input = NSFileHandle.fileHandleWithStandardInput() let data = input.availableData let str = NSString(data: data, encoding: NSUTF8StringEncoding)! let nums = str.componentsSeparatedByString(" ") let a = (nums[0] as String).toInt()! let b = (nums[1] as String).toInt()! print(" \(a + b)") Works with: Swift version 3 Swift 4 and no requirement to send EOF (press enter/send newline like you normally would) import Foundation let input = FileHandle.standardInput let data = input.availableData let str = String(data: data, encoding: .utf8)! let nums = str.split(separator: " ") .map { String(0.unicodeScalars .filter { CharacterSet.decimalDigits.contains(0) }) } let a = Int(nums[0])! let b = Int(nums[1])! print(" \(a + b)") ## Symsyn  [] s getitem s x getitem s y + x y y [] ## Tailspin composer nums [ (<WS>?) <INT> (<WS>) <INT> (<WS>?) ] end nums IN::lines -> nums -> (1) + (2) -> '; ' -> !OUT::write Alternatively composer nums (<WS>?) (def a: <INT>;) (<WS>) <INT> -> a +  (<WS>?) end nums IN::lines -> nums -> '; ' -> !OUT::write ## Tcl scan [gets stdin] "%d %d" x y puts [expr {x + y}] Alternatively: puts [tcl::mathop::+ {*}[gets stdin]] To/from a file: set in [open "input.txt"] set out [open "output.txt" w] scan [gets in] "%d %d" x y puts out [expr {x + y}] close in close out ## Terraform #Aamrun, August 15th, 2022 variable "a" { type = number } variable "b" { type = number } output "a_plus_b" { value = var.a + var.b } Output:  terraform apply -var="a=136" -var="b=745" -auto-approve Changes to Outputs: + a_plus_b = 881 You can apply this plan to save these new output values to the Terraform state, without changing any real infrastructure. Apply complete! Resources: 0 added, 0 changed, 0 destroyed. Outputs: a_plus_b = 881   ## TI-83 BASIC :Prompt A,B :Disp A+B ## TI-83 Hex Assembly Note: Comments (after the semicolons) are just for explanation -- TI-83 hex assembly does not allow comments in program source code. PROGRAM:APLUSB :AsmPrgm : :EFC541 ; ZeroOP1 :217984 ; ld hl,op1+1 :3641 ; ld (hl),'A' :EFE34A ; RclVarSym :CF ; rst OP1toOP2 : :EFC541 ; ZeroOP1 :217984 ; ld hl,op1+1 :3642 ; ld (hl),'B' :EFE34A ; RclVarSym : :F7 ; rst FPAdd :EFBF4A ; StoAns :C9 ; ret Store the inputs in the 'A' and 'B' OS variables. Run it with Asm(prgmAPLUSB) and the output will be stored in the Ans OS variable. ## TI-89 BASIC :aplusb(a,b) :a+b ## TorqueScript Since torque is not compatible with standard input, I will show the closest to that. It's a function that takes a single string input, that will contain the 2 numbers. Function aPlusB(%input) { return getWord(%input, 0) + getWord(%input, 1); } ## Transd #lang transd MainModule : { a: Int(), b: Int(), _start: (lambda (textout (+ (read a) (read b)))) } ## TSE SAL INTEGER PROC FNMathGetSumAPlusBI( INTEGER A, INTEGER B ) RETURN( A + B ) END // PROC Main() STRING s1[255] = "3" STRING s2[255] = "2" IF ( NOT ( Ask( "math: get: sum: a: plus: a (choose a number between -1000 and 1000) = ", s1, _EDIT_HISTORY_ ) ) AND ( Length( s1 ) > 0 ) ) RETURN() ENDIF IF ( NOT ( Ask( "math: get: sum: a: plus: b (choose a number between -1000 and 1000) = ", s2, _EDIT_HISTORY_ ) ) AND ( Length( s2 ) > 0 ) ) RETURN() ENDIF Message( FNMathGetSumAPlusBI( Val( s1 ), Val( s2 ) ) ) // gives e.g. 5 END Output:  output 5  ## TUSCRIPT $$ MODE TUSCRIPT
SET input="1 2"
SET input=SPLIT(input,": :")
SET input=JOIN (input)
SET output=SUM(input)

$txr -p '(+ (read) (read))' 1.2 2.3 3.5 ## TypeScript function add(a: number, b: number) { return a+b; }  ## UNIX Shell Works with: Bourne Shell #!/bin/sh read a b || exit echo expr "$a" + "$b" Works with: bash Works with: ksh93 Works with: pdksh Works with: zsh Script "a+b.sh": #!/bin/bash read a b || exit echo$(( a + b ))
Output:
echo 2 3 | ksh a+b.sh
5

One liner :

a=0;b=0;read a;read b;echo "Sum of $a and$b is "$((a+b)) Sample run : 3 4 Sum of 3 and 4 is 7  ### C Shell set line=$<
set input=($line) @ sum =$input[1] + $input[2] echo$sum

## Ursa

#
# a + b
#

# read a string containing the two ints
decl string input
set input (in string console)

# determine the sum
decl int sum
set sum (int (+ sum (int (split input " ")<0>)))
set sum (int (+ sum (int (split input " ")<1>)))

# output the sum
out sum endl console

## Ultimate++

#include <Core/Core.h>
#include <stdio.h>
#include <iostream>

using namespace Upp;

CONSOLE_APP_MAIN
{

int a, b;
a = 2, b = 3;
printf("%d + %d = %d\n",a,b,(a + b));
std::cout << std::endl << a << " + " << b << " = " << (a + b) << std::endl;

const Vector<String>& cmdline = CommandLine();
for(int i = 0; i < cmdline.GetCount(); i++) {
}
}

## Ursala

Using standard input and output streams:

#import std
#import int

#executable&

main = %zP+ sum:-0+ %zp*FiNCS+ sep @L

Overwriting a text file named as a command line parameter:

#import std
#import int

#executable -[parameterized]-

main = ~command.files.&h; <.contents:= %zP+ sum:-0+ %zp*FiNCS+ sep @L+ ~contents>

Creating a new file named after the input file with suffix .out:

#import std
#import int

#executable -[parameterized]-

main =

~command.files.&h; ~&iNC+ file$[ contents: %zP+ sum:-0+ %zp*FiNCS+ sep @L+ ~contents, path: ~path; ^|C\~& ~=.-~; ^|T/~& '.out'!] ## Vala Read from stdin while program running: Using GLib; int main (string[] args) { stdout.printf ("Please enter int value for A\n"); var a = int.parse (stdin.read_line ()); stdout.printf ("Please enter int value for B\n"); var b = int.parse (stdin.read_line ()); stdout.printf ("A + B = %d\n", a + b); return 0; } ## VBA A simple version: Sub AplusB() Dim s As String, t As Variant, a As Integer, b As Integer s = InputBox("Enter two numbers separated by a space") t = Split(s) a = CInt(t(0)) b = CInt(t(1)) MsgBox a + b End Sub An other version: Sub Rosetta_AB() Dim stEval As String stEval = InputBox("Enter two numbers, separated only by a space", "Rosetta Code", "2 2") MsgBox "You entered " & stEval & vbCr & vbCr & _ "VBA converted this input to " & Replace(stEval, " ", "+") & vbCr & vbCr & _ "And evaluated the result as " & Evaluate(Replace(stEval, " ", "+")), vbInformation + vbOKOnly, "XLSM" End Sub ## VBScript A simple version: s=InputBox("Enter two numbers separated by a blank") t=Split(s) a=CInt(t(0)) b=CInt(t(1)) c=a+b MsgBox c An other version: Option Explicit Dim a, b Select Case WScript.Arguments.Count Case 0 'No arguments, prompt for them. WScript.Echo "Enter values for a and b" a = WScript.Stdin.ReadLine if Instr(a, " ") > 0 then 'If two variables were passed b = Split(a)(1) a = Split(a)(0) else WScript.Echo "Enter value for b" b = WScript.Stdin.ReadLine end if Case 1 'One argument, assume it's an input file, e.g. "in.txt" Dim FSO : Set FSO = CreateObject("Scripting.FileSystemObject") With FSO.OpenTextFile(WScript.Arguments(0), 1) a = .ReadLine b = Split(a)(1) a = Split(a)(0) .Close End With Case 2 'Two arguments, assume they are values a = WScript.Arguments(0) b = WScript.Arguments(1) End Select 'At this point, a and b are strings as entered, make them numbers a = CInt(a) b = CInt(b) 'Write the sum Wscript.Echo a + b if 1 = WScript.Arguments.Count then With FSO.CreateTextFile("out.txt") .WriteLine a + b .Close End With end if ## Vedit macro language This version implements the task as specified in the task description. // Input two values on single line in text format Get_Input(10, "Enter two integers separated by a space: ") // Extract two numeric values from the text Buf_Switch(Buf_Free) Reg_Ins(10) BOF #1 = Num_Eval(ADVANCE) #2 = Num_Eval() Buf_Quit(OK) // Calculate and display the results Num_Type(#1 + #2) A simpler version that prompts for the two numbers separately: #1 = Get_Num("Enter number A: ") #2 = Get_Num("Enter number B: ") Num_Type(#1 + #2) ## Verilog module TEST; reg signed [11:0] y; initial begin y= sum(2, 2); y= sum(3, 2); y= sum(-3, 2); end function signed [11:0] sum; input signed [10:0] a, b; begin sum= a + b;$display("%d + %d = %d",a,b,sum);
end
endfunction

endmodule

## VHDL

LIBRARY std;
USE std.TEXTIO.all;

entity test is
end entity test;

architecture beh of test is
begin
process
variable line_in, line_out : line;
variable a,b : integer;
begin

write(line_out, a+b);
writeline(OUTPUT, line_out);
wait; -- needed to stop the execution
end process;
end architecture beh;

## Visual Basic .NET

Module Module1

Sub Main()
Dim s() As String = Nothing

Console.WriteLine(CInt(s(0)) + CInt(s(1)))
End Sub

End Module

## V (Vlang)

import os

fn main() {
mut a := 0
mut b := 0

text := os.get_raw_line()

values := text.split(' ')

a = values[0].int()
b = values[1].int()

println('$a +$b = ${a+b}') } Read from stdin Output: Input Output 2 2 2 + 2 = 4 3 2 3 + 2 = 5  ## Wee Basic Print 1 "Enter number A:" input a Print 1 "Enter number B:" input b let c=a+b print 1 c end ## Whitespace ## Wisp Translation of: Scheme display : + (read) (read) 314 315 ;; displays 629 ## Wren import "io" for Stdin, Stdout while (true) { System.write("Enter two integers separated by a space : ") Stdout.flush() var s = Stdin.readLine().split(" ") if (s.count < 2) { System.print("Insufficient numbers, try again") } else { var a = Num.fromString(s[0]) var b = Num.fromString(s[s.count-1]) System.print("Their sum is %(a + b)") return } } Output: Sample input/output: Enter two integers separated by a space : 12 16 Their sum is 28  ## X86 Assembly Works with: NASM version Linux section .text global _start _print: mov ebx, 1 mov eax, 4 int 0x80 ret _get_input: mov edx, 4 mov ebx, 0 mov eax, 3 int 0x80 ret _start: mov edx, in_val_len mov ecx, in_val_msg call _print mov ecx, a call _get_input ;make 'a' an actual number rather than a char. sub dword [a], 0x30 mov edx, in_val_len mov ecx, in_val_msg call _print mov ecx, b call _get_input ;calc real number for 'b' sub dword [b], 0x30 mov eax, dword [a] mov ebx, dword [b] add eax, ebx ;get the character for our sum. add eax, 0x30 mov dword [sum], eax mov edx, out_val_len mov ecx, out_val_msg call _print mov [sum+1], dword 0xa mov edx, 4 mov ecx, sum call _print push 0x1 mov eax, 1 push eax int 0x80 ret section .data in_val_msg db "Please input an integer:",0 in_val_len equ$-in_val_msg
out_val_msg db "The sum of a+b is: ",0

## XLISP

(DEFUN A-PLUS-B ()
(DISPLAY "Enter two numbers separated by a space.")
(NEWLINE)
(DISPLAY "> ")
(+ A B))
Output:
(A-PLUS-B)
Enter two numbers separated by a space.
> 2 2

4

## Xojo

var inp as string
var strVals() as string

print("Enter two numbers separated by a space:")

do
inp = input

strVals = inp.split(" ")

var a, b as integer

a = strVals(0).toInteger
b = strVals(1).toInteger

if a < -1000 or b > 1000 then
print("The first number should be greater than or equal to -1000 and the second number should be less " + _
"than or equal to 1000. Please re-enter:")
continue
end

var result as integer = a + b
print(a.toString + " + " + b.toString + " = " + result.toString)
exit
loop

## XPL0

include c:\cxpl\codes;
int A, B;
[A:= IntIn(0);
B:= IntIn(0);
IntOut(0, A+B);
CrLf(0);
]

## XQuery

(:
Using the EXPath File Module, which is built into most XQuery processors
by default and thus does not need to get imported. Some processors bind the
namespace automatically, others require explicit declaration.
:)

xquery version "3.1";

declare namespace file = 'http://expath.org/ns/file';

let $in := 'input.txt' let$out      := 'output.txt'
let $numbers := tokenize(file:read-text($in))
let $result := xs:numeric($numbers[1]) + xs:numeric($numbers[2]) return file:write-text($out, xs:string($result)) ## Yabasic repeat input "Enter two numbers (betwen -1000 ... +1000): " a, b until(valid(a) and valid(b)) print "\nThe sum of ", a, " and ", b, " is: ", a + b sub valid(x) return x >= -1000 and x <= 1000 end sub ## Yorick a = b = 0; read, a, b; write, a + b; ## ZED Source -> http://ideone.com/WLtEfe Compiled -> http://ideone.com/fMt6ST (A+B) comment: #true (+) (read) (read) (+) one two comment: #true (003) "+" one two (read) comment: #true (001) "read" ## Zig const std = @import("std"); const stdout = std.io.getStdOut().writer(); const Input = enum { a, b }; pub fn main() !void { var buf: [1024]u8 = undefined; const reader = std.io.getStdIn().reader(); const input = try reader.readUntilDelimiter(&buf, '\n'); const values = std.mem.trim(u8, input, "\x20"); var count: usize = 0; var split: usize = 0; for (values, 0..) |c, i| { if (!std.ascii.isDigit(c)) { count += 1; if (count == 1) split = i; } } const a = try std.fmt.parseInt(u64, values[0..split], 10); const b = try std.fmt.parseInt(u64, values[split + count ..], 10); try stdout.print("{d}\n", .{a + b}); } Output: 1 2 3 3 6 9  ## zkl do(2){ask("A B: ").split(" ").filter().sum().println()} A B: 123 567 690 A B: -4 6 2  This actually works for any number of integers ## Zoea program: a_plus_b input: '7 11' output: 18 ## Zoea Visual ## zonnon module ABProblem; var a,b: integer; begin read(a,b); writeln(a+b) end ABProblem. 1 2 3  ## ZX Spectrum Basic 10 PRINT "Input two numbers separated by"'"space(s) " 20 INPUT LINE a$
30 GO SUB 90
40 FOR i=1 TO LEN a$50 IF a$(i)=" " THEN LET a=VAL a$( TO i): LET b=VAL a$(i TO ): PRINT a;" + ";b;" = ";a+b: GO TO 70
60 NEXT i
70 STOP
80 REM LTrim operation
90 IF a$(1)=" " THEN LET a$=a$(2 TO ): GO TO 90 100 RETURN Another solution 10 PRINT "Input two numbers separated by"'"space(s) " 20 INPUT LINE a$
30 LET ll=10e10: LET ls=0: LET i=1
40 IF a$(i)=" " THEN LET ls=i: GO TO 60 50 LET ll=i 60 IF ls>ll THEN GO TO 80 70 LET i=i+1: GO TO 40 80 LET a=VAL a$( TO i): LET b=VAL a\$(i TO )
90 PRINT a;" + ";b;" = ";a+b
Input two numbers separated by
space(s)
3.14     2^3
3.14 + 8 = 11.14