title: Multiply two numbers

text:
# Question
Title: Multiply two numbers
**Input:** Two decimal integers. These can be given to the code in standard input, as arguments to the program or function, or as a list.

**Output:** Their product, as a decimal integer. For example, the input `5 16` would lead to the output `80`.

**Restrictions:** No standard loopholes please. This is , answer in lowest amount of bytes wins.

**Notes:** Layout stolen from my earlier challenge, Add two numbers.

**Test cases:**

```
1 2   -> 2
4 5   -> 20
7 9   -> 63
-2 8  -> -16
8 -9  -> -72
-8 -9 -> 72
0 8   -> 0
0 -8  -> 0
8 0   -> 0
-8 0  -> 0
0 0   -> 0

```

Or as CSV:

```
a,b,c
1,2,2
4,5,20
7,9,63
-2,8,-16
8,-9,-72
-8,-9,72
0,8,0
0,-8,0
8,0,0
-8,0,0
0,0,0

```

# Leaderboard

```
var QUESTION_ID=106182,OVERRIDE_USER=8478;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
```

```
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
```

```
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>
```

# Answer
# Brachylog V1, 05AB1E, J, K, Underload, MATL, Forth, PigeonScript, Stacked, Implicit, Jolf, Clojure, Braingolf, 8th, Common Lisp, Julia, Pyt, Appleseed, Stax, Reality, dc, Vyxal, Keg, Swift, Fig\*, Chocolate, \>\<\>, Thunno\*: 1 byte

```
*

```

You may edit this answer to add other languages for which `*` is a valid answer.

\*Actually \\$\log\_{256}(96)\approx\\$ 0.823 bytes in Fig and Thunno
> 44 votes

# Answer
# C (GCC), 13 bytes

Doesn't work on *all* implementations, but that's OK.

```
f(a,b){a*=b;}

```

Try it on TIO!
> 32 votes

# Answer
# Beatnik, 888 bytes

```
k I
j k ZZZZX z
xw k C vp yQ KD xw z j k ZZZZX z
j k ZZZD z xw bZ ZX
k XX z qs xw vp xw xw vp xw vp vp vp k I Xj ZZD hd
xw yQ K k ZZZZX xo exx
qs yQ XA xw xw xw xw z xw bZ K
xw xw k I
j k ZZZZX z
xw k C vp yQ XA hd k I z j k ZZZZX z
j xw k A vp bZ ZX
k ZZZZX z qs xw vp xw xw vp xw vp vp vp k I Xj ZZD hd
xw yQ K k ZZZZX xo exx
qs yQ F k ZZZZK xo
vp
xw xw z qs xw bZ X xw k I z xw Xj K
qs xw bZ KA vp qs xw Xj C hd
qs z xw xw xw xw z qs
xw xw xw xw z qs k I qs k I z xw Xj ZC
qs bZ ZZZX qs xw yQ C hd xw
k I vp qs k I qs
xw Xj ZZC hd hd z Kz ZZD
k I z xw xw xw xw z qs k I qs k I Xj ZZZZF
z
xw xw z qs xw bZ X xw k I z xw Xj K
qs xw bZ KA vp qs xw Xj C hd
z qs xw
xw xw z qs xw bZ X xw k I z xw Xj K
qs xw bZ KA vp qs xw Xj C hd
z vp
xw xw z qs
xw xw z qs
k I qs
xw bZ ZZX k I z qs k I vp
xw k ZA z yQ ZA hd qs k I vp qs k I Xj ZZKD
qs xw Xj ZZK
hd qs xw Xj ZZZZ hd
k ZZZZKD vp xo xw Xj K

```

Try it online!

I'm using the C interpreter because the Python interpreter on TIO annoyingly executes the address if the condition for jumping backward isn't met. An easy workaround for the Python interpreter is to pad some nops to make the address nop. I believe neither is correct:

```
                                   C       Python  My interpretation
IP after skiping N words           IP+N+1  IP+N+2  IP+N+2
IP after skiping back N words      IP-N    IP-N+1  IP-N+2
IP after not skiping N words       IP+2    IP+2    IP+2
IP after not skiping back N words  IP+2    IP+1    IP+2

```

Input should be two integers separated by a space, without trailing newlines.

This answer works in theory for all integers, if each cell can store an arbitrarily large value, not limited to 0 - 255. But it overflows if |A|+|B| \> 22. And it runs very slowly if |A|+|B| \> 6. So there is not many cases you can actually test and an if-else solution for those cases might be even shorter.

The idea is to compute the triangular numbers T(N) = N(N+1)/2 by decrementing the value to 0 and summing up all the intermediate values. Then we can get the answer A\*B = T(A+B) - T(A) - T(B).

But it is tricky to compute all the 3 values. It does this by firstly computing T(A+B) - A, leaving a copy of A in the stack to add back later, and using up the input B. Then recursively find the greatest triangular number smaller than that, which is T(A+B-1) except for the zero special cases. We can get back B = T(A+B) - A - T(A+B-1) and compute T(B) from there.

A number N is a triangular number iff it equals to the greatest triangular number smaller than N, plus the number of non-negative triangular numbers smaller than N. This runs in O(2^(T(A+B)-A)) and is the slowest part in the program.

```
k I                                         Push 1
j k ZZZZKAAA z                              Input and decrement by 48.
xw k AAA vp yQ (input_a_loop)               If the character was '-':
xw z j k ZZZZKAAA z                           Replace with 0 and input another.
input_a_loop:
j k ZZZAA z xw bZ (input_a_end)             Input and break if it is a space.
k ZKA z qs xw vp xw xw vp xw vp vp vp       Otherwise multiply the previous
                                              value by 10 and add.
k I Xj (input_a_loop)                       Continue the loop.
input_a_end: hd                             Discard the space.
xw yQ (check_sign) k ZZZZKAAA xo exx        If A=0, print 0 and exit.
                                            Stack: ?, A_is_positive, A
check_sign:
qs yQ (check_sign_else)                     If A is positive... or not,
xw xw xw xw z xw bZ (check_sign_end)          in either cases, push 2 copies
check_sign_else: xw xw k I                    of A and the negated flag back
check_sign_end:                               as a constant.
                                            Stack: A, A, A, A_is_negative
j k ZZZZKAAA z                              Similar for B.
xw k AAA vp yQ (input_b_loop)               If the character was '-':
hd k I z j k ZZZZKAAA z                       Decrement the flag and input another.
input_b_loop:
j xw k A vp bZ (input_b_end)                EOF is checked instead of a space.
k ZZZZKAAA z qs xw vp xw xw vp xw vp vp vp
k I Xj (input_b_loop)
input_b_end: hd
xw yQ (output_sign) k ZZZZKAAA xo exx       If B=0, print 0 and exit.
                                            Stack: A, A, A, A*B_is_negative, B
output_sign:
qs yQ (output_sign_end) k ZZZZK xo          If negative, output '-'.
output_sign_end:

vp                                          Add.        Stack: A, A, A+B
xw xw z qs                                  Insert a 0. Stack: A, A, 0, A+B.
xw bZ { xw k I z xw Xj }                    Copy and decrement while nonzero.
                                            Stack: A, A, 0, A+B, A+B-1, ..., 0
qs xw bZ { vp qs xw Xj } hd                 Add while the second value in the
                                              stack is nonzero.
                                            Stack: A, A, T(A+B)
qs z xw xw xw xw z qs                       Stack: A, C0=T(A+B)-A, C0, F0=0, C0

expand_loop:
xw xw xw xw z qs k I qs                     Stack: A, C0, C0, F0=0,
                                              ..., [P=C, P, S=0, F=1], C
dec_expand: k I z xw Xj (expand_loop)       Decrement and continue if nonzero.
                                            Stack: [P=1, P, S, F], C=0
                                            The last number 0 is assumed to
                                              be a triangular number.
test: qs bZ (extract_end)                   If F=0, break.
qs xw yQ (test_not_first) hd xw             If S=0, it's the first triangular
                                              number below previous C. Set S=C.
test_not_first: k I vp qs k I qs            S+=1 and restore F=1.
xw Xj (dec_expand)                          If C!=0, recursively expand from C-1.
hd hd z Kz (test)                           If S=P, P is a triangular number,
                                              return to the previous level.
k I z xw xw xw xw z qs k I qs               Otherwise, decrement P and try again.
k I Xj (dec_expand)
extract_end:                                Stack: A, C0, C0, T(A+B-1)

z                                           Subtract and get B.
xw xw z qs xw bZ { xw k I z xw Xj }         Computes T(B).
qs xw bZ { vp qs xw Xj } hd
                                            Stack: A, C0, T(B)
z qs xw                                     Stack: C0-T(B), A, A

xw xw z qs xw bZ { xw k I z xw Xj }         Computes T(A).
qs xw bZ { vp qs xw Xj } hd
z vp                                        Get A*B=(C0-T(B))+(A-T(A))
xw xw z qs                                  Stack: 0, X=A*B

divide: xw xw z qs                          Stack: 0, ..., Y=0, X
subtract: k I qs                            Stack: 0, ..., Y, Z=1, X
xw bZ {                                     While X!=0:
k I z qs k I vp                               X-=1, Z+=1.
xw k ZA z yQ (not_ten)                        But if Z=11:
hd qs k I vp qs k I Xj (subtract)               Y+=1, reset Z and restart the loop.
not_ten: qs xw Xj }
hd qs xw Xj (divide)                        Put Z under Y and make Y the new X,
                                              continue the loop if X!=0.
hd                                          Discard X.

print_loop:
k ZZZZKAA vp xo xw Xj (print_loop)          Add each cell by 47 and print.

```
> 24 votes

# Answer
# Scratch, 1 byte

Usage: Place numbers in both sides of `*` sign

Note: Since Scratch is a visual language I could not figure out how many bytes it consumes until @mbomb007 noted me about a method for counting scratch bytes
> 21 votes

# Answer
# Mathematica, 4 bytes

```
1##&

```

Example usage: `1##&[7,9]` returns `63`. Indeed, this same function multplies any number of arguments of any type together.

As Mathematica codegolfers know, this works because `##` refers to the entire sequence of arguments to a function, and concatenation in Mathematica (often) represents multiplication; so `1##` refers to (1 times) the product of all the arguments of the function. The `&` is just short for the `Function` command that defines a pure (unnamed) function.

Inside other code, the common symbol `*` does act as multiplication. So does a space, so that `7 9` is interpreted as `7*9` (indeed, the current REPL version of Mathematica actually displays such spaces as multiplication signs!). Even better, though, if Mathematica can tell where one token starts and another ends, then no bytes at all are needed for a multiplication operator: `5y` is automatically interpreted as `5*y`, and `3.14Log[9]` as `3.14*Log[9]`.
> 20 votes

# Answer
# Retina, 38 37 31 bytes

