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

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


Task

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):


Output data

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


Example
input   output  
2 2 4
3 2 5



0815

<lang 0815>|x|+%</lang>

11l

Translation of: Python

<lang 11l>print(sum(input().split(‘ ’, group_delimiters' 1B).map(i -> Int(i))))</lang>

360 Assembly

<lang 360asm>* 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

MYDATA DCB LRECL=24,RECFM=FT,EODAD=ATEND,DDNAME=MYFILE PG DS CL24 record

        DC     CL12' '
        YREGS
        END    APLUSB

</lang>

Input:
          27          53
         123         321
         999           1
Output:
          27          53          80
         123         321         444
         999           1        1000

8th

<lang forth>gets dup . space eval n:+ . cr</lang>

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:

<lang 8080asm> 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)</lang>

Merely doing A+B, with 16-bit numbers so that   will fit, would look like this: <lang 8080asm> lxi h,123 lxi d,456 dad d ; HL is now 579</lang>

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.

<lang 8080asm>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 dad d ; <-- add DE to HL, giving our answer, then fall into: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; 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, dgtdiv: dad b ; so we just add a negative value, 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. dad b 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</lang>

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

<lang AArch64 Assembly> /* 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

</lang>

ABAP

<lang 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.</lang>

Action!

<lang 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</lang>

Output:

Screenshot from Atari 8-bit computer

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

<lang 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;</lang> Using appropriate user defined types: <lang Ada>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;</lang>

Agena

Tested with Agena 2.9.5 Win32 <lang agena>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</lang>

Aime

<lang 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();</lang>

ALGOL 60

Works with: A60

<lang algol60>begin

   comment A+B;
   integer a,b;
   ininteger(0,a); ininteger(0,b); 
   outinteger(1,a+b)

end </lang>

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

<lang algol68>print((read int + read int))</lang> Input:

1 2
Output:
         +3

File

<lang algol68>open(stand in, "input.txt", stand in channel); open(stand out, "output.txt", stand out channel); print((read int + read int))</lang> Input "input.txt":

3 4

Output "output.txt":

         +7

ALGOL W

<lang algolw>begin

   integer a, b;
   read( a, b );
   write( a + b )

end.</lang>

Amazing Hopper

<lang Amazing Hopper>

  1. include <hbasic.h>
  1. import lib/input.bas.lib
  2. include include/input.h

Begin

 Token Init
 Cls
 Locate(5,1),Print(Utf8$("Ingrese dos números, separados por espacio: "))
 msg=""
 LocCol(45),Let( msg := ReadString(msg))
 Token Sep(" ")
 Print("Suma : ", Token(1),Val(Token$(msg)) Plus (Token(2),Val(Token$(msg))), Newl)

End </lang>

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"

<lang Amazing Hopper>

  1. include <hbasic.h>
  1. import lib/input.bas.lib
  2. include include/input.h
  1. define getValueOf(__X__) Token(__X__),Val(Token$(msg))
  2. define-a  »»(__X__) ;Move to(__X__)

Begin

 Token Init
 Cls
 Locate(5,1),Print(Utf8$("Ingrese dos números, separados por espacio: "))
 msg=""
 LocCol(45),Let( msg := ReadString(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 </lang>

Output:
Ingrese dos números, separados por espacio: -1005 500 
Suma : -500
Press any key to continue...

ANTLR

 
aplusb
 
aplusb


Apex

<lang 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

</lang>

APL

<lang APL> ⎕+⎕ </lang>

AppleScript

Open the AppleScript Editor and save this as A+B.scpt on your Desktop <lang AppleScript>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</lang>

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

<lang Arc> (prn (+ (read)

       (read)))

</lang>

Argile

Translation of: C
Works with: Argile version 1.0.0

<lang Argile>(: Standard input-output streams :) use std, array Cfunc scanf "%d%d" (&val int a) (&val int b) printf "%d\n" (a + b)</lang> <lang Argile>(: 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</lang>

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: <lang ARM_Assembly>arm-linux-gnueabi-as src.s -o src.o && arm-linux-gnueabi-gcc -static src.o -o run && qemu-arm run</lang>

<lang ARM_Assembly>.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]
       add r1, r1, 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</lang>

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: <lang ARM_Assembly>as -o ab.o ab.S ld -o a.out ab.o</lang>

<lang ARM_Assembly>.data

  .align   2
  .code 32

.section .rodata

  .align   2
  .code 32

overflow_msg: .ascii "Invalid number. Overflow.\n" overflow_msglen = . - overflow_msg bad_input_msg: .ascii "Invalid input. NaN.\n" bad_input_msglen = . - bad_input_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_read = 3 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}

.read_lhs:

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

.read_rhs:

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

.sum_and_print:

  adds r0, r4, r5
  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. @@ Ignore leading spaces. @@ Return value to the caller converted to a signed int. @@ We read positive values, but if we read a leading '-' sign, we convert the @@ return value to two's complement. @@ The argument is max number of bytes to read from stdin. @@ int readint(int bytes2rd) @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

  .align   2
  .code 32
  .type readint STT_FUNC
  .global readint

readint:

  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.
  @@ r6 : 0 while we are reading leading spaces.
  @@@@@@@@@@@@@@@
  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. .leadchk:

  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
  b .noleading

.rd:

  mov r0, #0
  bl read
  cmp r0, #1
  bne .sum_digits_eof  @ eof
  mov r5, #0
  ldrb r5, [r1]
  cmp r6, #0
  beq .leadchk

.noleading:

  mov r0, r5
  bl isdigit
  cmp r0, #1
  bne .sum_digits_nan @ r5 is non-digit
  add r4, r4, #1
  add r1, r1, #1
  @ 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
  bne bad_input

.sum_digits_maxrd: .sum_digits_eof:

  mov r0, #0
  mov r5, #1

.count:

  cmp r4, #0
  beq .readint_ret
  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.
  adds r0, r0, r2
  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
  beq .readint_ret
  @@ 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

.readint_ret:

  ldr r1, [sp,#4] @ read isnegative value.
  cmp r1, #0
  rsbne r0, r0, #0
  pop {r2}
  add sp, sp, #4
  add sp, sp, 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
  add r4, r4, #48
  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
  add sp, sp, #20
  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}

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ void bad_input() @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

  .align   2

bad_input:

  stmfd   sp!, {lr}
  ldr r2, =bad_input_msglen
  ldr r1, =bad_input_msg
  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}

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ int read(int fd,char*buf,int len) @ Return number of bytes successfully read. Ignore errors. @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

  .align   2
  .code 32
  .type _start STT_FUNC
  .global read

read:

  stmfd   sp!, {r7, lr}
  ldr r7, =sys_read
  svc #0
  cmp r0, #0
  movlt r0, #0
  ldmfd   sp!, {r7, pc}

</lang>

Arturo

<lang rebol>while ø [ x: map split.words input "give me 2 numbers:" 'x -> to :integer x print add x\0 x\1 ] </lang>

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

AsciiDots

<Lang AsciiDots>

&-#$-\

.-#?-[+] .-#?--/ </Lang>

ATS

<lang ATS> (* ****** ****** *) //

  1. include

"share/atspre_staload.hats" // staload UN = $UNSAFE // (* ****** ****** *)

staload "libc/SATS/stdio.sats"

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

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]

(* ****** ****** *) </lang>

AutoHotkey

This handles more than two inputs <lang AutoHotkey>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</lang>

AutoIt

<lang 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</lang>

Example2

This version can handle any amount of numbers in the input: <lang AutoIt>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)</lang>

Output:
# A+B:
17  4 --> 21
999 42 -999 --> 42
999x y  42 -999 --> 42

AWK

<lang awk>{print $1 + $2}</lang>

BASIC

<lang qbasic>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</lang>

Applesoft BASIC

<lang ApplesoftBasic>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%</lang>

BaCon

<lang qbasic>' A+B INPUT d$ PRINT VAL(TOKEN$(d$, 1)) + VAL(TOKEN$(d$, 2))</lang>

BASIC256

<lang basic256>dim a(2) input "Enter two numbers separated by a space?", t$ a = explode(t$," ") print t$ & " " & int(a[0]) + int(a[1])</lang>

BBC BASIC

<lang bbc> 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</lang>

That seems overly complicated. What's wrong with: <lang bbc> REPEAT

       INPUT LINE "" q$
       space% = INSTR(q$," ")
       PRINT VAL LEFT$(q$,space%-1) + VAL MID$(q$,space%+1)
     UNTIL FALSE</lang>

Commodore BASIC

<lang qbasic>10 PRINT "ENTER TWO NUMBERS, SEPARATED BY A SPACE: "; 20 INPUT X$ 30 I = 1 : N = LEN(X$) 40 IF MID$(X$,I,1)<>" " AND I<N THEN I = I+1 : GOTO 40 50 A = VAL(LEFT$(X$,I)) 60 B = VAL(RIGHT$(X$,N-1)) 70 PRINT A+B</lang>

FreeBASIC

<lang freebasic>' fb 1.05.0 Win64

Dim As Integer a, b Do

 Print "Enter two integers separated by a space : ";
 Input "", a, b
 If Abs(a) > 1000 OrElse Abs(b) > 1000 then
   Print "Both numbers must be in the interval [-1000, 1000] - try again"
   Print
 Else
   Print "Their sum is"; a + b
   Exit Do
 End If

Loop Print Print "Press any key to quit the program" Sleep</lang>

FUZE BASIC

<lang qbasic>INPUT n$ PRINT VAL(LEFT$(n$,(LEN(STR$(VAL(n$))))))+VAL(RIGHT$(n$,(LEN(n$)-LEN(STR$(VAL(n$)))-1))) END</lang>

IS-BASIC

<lang 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</lang>

Liberty BASIC

<lang lb>input, n$ print eval(word$(n$,1);" + ";word$(n$,2))</lang>

OxygenBasic

<lang> 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 </lang>

Sinclair ZX81 BASIC

<lang 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 )</lang>

Tiny BASIC

<lang 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</lang>

True BASIC

<lang qbasic>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</lang>

uBasic/4tH

<lang>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@)</lang>

Batch File

Prompts version <lang dos>::aplusb.cmd @echo off setlocal set /p a="A: " set /p b="B: " set /a c=a+b echo %c% endlocal</lang> All on the commandline version <lang dos>::aplusb.cmd @echo off setlocal set a=%1 set b=%2 set /a c=a+b echo %c% endlocal</lang> Formula on the command line version <lang dos>::aplusb.cmd @echo off setlocal set /a c=%~1 echo %c% endlocal</lang> 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) <lang dos>::aplusb.cmd @echo off setlocal set /p a="Input stream: " call :add %a% echo %res% endlocal goto :eof

add

set /a res=res+%1 shift if "%1" neq "" goto :add</lang> 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

<lang bc>read() + read()</lang>

Befunge

<lang befunge>&&+.@</lang>

Bird

<lang Bird>use Console Math

define Main

   $a Console.Read
   $b Console.Read
   Console.Println Math.Add $a $b

end</lang>

BlooP

BlooP and FlooP can't actually read from stdin, but here's the procedure it would use, if it could. <Lang BlooP> DEFINE PROCEDURE ADD [A, B]: BLOCK 0: BEGIN

   OUTPUT <= A + B;

BLOCK 0: END. </Lang>

bootBASIC

Both numbers are entered separately. <lang bootBASIC>10 print "Number 1"; 20 input a 30 print "Number 2"; 40 input b 50 print a+b</lang>

BQN

Works with: [CBQN]

<lang bqn>#!/usr/bin/env bqn

  1. Cut 𝕩 at occurrences of 𝕨, removing separators and empty segments
  2. (BQNcrate phrase).

Split ← (¬-˜⊢×·+`»⊸>)∘≠⊔⊢

  1. Natural number from base-10 digits (BQNcrate phrase).

Base10 ← 10⊸×⊸+˜´∘⌽

  1. Parse any number of space-separated numbers from string 𝕩.

ParseNums ← {Base10¨ -⟜'0' ' ' Split 𝕩}

  1. •GetLine and •_while_ are nonstandard CBQN extensions.

{•Show +´ ParseNums 𝕩 ⋄ •GetLine@} •_while_ (@⊸≢) •GetLine@</lang>

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. <lang bracmat>( out $ ( put$"Enter two integer numbers between -1000 and 1000:"

   & (filter=~/#%:~<-1000:~>1000)
   & get':(!filter:?a) (!filter:?b)
   & !a+!b
 | "Invalid input. Try again"
 )

);</lang>

Brainf***

<lang 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
   [-<<+>>]                                            add to sum
   <-

] <- 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</lang>

Brat

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

Burlesque

<lang burlesque>ps++</lang>

C

<lang c>// Standard input-output streams

  1. include <stdio.h>

int main() {

  int a, b;
  scanf("%d%d", &a, &b);
  printf("%d\n", a + b);
  return 0;

}</lang> <lang c>// Input file: input.txt // Output file: output.txt

  1. 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;

}</lang> <lang c>

  1. include <stdio.h>
  2. 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;

} </lang>

C#

<lang csharp>using System; using System.Linq;

class Program {

   static void Main()
   {
       Console.WriteLine(Console.ReadLine().Split().Select(int.Parse).Sum());
   }

}</lang> Another way (not recommended since it does not work with more than two numbers): <lang csharp>using System;

class Program {

   static void Main()
   {
       string input = Console.ReadLine();
       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());
   }

}</lang>

C++

<lang cpp>// Standard input-output streams

  1. include <iostream>

using namespace std; int main() {

  int a, b;
  cin >> a >> b;
  cout << a + b << endl;

}</lang> <lang cpp>// Input file: input.txt // Output file: output.txt

  1. 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;

}</lang>

Ceylon

<lang ceylon>shared void run() {

   print("please enter two numbers for me to add");
   value input = process.readLine();
   if (exists input) {
       value tokens = input.split().map(Integer.parse);
       if (tokens.any((element) => element is ParseException)) {
           print("numbers only, please");
           return;
       }
       value numbers = tokens.narrow<Integer>();
       if (numbers.size != 2) {
           print("two numbers, please");
       }
       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");
       }
   }

}</lang>

Clojure

<lang clojure>(println (+ (Integer/parseInt (read-line)) (Integer/parseInt (read-line)))) 3 4 =>7</lang> <lang clojure>(eval (read-string (str "(+ " (read-line) " )") )) 3 3 6</lang>

Translation of Common Lisp version: <lang clojure>(println (+ (read) (read))) 3 4 7</lang>


Safely and without reader tricks: <lang clojure>(let [ints (map #(Integer/parseInt %) (clojure.string/split (read-line) #"\s") )]

 (println (reduce + ints)))

3 4 =>7</lang>

or same as above, but without "let": <lang clojure>(println (reduce + (map #(Integer/parseInt %) (clojure.string/split (read-line) #"\s") )))

3 4 =>7</lang>

COBOL

<lang 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
          .</lang>

A second version.

<lang COBOL>

      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.

</lang>

CoffeeScript

Translation of: JavaScript

<lang html4strict><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>

</body> </html></lang>

Works with: Node.js

<lang coffeescript> { 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
  1. Resume input and set the incoming encoding.

stdin.resume() stdin.setEncoding 'utf8'

  1. Start the main loop.

do prompt </lang>

Common Lisp

<lang lisp>(write (+ (read) (read)))</lang>

Component Pascal

BlackBox Component Builder <lang oberon2> 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. </lang> Execute: AB.Go 12 23 ~

Output:
12 23 35

Computer/zero Assembly

<lang czasm> STP  ; wait for input a: 0 b: 0

       LDA  a
       ADD  b
       STP</lang>

Crystal

<lang ruby>puts gets.not_nil!.split.map(&.to_i).sum</lang>

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:

<lang ruby>if line = gets

 puts line.split.map(&.to_i).sum

else

 puts "No input"

end</lang>

D

From Console

<lang d>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]));

}</lang>

Output:
30

From File

<lang d>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]);

}</lang>

Dart

<lang 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) {
   String input = stdin.readLineSync();
   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)) {
       print("between -1000 and 1000 please!");
     } else {
       print(nums.reduce((a, b) => a + b));
     }
   }
 }

} </lang>

Output:
1 2
3
3 4
7

dc

<lang dc>? + psz</lang>

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

<lang DCL>$ read sys$command line $ a = f$element( 0, " ", line ) $ b = f$element( 1, " ", line ) $ write sys$output a, "+", b, "=", a + b</lang>

Delphi

Console version. <lang delphi>program SUM;

{$APPTYPE CONSOLE}

uses

 SysUtils;

procedure var

 s1, s2:string;

begin

 ReadLn(s1);
 Readln(s2);
 Writeln(StrToIntDef(s1, 0) + StrToIntDef(s2,0));

end.</lang>

Diego

<lang 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[];</lang>

DMS

<lang 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" )</lang>

Dragon

<lang dragon> select "graphic" select "types"

a = int(prompt("Enter A number")) b = int(prompt("Enter B number"))

showln a + b </lang>

DWScript

Ghetto GUI version <lang delphi>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));</lang>

Déjà Vu

Translation of: Python

Console

<lang dejavu>0 for k in split !prompt "" " ": + to-num k !print</lang>

EasyLang

<lang>a$ = input while i < len a$ and substr a$ i 1 <> " "

 i += 1

. a = number substr a$ 0 i b = number substr a$ i -1 print a + b </lang>

EchoLisp

<lang scheme> (+ (read-number 1 "value for A") (read-number 2 "value for B")) </lang>

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. <lang edsac>[ A plus B

 ========
 
 A program for the EDSAC
 
 Adds two integers & displays
 the sum at the top of storage
 tank 3
 Works with Initial Orders 2 ]

[ Set load point & base address ]

T56K [ Load at address 56 ] 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 ]

[ When loading is finished: ]

EZPF [ Branch to load point ]</lang>

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. <lang edsac>

[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.
 55 locations, load at even address.]
           T   56 K
 GKA3FT42@A47@T31@ADE10@T31@A48@T31@SDTDH44#@NDYFLDT4DS43@TF
 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]
           A   39 @  [add 9]
           E   24 @  [if decimal digit, out]
           A   38 @  [add 3]
           E    6 @  [if 10..12, try again]
           A   37 @  [add 1]
           E   20 @  [if plus, out with acc = 0]
           A   39 @  [add 9]
           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]
           A   39 @  [add 9]
           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]
           A    4 D  [load]
           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]
           A    4 D  [load]
           U    2#@  [save]
           T      D  [to 0D for printing]
           A   23 @
           G   56 F  [print B]
           O    5 @  [followed by new line]
           O    6 @
           A     #@  [load A]
           A    2#@  [add B]
           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. </lang>

Output:
       -987
        123
       -864

EGL

<lang 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 </lang>

Eiffel

argument(0) contains the path of the executable - thus we start at argument(1) <lang eiffel> class APPLICATION inherit ARGUMENTS create make feature {NONE} -- Initialization make -- Run application. do print(argument(1).to_integer + argument(2).to_integer) end end </lang>

Alternatively ... <lang eiffel> 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 </lang>

Ela

<lang ela>open monad io string list

a'b() = do

 str <- readStr
 putStrLn <| show <| sum <| map gread <| string.split " " <| str

a'b() ::: IO</lang>

Output:
1 2 3 4 5 6
21

Elena

ELENA 5.0 : <lang elena>import extensions;

public program() {

   var A := Integer.new();
   var B := Integer.new();

   console.loadLine(A,B).printLine(A + B)

}</lang>

Or more generic solution: <lang elena>import system'routines; import extensions;

public program() {

   console.printLine(console.readLine()
                             .split()
                             .selectBy(mssgconst toInt<convertorOp>[1])
                             .summarize())

}</lang>

Elixir

<lang Elixir>IO.gets("Enter two numbers seperated by a space: ")

 |> String.split
 |> Enum.map(&String.to_integer(&1))
 |> Enum.sum
 |> IO.puts</lang>

Elm

<lang 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 --Task done! --END

</lang>

Emacs Lisp

<lang lisp>(let* ((input (read-from-minibuffer ""))

      (numbers (mapcar #'string-to-number (split-string input)))
      (a (car numbers))
      (b (cadr numbers)))
 (message "%d" (+ a b)))</lang>

Emojicode

<lang 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

🍉️</lang>

Erlang

<lang erlang>-module(aplusb). -export([start/0]).

start() ->

   case io:fread("","~d~d") of
       eof -> ok;
       {ok, [A,B]} ->
           io:format("~w~n",[A+B]),
           start()
   end.</lang>

ERRE

<lang ERRE> PROGRAM SUM2

BEGIN

 LOOP
   INPUT(LINE,Q$)
   EXIT IF Q$=""
   SP%=INSTR(Q$," ")
   PRINT(VAL(LEFT$(Q$,SP%-1))+VAL(MID$(Q$,SP%+1)))
 END LOOP

END PROGRAM </lang>

Euler Math Toolbox

<lang 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

</lang>

Euphoria

<lang 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)</lang>

Excel

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

<lang excel> =A1+B1 </lang>

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

<lang>1 2 3 </lang>

F#

<lang fsharp>open System

let SumOf(str : string) =

   str.Split() |> Array.sumBy(int)

[<EntryPoint>] let main argv =

   Console.WriteLine(SumOf(Console.ReadLine()))
   0</lang>

Factor

<lang factor>USING: math.parser splitting ;

a+b ( -- )
   readln " " split1
   [ string>number ] bi@ +
   number>string print ;</lang>
( scratchpad ) a+b
2 2
4

FALSE

<lang false>[0[^$$'9>'0@>|~]['0-\10*+]#%]n: {read an integer} n;!n;!+.</lang>

Fantom

<lang 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)
 }

}</lang>

FBSL

Using stdin and stdout <lang qbasic>#APPTYPE CONSOLE

DIM %a, %b SCANF("%d%d", @a, @b) PRINT a, "+", b, "=", a + b

PAUSE</lang>

Fhidwfe

<lang 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 </lang>

Fish

<lang Fish>i:o:"-"=?v1$68*-v v >~01-0 > >i:o:" "=?v68*-$a*+

         >~*i:o:"-"=?v1$68*-v

v >~01-0 > >i:o:d=?v68*-$a*+

       >~*+aonao;</lang>

Forth

<lang Forth>pad dup 80 accept evaluate + .</lang>

Fortran

<lang fortran>program a_plus_b

 implicit none
 integer :: a,b
 read (*, *) a, b
 write (*, '(i0)') a + b

end program a_plus_b</lang> And in Fortran 77 <lang fortran> READ (1,100) I,J

100  FORMAT(2I5)
     WRITE (2,200) I+J
200  FORMAT(1X,I5)
     END</lang>

Free Pascal

<lang pascal>program SUMA; uses

 SysUtils;

var

 s1, s2:integer;

begin

 ReadLn(s1);
 Readln(s2);
 WriteLn(IntToStr(s1 + s2));

end. </lang>


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.) <lang frink> sum[eval[split[%r/\s+/, input[""]]]] </lang>

FunL

<lang funl>println( sum(map(int, readLine().split(' +'))) )</lang>

Furor

<lang Furor> cin sto mystring

  1. s dec mystring @mystring sprintnl
  2. 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” } </lang>

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


Gambas

<lang 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</lang> Output:

999 + 888 = 1887

Gastona

Taking A and B from command line arguments <lang gastona>#listix#

  <main>
     "@<p1> + @<p2> = "
     =, p1 + p2

</lang> Using Graphical interface <lang gastona>#javaj#

  <layout of main>
     EVALAYOUT, 6, 6, 3,
        , A   , A
        , lA  , eA
        , lB  , eB
        , bSum, eRes
  1. listix#
  <-- bSum>
     MSG, eRes data!,, @<suma>
     
  <suma> =, eA + eB

</lang>

Gema

<lang gema><D> <D>=@add{$1;$2}</lang>

Genie

<lang 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</lang>
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

<lang 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);</lang>

Go

<lang go>package main

import "fmt"

func main() {

   var a, b int
   fmt.Scan(&a, &b)
   fmt.Println(a + b)

}</lang>

Golfscript

<lang golfscript>~+</lang>

Golo

<lang 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")
 }

}</lang>

Gosu

<lang 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 ) </lang>

Groovy

<lang 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()</lang>

GUISS

We cannot use variables, but we can find the sum of two numbers.Here we add 3 + 2: <lang guiss>Start,Programs,Accessories,Calculator,Button:3,Button:[plus], Button:2,Button:[equals]</lang>

Harbour

<lang visualfoxpro>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
 </lang>

Screen output:

Enter two numbers (range -1000...+1000): -56 98

Sum of given numbers is 42


Haskell

<lang haskell>main = print . sum . map read . words =<< getLine</lang>

hexiscript

<lang 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</lang>

HicEst

A and B are input via edit controls with spinners limiting inputs to +-1000. <lang HicEst>DLG(Edit=A, DNum, MIn=-1000, MAx=1000, E=B, DN, MI=-1000, MA=1000) WRITE(Messagebox, Name) A, B, "Sum = ", A+B</lang>

Hoon

<lang> |= [a=@ud b=@ud] (add a b) </lang>

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

<lang 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; }
     )
   );
 );

}</lang>

Hy

<lang hy>(print (sum (map int (.split (input)))))</lang> Alternatively, with the "threading tail" macro: <lang hy>(->> (input) (.split) (map int) (sum) (print))</lang>

i

<lang i>main: print(integer(in(' '))+integer(in('\n'))); ignore</lang>

Icon and Unicon

<lang icon>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</lang>

Idris

<lang idris>main : IO() main = do

 line <- getLine
 print $ sum $ map cast $ words line</lang>

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: <lang J> 2+3 5</lang> 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 +/. <lang J>+/". (1!:1(3))-.LF</lang> Here's a little script, called "a+b.ijs": <lang J>#!/Applications/j602/bin/jconsole echo +/". (1!:1(3))-.LF exit </lang> Here is the execution of the script: <lang bash>echo 2 3 | ./a+b.ijs 5</lang>

Java

<lang java>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
   }

}</lang> 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. <lang java>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());
  }

}</lang>

The following code uses a StreamTokenizer instead of a Scanner.

<lang java>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));
       }
   }

} </lang>


<lang> 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'

       ;

</lang> 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:

<lang html4strict><html> <body>

<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></lang>

Server side (with node.js):

<lang javascript>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()
   }

)</lang>

$ node io.js
2 3
5
$ node io.js
x 3
usage: <integer> <integer>

ES6

Node.js in a terminal: <lang javascript>process.stdin.on("data", buffer => {

 console.log(
   (buffer + "").trim().split(" ").map(Number).reduce((a, v) => a + v, 0)
 );

}); </lang>

 $ node io.js
 2 3
 5

JScript Windows Script Host Version 5.8

<lang javascript>var a = WScript.StdIn.ReadLine(); var b = WScript.StdIn.ReadLine(); WSH.echo(a, " + " , b , " = " , Number(a)+Number(b)); </lang>

Joy

Console

<lang Joy>get get +.</lang>

File

<lang Joy>"input.txt" include "output.txt" "w" fopen get get + fput pop quit.</lang>

jq

Since the given task is simply to add two numbers, the simplest approach in jq is illustrated by the following transcript: <lang jq>$ jq -s add 3 2 5 </lang> 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:<lang jq> def addpairs:

 if length < 2 then empty
 else (.[0] + .[1]), (.[2:] | addpairs)
 end;

addpairs</lang> For example, here is a transcript that assumes the program is in a file named AB.jq:<lang jq> $ jq -s -f AB.jq 1 2 3 4 5 6 3 7 11</lang>

Jsish

<lang javascript>/* 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");

}</lang>

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: <lang julia>input = parse.(Int, split(readline(stdin))) println(stdout, sum(input))</lang>

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. <lang Julia>julia> println(parse(Int, readuntil(stdin, ' ')) + parse(Int, readuntil(stdin, '\n'))) 1 2 3</lang>

K

<lang K>

 split:{(a@&~&/' y=/: a:(0,&x=y)_ x) _dv\: y}
 ab:{+/0$split[0:`;" "]}
 ab[]

2 3 5 </lang>

Keg

<lang Keg>+.</lang> Try it online!

Or, using flags (-hr): <lang Keg>+</lang> Try it online!

Kite

<lang 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;

];</lang>

Output:
$ kite a_plus_b.kt <<EOF
5 6
EOF
11
$

Klong

<lang K>

 {(1:$(*x?0c )#x)+1:$(1+*|x?0c )_x}@.rl()

2 3 5 </lang>

Kotlin

<lang scala>// 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")
       }
   }       

}</lang>

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

<lang KQL>datatable(Input:string)[

   '2 2',
   '3 2'

] | parse Input with A:int ' ' B:int | project Input, Output = A + B</lang>

L++

<lang lisp>(main

 (decl int a)
 (decl int b)
 (>> std::cin a b)
 (prn (+ a b)))</lang>

Lambdatalk

<lang scheme> 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>

Lang5

<lang lang5>read read + .

read " " split expand drop + .</lang>

Lasso

<lang lb>[a + b]</lang>

LIL

<lang tcl># A+B, in LIL

  1. 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]</lang>

Output:
prompt$ echo '40 2' | lil AB.lil
42

Lisaac

<lang lisaac>Section Header

+ name := A_PLUS_B

Section Public

- main <- (    (IO.read_integer; IO.last_integer) +
               (IO.read_integer; IO.last_integer) ).println;</lang>

Little

<lang c>void main() {

   string a, b;
   scan(gets(stdin), "%d %d", &a, &b); 
   puts(((int)a + (int)b));

}</lang>

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 <lang Little Man Computer> INP

       STA 99
       INP
       ADD 99
       OUT
       HLT

// Output the sum of two numbers</lang>

Machine code <lang Little Man Computer>00 INP 01 STA 99 02 INP 03 ADD 99 04 OUT 05 HLT</lang>

LiveCode

Using Livecode Server script <lang LiveCode><?lc if isNumber($0) and isNumber($1) then

   put $0 + $1

else

   put $0 && $1

end if ?></lang>

A graphical version using an input dialog <lang LiveCode>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</lang>

<lang logo>show apply "sum readlist</lang>

Lua

<lang Lua>a,b = io.read("*number", "*number") print(a+b)</lang>

M2000 Interpreter

<lang>Def Range(X%)=Abs(X%)<=1000 Do {

     Input A%, B%

} Until Range(A%) And Range(B%) Print A%+B%</lang>

M4

<lang M4> define(`sumstr', `eval(patsubst(`$1',` ',`+'))')

sumstr(1 2) 3</lang>

Maple

<lang maple> convert( scanf( "%d %d" ), '`+`' ); 23 34

                                  57</lang>

Mathematica/Wolfram Language

Interactive in a notebook <lang Mathematica>Input[] + Input[]</lang>

MATLAB / Octave

<lang MATLAB>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</lang>

Maude

Built-in

<lang Maude> red 3 + 4 . </lang>

With restrictions

<lang Maude> 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 </lang>

Maxima

<lang>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); </lang>

Mercury

<lang>:- 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
   ).</lang>

min

Works with: min version 0.19.3

<lang min>gets " " split 'bool filter 'int map sum puts!</lang>

MiniScript

The input intrinsic in MiniScript isn't available in all implementations, so we've just hard-coded the input here: <lang MiniScript>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</lang>

Output:
5

mIRC Scripting Language

<lang mirc>alias a+b {

 echo -ag $calc($1 + $2)

}</lang>

МК-61/52

С/П + С/П

ML/I

The two numbers are read from 'standard input' or its equivalent. <lang ML/I>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</lang>

Modula-2

<lang modula2>MODULE ab;

IMPORT InOut;

VAR A, B  : INTEGER;

BEGIN

 InOut.ReadInt (A);
 InOut.ReadInt (B);
 InOut.WriteInt (A + B, 8);
 InOut.WriteLn

END ab.</lang>

MoonScript

<lang moonscript>a,b = io.read '*number','*number' print a + b</lang>

MUMPS

<lang 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</lang>

Nanoquery

<lang 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])</lang>

Neko

<lang ActionScript>/**

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")</lang>

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#

<lang Nemerle>using System; using System.Console; using System.Linq;

module AplusB {

   Main() : void
   {
       WriteLine(ReadLine().Split().Select(int.Parse).Sum());
   }    

}</lang>

NetRexx

<lang NetRexx>/* NetRexx */

options replace format comments java symbols binary

parse ask a b . say a '+' b '=' a + b</lang>

newLISP

<lang newLISP>(println (apply + (map int (parse (read-line)))))</lang>

Nim

A+B: <lang nim>

  1. 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))</lang>

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): <lang nit>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</lang>

NS-HUBASIC

<lang NS-HUBASIC>10 INPUT "ENTER NUMBER A: ",A 20 INPUT "ENTER NUMBER B: ",B 30 PRINT A+B</lang>

Nyquist

SAL Syntax

<lang Nyquist>;nyquist plug-in

version 1
type tool
name "A+B"
debugflags trace

define variable a = 1 define variable b = 9

print a + b

return ""</lang>

Audacity plug-in (SAL syntax)

<lang Nyquist>;nyquist plug-in

version 1
type tool
name "A+B"
debugflags trace

define variable a = 1 define variable b = 9

print a + b

return ""</lang>

Oberon-2

<lang oberon2>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.</lang> Producing

12 34
      46

Objeck

<lang 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();
        };
     }
  }

}</lang>

OCaml

<lang ocaml>Scanf.scanf "%d %d" (fun a b -> Printf.printf "%d\n" (a + b))</lang>

Oforth

Works with any number of integers separated by a space.

<lang Oforth>import: mapping

System.Console accept words map( #>integer) reduce( #+ ) printcr .</lang>

Ol

Note: input data must be separated by newline ([Enter] key press).

<lang ol>; 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)))

</lang>

Onyx

<lang 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</lang>

ooRexx

version 1

Translation of: REXX

<lang oorexx>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,'+',' ')</lang>