Completely new approach, the old one is below.

```
M!`-
*\)`-¶-

.*
$*_
_
$'$*_
_

```

Try it online!

### Explanation

First, we deal with the sign:

```
M!`-

```

matches all `-` in the string and returns them separated by newlines

```
*\)`-¶-

```

(with a following empty line)
`*\)` means the result of this and the previous stages should be printed without a newline, and then the string reverted to what it was before (the input string). The remaining part removes two `-` separated by a newline.

Then we convert the first number to unary:

```
.*
$*_

```

(there's a space at the end of the first line). We use `_` as our unary digit in this case, because the standard digit `1` can be present in the second number, and this would conflict later.

Now we get to the actual multiplication:

```
_
$'$*_

```

Each `_` is replaced by the unary representation of everything following it (still using `_` as the unary digit). Since conversion to unary ignores non-digit characters, this will repeat the unary representation of the second number for "first number" times. The second number will remain in decimal representation at the end of the string.

In the end, with a single `_` we return the number of `_` in the string, which will be the result of the multiplication.

---

Previous answer: (warning: outputs an empty string when it should output `0`)

## Retina,  45  42 41 bytes

Let's play a game! Multiply relative numbers with a language which has no arithmetic operators and limited support only for natural numbers... Sounds funny :)

```
O^`^|-
--

\d+
$*
1(?=1* (1*))?
$1
1+
$.&

```

### Explanation

The first three lines deal with the sign:

```
O^`^|-

```

This sorts `O` and then reverses `^` all strings matching the regex `^|-`. In practice this matches the empty string at the start, and the eventual minus sign before the second number, and reorders them placing the empty string in the place of the minus. After this, all `-` are at the beginning of the string, and a pair of them can be removed easily with the next two lines.

After that, we use a builtin to convert numbers to unary representation, and then comes the actual multiplication:

```
1(?=1* (1*))?
$1

```

We match any `1`, and substitute each of them with all the `1` after a following space. Each digit of the first number will be replaced by the full second number, while each digit of the second number will be replaced by the empty string.

The last part is again a builtin to convert back from unary to decimal.

Try it online!
> 19 votes

# Answer
# Brain-Flak, 56 bytes

```
([({}<([({})<>])<>>)<>]){({}[()]<(({})<({}{})>)>)<>}{}{}

```

This must be run as a full program as it is not stack clean and the inputs must be the only elements in either stack.

Try it online!

---

**Explanation:** (call the inputs x and y)

Part 1:

```
([({}<([({})<>])<>>)<>])

([                    ]) # Push negative x on top of:
      ([      ])         # negative y. After...
  ({}<            >)     # pushing x and...
        ({})             # y...
            <>  <>  <>   # on the other stack (and come back)

```

At this point we have \[x,y\] on one stack and \[-x,-y\] on the other.

Part 2:

```
{({}[()]<(({})<({}{})>)>)<>}{}{}
{                          }     # Loop until x (or -x) is 0
 ({}[()]<              >)        # Decrement x
         (({})<      >)          # Hold onto y
               ({}{})            # Add y and the number under it (initially 0)
                         <>      # Switch stacks
                            {}{} # Pop x and y leaving the sum

```
> 15 votes

# Answer
## JavaScript (ES6), 9 bytes

ES6 has a dedicated function for 32-bit integers, faster than the more generic `*` operator.

```
Math.imul

```

Incidentally, this is just as long as:

```
a=>b=>a*b

```
> 13 votes

# Answer
# Brain-Flak, ~~56~~ ~~54~~ 52 bytes

*2 bytes saved thanks to a mistake caught by Nitrodon*

```
({}(<()>)<>)({<([{}({}())])><>([{}]([{}]))<>}<{}{}>)

```

Try it online!

# Stack clean version, ~~62~~ 60 bytes

```
({}(<()>)(<>))({<([{}({}())])><>([{}]([{}]))<>}<{}{}<>{}{}>)

```

Try it online!

## Explanation

*This explanation is more of an explanation of the algorithm involved and leaves out any actual code. It assumes that you know how to read Brain-Flak proficiently. If you need help understanding either the code or the algorithm I would be happy to edit or respond if you leave a comment.*

This is a little bit of a strange one and uses some weird math that just barely works out. The first thing I did was to make a loop that would always terminate in **O(n)** steps. The normal way to do this is to put **n** and **-n** on opposite stacks and add one to each until one hits zero, however I did it in a slightly stranger way. In my method I put a counter underneath the input and each step I increment the counter add it to **n** and flip the sign of **n**.

Let's walk through an example. Say **n = 7**

```
7  -8   6  -9   5 -10   4 -11   3 -12   2 -13   1 -14   0
0   1   2   3   4   5   6   7   8   9  10  11  12  13  14

```

I won't prove it here but this will always terminate for any input and will do so in about **2n** steps. In fact it will terminate in **2n** steps if **n** is positive and **2n-1** steps if **n** is negative. You can test that out here.

Now we have about **2n** steps in our loop how do we multiply by **n**? Well here have some math magic. Here's what we do: We make an accumulator, each step of the process we add the second input (**m**) to the accumulator and flip the sign of both of them, we then push the total over all the loops that occur, this is the product.

Why on earth is that the case?

Well lets walk through an example and hopefully it will become clear. In this example we are multiplying **5** by **3**, I will show only the important values

```
total       -> 0  -5   5 -10  10 -15  15
accumulator -> 0  -5  10 -15  20 -25  30
m           -> 5  -5   5  -5   5  -5   5

```

Hopefully the mechanism is apparent here. We are stepping through all the multiples of **m** in order of their absolute values. You will then notice that the **2nth** term is always **m * n** and the term before always **-m * n**. This makes it so that our looping perfectly lines up with the results we want. A bit of a happy coincidence ;)
> 9 votes

# Answer
# Dyalog APL, 1 byte

`×` takes one number on the left, and one on the right

`×` ... or even multiple numbers on the left or on the right or on both sides

`×/` multiplies all numbers in a list

`×/¨` multiplies the pairs in a given list

`×/∊` mulitplies all numbers in an array

This applies to all arithmetic functions, arrays of all sizes and ranks, and numbers of all datatypes.
> 8 votes

# Answer
## Hexagony, 9 bytes

```
?{?/*!@'/

```

Try it online!

This is actually fairly straightforward. Here is the unfolded version:

```
  ? { ?
 / * ! @
' / . . .
 . . . .
  . . .

```

The `/` just redirect the control flow to the second line to save bytes on the third. That reduces the code to this linear program:

```
?{?'*!@

```

This linear code on its own would actually be a valid solution if the input was limited to strictly positive numbers, but due to the possibility of non-positive results, this isn't guaranteed to terminate.

The program makes use of three memory edges in a Y-shape:

```
A   B
 \ /
  |
  C

```

The memory pointer starts on edge `A` pointing towards the centre.

```
?   Read first input into edge A.
{   Move forward to edge B.
?   Read second input into edge B.
'   Move backward to edge C.
*   Multiply edges A and B and store the result in C.
!   Print the result.
@   Terminate the program.

```

I ran a brute force search for 7-byte solutions (i.e. those that fit into side-length 2), and if I didn't make a mistake (or there's a busy-beaver-y solution that takes a long time to complete, which I doubt) then a 7-byte solution doesn't exist. There might be an 8-byte solution (e.g. by reusing the `?` or using only one redirection command instead of two `/`), but that's beyond what my brute force search can do, and I haven't found one by hand yet.
> 8 votes

# Answer
# R, 3 bytes

```
'*'

```

This is a function which takes exactly two arguments. Run as `'*'(a,b)`.

See also `prod` which does the same thing but can take an arbitrary number of arguments.
> 8 votes

# Answer
# ArnoldC, 152 bytes

```
HEY CHRISTMAS TREE c
YOU SET US UP 0
GET TO THE CHOPPER c
HERE IS MY INVITATION a
YOU'RE FIRED b
ENOUGH TALK
TALK TO THE HAND c
YOU HAVE BEEN TERMINATED

```

Try it online!
> 8 votes

# Answer
# Piet, 16 bytes

```
5bpiaibpikibptai

```

Online interpreter available here.

## Explanation

To run, paste the code above in the text box on the right side of the linked page. Below is a graphical representation of this code with codel size 31. The grid is for readability and may interfere with traditional Piet interpreters.
The code runs linearly from left to right, going along the top of the image until the first green block, where program flow moves to the middle row of codels. The white lone white codel is necessary for program flow. It could be replaced with a codel of any color other than green or dark blue, but I have chosen white for readability.

```
Instruction    Δ Hue    Δ Lightness    Stack
-----------    -----    -----------    -----
In (Number)    4        2              m
In (Number)    4        2              n, m
Multiply       1        2              m*n
Out (Number)   5        1              [Empty]
[Exit]         [N/A]    [N/A]          [Empty]

```

If you think that text is not the best way to represent a Piet program or have an issue with the byte size of Piet programs in general, please let your opinion be known in the discussion on meta.
> 7 votes

# Answer
# BitCycle `-U`, 68 bytes

```
  >    > v
 ?+ >  +
Bv ?^ v ~
 \  v<CB~\v
 Cv  ^  <\/
^ <@=!   <
0A^

```

Try it online!

Multiplying two numbers is not a trivial problem in BitCycle, especially when signs need to be handled! This is my second attempt; the first one (essentially same algorithm, different layout) was 81 bytes, so it's quite possible this one could be shortened too.

The program takes the two numbers as command-line arguments and outputs to stdout. The `-U` flag is to convert the decimal numbers to signed unary, since BitCycle knows only of 0's and 1's.

## Explanation

This explanation assumes you understand the basics of BitCycle (see Esolangs or the GitHub readme). I'll base my explanation on this ungolfed version, seen here computing `-2` times `3`:

### Overview