Output:
enter some numbers to be summed:
1e10+7.777+33 = 10000000040.777

version 2

extend for negative numbers <lang oorexx>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</lang>

OpenEdge/Progress

<lang 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</lang>

Openscad

There is no means of run-time input in Openscad <lang openscad> a = 5 + 4; echo (a); </lang>

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)). <lang order>

  1. define ORDER_PP_DEF_1int_is_positive \
   ORDER_PP_FN(8fn(8X, 8is_0(8tuple_at_0(8X))))
  1. define ORDER_PP_DEF_1int_get_unsigned \
   ORDER_PP_FN(8fn(8X, 8tuple_at_1(8X)))
  1. define ORDER_PP_DEF_1int_add_impl \
   ORDER_PP_FN(8fn(8A, 8B, 8S, 8int(8S, 8add(8A, 8B))))
  1. 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)))))
  1. 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)))))
  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))))))
  1. define ORDER_PP_DEF_8int \
   ORDER_PP_FN(8fn(8S, 8N, 8pair(8S, 8N)))

ORDER_PP(8int_to_lit(8int_add(A, B))) </lang>

Oxygene

<lang 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+(?-?[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. </lang> Produces:

>aplusb
23 -99
23 + -99 = -76

Oz

<lang 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}}</lang>

PARI/GP

User input: <lang parigp>input()+input()</lang> File input: <lang parigp>read("file1")+read("file2")</lang>

Pascal

<lang pascal>var

  a, b: integer;

begin

  readln(a, b);
  writeln(a + b);

end.</lang> Same with input from file input.txt and output from file output.txt. <lang pascal>var

  a, b: integer;

begin

  reset(input, 'input.txt');
  rewrite(output, 'output.txt');
  readln(a, b);
  writeln(a + b);
  close(input);
  close(output);

end.</lang>

Version 2. Following the rules

<lang pascal>{ 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.</lang>

Perl

<lang Perl>my ($a,$b) = split(' ', scalar(<STDIN>)); print "$a $b " . ($a + $b) . "\n";</lang>

using the List::Util module

<lang Perl>say sum split /\s+/, scalar <STDIN>;</lang>

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

(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

<lang 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</lang>

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

<lang php>fscanf(STDIN, "%d %d\n", $a, $b); //Reads 2 numbers from STDIN echo ($a + $b) . "\n";</lang> <lang php>$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);</lang>

Picat

<lang Picat> go =>

  println("Write two integers (and CR)"),
  println(read_int()+read_int()).

</lang>

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

<lang PicoLisp>(+ (read) (read)) 3 4 -> 7</lang>

Piet

  The code is fairly straightforward. The individual commands are as follows: <lang text>in(num) in(num) add out(num)</lang>

Pike

<lang Pike>string line = Stdio.stdin->gets(); sscanf(line, "%d %d", int a, int b); write(a+b +"\n");</lang>

PL/I

<lang pli>get (a, b); put (a+b);</lang>

Pony

<lang 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())

</lang>

PostScript

<lang postscript>(%stdin) (r) file  % get stdin dup token pop  % read A exch token pop  % read B add =</lang>

Potion

<lang 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

  1. The numbers are manually inputted, but the format is improper (i.e., "%d\n%d\n").

(read number + read number) print</lang>

PowerShell

<lang powershell>$a,$b = -split "$input" [int]$a + [int]$b</lang> This solution does not work interactively, while the following only works interactively: <lang powershell>$a,$b = -split (Read-Host) [int]$a + [int]$b</lang>

I think this works better and doesn't require string input (following the task closer): <lang powershell>filter add {

   return [int]$args[0] + [int]$args[1]

}</lang>