Signed unary numbers consist of the sign (`0` for nonpositive, empty for positive) followed by the magnitude (a number of `1`s equal to the number's absolute value). To multiply two of them, we need to XOR the signs (output a `0` if exactly one of them is `0`, or nothing if both or neither are) and then multiply the magnitudes (and output that many `1`s). We'll achieve the multiplication by repeated addition.

### Sign bits

Starting from the two sources `?`, we split off the signs from the magnitudes using `+`. `0`s (sign bits) turn left and are directed along the top row, while `1`s (magnitudes) turn right and end up in the two `B` collectors.

The section that handles the signs looks like this:

```
  v

  \  v
> \  /

! <

```

If both numbers are nonpositive, two `0` bits come in from the top `v`. The first one reflects off the top `\`, is sent southward, and reflects off the `/`. Meanwhile, the second bit passes through the deactivated top `\` and reflects off the bottom `\`. The two bits pass each other, go straight through the now-deactivated splitters on the bottom row, and go off the playfield.

If only one of the numbers is nonpositive, one `0` comes in from the top. It bounces around all three splitters and ends up going northward again, until it hits the `v` and is once more sent south. This time, it passes through the deactivated splitters and reaches the `<`, which sends it into the sink `!`.

### Loops to store the magnitudes

The magnitude of the first number goes into the `B` collector in this section:

```
B v
  \
  C v
^   <

0 A ^

```

Before the `B` collector opens, the `A` collector releases the single `0` that was placed in it, which then goes onto the end of the queue in `B`. We'll use it as a flag value to terminate the loop when all the `1` bits in `B` are gone.

Each time the `B` collectors open, the `\` splitter peels off the first bit from the queue and sends it to the processing logic in the middle. The rest of the bits go into `C`, and when the `C` collectors open, they are sent back into `B`.

The magnitude of the second number goes into the `B` collector in this section:

```
v   ~
C B ~
    <

```

When the `B` collectors open, the bits go into the bottom dupneg `~`. The original `1` bits turn right and are sent west into the processing logic in the middle. The negated copies (`0`s) turn left and immediately hit another dupneg. Here the `0`s turn right and go off the playfield, while the (now doubly) negated `1`s turn left and are sent into `C`. When `C` opens, they go back into `B`.

### Repeated addition

The central processing logic is this part:

```
   v
   v

@  =  !

```

Bits from both loops (one from the western side, and everything from the eastern side) are sent south into the switch `=`. The timing has to be set up so that the bit from the western loop gets there first. If it is a `1`, the switch changes to `}`, sending the following bits eastward into the sink `!` to be output. Once all the `1`s are gone, we get the `0`, which changes the switch to `{`. This sends the following bits into the `@`, which terminates the program. In short, we output the (unary) magnitude of the second number as many times as there are `1`s in the (unary) magnitude of the first number.
> 7 votes

# Answer
# MATLAB, ~~5~~ 4 bytes

```
@dot

```

`dot` takes the dot product of two vectors of equal length. If we feed it with two scalars, it will simply multiply the two numbers.

`prod` takes the product of the values in all rows of each column of a matrix. If the matrix is one-dimensional (i.e. a vector), then it acts along the non-singleton dimension, taking the product of all elements in the vector.

`dot` is one byte shorter than `prod` which is one byte shorter than the even more obvious builtin `times`.

Call it as such:

```
@dot
ans(3,4)
ans =
   12

```
> 6 votes

# Answer
# Java 8, ~~10~~ 9 bytes

```
a->b->a*b

```

Try it here.

# Java 7, 31 bytes

```
int c(int a,int b){return a*b;}

```

Try it here.

As full program **(~~99~~ 90 bytes)**:

```
interface M{static void main(String[]a){System.out.print(new Long(a[0])*new Long(a[1]));}}

```

Try it here.
> 6 votes

# Answer
# Python 3, 11 bytes

```
int.__mul__

```

Try it online!

Also works for integers under `2**32` in Python 2.
> 6 votes

# Answer
# TI-Basic, 2 bytes

Very straightforward.

```
prod(Ans

```
> 6 votes

# Answer
# Intel 8080 machine code, MITS Altair 8800, 28 bytes

This implements binary multiplication on the Intel 8080 CPU (c. 1974) which did not have multiplication or division instructions. Inputs are 8-bit values and the product is a 16-bit value returned in the `BC` register pair.

Here is the machine code along with step-by-step instructions to load the program into an Altair 8800 using the front panel switches.

```
Step    Switches 0-7    Control Switch  Instruction Comment
1                       RESET
2       00 001 110      DEPOSIT         MVI  C, 5   Load multiplier into C
3       00 000 101      DEPOSIT NEXT                value is 5
4       00 010 110      DEPOSIT NEXT    MVI  D, 16  Load multiplicand into D
5       00 010 000      DEPOSIT NEXT                value is 16
6       00 000 110      DEPOSIT NEXT    MVI  B, 0   clear B register (high byte of result)
7       00 000 000      DEPOSIT NEXT
8       00 011 110      DEPOSIT NEXT    MVI  E, 9   set loop counter E multiplier size
9       00 001 001      DEPOSIT NEXT                (8 bits + 1 since loop ends in middle)
10      01 111 001      DEPOSIT NEXT    MOV  A, C   move multiplier into A for shift
11      00 011 111      DEPOSIT NEXT    RAR         shift right-most bit to CF
12      01 001 111      DEPOSIT NEXT    MOV  C, A   move back into C
13      00 011 101      DEPOSIT NEXT    DCR  E      decrement loop counter
14      11 001 010      DEPOSIT NEXT    JZ   19 00  loop until E=0, then go to step 27
15      00 011 001      DEPOSIT NEXT
16      00 000 000      DEPOSIT NEXT
17      01 111 000      DEPOSIT NEXT    MOV  A, B   move sum high byte into A
18      11 010 010      DEPOSIT NEXT    JNC  14 00  add if right-most bit of
19      00 010 100      DEPOSIT NEXT                multiplier is 1, else go to 22
20      00 000 000      DEPOSIT NEXT
21      10 000 010      DEPOSIT NEXT    ADD  D      add shifted sums
22      00 011 111      DEPOSIT NEXT    RAR         shift right new multiplier/sum
23      01 000 111      DEPOSIT NEXT    MOV  B, A   move back into B
24      11 000 011      DEPOSIT NEXT    JMP  08 00  go to step 10
25      00 001 000      DEPOSIT NEXT
26      00 000 000      DEPOSIT NEXT
27      11 010 011      DEPOSIT NEXT    OUT  255    display contents of A on data panel
28      11 111 111      DEPOSIT NEXT
30      01 110 110      DEPOSIT NEXT    HLT         Halt CPU
31                      RESET                       Reset program counter to beginning
32                      RUN
33                      STOP

```

Try it online!

If you've entered it all correctly, on the machine state drawer in the simulator your RAM contents will look like:

```
0000    0e 05 16 10 06 00 1e 09 79 1f 4f 1d ca 19 00 78
0010    d2 14 00 82 1f 47 c3 08 00 d3 ff 76

```

**Input**

Multiplier in `C` register, and multiplicand into `D`. The stock Altair has no `STDIN` so input is by front panel switches only.

**Output**

The result is displayed on the `D7`-`D0` lights (top right row) in binary.

`5 x 16 = 80 (0101 0000)`

`4 x 5 = 20 (0001 0100)`

`7 x 9 = 63 (0011 1111)`

`8 x -9 = -72 (1011 1000)`

*Compatibility note: this should also run on the IMSAI 8080, though currently untested.*
> 6 votes

# Answer
## Pyth, 2 bytes

```
*E

```

Try it here!

Pyth's automatic evaluation gets in the way here. To get around it, I'm using explicit evaluation for one of the arguments
> 5 votes

# Answer
# PHP, 21 bytes

```
<?=$argv[1]*$argv[2];

```

takes input from command line arguments. Also works with floats.
> 5 votes

# Answer
## Retina, ~~39~~ 35 bytes

*Thanks to Leo for letting me use an idea of his that ended up saving 4 bytes.*

```
[^-]

*\)`--

.+
$*
\G1
_
_|1+
$'
1

```

Input is linefeed-separated.

Try it online! (Space-separated test suite for convenience.)

### Explanation

The first two stages print a minus sign if exactly one of the two inputs is negative. They do this without actually changing the input. This is done by grouping them in the second stage with `)` and turning them into a dry-run with `*`. The `\` option on the second stage prevents printing a trailing linefeed.

```
[^-]

```

First, we remove everything except the minus signs.

```
*\)`--

```

Then we cancel the minus signs if there are two of them left.

```
.+
$*

```