Can be called in one line with <lang powershell>add 2 3</lang>

Processing

Rudimentary User Interface

Click on either side to add 1 to its value. <lang Processing>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++;
 }

}</lang>

What the GUI looks like.

ProDOS

With the math module: <lang ProDOS>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- </lang> Without the math module: <lang ProDOS>editvar /newvar /value=a /title=Enter an integer: editvar /newvar /value=b /title=Enter another integer: editvar /newvar /value=c=-a-+-b- printline -c- </lang>

Prolog

Works with: SWI-Prolog

<lang 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).</lang>

output : <lang Prolog>?- plus. |: 4 5 9 true.</lang>

Pure

<lang pure>using system; printf "%d\n" (x+y) when x,y = scanf "%d %d" end;</lang>

PureBasic

Console

<lang PureBasic>x$=Input() a=Val(StringField(x$,1," ")) b=Val(StringField(x$,2," ")) PrintN(str(a+b))</lang>

File

<lang PureBasic>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 </lang>

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.

<lang python>try: raw_input except: raw_input = input

print(sum(map(int, raw_input().split())))</lang>

File

For Python 2.X and 3.X taking input from stdin stream which can be redirected to be file input under Unix <lang python>import sys

for line in sys.stdin:

   print(sum(map(int, line.split())))</lang>

Console, Python 3 only

<lang python>a = int(input("First number: ")) b = int(input("Second number: ")) print("Result:", a+b)</lang>

QB64

<lang 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)) </lang>

Fully implemented version:
CBTJD: 2020/03/13


  • Task description requires:
    • Both integers entered on one line.
    • Integers between -1000 and +1000.

<lang qbasic>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$</lang>

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

<lang Quite BASIC>10 input "Enter number A: ";a 20 input "Enter number B: ";b 30 print a+b</lang>

R

<lang r>sum(scan("", numeric(0), 2))</lang>

Ra

<lang 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 </lang>

Racket

<lang racket>

  1. lang racket

(+ (read) (read)) </lang>

Or, with additional error checking: <lang racket>

  1. 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)) </lang>

Raku

(formerly Perl 6)

Works with: rakudo version 2015.12

Short version with very little "line noise": <lang perl6>get.words.sum.say;</lang> Reduction operator [+], and say as a function: <lang perl6>say [+] get.words;</lang> Long version: <lang perl6>my ($a, $b) = $*IN.get.split(" "); say $a + $b;</lang>

REBOL

<lang rebol>forever [x: load input print x/1 + x/2]</lang>

Output:
1 2
3
2 2
4
3 2
5

Red

<lang Red>x: load input print x/1 + x/2</lang>

Output:
1 2
3
2 2
4
3 2
5

Alternative implementations: <lang Red>print (first x: load input) + x/2</lang> <lang Red>print head insert load input 'add</lang> <lang Red>print load replace input " " " + "</lang>

Relation

<lang Relation> set input = "2 2" set a = regexreplace(input,"^(-?\d+)\s+(-?\d+)+$","$1") set b = regexreplace(input,"^(-?\d+)\s+(-?\d+)+$","$2") echo a + b </lang>

Retro

<lang Retro>:try ("-n) s:get s:to-number s:get s:to-number + n:put ;</lang> <lang Retro>try 1 2</lang>

REXX

version 1, unnormalized

The numbers can be any valid REXX number (integer, fixed point decimal, floating point (with exponential notation, ···). <lang rexx>/*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. */</lang>

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. <lang rexx>/*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. */</lang>

version 3, extended precision

Using the   numeric digits   statement allows more decimal digits to be used, the default is   9. <lang rexx>/*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. */</lang>

version 4, multiple numbers

This REXX version adds   all   the numbers entered   (not just two). <lang rexx>/*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.*/</lang>

version 5, multiple numbers, tongue in cheek

<lang rexx>/*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.*/</lang>

Ring

<lang 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)</lang>

Robotic

<lang robotic> input string "Input A:" set "A" to "input" input string "Input B:" set "B" to "input"

  • "('A' + 'B')"

end </lang>

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: <lang Rockstar> Listen to A number Listen to B Say A number plus B </lang> Idiomatic: <lang Rockstar> Listen to my voice Listen to your thoughts Shout your thoughts with my voice </lang>

Ruby

<lang ruby>puts gets.split.sum(&:to_i)</lang>

Run BASIC

<lang runbasic>input, x$ print val(word$(x$,1)) + val(word$(x$,2))</lang>

Rust

<lang 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);

}</lang>

or

<lang rust>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);

}</lang>