Now we convert each line to the unary representation of its absolute value. This will get rid of the minus sign because `$*` only looks for the first non-negative number in the match (i.e. it doesn't know about minus signs and ignores them).

```
\G1
_

```

The first line is converted to `_`, by matching individual `1`s as long as their adjacent to the previous match (hence, we can't match the `1`s on the second line, because the linefeed breaks this chain).

```
_|1+
$'

```

This performs the actual multiplication. We replace each `_` (on the first line) as well as the entire second line everything *after* that match. The `_` matches will therefore include the entire second line (multiplying it by the number of `0`s in the first line), and the second line will be removed because there is nothing after that match. Of course the result will also include some junk in the form of `_`s and linefeeds, but that won't matter.

```
1

```

We finish by simply counting the number of `1`s in the result.
> 5 votes

# Answer
# PigeonScript, 1 byte

```
*

```

Explanation:
`*` looks to the stack to see if there is anything there. If not, it prompts for input and multiplies the inputs together
> 4 votes

# Answer
# Perl 6, 4 bytes

```
&[*]

```

This is just the ordinary infix multiplication operator `*`, expressed as an ordinary function. As a bonus, if given one number it returns that number, and if given no numbers it returns `1`, the multiplicative identity.
> 4 votes

# Answer
# Owk, 11 bytes

```
λx.λy.x*y

```

This can be assigned to a function like this:

```
multiply:λx.λy.x*y

```

and called like this:

```
result<multiply(a,b)

```
> 4 votes

# Answer
# \>\<\>, 5 Bytes

```
i|;n*

```

Takes input as an ascii character, outputs a number.

### Explanation:

```
i                        | Get input.
 |                       | Mirror: Change the pointer's direction.
i                        | Get input again.
    *                    | Loop around to the right side. Multiply
   n                     | Print the value on the stack, as a number
  ;                      | End the program

```

You could also do

```
ii*n;

```

But I feel my solution is *waaay* cooler.

Another possibility is dropping the semicolon, which would result in the pointer bouncing off the mirror, hitting the print command, and throwing an error since the stack is empty.
> 4 votes

# Answer
# BitCycle, 33 bytes

```
 >>\/v
?+ \/
? +~!/
 A + =
  ~BC^

```

Try it online!

This takes input via command line args, with the `-U` flag to convert it into signed unary.

This only uses one pair of collectors in the main loop by representing the first number with unary `0`s and the other number with `1`s, allowing us to store both in the same collector.

### Explanation:

No fancy gifs sorry. This also assumes you have at least a passing familiarity with BitCycle.

```
?+       Get both numbers as signed unary from the ? sources
? +      Sends 0s upwards (0s signify that the number is negative), and 1s downwards

```

```
  >>\/v  Given either 0, 1 or 2 zeroes
  + \/
   + !/  Push a 0 (signifying negative) if there is exactly one 0

```

```
 +      Push the first number as unary 1s to collector A
  +     Push the second number as unary 0s to collector B
 A +    Then push the first number into collector B
  ~BC   Then push both into collector C

```

```
     /    If the first bit out of collector C is 0
   + =    Turn the = into { and discard the first bit
   BC^    All the 0s go back to collector B, and the 1s go up

```

```
  +~!     Duplicate and print all the 1s
   +      Push the duplicates back into B
  ~B

```

This loops until it runs out of `0s` in the collector, then the `=` turns into a `}` and discards the rest of the `1` bits.
> 4 votes

# Answer
## C#, 10 bytes

```
a=>b=>a*b;

```

It's just a simply multiplication.
> 3 votes

# Answer
# Jelly, 1 byte

```
×

```

Try it online!

Obligatory Jelly submission.
> 3 votes

# Answer
# Haskell, 3 bytes

```
(*)

```

Call it as a function: `(*) a b`

or as an operator: `a * b` .
> 3 votes

# Answer
## Clojure, 1 byte

```
*

```

:P As a bonus this works on any number of arguments:

```
[(*)
 (* 2)
 (* 2 3)
 (* 2 3 4)
 (* 2 3 4 5)] => [1 2 6 24 120]

```

Interestingly you can easily get its source code:

```
(source *)
(defn *
  "Returns the product of nums. (*) returns 1. Does not auto-promote
  longs, will throw on overflow. See also: *'"
  {:inline (nary-inline 'multiply 'unchecked_multiply)
   :inline-arities >1?
   :added "1.2"}
  ([] 1)
  ([x] (cast Number x))
  ([x y] (. clojure.lang.Numbers (multiply x y)))
  ([x y & more]
     (reduce1 * (* x y) more)))

```
> 3 votes

# Answer
# C# - 11 bytes

```
(a,b)=>a*b;

```

Anonymous lambda.
> 3 votes

# Answer
# LOLCODE, 95 bytes

```
HAI 1.3
I HAS A J
GIMMEH J
I HAS A Q
GIMMEH Q
I HAS A T
T R PRODUKT OF J AN Q
VISIBLE T
KTHXBYE

```

Try it online!
> 3 votes

# Answer
# In Floop, 70 bytes, pos. only

```
r+s[r-]r[-n?o?s+]r+s-[@[-r-n+]r[s-o-[r-]r[-@;]]]r[n[-r@+r-@+]r[-s+]]s+

```

I wrote this in three parts:

* Outer part: `r+s[r-]r[-n?o?s+]r+s-[A]r[B]s+` (based off of my add-two-numbers program)
* `A`: `@[-r-n+]r[s-o-[r-]r[-@;]]` (copies `@1` to `n`, `1` at a time)
* `B`: `n[-r@+r-@+]r[-s+]` (copies `n` to `@1` and adds it to `@1`, `1` at a time)

This forms a loop, until `o-` is `0` after `A` runs. Then, `@0` is printed.

Try It Online!
> 3 votes

# Answer
## Labyrinth, 5 bytes

```
??*!@

```

Try it online!

Input format can be almost anything (this simply multiplies the first two decimal integers it finds in the input).
> 2 votes

# Answer
# 05AB1E, 1 byte

```
*

```

Try it online!
> 2 votes

# Answer
# Japt, 1 byte

```
×

```

Here is a non-1 byte solution

```
U*V

```

Run it here
> 2 votes

# Answer
# FOG, 3 bytes

```
^^*

```

Takes input twice and multiplies. I can also just use `*` and call it a function, but for the sake of uniqueness I decided not to.
> 2 votes

# Answer
# CJam, 3 bytes

```
{*}

```

Try it online!
> 2 votes

# Answer
# SimpleTemplate, 59 bytes

Since this language doesn't have math (yet), it requires a loop and an increment, to generate the result.

```
{@setx 0}{@for_ from1 toargv.0}{@incbyargv.1 x}{@/}{@echox}

```

Ungolfed, with whitespace:

```
{@set prod 0}
{@for _ from 1 to argv.0}
    {@inc by argv.1 prod}
{@/}
{@echo prod}

```

---

This answer was written to run on the commit 2166e6bdac44064ec5594d511528d1469ea3feef from 2017-01-07.

On the latest version (commit 9857e4277536555d0b06e8ef9c00ba0c7f23cf6d), one could do like this (50 bytes):

```
{@for_ from1 toargv.0}{@incbyargv.1 x}{@/}{@echox}

```

This will show a warning saying that the index `'x'` doesn't exist.

---

With a new update (commit 552216290ec0d8cb9893e08d89601c4d67fcc3d1), the code can be written as (21 bytes):

```
{@set*_ argv}{@echo_}

```
> 2 votes

# Answer
## C#, ~~112~~ 63 bytes

Saved 49 bytes, thanks to milk

```
a=>b=>{int r=0,i=0,k=0<b?1:-1;for(;i!=b;i+=k)r+=a;return r*k;};

```

I've already posted an answer using the multiplication operator, but here I do it with a loop.
> 2 votes

# Answer
# Math++, 3 bytes

```
?*?

```

(Why is there a 30 character minimum?)
> 2 votes

# Answer
# Loader, 124 bytes

```
~A:set B =@IN
~A:set A =@IN
B:~C:decr B
~C:set C =A
C:incr D
C:decr C
set G =0
B:incr G
C:incr G
G:load m
~B:print D
~B:exit

```

Run from `m.ldr`, or alternatively replace the `m` in the third line from the end with the name of the file.
> 2 votes

# Answer
# √ å ı ¥ ® Ï Ø ¿, 4 bytes

```
II*o

```

Almost identical to my answer for the Add two numbers question.

### Explanation

```
I    › Take input from the command line, evaluate and push to stack
 I   › Take another input
  *  › Times the two values together and push to stack
   o › Output the first value on the stack

```
> 2 votes

# Answer
# Cubix, 6 bytes

```
OI|u*@

```

This is a slightly different algorithm than the "Add Two Numbers" Cubix solution. It would have been trivial to simply use that solution with a `*` instead of a `+` but the flow here is slightly different.

On a cube:

```
  O
I | u *
  @

```

rather than using the control flow `\` or `/` and then duplicating `I` to read in the inputs, I opted to use `|` to pass over the `I` twice instead, which forced me to use `u` to get to the output commands.

The commands are:

* `I` : read in input
* `|` : reflect IP left-right
* `I` : read in input
* `*` : multiply
* `u` : do a right-hand u-turn (i.e., two right turns)
* `O` : output as a number. the IP is now facing North, and has a right turn to make, which takes it to
* `*` : multiply the top two numbers (essentially a no-op)
* `@` : terminate program.

Similarly to the addition solution, the cube's symmetry allows the following solution.

```
  @
I | U *
  O

```

Additionally, replacing `|` with `<` or `T` will work as well.

Try it online!
> 2 votes

# Answer
# x86\_64 machine language (Linux), ~~5~~ 4 bytes

```
0:       97                      xchg   %edi,%eax
1:       f7 ee                   imul   %esi
3:       c3                      retq

```

To Try it online!, compile and run the following C program.

```
#include<stdio.h>

int f(int a,int b){return a*b;}
const char g[]="\x97\xf7\xee\xc3";

int main(){
  for( int i = 0; i < 10; i++ ) {
    for( int j = 0; j < 10; j++ ) {
      printf( "%d %d %d %d\n", i, j, f(i,j), ((int(*)())g)(i,j) );
    }
  }
}

```
> 2 votes

# Answer
# JavaScript (Node.js), 39 36 bytes

-3 bytes thanks to @MartinEnder

```
f=(a,b)=>b?b>0?a+f(a,b-1):-f(a,-b):0

```

Try it online!

This is me having fun , it won't win any competitions but it uses recursion and doesn't use the `*` operator.

# Explanation :

```
f = (a,b) => {
    if (b == 0) {
        return 0;
    }
    if (b > 0) {
        return(a + f(a , b-1))
    }
    else {
        return(-f(a , -b))
    }
};

```
> 2 votes

# Answer
# International Phonetic Esoteric Language, 4 bytes (WIP language) (OLD)

```
ɪɪθo

```

No TIO interpreter yet, but is runnable by cloning the repository above, and calling `python3 main.py "code here"`.

```
ɪɪθo
ɪ    ; push int
 ɪ   ; push int
  θ  ; pop, pop, push a * b
   o ; pop, print

```
> 2 votes

# Answer
# Intcode, 22 bytes

```
3,0,3,1,2,0,1,2,4,2,99

```

Fairly basic. IO boilerplate takes up most of the bytecount, given that the language has multiplication as a builtin (`2,0,1,2` would be a valid answer, if snippets were allowed)
> 2 votes

# Answer
# Brainetry, 257 bytes

Golfed version. A more interesting submission follows.

```
a b c d e f
a b c
a b c d e f
a b
a b c d e f g h
a b c d e
a b c
a b c d e f g h
a b c d e
a b c
a b c d
a b c
a b c d
a b
a b
a b c d e f g h i

a b c d e f g h
a b c d e
a b
a b
a b c d
a b c
a b c
a b c d e f g h i
a
a b c d e f g h i

a b
a b c d e f g

```

To try this online, follow this repl.it link, paste the code in the `btry/replit.btry` file and press the green "Run" button.

Ungolfed version:

```
This is probably my first Brainetry
program that makes
non trivial use of some of
my new
experimental operators that I introduced, expanding the base
brainfuck implementation this is built
upon. We will
see if this made any difference or not.
This program works in a
rather simple way.
First I read inputs.
Then I have
to nest two loops.
One loop,
two loops.
The two loops will be nested, which is nice.

One loop will have me decrement one of
the user inputs, then I
move left,
(not right)
and successively decrement the
cell I'm at.
I do this
and keep accumulating in another cell. If I loop
with
enough dedication, the final result will be stored someplace.

Legend says,
the correct place is the second cell.

```
> 2 votes

# Answer
# Foam, 10 bytes

```
;# ;# * .#

```

Try it online!

I'm gonna be using this lang for the next few weeks

`;#` returns an integer from input.

`*` is...multiplication.

`.#` is output.
> 2 votes

# Answer
# LOLCODE, 77 bytes

```
HAI 1
I HAS A a
I HAS A b
GIMMEH a
GIMMEH b
VISIBLE PRODUKT OF a AN b
KTHXBYE

```

I has a bettr answar cuz I used `PRODUKT OF a AN b` in da `VISIBLE` direktly instaed of in an variable !!1!

Try it Online!
> 2 votes

# Answer
# Piet, ~~10~~ 9 codels

Original image

The 2 white codels on the side can be replaced with any color. Most straightforward solution, literally "read 2 numbers, multiply, output", I really don't know why this answer is more complicated.

Update: saved 1 codel by switching from a 2x5 to a 3x3 grid
> 2 votes

# Answer
# rusty\_deque, 2 bytes

Two variants: one for the left of the deque, one for the right of the deque.

```
*! # left
*~ # right

```
> 2 votes

# Answer
## QBIC, 13 bytes

```
::[a|p=p+b}?p

```

Adapted my code from 'add two numbers'. This starts a loop and adds 'y' to itself 'x' times.

But seriously, a 6-byte solution is `::?a*b`. `:` gets a cmd line parameter and class it 'a', the next `:` does the same for 'b', 'cause 'a' is already taken. `*` multiplies, and `?` prints the result. This is virtually identical to this answer, only the operator is different.

---

Since some time now, QBIC can in-line the 'get var from cmd line'-command, and the above would be `?:*:`, at 4 bytes.
> 1 votes

# Answer
# Python 2, 14 bytes

```
lambda a,b:a*b

```

Try it online!

I feel like this is **too much** shorter than `from operator import*;mul`.
> 1 votes

# Answer
## Pyth, 4 bytes

```
M*GH

```

Defines a function named `g`, can call it in this way - `gn1 n2`, where n1 and n2 are the numbers.

Try it here!

Previous solutions using 5 bytes.

`*.).Q` and `*hQeQ`.
> 1 votes

# Answer
## OCaml, 4 bytes

```
( *)

```

The space after the first parenthesis is needed because `(*` starts a comment in OCaml.

Try it online!
> 1 votes

# Answer
# Scala, 2 bytes

```
_*

```

This is a curried lambda / anonymous function. To use it, assign it to a variable:

```
val f:(Int=>Int=>Int)=_*
f(7)(9)                   //returns 63

```

## How it works:

In Scala, the underscore can be used as a shorthand for the arguments.

`_*_`, for example, is syntactic sugar for `(a,b)=>a*b`.

Removing the second underscore is treating the method `*` of the first argument as a function, results in a curried function that multiplies its arguments.
> 1 votes

# Answer
# Pushy, 2 bytes

```
*#

```

**Try it online!**

As you might have guessed, `*` is the multiplication operator, and `#` prints the result.
> 1 votes

# Answer
# dc, 3

```
?*p

```

Try it online (wrapped in a shell script to run all given tests).

Note `dc` thinks underscores (`_`) are -ve signs.
> 1 votes

# Answer
# Befunge-93, 5 bytes

```
&&*.@

```

Try it online!

`&&` gets two integers and pushes them to the stack; `*` multiplies them (duh); `.` prints the numeric value of the top of the stack, and `@` ends the program.
> 1 votes

# Answer
# Emacs Lisp, 3 bytes

This is just a function.

```
(*)

```

Usage:

```
(* num1 num2)

```
> 1 votes

# Answer
# Noodel, noncompeting 1 byte

Did not have a full complete version of *Noodel* until after this challenge, and did not even have multiplication with a single character until recently.

```
×

```

Try it:)

### How it works

```
  # Input is implicitly pushed onto the stack with the first element (a) pushed first and the second last (b) making it the top.
× # Pops off two items producing => (b * a) and pushes on the result.
  # The top of the stack is popped off at the end of the program and pushed to stdout.

```

```
<div id="noodel" code="×" input="2,-4" cols="5" rows="5"></div>

<script src="https://tkellehe.github.io/noodel/noodel-latest.js"></script>
<script src="https://tkellehe.github.io/noodel/ppcg.min.js"></script>
```
> 1 votes

# Answer
# Microscript, 4 bytes

```
isi*

```

# Microscript II, also 4 bytes

```
FsF*

```
> 1 votes

# Answer
# Swift 3, 40 bytes

```
func f(_ a:Int,_ b:Int)->Int{return a*b}

```

Takes two parameter, return the two `Int`s multiplied. Called like this:

```
f(2, 4)

```
> 1 votes

# Answer
# C (gcc), 98 bytes

```
m(i,j){i=(i&j)<0?m(O(~i,1),-j):i?O(m(i>>1,O(j,j)),i&1?j:0):0;}O(i,j){i^=j,j&=i^j;i=j?O(i,j<<1):i;}

```

I don't think I have much of a chance against the other entries.

Try it online!
> 1 votes

# Answer
# C, 56 bytes

```
main(int i,char**a){printf("%d",atoi(*++a)*atoi(*++a));}

```

*compile*

```
> gcc source.c

```

*usage*

```
> a 8 7

```

*or*

```
> ./a.out 8 7

```

*explanation*

```
main(int i,char**a) {  /* Begin program and accept command-line arguments.    */
   printf("%d",        /* First argument prints the (final) decimal result.   */
         atoi(*++a)    /* Returns int of program's 2nd command-line argument. */
         *             /* Multiplies the values of the 1st & 2nd arguments.   */
         atoi(*++a)    /* Returns int of program's 1st command-line argument. */
   );
}

```
> 1 votes

# Answer
# Taxi, 442 bytes

```
Go to Post Office:w 1 l 1 r 1 l.Pickup a passenger going to The Babelfishery.Pickup a passenger going to The Babelfishery.Go to The Babelfishery:w 1 l 1 r.Pickup a passenger going to Multiplication Station.Pickup a passenger going to Multiplication Station.Go to Multiplication Station:n 1 r 2 l.Pickup a passenger going to The Babelfishery.Go to The Babelfishery:s 1 r 1 l.Pickup a passenger going to Post Office.Go to Post Office:e 1 l 1 r.

```

Formatted with line breaks for legibility:

```
Go to Post Office:w 1 l 1 r 1 l.
Pickup a passenger going to The Babelfishery.
Pickup a passenger going to The Babelfishery.
Go to The Babelfishery:w 1 l 1 r.
Pickup a passenger going to Multiplication Station.
Pickup a passenger going to Multiplication Station.
Go to Multiplication Station:n 1 r 2 l.
Pickup a passenger going to The Babelfishery.
Go to The Babelfishery:s 1 r 1 l.
Pickup a passenger going to Post Office.
Go to Post Office:e 1 l 1 r.

```
> 1 votes

# Answer
# ZX80 BASIC ~39 bytes

```
 1 INPUT A
 2 INPUT B
 3 PRINT A;"X";B;"=";A*B

```

This program is so simple that it will very likely work on all variants on 8-bit BASIC. However, on the ZX80 (4K ROM) you are limited to integer maths with a signed 16-bit range; so if your answer is \>32767 then it will error and you will not see a result.

To remedy this, install a new ROM onto your Sinclair ZX80 to allow 24-bit floating point maths, or upgrade to a Sinclair ZX81.

Save bytes by refactoring line 3 to:

```
 3 PRINT A*B

```
> 1 votes

# Answer
## Alice, ~~7~~ 6 bytes

```
*/
o@i

```

Try it online!

Follows the same pattern as my solution for addition.
> 1 votes

# Answer
# Jellyfish, 6 bytes

```
P*i
 i

```

Try it online!

P denotes print, then * multiplies the two numbers below and to the right. At the start of execution, the two is are replaced with values from STDIN.
> 1 votes

# Answer
# Lean Mean Bean Machine, 12 bytes

```
OO
ii
 /
*
u

```
> 1 votes

# Answer
# Whitespace, 4 bytes

```

```

In some other languages, you could quote that as `"\t \n"`. Expects two numbers on the stack and leaves the result on the stack.

As a complete program reading from standard input and writing to standard output, it would be 36 bytes:

```

```

Try it online!
> 1 votes

# Answer
# Perl 5, 7 bytes

6 bytes of code + 1 for `-p` flag

```
$_*=<>

```

Try it online!
> 1 votes

# Answer
# Go, 84 bytes

```
package main
import."fmt"
func main(){a,b:=0,0;Scanf("%d%d",&a,&b);Printf("%d",a*b)}

```

Try it online!

Worth mentioning:

* We import the `fmt` package to the global namespace by using `import.`. That way, we can refer to `Scanf` and `Printf` as global functions.
* `a` and `b` are assigned to `0`, as that is shorter than doing `var a,b int`.
> 1 votes

# Answer
# Lua, 32 bytes

```
i=io.read
print(i("*n")*i("*n"))

```

Try it online!

Program reads 2 numbers from STDIN and prints the result to STDOUT.

---

"But shouldn't you use `io.write`?"

Well according to the documentation,

> \[...\] `write` uses the current output file, whereas `print` always uses the standard output. Finally, `print` automatically applies `tostring` to its arguments, so it can also show tables, functions, and `nil`.
> 1 votes

# Answer
# Go, 28 bytes

```
func(a,b int)int{return a*b}

```

Try it online!
> 1 votes

# Answer
# Ruby, 10 bytes

```
:*.to_proc

```

Try it online!

I really thought this might be shorter...
> 1 votes

# Answer
# C#, 27 bytes

```
delegate(a,b){return a*b;};

```
> 1 votes

# Answer
# Aceto, 6 bytes

```
riri*p

```

ri grabs input and converts to integer * multiplies them p prints it Try it online!
> 1 votes

# Answer
# Forked, 5 bytes

```
$$*%&

```

Try it online!

* `$$` \- read two integers
* `*` \- multiply top two stack values
* `%` \- print top of stack as integer
* `&` \- "terminate", prevent IP from wrapping
> 1 votes

# Answer
# FRACTRAN, 22 bytes

```
78/55 5/3 1/5 11/2 5/7

```

Take `7^a*11^b` as input, return `11^b*13^(a*b)`.

Try it online!

This is a golfed version of the wikipedia example.

I'm not sure whether or not extra bytes should be added for input encoding and output decoding.
> 1 votes

# Answer
# Brainfuck, 76 bytes

Not the shortest but my own solution, written a long time ago.

Golfed

```
>[-]>[-]>[-]<<<<[->>>+<<<]>[->+>>+<<<]>[-<+>]>>[-<[-<+<<+>>>]<[->+<]>>]<<<<.

```

Explanation

```
x = x*y
(x)(y)(temp0)(xtemp)(ycount)
Own work! Convoluted solution

,               x
> +++           y=3 (or input)

>[-]>[-]>[-]    set cells to 0
<<<< [->>>+<<<] transfer x to xtemp
> [->+>>+<<<]   transfer y to temp0 and ycount
> [-<+>]        transfer temp0 to y
>>
[               while ycount != 0
 -               ycount decrement
 < [-<+<<+>>>]   transfer xtemp to x and temp0
 < [->+<]        transfer temp0 to xtemp
 >>
]

<<<< .          x (might overflow)

```
> 1 votes

# Answer
# Flobnar, 4 bytes

```
&
*@

```

Try it online!
> 1 votes

# Answer
# Pepe, 19 bytes

```
rEeeREeerEEEEeEreEE

```

Try it online!

Input is `a,b`. Change the "Separated by" box into `,` to work.

**Explanation:**

```
rEeeREee            # take 2 inputs (not in the same stack)
        rEEEEeE     # A*B -> stack r
               reEE # output as number

```
> 1 votes

# Answer
# Commodore BASIC v2 (C64, VIC-20 and some PET models), 27 tokenized BASIC bytes

This version uses the limited `DEF FN` keyword, See description here

```
 0 DEFFNA(B)=A*B:INPUTA,B:PRINTFNA(B)

```

## Commodore BASIC v2, 14 tokenized BASIC bytes

```
 0 INPUTA,B:PRINTA*B

```

Both methods are likely compatible with all 8 BIT BASIC variants on Commodore home computers, but are not tested.
> 1 votes

# Answer
Bourne-shell-based langs all look pretty similar:

# Zsh, 11 bytes

```
<<<$[$1*$2]

```

# Bash, 13 bytes

```
echo $[$1*$2]

```

# Dash/POSIX sh, 15 bytes

```
echo $(($1*$2))

```
> 1 votes

# Answer
# GFortran, ~~51~~ 27 bytes

Fulfils the rules, I suppose integer overflow error is to be expected.

***-24*** *thanks to Ørjan Johansen*

Try It Online!

```
read(*,*)i,j
print*,i*j
end

```
> 1 votes

# Answer
# 3+ bytes in various methods of representing lambda calculus, taking numeral input as Church numerals.

## 19 Bytes, Untyped Lambda Calculus, using named arguments:

```
λx.λy.λz.x(y(z))

```

This is the most verbose version, `.` represents a lambda abstraction and parentheses represent an application

## 9 or 12 Bytes, Lambda Calculus, using De Brujin Indices:

```
λλλ3(2 1)

```

This uses De Brujin Indices instead of variable names, and function application is right-associative and implicit.

Replacing lambda symbols with backslashes (a pretty common form when Unicode is not available) yields us only 6 bytes

It's small, but we can go smaller. Using John Tromp's Binary Lambda Calculus representation, we get the binary representation `0000000111100111010`, or separated into individual parts:

## 3 bytes, Untyped Lambda Calculus, using BLC representation

```
00 00 00 01 1110 01 110 10 xxxxx

```

Where the 5 xs are any padding bits.

## Explanation

These implement the simple `mult` function for Church Numerals in the untyped lambda calculus.

In untyped lambda calculus, EVERYTHING is a function, including numbers. All these functions take a maximum of a single argument. So how do you represent arbitrary numbers? Church encodings!

In Church encoding, numbers are represented by repeated recursion. All numbers `n` are represented by a function taking an argument `f`, and returning a function taking an argument `x`, which returns `f(x)` called `n` times. For example:

```
0: lambda f: lambda x: x
1 = lambda f: lambda x: f(x)
2 = lambda f: lambda x: f(f(x))
3 = lambda f: lambda x: f(f(f(x)))

```

Etc etc.

All inputs and outputs in most lambda calculus systems are in the form of church numerals.

The multiplication function takes 3 arguments and returns the first argument called on the second called on the third:

```
mult = lambda m: lambda n: lambda x: m(n(x))

```

This in lambda calculus simply multiplies the numbers `m` and `n` together.

Calling `mult(2)(3)` using our previous definitions of 2 and 3 results in a function:

```
lambda f: lambda x: f(f(f(f(f(f(x))))))

```

Or 6, the result of our multiplication. All the "golfs" are really just more concise ways of representing untyped lambda calculus.
> 1 votes

# Answer
# brainfuck, 29 bytes

```
,<,[>[>+>+<<-]>[<+>-]<<-]>>>.

```

Try it online!

Input and output as character codes. (Example: 5\*7=35)

Code:

```
[Tape: Y, X, temp, solution]
,<,             input X and Y
[               while Y greater than 0
  >[>+>+<<-]    add X to temp and solution
  >[<+>-]       move temp back to X
  <<-           decrement Y
]
>>>.            print solution

```
> 1 votes

# Answer
# MashedPotatoes, 139 bytes

```
 synchronized($ARGV){
 case0.0fof{_->usestrictqw/++i/;goto*read-eval*;SETLOCAL<>}WHILEObject>STDERRs/0.0f//gWENDproc++i{`uniq-c`}{OUTPUT=<>}}

```

MashedPotatoes isn't on TIO, so I linked the Esolangs page for the language. It's an unusual language, so the code description might not make much sense unless you scan the info about cyclical naming conventions on the Esolangs page first. But here goes nonetheless...

I'm breaking the code into lines, but it has to be formatted as listed above to work, since the values of the labels is bound to the line number in the code.

```
synchronized($ARGV){              # Label block, assigns "1" to label 1
  case0.0fof{_->                  # Input block
    usestrictqw/++i/;             # Read first number into register ^A
    goto*read-eval*;              # Shift registers, ^A<-^C<-^E-<^A
    SETLOCAL<>                    # Read second number into register ^A
  }                               # Close input block
  WHILEObject>STDERRs/0.0f//gWEND # Multiply ^A*^E and store in ^E
  proc++i{`uniq-c`}{OUTPUT=<>}    # Print ^E as a number
}                                 # Close label block

```
> 1 votes

# Answer
# Starry, 6 bytes

```
,,  *.
,,      Push input to stack (twice)
    *   Multiply
     .  Output

```
> 1 votes

# Answer
# A0A0, 28 bytes

```
I0A1V0O0
I0V0M0
G-2G-1G-1G-1

```

Adapted from my answer to Add two numbers.

Each number is first put into two separate operands (`V0` instructions) on two lines via the `I0` instructions on each line and then later combined together for adding. After taking input, we jump to the top. The `A1` adds the `V0 O0` onto the next line, to get the following code: `V2 M0 V1 O0`. I've labelled the operands with `V1` and `V2` to represent the different operands. During execution these contain the actual inputs. From there it's simple.

```
V2 M0 V1 O0
V2          ; operand, put into the S0 next to it
   M0       ; multiplies its value to the operand next to it (V1)
      V1    ; operand, put into the O0 next to it
         O0 ; outputs its value as a number

```

The line of jumps at the bottom just goes back to the correct line each time.
> 1 votes

# Answer
# Factor, 1 byte

```
*

```

Try it online!
> 1 votes

# Answer
# Piet \+ ascii-piet, 7 bytes (5×2=10 codels)

```
TAJsJjj

```

Try Piet online!
> 1 votes

# Answer
# Z80 machine code, 5 4 bytes with `djnz`

In Machine Language:

```
81 10 fd c9

```

In Assembly:

```
;8-bit Multiply
;Multiplier in B, multiplicand in C, result in A.
Multiply:
    loop:
        add a, c
        djnz loop
    ret

```

## What is `djnz`?

`djnz` decrements the `B` register (in this case the multiplier), and jumps a certain number of bytes forward or back (in this case, 2 bytes back; essentially jumping to the beginning of the loop), but only if, after being decremented, the `B` register isn't 0.

## Some limitations

This subroutine can only perform 8-bit multiplication, so the result will overflow if it exceeds 0xff.

I believe I have no way of making it do 16-bit multiplication without increasing the byte count.

## Without `djnz`

Here's the code before I added `djnz`:

In Machine Language:

```
81 05 20 fc c9

```

In Assembly:

```
;8-bit Multiply
;Multiplier in B, multiplicand in C, result in A.
Multiply:
    loop:
        add a, c
        inc b
        jr nz, loop
    ret

```

## Testing

I used this snippet of code to test my submission:

```
ld c,4
ld b,10
call Multiply
ld ($1000),a

```
> 1 votes

# Answer
# shell, 14 bytes

```
dc -e"$1 $2*p"

```
> 1 votes

# Answer
# awk, 13 bytes

Simply

```
{print $1*$2}

```
> 1 votes

# Answer
# Swift, ~~25~~ ~~24~~ 20 bytes

```
let t:(_,_)->Int=(*)

```
> 1 votes

# Answer
# Groovy, 10 bytes

```
{x,y->x*y}

```

This is an unnamed closure.

Try it here!
> 0 votes

# Answer
## Ruby, 10 bytes

```
->a,b{a*b}

```

Answer is two characters too short without this text apparently.
> 0 votes

# Answer
# Excel VBA, 8 Bytes

Takes input from cells `A1` and `B1` and outputs to the VBA immediates window

```
?[A1*B1]

```

which is functionally equivalant to

```
Print ActiveSheet.Range("A1").Value * ActiveSheet.Range("B1").Value

```
> 0 votes

# Answer
# ForceLang, 36 bytes

```
def n io.readnum()
io.write n.mult n

```

Another fun use of `def`.
> 0 votes

# Answer
# Rust, 14

I haven't seen Rust quiet often so let's use it.

```
|a:u8,b:u8|a*b

```

This is a lambda expression that takes to 8 bit ints and multiplies them.
> 0 votes

# Answer
# Batch, 57 bytes

```
set "a1=%1" && set "a2=%2" && set x=%a1%*%a2% && echo %x%

```

&&: execute another command.

First command: Set %a1% as the first argument

Second command: Set %a2% as the second argument

Third command: Set %x% as %a1% * %a2%.

Fourth command: Type in the value of %x%.
> 0 votes

# Answer
# SmileBASIC, 13 bytes

```
INPUT A,B?A*B

```

Input should be given as two numbers, separated by a comma.
> 0 votes

# Answer
# Forth, 1 bytes

```
*

```

`*` pops off the top 2 items from the stack, multiplies them and pushes the result.
> 0 votes

# Answer
# QC 4 bytes

`QQGN`

Requires a newer version which must be compiled manually.

```
Q Read number from stdin and push to stack
Q Same as above
G Multiply two numbers from stack
N Pop and print number from stack

```
> 0 votes

# Answer
# Powershell, 17 Bytes

```
param($a,$b)$a*$b

```

takes 2 numbers, returns them multiplied out.
> 0 votes

# Answer
## Maple, 3 bytes

```
`*`

```

Usage:

```
`*`(a,b);

```

Returns:

```
a*b

```

Using this notation, is it possible to supply any number of arguments to the multiplication operator and it will return the product of the sequence.
> 0 votes

# Answer
# Röda 0.11, 11 bytes

```
f&a,b{a*=b}

```

Try it online!

It modifies its first argument (which must be a variable).

# Röda 0.12, 7 bytes (non-competing)

```
{[_*_]}

```

Try it online!

This kind of syntax was not supported at the time the challenge was posted. It's an anonymous function that reads to numbers from the stream
> 0 votes

# Answer
# \>\<\>, 3 + 3 = 6 bytes

```
*n;

```

Invoke as `fish.py -c '*n;' -v 2 -8`, which is why I only count the flag once.
> 0 votes

# Answer
# AHK, 15 bytes

```
1*=%2%
Send,%1%

```

`1` and `2` are, by default, the first two arguments passed in to a program. Sometimes you have to escape them with percent signs so it doesn't confuse the variable `1` with the number one.
> 0 votes

# Answer
# Casio Basic, 6 bytes

```
a*b

```

No surprises there. 3 bytes for the program, and 3 bytes to add `a,b` as parameters.
> 0 votes

# Answer
# HEX, 69 bytes non-competing

```
GBL;
Listen("1");
Listen("2");
Breed("1" * "2");
Scuttle("1");
Write;

```

I have no idea when HEX was created, but I've listed this as non-competing as the language currently has no publicly-available functional interpreter.
> 0 votes

# Answer
# Braingolf, 1 byte

```
*

```

Try it online!

Implicit input, `*` multiplies the last 2 number on the stack and pushes the result, implicit output.

Here's a slightly more interesting one:

# Braingolf, 9 bytes

```
<2->[.]&+

```

Try it online!

Implicit input of `x` and `y`. Subtracts 2 from `x`, (because `[]` is a do-while and we already have one `y`), then duplicates `y` `x` times, finally, sums the entire stack. Implicit output.
> 0 votes

# Answer
# Decimal, 12 bytes

```
81D81D43D301

```

Reads two integers (separated by a space or newline), multiplies them, and prints them to STDOUT.

Ungolfed:

```
81D  ; builtin 1 - read INT to stack
81D  ; builtin 1 - read INT to stack
43D  ; math, multiply (postfix *)
301  ; print from stack to standard output

```

Try it online!
> 0 votes

# Answer
# Triangular, 6 bytes

```
$.$%*<

```

Try it online!

Formats into this triangle;

```
  $
 . $
% * <

```

Without directionals/no-ops, this looks like: `$$*%`

* `$` \- read input as integer
* `*` \- multiply
* `%` \- print as integer
> 0 votes

# Answer
# Carrot, 5 bytes

```
$^F*$

```

Takes the input separated by newlines.

Explanation:

```
$ //Set the string stack to the first line of the input
^ //Change to operations mode
F //Convert to float stack
* //Multiply the stack by
$ //The second line of the input
  //Implicitly output the result

```
> 0 votes

# Answer
# C, 48 bytes

```
main(a,b){scanf("%d%d",&a,&b);printf("%d",a*b);}

```

New to code golf, any suggestions are welcome.
> 0 votes

# Answer
# cQuents, 6 bytes

```
#|1:AB

```

I really need to implement a byte that simply shorthands `#|1:` because every "perform this operation once" challenge uses that as the beginning.

Try it online!

### Explanation

```
#|1      Add a 1 to the end of the user's input, it will be n
   :     Mode : (sequence 1: given n, output the nth item in the sequence)
    AB   Each item in the sequence is the first input times the second input

```
> 0 votes

# Answer
# Cubically, ~~8~~ 7 bytes

```
$:7$*7%

```

Explanation:

```
$        read input
 :7      set notepad to input
   $     read input
    *7   multiply notepad by input
      %  print result

```

Try it online!
> 0 votes

# Answer
# Tcl, 10 bytes

```
expr $a*$b

```

Try it online!

---

If one states

```
namespace path tcl::mathop

```

before then `*` acts like a procedure:

# Tcl, 7 bytes

```
* $a $b

```

Try it online!
> 0 votes

# Answer
# Implicit, 1 byte

```
*

```

Implicit input of two integers, multiply them, implicit output. Try it online!
> 0 votes

# Answer
# \[C64, BasicV2\], 11 bytes

```
1rEA,B:?A*B

```

The input can be given like:

```
0dA45,45

```
> 0 votes

# Answer
# Batch File, 23 bytes

```
@set/ak=%1*%2
@echo %k%

```

Batch doesn't allow you to print the result of an operation; Thus, we are required to create a temporary variable `k` which contains the result of the multiplication between argument 1 and 2.

The `@`'s in front of the commands prevent the current path from being printed before each line on the command prompt.
> 0 votes

# Answer
# Falcon, 34 bytes

```
a=int(input())
b=int(input())
>a*b

```

Try it online!

Falcon uses a similar syntax to Python. Its output, however, has these awesome aliases called "fast-printing" (as per the documentation):

* `printl()` can be written as `>`
* `print()` can be written as `>>`
> 0 votes

# Answer
# Verbosity, 392 bytes

```
Include<Input>
Include<Output>
Include<Integer>
Include<MetaFunctions>
Input:DefineVariable<i; 0>
Output:DefineVariable<o; 0>
Integer:DefineVariable<f; Input:ReadEvaluatedLineFromInput<i>>
Integer:DefineVariable<s; Input:ReadEvaluatedLineFromInput<i>>
Integer:DefineVariable<r; Integer:Product<f; s>>
Output:DisplayAsText<o; r>
DefineMain<> [
MetaFunctions:ExecuteScript<MetaFunctions@FILE>
]

```

Try it online!
> 0 votes

# Answer
# Whispers, 35 bytes

```
> Input
> Input
>> 1×2
>> Output 3

```

Try it online!
> 0 votes

# Answer
# Pyth - 5 bytes

```
AQ*GH

```

Explanation:

```
AQ*GH
A     Set G and H to the first two elements of
 Q    Evaluated input
      Implicitly print
   G  G
  *   Times
    H H

```
> 0 votes

# Answer
## Wumpus, 5 bytes

```
II*O@

```

Try it online!

### Explanation

Straight-forward and boring:

```
I   Read the first integer.
I   Read the second integer.
*   Multiply them.
O   Output the result.
@   Terminate the program.

```
> 0 votes

# Answer
# JavaScript (Node.js), 9 bytes

```
a=>b=>a*b

```

Try it online!
> 0 votes

# Answer
# Red, 16 bytes

```
func[a b][a * b]

```

Try it online!
> 0 votes

# Answer
# T-SQL, 17 bytes

```
SELECT a*b FROM t

```

Per our IO rules, SQL can take input from a pre-existing table **t** with integer columns **a** and **b**.

This has the bonus of working on an unlimited\* number of provided pairs, if they are included in the input table.

\*Well, limited only by SQL storage bounds, which are pretty darn high, using enterprise versions.
> 0 votes

# Answer
# Python 3, 14 bytes

```
lambda x,y:x*y

```

It's literally just multiplication, lol
> 0 votes

# Answer
> ```
> gawk '($_*=$2)_'
>
> ```

The final underscore `(..)_` is the most succinct way I could think of to force concat an empty string to the zeros and coerce it into a string in order to print it without using the print statement.

weak typing in `awk` is advantageous cuz I never defined `_`, so 1st one is used as numeric zero while 2nd one acts as empty string.

```
2
20
63
-16
-72
72
0
0
0
0
0

```
> 0 votes

# Answer
# ARBLE, 3 bytes

```
a*b

```

Similar to the answer for Adding two numbers.

Try it online!
> 0 votes

# Answer
## HP‑41C series, 7 B

Input is to be placed in the `X` and `Y` stack registers.

```
01♦LBL⸆P           5 Bytes  global label requires 4 + (length of string) Bytes
02 ∗               1 Byte   X ≔ Y × X
03 RTN             1 Byte   `RTN` does not affect local label search

```

---

Some other (longer) methods:

* stack arithmetic:
```
ST∗ Y            2 Bytes  Rₙ ≔ Rₙ × X

```
Result is in `Y` now. Necessary keystrokes: `STO` `×` `.` `×` (for the letter `Y`).
* statistics functions:
```
CLΣ              1 Byte   clear statistics registers
Σ+               1 Byte   accumulate statistics values

```
If `ΣREG?` = 11 (the default), result is in R15.
* Furthermore, there’s `%` (1 Byte), but it will require scaling the result back by a factor of 100.
> 0 votes

# Answer
# Thunno 2, 1 byte

```
×

```

Attempt This Online!

No, `*` is exponentiation, not multiplication.
> 0 votes

# Answer
# Desmoslang Assembly, 5 Bytes

`I*IOT`
> 0 votes

# Answer
# ReRegex, 58 bytes

```
#import math
-(.*?)-/$1/(.+)-/-$1/(\d*)x(\d*)/$1*$2/#input

```

Try it online!

## Ungolfed

```
#import math
-(.*?)-/$1/#		# Remove pairs of -
(.+)-/-$1/#		# Move any - to the start of the text
(\d*)x(\d*)/$1*$2/#	# Take the input of (number)x(number) and convert it to (number)*(number), implicitly multiplying.
#input

```

# Slightly more interesting, 81 bytes

```
-(.*?)-/$1/(.+)-/-$1/(?<![:_])(_*)x(_*)/:$1x$2/:(_*)x(_*)_/$1:$1x$2/:_*x$//#input

```

Try it online!

## Ungolfed

```
-(.*?)-/$1/#			# Remove pairs of -
(.+)-/-$1/#			# Move any - to the start of the text
(?<![:_])(_*)x(_*)/:$1x$2/#	# Add a : if there isn't one, to keep track of the output
:(_*)x(_*)_/$1:$1x$2/#		# Whilst the second argument is > 0, remove one from it, and copy the first argument to the output
:_*x$//#			# When the second argument is zero, remove all the supporting stuff, leaving just the output
#input

```
> 0 votes

# Answer
# Ruby, 10 bytes

```
->a,b{a*b}

```

and it would be great to learn if it is possible with fewer bytes
> -2 votes

---
Tags: code-golf, math, number
---


title: Find if a list is an ABC-triple

text:
# Question
Title: Find if a list is an ABC-triple
Three positive integers A, B, C are ABC-triple if they are coprime, with A \< B and satisfying the relation : A + B = C

Examples :

* `1, 8, 9` is an ABC-triple since they are coprime, 1 \< 8 and 1 + 8 = 9
* `6, 8, 14` is not because they are not coprime
* `7, 5, 12` is not because 7 \> 5

You can see this Frits Beukers 2005 presentation for more details about ABC-triples.

# Input/Output

Three integers, decimal written. May be separated values or list. Output had to be a truthy/falsy value whether the three integers are an ABC-triple.

Note: It is important to respect integers order in the list, for example: `1, 8, 9` is not considered as the same list as `9, 1, 8` or any other combination. So first is an ABC-triple and second is not.

Thus A is the first element of the list, B the second and C the third.

# Test cases

Each of the following lists should output a truthy value

```
[1, 8, 9]
[2, 3, 5]
[2, 6436341, 6436343]
[4, 121, 125]
[121, 48234375, 48234496]

```

Each of the following lists should output a falsey value

```
[1, 1, 2]
[1, 2, 5]
[1, 9, 8]
[4, 12872682, 12872686]
[6, 8, 14]
[7, 5, 12]

```

# Answer
> 9 votes
# Haskell, ~~48 38~~ 29 bytes

-10 bytes due to TFeld's `gcd` trick!

-7 bytes thanks to HPWiz for improving the co-primality test and spotting a superfluous space!

-2 bytes thanks to nimi for suggesting an infix-operator!

```
(a!b)c=a<b&&a+b==c&&gcd a b<2

```

Try it online!

## Explanation

The first two conditions `a < b` and `a + b == c` are fairly obvious, the third one uses that \\$\gcd(a,b) = \gcd(a,c) = \gcd(b,c)\\$:

Writing \\$\gcd(a,c) = U \cdot a + V \cdot c\\$ using Bézout's identity and substituting \\$c = a + b\\$ gives:

$$ U \cdot a + V \cdot (a + b) = (U + V) \cdot a + V \cdot b $$

Since *the* \\$\gcd\\$ is the minimal positive solution to that identity it follows that \\$\gcd(a,b) = \gcd(a,c)\\$. The other case is symmetric.

# Answer
> 8 votes
# Jelly, ~~10~~ 9 bytes

```
Ṫ=S×</=g/

```

Try it online!

### How it works

```
Ṫ=S×</=g/  Main link. Argument: [a, b, c] (positive integers)

Ṫ          Tail; pop and yield c.
  S        Take the sum of [a, b], yielding (a + b).
 =         Yield t := (c == a + b).
    </     Reduce by less than, yielding (a < b).
   ×       Multiply, yielding t(a < b).
       g/  Reduce by GCD, yielding gcd(a, b).
      =    Check if t(a < b) == gcd(a, b).

```

# Answer
> 7 votes
# Perl 6, ~~33~~ 32 bytes

*-1 byte thanks to nwellnhof*

```
{(.sum/.[2]/2*[<] $_)==[gcd] $_}

```

Try it online!

Anonymous code block that takes a list of three numbers and returns True or False.

### Explanation

```
{                              }  # Anonymous code block
                       [gcd] $_   # Is the gcd of all the numbers
 (                  )==           # Equal to
  .sum        # Whether the sum of numbes
      /       # Is equal to
       .[2]/2 # The last element doubled
             *[<] $_   # And elements are in ascending order

```

# Answer
> 5 votes
# Excel, 33 bytes

```
=AND(A1+B1=C1,GCD(A1:C1)=1,A1<B1)

```

# Answer
> 4 votes
# 05AB1E, ~~12~~ ~~11~~ 10 bytes

Saved 1 byte thanks to *Kevin Cruijssen*

```
ÂÆ_*`\‹*¿Θ

```

Try it online! or as a Test Suite

**Explanation**

```
ÂÆ           # reduce a reversed copy of the input by subtraction
  _          # logically negate
   *         # multiply with input
    `        # push the values of the resulting list separately to stack
     \       # remove the top (last) value
      ‹      # is a < b ?
       *     # multiply by the input list
        ¿    # calculate the gcd of the result
         Θ   # is it true ?

```

# Answer
> 4 votes
# Wolfram Language ~~24 30 28~~ 26 bytes

With 2 bytes shaved by Doorknob. A further 2 bytes shaved off by @jaeyong sung

```
#<#2&&GCD@##==1&&#+#2==#3&

```

# Answer
> 4 votes
# Java 10, ~~65~~ 64 bytes

```
(a,b,c)->{var r=a<b&a+b==c;for(;b>0;a=b,b=c)c=a%b;return r&a<2;}

```

-1 byte thank to *@Shaggy*.

Try it online.

**Explanation:**

```
(a,b,c)->{        // Method with three integer parameters and boolean return-type
  var r=          //  Result-boolean, starting at:
        a<b       //   Check if `a` is smaller than `b`
        &a+b==c;  //   And if `a+b` is equal to `c`
  for(;b>0        //  Then loop as long as `b` is not 0 yet
      ;           //    After every iteration:
       a=b,       //     Set `a` to the current `b`
       b=c)       //     And set `b` to the temp value `c`
    c=a%b;        //   Set the temp value `c` to `a` modulo-`b`
                  //   (we no longer need `c` at this point)
  return r        //  Return if the boolean-result is true
         &a<2;}   //  And `a` is now smaller than 2

```

# Answer
> 4 votes
## bash, 61 bytes

```
factor $@|grep -vzP '( .+\b).*\n.*\1\b'&&(($1<$2&&$1+$2==$3))

```

Try it online!

Input as command line arguments, output in the exit code (also produces output on stdout as a side effect, but this can be ignored).

The second part (starting from `&&((`) is pretty standard, but the interesting bit is the coprime test:

```
factor $@      # produces output of the form "6: 2 3\n8: 2 2 2\n14: 2 7\n"
|grep -        # regex search on the result
v              # invert the match (return truthy for strings that don't match)
z              # zero-terminated, allowing us to match newlines
P              # perl (extended) regex
'( .+\b)'      # match one or more full factors
'.*\n.*'       # and somewhere on the next line...
'\1\b'         # find the same full factors

```

# Answer
> 3 votes
# JavaScript (ES6),  ~~54 43 42~~  40 bytes

*Thanks to @Shaggy for pointing out that we don't need to compute \\$\gcd(a,c)\\$. Saved 11 bytes by rewriting the code accordingly.*

Takes input as 3 separate integers. Returns \\$true\\$ for an ABC-triple, or either \\$0\\$ or \\$false\\$ otherwise.

```
f=(a,b,c)=>c&&a/b|a+b-c?0:b?f(b,a%b):a<2

```

Try it online!

# Answer
> 3 votes
# Python 2, ~~69~~ ~~67~~ ~~63~~ ~~62~~ 55 bytes

```
lambda a,b,c:(c-b==a<b)/gcd(a,b)
from fractions import*

```

Try it online!

---

# Python 3, ~~58~~ 51 bytes

```
lambda a,b,c:(c-b==a<b)==gcd(a,b)
from math import*

```

Try it online!

---

-7 bytes, thanks to H.PWiz

# Answer
> 3 votes
# Japt, ~~16~~ ~~14~~ ~~13~~ 11 bytes

```
<V¥yU «NÔr-

```

Try it

```
                :Implicit input of integers U=A, V=B & W=C
<V              :Is U less than V?
  ¥             :Test that for equality with
   yU           :The GCD of V & U
      «         :Logical AND with the negation of
       N        :The array of inputs
        Ô       :Reversed
         r-     :Reduced by subtraction

```

# Answer
> 3 votes
# Regex (ECMAScript), 34 bytes

Input is in unary, in the domain `^x*,x*,x*$` (repeated `x`s delimited by `,`).

`^(?!(xx+)\1*,\1+,)(x*)(,\2x+)\3\2$`

Try it online! - SpiderMonkey (Mozilla Firefox) regex engine
Try it online! - .NET regex engine with ECMAScript emulation enabled

```
# see https://codegolf.stackexchange.com/questions/178303/find-if-a-list-is-an-abc-triple
^
(?!                # Verify that A and B are coprime. We don't need to include C in the
                   # test, because the requirement that A+B=C implies that A,B,C are
                   # mutually comprime if and only if A and B are coprime.
    (xx+)\1*,\1+,  # If this matches, A and B have a common factor \1 and aren't coprime.
)
(x*)(,\2x+)\3\2$   # Verify that A<B and A+B=C. The first comma is captured in \3 and
                   # reused to match the second comma, saving one byte.

```

The question does say "Three integers, *decimal* written", so this might not qualify (as it takes input in unary), but it makes for such an elegant pure regex that I hope it will at least be appreciated.

However, note that if the phrasing is to be literally interpreted, lambda and function submissions that take integer arguments are to be disqualified too, as to strictly adhere to the question's specification they would need to take the input in the form of a string.

# Answer
> 2 votes
# C# (Visual C# Interactive Compiler), 90 bytes

```
n=>new int[(int)1e8].Where((_,b)=>n[0]%++b<1&n[1]%b<1).Count()<2&n[0]+n[1]==n[2]&n[0]<n[1]

```

Runs for numbers up to 1e8, takes about 35 seconds on my machine. Instead of calculating the gcd like others, the function just instantiate a huge array and filter the indexes that aren't divisors of a or b, and check how many elements are left. Next it check if element one plus element two equals element three. Lastly, it checks if the first element is less than the second.

Try it online!

# Answer
> 2 votes
# C# (Visual C# Interactive Compiler), 59 bytes

```
(a,b,c)=>Enumerable.Range(2,a).All(i=>a%i+b%i>0)&a<b&a+b==c

```

Try it online!

# Answer
> 1 votes
# , 27 bytes

```
(+/=2*{:)*({.<1{])*1=+./ .*

```

Try it online!

Inspired by Jo King's Perl solution

# Answer
> 1 votes
# Pari/GP, 30 bytes

Saved 2 bytes thanks to @Shaggy.

```
(a,b,c)->a<b==gcd(a,b)&&a+b==c

```

Try it online!

# Answer
> 1 votes
# C# (.NET Core), 68 bytes

Without Linq.

```
(a,b,c)=>{var t=a<b&a+b==c;while(b>0){c=b;b=a%b;a=c;}return t&a<2;};

```

Try it online!

# Answer
> 1 votes
# Stax, 12 bytes

```
ü╡v╕7+Pü°╔|g

```

Run and debug it

# Answer
> 1 votes
# Clean, 43 bytes

```
import StdEnv
$a b c=a<b&&a+b==c&&gcd a b<2

```

Try it online!

Similar to basically everything else because the direct test is the same.

# Answer
> 1 votes
# Retina 0.8.2, ~~42~~ 41 bytes

```
\d+
$*
A`^(11+)\1*,\1+,
^(1+)(,1+\1)\2\1$

```

Try it online! Link includes test cases. Edit: Saved 1 byte thanks to @Deadcode. Explanation:

```
\d+
$*

```

Convert to unary.

```
A`^(11+)\1*,\1+,

```

Check that A and B have no common factor.

```
^(1+)(,1+\1)\2\1$

```

Check that A \ 1 votes
# Befunge-98 (FBBI), 83 bytes

```
&:&:03p&:04pw>03g04g\:v_1w03g04g+w1.@
00:    7j@.0[^j7      _^;>0.@;j7;>0.@;:%g00\p

```

Try it online!

The input which is a triple of integers `[A,B,C]` is feeded into Befunge as space-separated integers `C B A`.

# Answer
> 1 votes
# Mathematica 35 bytes

```
CoprimeQ @@ # && #[[1]] + #[[2]] == #[[3]] &

```

if order is important:

```
CoprimeQ @@ # && Sort[#]==# && #[[1]] + #[[2]] == #[[3]] &

```

or...

```
And[CoprimeQ @@ #, Sort@# == #, #[[1]] + #[[2]] == #[[3]]] &

```

# Answer
> 1 votes
# Common Lisp, 51 bytes

```
(lambda(a b c)(and(< a b)(=(+ a b)c)(=(gcd a c)1)))

```

Try it online!

# Answer
> 1 votes
# Vyxal `g`, 10 bytes

```
⟨ḣ¯=|Þ⇧|ġṅ

```

Try it Online!

Checks if the difference between the last two numbers equals the first one, if its sorted in ascending order, and if the gcd = 1

---
Tags: code-golf, sequence, decision-problem, number-theory
---