S-lang

<lang C>% 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);</lang>

Output:
prompt$ echo "12 34" | slsh A+B.sl
46

<lang C>% 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"$);

}</lang>

Scala

<lang scala>println(readLine().split(" ").map(_.toInt).sum)</lang>

This will work if the input is exactly as specified, with no extra whitespace. A slightly more robust version:

<lang scala>val s = new java.util.Scanner(System.in) val sum = s.nextInt() + s.nextInt() println(sum)</lang>

or

<lang scala>println(readLine().split(" ").filter(_.length>0).map(_.toInt).sum)</lang>

Scheme

<lang scheme>(display (+ (read) (read)))</lang>

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. <lang sed>: Loop

  1. All done

/^-*00* /s/// / -*00*$/s/// t

  1. Negative Check

/^\(-*\)[0-9].* \1[0-9]/!b Negative

  1. Create magic lookup table

s/\(.[0-9]*\) \(.[0-9]*\)/\1;987654321000009999000999009909 \2;012345678999990000999000990090/ s/ \(-\)*\(9*;\)/ \10\2/

  1. Decrement 1st number

s/\([^0]\)\(0*\);[^0]*\1\(.\).*\2\(9*\).* \(.*\)/\3\4 \5/

  1. Increment 2nd

s/\([^9]\)\(9*\);[^9]*\1\(.\).*\2\(0*\).*/\3\4/ t Loop

Negative
  1. Create magic lookup table

s/\(.[0-9]*\) \(.[0-9]*\)/\1;987654321000009999000999009909 \2;987654321000009999000999009909/

  1. Decrement 1st number

s/\([^0]\)\(0*\);[^0]*\1\(.\).*\2\(9*\).* \(.*\)/\3\4 \5/

  1. Decrement 2nd

s/\([^0]\)\(0*\);[^0]*\1\(.\).*\2\(9*\).*/\3\4/ t Loop</lang>

Another method, based off of this StackExchange answer: <lang sed>#!/bin/sed -f

  1. Add a marker in front of each digit, for tracking tens, hundreds, etc.

s/[0-9]/<&/g

  1. 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

  1. Multiply by ten for each digit from the back they were.
tens

s/|</<||||||||||/g t tens

  1. We don't want the digit markers any more

s/<//g

  1. Negative minus negative is the negation of their absolute values.

s/^-\(|*\) *-/-\1/

  1. Negative plus positive equals positive plus negative, and we want the negative at the back.

s/^-\(|*\) \+\(|*\)$/\2-\1/

  1. Get rid of any space between the numbers

s/ //g

  1. A tally on each side can be canceled.
minus

s/|-|/-/ t minus s/-$//

  1. 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/</lang>

Seed7

<lang 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;</lang>

Self

Works with positive and negative integers, and also more than two integers.

<lang self>((stdin readLine splitOn: ' ') mapBy: [|:e| e asInteger]) sum printLine.</lang>

SenseTalk

<lang sensetalk>ask "Enter the first number:" put it into a

ask "Enter the second number:" put it into b

put a + b</lang> <lang sensetalk>put file "input.txt" into inputFile split inputFile by space put sum of inputFile</lang>

SequenceL

<lang sequencel>import <Utilities/Conversion.sl>;

main(args(2)) := stringToInt(args[1]) + stringToInt(args[2]);</lang>

Output:
cmd:> main.exe 3 4
7

cmd:> main.exe -5 7
2

cmd:> main.exe -12 -10
-22

SETL

<lang setl>read(A, B); print(A + B);</lang>

Shiny

<lang shiny>if (io.line 'stdin').match ~(\d+)\s+(\d+)~

   say "$a $b %(a+b)d"

end</lang>

Sidef

Works with both positive and negative integers. <lang ruby>say STDIN.readline.words.map{.to_i}.sum</lang>

More idiomatically: <lang ruby>say read(String).words»to_i»()«+»</lang>

Explicit summation: <lang ruby>var (a, b) = read(String).words.map{.to_i}... say a+b</lang>

Simula

<lang simula>BEGIN

   WHILE NOT LASTITEM DO
   BEGIN
       OUTINT(ININT + ININT, 0);
       OUTIMAGE;
   END;

END. </lang>

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. <lang smalltalk>'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')! !</lang>

but all have a stream hierarchy, so the task could be restated to pass input and output as stream arguments:

Works with: Smalltalk/X

<lang smalltalk>|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.</lang> or: <lang smalltalk>task value: Stdin value: Stdout.</lang>

smart BASIC

<lang qbasic>INPUT n$ PRINT VAL(LEFT$(n$,(LEN(STR$(VAL(n$))))))+VAL(RIGHT$(n$,(LEN(n$)-LEN(STR$(VAL(n$)))-1)))</lang>

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:

<lang qbasic>INPUT n$ SPLIT n$ TO m$,n WITH " " PRINT m$(0),m$(1),m$(0)+m$(1)</lang>

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

<lang smilebasic>INPUT A INPUT B PRINT A+B </lang>

SNOBOL4

Simple-minded solution (literally "two somethings separated by space") <lang snobol> input break(" ") . a " " rem . b output = a + b end</lang> "Integer aware" solution: <lang snobol> nums = "0123456789" input span(nums) . a break(nums) span(nums) . b output = a + b end</lang>

SPAD

Works with: FriCAS
Works with: OpenAxiom
Works with: Axiom

One of several possibilities: <lang SPAD>(1) -> integer READ()$Lisp + integer READ()$Lisp 333 444

  (1)  777
                                                       Type: PositiveInteger</lang>

Domain:SExpression

SPARK

<lang Ada>-- 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;</lang>

SPL

<lang spl>n = #.split(#.input("Input two numbers, separated by space:")," ")

  1. .output(n[1],"+",n[2],"=",#.val(n[1])+#.val(n[2]))</lang>
Input:
Input two numbers, separated by space:
2 3
Output:
2+3=5

SQL

<lang sql>select A+B</lang> Example: <lang sql>select 2+3</lang> 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: <lang sql pl>

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 </lang> 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). <lang ssem>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</lang>

Standard ML

<lang sml>(*

* 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</lang>
Output:
- aplusb();
123 456
val it = 579 : int

Swift

Works with: Swift version 2

Requires sending EOF. <lang Swift>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)")</lang>

Works with: Swift version 3

Swift 4 and no requirement to send EOF (press enter/send newline like you normally would)

<lang Swift> 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)") </lang>

Symsyn

<lang Symsyn>

[] $s
getitem $s x
getitem $s y
+ x y
y []

</lang>

Tailspin

<lang tailspin> composer nums

 [ (<WS>?) <INT> (<WS>) <INT> (<WS>?) ]

end nums

$IN::lines -> nums -> $(1) + $(2) -> '$; ' -> !OUT::write </lang>

Alternatively <lang tailspin> composer nums

 (<WS>?) (def a: <INT>;) (<WS>) <INT> -> $a + $ (<WS>?)

end nums

$IN::lines -> nums -> '$; ' -> !OUT::write </lang>

Tcl

<lang tcl>scan [gets stdin] "%d %d" x y puts [expr {$x + $y}]</lang> Alternatively: <lang tcl>puts [tcl::mathop::+ {*}[gets stdin]]</lang> To/from a file: <lang tcl>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</lang>

TI-83 BASIC

<lang ti83b>:Prompt A,B

Disp A+B</lang>

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.

<lang ti83b>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</lang>

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

<lang ti89b>:aplusb(a,b)

a+b</lang>

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. <lang Torque>Function aPlusB(%input) {

   return getWord(%input, 0) + getWord(%input, 1);

}</lang>

Transd

<lang scheme>#lang transd

MainModule : { a: Int(), b: Int(), _start: (lambda (textout (+ (read a) (read b)))) }</lang>

TSE SAL

<lang TSESAL> 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 </lang>

Output:

output 5

TUSCRIPT

<lang tuscript>$$ MODE TUSCRIPT SET input="1 2" SET input=SPLIT(input,": :") SET input=JOIN (input) SET output=SUM(input)</lang>

TXR

$ 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

<lang sh>#!/bin/sh read a b || exit echo `expr "$a" + "$b"`</lang>

Works with: bash
Works with: ksh93
Works with: pdksh
Works with: zsh

Script "a+b.sh": <lang bash>#!/bin/bash read a b || exit echo $(( a + b ))</lang>

Output:

<lang bash>echo 2 3 | ksh a+b.sh 5</lang>

One liner :

<lang bash> a=0;b=0;read a;read b;echo "Sum of $a and $b is "$((a+b)) </lang> Sample run :

3
4
Sum of 3 and 4 is 7

C Shell

<lang csh>set line=$< set input=($line) @ sum = $input[1] + $input[2] echo $sum</lang>

Ursa

<lang>#

  1. a + b
  1. read a string containing the two ints

decl string input set input (in string console)

  1. determine the sum

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

  1. output the sum

out sum endl console</lang>

Ultimate++

<lang Cpp>

  1. include <Core/Core.h>
  2. include <stdio.h>
  3. 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++) { } }


</lang>


Ursala

Using standard input and output streams: <lang Ursala>#import std

  1. import int
  1. executable&

main = %zP+ sum:-0+ %zp*FiNCS+ sep` @L</lang> Overwriting a text file named as a command line parameter: <lang Ursala>#import std

  1. import int
  1. executable -[parameterized]-

main = ~command.files.&h; <.contents:= %zP+ sum:-0+ %zp*FiNCS+ sep` @L+ ~contents></lang> Creating a new file named after the input file with suffix .out: <lang Ursala>#import std

  1. import int
  1. executable -[parameterized]-

main =

~command.files.&h; ~&iNC+ file$[

  contents: %zP+ sum:-0+ %zp*FiNCS+ sep` @L+ ~contents,
  path: ~path; ^|C\~& ~=`.-~; ^|T/~& '.out'!]</lang>

Vala

Read from stdin while program running: <lang vala>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;

} </lang>

VBA

A simple version: <lang VBA>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</lang> An other version: <lang VBA>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</lang>

VBScript

A simple version: <lang vb>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 </lang> An other version: <lang vb>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</lang>

Verilog

<lang 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</lang>

VHDL

<lang 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
   readline(INPUT, line_in);
   read(line_in, a);
   read(line_in, b);
   
   write(line_out, a+b);
   writeline(OUTPUT, line_out);
   wait; -- needed to stop the execution
 end process;

end architecture beh;</lang>

Visual Basic .NET

<lang vbnet>Module Module1

 Sub Main()
   Dim s() As String = Nothing
   s = Console.ReadLine().Split(" "c)
   Console.WriteLine(CInt(s(0)) + CInt(s(1)))
 End Sub

End Module</lang>

Vlang

<lang go>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}')

}</lang> Read from stdin

Output:
Input         Output
2 2           2 + 2 = 4
3 2           3 + 2 = 5

Wee Basic

<lang Wee Basic>Print 1 "Enter number A:" input a Print 1 "Enter number B:" input b let c=a+b print 1 c end</lang>

Whitespace

<lang whitespace>






</lang>

Wisp

Translation of: Scheme

<lang scheme> display : + (read) (read)


314 315

displays 629

</lang>

Wren

<lang ecmascript>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
   }

}</lang>

Output:

Sample input/output:

Enter two integers separated by a space : 12 16
Their sum is 28

X86 Assembly

Works with: NASM version Linux

<lang asm>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 out_val_len equ $-out_val_msg

section .bss a resd 1 b resd 1 sum resd 1</lang> This will not work on numbers over 0(from 1 to 0). This is due to the fact, numbers higher than 0(10,11, etc) are in fact strings when taken from the keyboard. A much longer conversion code is required to loop through and treat each number in the string as separate numbers. For example, The number '10' would have to be treated as a 1 and a 0.

XBS

Since XBS is written in Javascript, we have to use the Javascript prompt function to get inputs. <lang xbs>const Amount:number = toint(window.prompt("Input an amount")); set Stream = []; <|(*1..Amount)=>Stream.push(window.prompt("Input a number")); Stream=Stream.join(" "); const Inputs = <|(*Stream.split(" "))toint(_); set Result = 0; <|(*Inputs)Result+=_; log(Result);</lang>

Output:

If we input an amount of "2", then input "1" and "2", the output will be "3".

3

xEec

<lang xEec>i# i# ma h#10 r o# p o$ p</lang>

XLISP

<lang xlisp>(DEFUN A-PLUS-B ()

   (DISPLAY "Enter two numbers separated by a space.")
   (NEWLINE)
   (DISPLAY "> ")
   (DEFINE A (READ))
   (DEFINE B (READ))
   (+ A B))</lang>
Output:
(A-PLUS-B)
Enter two numbers separated by a space.
> 2 2

4

Xojo

<lang 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 </lang>

XPL0

<lang XPL0>include c:\cxpl\codes; int A, B; [A:= IntIn(0);

B:= IntIn(0);
IntOut(0, A+B);
CrLf(0);

]</lang>

XQuery

<lang 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)) </lang>

Yabasic

<lang 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</lang>

Yorick

<lang yorick>a = b = 0; read, a, b; write, a + b;</lang>

ZED

Source -> http://ideone.com/WLtEfe Compiled -> http://ideone.com/fMt6ST <lang zed>(A+B) comment:

  1. true

(+) (read) (read)

(+) one two comment:

  1. true

(003) "+" one two

(read) comment:

  1. true

(001) "read"</lang>

zkl

<lang zkl>do(2){ask("A B: ").split(" ").filter().sum().println()}</lang>

A B: 123    567
690
A B: -4 6
2

This actually works for any number of integers

Zoea

<lang Zoea>program: a_plus_b

 input: '7 11' 
 output: 18 

</lang>

Zoea Visual

A+B

zonnon

<lang zonnon> module ABProblem; var a,b: integer; begin read(a,b); writeln(a+b) end ABProblem. </lang>

1 2
                   3

ZX Spectrum Basic

<lang zxbasic>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</lang>

Another solution

<lang zxbasic>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</lang>

Input two numbers separated by
space(s)
  3.14     2^3
3.14 + 8 = 11.14