Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
5
Task/Multiplication-tables/00-META.yaml
Normal file
5
Task/Multiplication-tables/00-META.yaml
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
category:
|
||||
- Simple
|
||||
from: http://rosettacode.org/wiki/Multiplication_tables
|
||||
note: Arithmetic operations
|
||||
7
Task/Multiplication-tables/00-TASK.txt
Normal file
7
Task/Multiplication-tables/00-TASK.txt
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
;Task:
|
||||
Produce a formatted 12×12 multiplication table of the kind memorized by rote when in primary (or elementary) school.
|
||||
|
||||
|
||||
Only print the top half triangle of products.
|
||||
<br><br>
|
||||
|
||||
12
Task/Multiplication-tables/11l/multiplication-tables.11l
Normal file
12
Task/Multiplication-tables/11l/multiplication-tables.11l
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
V n = 12
|
||||
L(j) 1..n
|
||||
print(‘#3’.format(j), end' ‘ ’)
|
||||
print(‘│’)
|
||||
L 1..n
|
||||
print(‘────’, end' ‘’)
|
||||
print(‘┼───’)
|
||||
|
||||
L(i) 1..n
|
||||
L(j) 1..n
|
||||
print(I j < i {‘ ’} E ‘#3 ’.format(i * j), end' ‘’)
|
||||
print(‘│ ’i)
|
||||
|
|
@ -0,0 +1,60 @@
|
|||
* 12*12 multiplication table 14/08/2015
|
||||
MULTTABL CSECT
|
||||
USING MULTTABL,R12
|
||||
LR R12,R15
|
||||
LA R10,0 buffer pointer
|
||||
LA R3,BUFFER
|
||||
MVC 0(4,R3),=C' | '
|
||||
LA R10,4(R10)
|
||||
LA R5,12
|
||||
LA R4,1 i=1
|
||||
LOOPN LA R3,BUFFER do i=1 to 12
|
||||
AR R3,R10
|
||||
XDECO R4,XDEC i
|
||||
MVC 0(4,R3),XDEC+8 output i
|
||||
LA R10,4(R10)
|
||||
LA R4,1(R4)
|
||||
BCT R5,LOOPN end i
|
||||
XPRNT BUFFER,52
|
||||
XPRNT PORT,52 border
|
||||
LA R5,12
|
||||
LA R4,1 i=1 (R4)
|
||||
LOOPI LA R10,0 do i=1 to 12
|
||||
MVC BUFFER,=CL52' '
|
||||
LA R3,BUFFER
|
||||
AR R3,R10
|
||||
XDECO R4,XDEC
|
||||
MVC 0(2,R3),XDEC+10
|
||||
LA R10,2(R10)
|
||||
LA R3,BUFFER
|
||||
AR R3,R10
|
||||
MVC 0(2,R3),=C'| '
|
||||
LA R10,2(R10)
|
||||
LA R7,12
|
||||
LA R6,1 j=1 (R6)
|
||||
LOOPJ CR R6,R4 do j=1 to 12
|
||||
BNL MULT
|
||||
LA R3,BUFFER
|
||||
AR R3,R10
|
||||
MVC 0(4,R3),=C' '
|
||||
LA R10,4(R10)
|
||||
B NEXTJ
|
||||
MULT LR R9,R4 i
|
||||
MR R8,R6 i*j in R8R9
|
||||
LA R3,BUFFER
|
||||
AR R3,R10
|
||||
XDECO R9,XDEC
|
||||
MVC 0(4,R3),XDEC+8
|
||||
LA R10,4(R10)
|
||||
NEXTJ LA R6,1(R6)
|
||||
BCT R7,LOOPJ end j
|
||||
ELOOPJ XPRNT BUFFER,52
|
||||
LA R4,1(R4)
|
||||
BCT R5,LOOPI end i
|
||||
ELOOPI XR R15,R15
|
||||
BR R14
|
||||
BUFFER DC CL52' '
|
||||
XDEC DS CL12
|
||||
PORT DC C'--+-------------------------------------------------'
|
||||
YREGS
|
||||
END MULTTABL
|
||||
|
|
@ -0,0 +1,97 @@
|
|||
org 100h
|
||||
lxi h,output
|
||||
;;; Make the header
|
||||
call skip ; Four spaces,
|
||||
mvi m,'|' ; separator,
|
||||
inx h
|
||||
lxi d,0C01h ; 12 fields starting at 1
|
||||
fnum: mov a,e ; Field number
|
||||
call num
|
||||
inr e
|
||||
dcr d ; If not 12 yet, next field number
|
||||
jnz fnum
|
||||
call nl ; Newline
|
||||
mvi a,'-' ; Four dashes,
|
||||
mvi b,4
|
||||
call bchr
|
||||
mvi m,'+' ; Plus,
|
||||
inx h
|
||||
mvi b,12*4 ; and 12*4 more dashes
|
||||
call bchr
|
||||
call nl ; Newline
|
||||
;;; Write the 12 lines
|
||||
mvi d,1 ; Start at line 1,
|
||||
line: mov a,d ; Add the line number
|
||||
call num
|
||||
mvi m,'|' ; separator
|
||||
inx h
|
||||
mvi e,1 ; Start at column 1
|
||||
mvi c,0 ; Cumulative sum at C
|
||||
field: mov a,c ; Add line number giving next column
|
||||
add d
|
||||
mov c,a
|
||||
mov a,e ; If column >= line, we need to print
|
||||
cmp d
|
||||
mov a,c ; the current total
|
||||
cc skip ; skip field if column >= line
|
||||
cnc num ; print field if column < line
|
||||
inr e ; next column
|
||||
mov a,e
|
||||
cpi 13 ; column 13?
|
||||
jnz field ; If not, next field on line
|
||||
call nl ; But if so, add newline
|
||||
inr d ; next line
|
||||
mov a,d
|
||||
cpi 13 ; line 13?
|
||||
jnz line ; If not, next line
|
||||
mvi m,'$' ; Write a CP/M string terminator,
|
||||
mvi c,9 ; And use CP/M to print the string
|
||||
lxi d,output
|
||||
jmp 5
|
||||
;;; Add the character in A to the string at HL, B times
|
||||
bchr: mov m,a
|
||||
inx h
|
||||
dcr b
|
||||
jnz bchr
|
||||
ret
|
||||
;;; Add newline to string at HL
|
||||
nl: mvi m,13 ; CR
|
||||
inx h
|
||||
mvi m,10 ; LF
|
||||
inx h
|
||||
ret
|
||||
;;; Add four spaces to string at HL (skip field)
|
||||
skip: mvi b,' '
|
||||
mov m,b
|
||||
inx h
|
||||
mov m,b
|
||||
inx h
|
||||
mov m,b
|
||||
inx h
|
||||
mov m,b
|
||||
inx h
|
||||
ret
|
||||
;;; Add 3-digit number in A to string at HL
|
||||
num: mvi m,' ' ; Separator space
|
||||
inx h
|
||||
ana a ; Clear carry
|
||||
mvi b,100 ; 100s digit
|
||||
call dspc
|
||||
mvi b,10 ; 10s digit
|
||||
call dspc
|
||||
mvi b,1 ; 1s digit
|
||||
dspc: jc dgt ; If carry, we need a digit
|
||||
cmp b ; >= digit?
|
||||
jnc dgt ; If not, we need a digit
|
||||
mvi m,' ' ; Otherwise, fill with space
|
||||
inx h
|
||||
cmc ; Return with carry off
|
||||
ret
|
||||
dgt: mvi m,'0'-1 ; Calculate digit
|
||||
dloop: inr m ; Increment digit
|
||||
sub b ; while B can be subtracted
|
||||
jnc dloop
|
||||
add b
|
||||
inx h
|
||||
ret
|
||||
output: equ $
|
||||
|
|
@ -0,0 +1,149 @@
|
|||
/* ARM assembly AARCH64 Raspberry PI 3B */
|
||||
/* program multtable64.s */
|
||||
|
||||
/*******************************************/
|
||||
/* Constantes file */
|
||||
/*******************************************/
|
||||
/* for this file see task include a file in language AArch64 assembly*/
|
||||
.include "../includeConstantesARM64.inc"
|
||||
.equ MAXI, 12
|
||||
/*********************************/
|
||||
/* Initialized data */
|
||||
/*********************************/
|
||||
.data
|
||||
sMessValeur: .fill 11, 1, ' ' // size => 11
|
||||
szCarriageReturn: .asciz "\n"
|
||||
sBlanc1: .asciz " "
|
||||
sBlanc2: .asciz " "
|
||||
sBlanc3: .asciz " "
|
||||
/*********************************/
|
||||
/* UnInitialized data */
|
||||
/*********************************/
|
||||
.bss
|
||||
/*********************************/
|
||||
/* code section */
|
||||
/*********************************/
|
||||
.text
|
||||
.global main
|
||||
main: // entry of program
|
||||
ldr x6,qAdrsBlanc1
|
||||
ldr x7,qAdrsBlanc2
|
||||
ldr x8,qAdrsBlanc3
|
||||
// display first line
|
||||
mov x4,#0
|
||||
1: // begin loop
|
||||
mov x0,x4
|
||||
ldr x1,qAdrsMessValeur // display value
|
||||
bl conversion10 // call function
|
||||
strb wzr,[x1,x0] // final zéro on display value
|
||||
ldr x0,qAdrsMessValeur
|
||||
bl affichageMess // display message
|
||||
cmp x4,#10 // one or two digit in résult
|
||||
csel x0,x7,x8,ge // display 2 or 3 spaces
|
||||
bl affichageMess // display message
|
||||
add x4,x4,1 // increment counter
|
||||
cmp x4,MAXI
|
||||
ble 1b // loop
|
||||
ldr x0,qAdrszCarriageReturn
|
||||
bl affichageMess // display carriage return
|
||||
|
||||
mov x5,#1 // line counter
|
||||
2: // begin loop lines
|
||||
mov x0,x5 // display column 1 with N° line
|
||||
ldr x1,qAdrsMessValeur // display value
|
||||
bl conversion10 // call function
|
||||
strb wzr,[x1,x0] // final zéro
|
||||
ldr x0,qAdrsMessValeur
|
||||
bl affichageMess // display message
|
||||
cmp x5,#10 // one or two digit in N° line
|
||||
csel x0,x7,x8,ge // display 2 or 3 spaces
|
||||
bl affichageMess
|
||||
mov x4,#1 // counter column
|
||||
3: // begin loop columns
|
||||
mul x0,x4,x5 // multiplication
|
||||
mov x3,x0 // save résult
|
||||
ldr x1,qAdrsMessValeur // display value
|
||||
bl conversion10 // call function
|
||||
strb wzr,[x1,x0]
|
||||
ldr x0,qAdrsMessValeur
|
||||
bl affichageMess // display message
|
||||
cmp x3,100 // 3 digits in résult ?
|
||||
csel x0,x6,x0,ge // display 1 spaces
|
||||
bge 4f
|
||||
cmp x3,10 // 2 digits in result
|
||||
csel x0,x7,x8,ge // display 2 or 3 spaces
|
||||
|
||||
4:
|
||||
bl affichageMess // display message
|
||||
add x4,x4,1 // increment counter column
|
||||
cmp x4,x5 // < counter lines
|
||||
ble 3b // loop
|
||||
ldr x0,qAdrszCarriageReturn
|
||||
bl affichageMess // display carriage return
|
||||
add x5,x5,1 // increment line counter
|
||||
cmp x5,MAXI // MAXI ?
|
||||
ble 2b // loop
|
||||
|
||||
100: // standard end of the program
|
||||
mov x0,0 // return code
|
||||
mov x8,EXIT // request to exit program
|
||||
svc 0 // perform the system call
|
||||
|
||||
qAdrsMessValeur: .quad sMessValeur
|
||||
qAdrszCarriageReturn: .quad szCarriageReturn
|
||||
qAdrsBlanc1: .quad sBlanc1
|
||||
qAdrsBlanc2: .quad sBlanc2
|
||||
qAdrsBlanc3: .quad sBlanc3
|
||||
|
||||
/******************************************************************/
|
||||
/* Converting a register to a decimal unsigned */
|
||||
/******************************************************************/
|
||||
/* x0 contains value and x1 address area */
|
||||
/* x0 return size of result (no zero final in area) */
|
||||
/* area size => 11 bytes */
|
||||
.equ LGZONECAL, 10
|
||||
conversion10:
|
||||
stp x1,lr,[sp,-16]! // save registers
|
||||
stp x2,x3,[sp,-16]! // save registers
|
||||
stp x4,x5,[sp,-16]! // save registers
|
||||
mov x3,x1
|
||||
mov x2,#LGZONECAL
|
||||
mov x4,10
|
||||
1: // start loop
|
||||
mov x5,x0
|
||||
udiv x0,x5,x4
|
||||
msub x1,x0,x4,x5 // x5 <- dividende. quotient ->x0 reste -> x1
|
||||
add x1,x1,48 // digit
|
||||
strb w1,[x3,x2] // store digit on area
|
||||
cbz x0,2f // stop if quotient = 0
|
||||
sub x2,x2,1 // else previous position
|
||||
b 1b // and loop
|
||||
// and move digit from left of area
|
||||
2:
|
||||
mov x4,0
|
||||
3:
|
||||
ldrb w1,[x3,x2]
|
||||
strb w1,[x3,x4]
|
||||
add x2,x2,1
|
||||
add x4,x4,1
|
||||
cmp x2,LGZONECAL
|
||||
ble 3b
|
||||
// and move spaces in end on area
|
||||
mov x0,x4 // result length
|
||||
mov x1,' ' // space
|
||||
4:
|
||||
strb w1,[x3,x4] // store space in area
|
||||
add x4,x4,1 // next position
|
||||
cmp x4,LGZONECAL
|
||||
ble 4b // loop if x4 <= area size
|
||||
|
||||
100:
|
||||
ldp x4,x5,[sp],16 // restaur 2 registers
|
||||
ldp x2,x3,[sp],16 // restaur 2 registers
|
||||
ldp x1,lr,[sp],16 // restaur 2 registers
|
||||
ret // return to address lr x30
|
||||
/********************************************************/
|
||||
/* File Include fonctions */
|
||||
/********************************************************/
|
||||
/* for this file see task include a file in language AArch64 assembly */
|
||||
.include "../includeARM64.inc"
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
main:(
|
||||
INT max = 12;
|
||||
INT width = ENTIER(log(max)*2)+1;
|
||||
STRING empty = " "*width, sep="|", hr = "+" + (max+1)*(width*"-"+"+");
|
||||
FORMAT ifmt = $g(-width)"|"$; # remove leading zeros #
|
||||
|
||||
printf(($gl$, hr));
|
||||
print(sep + IF width<2 THEN "x" ELSE " "*(width-2)+"x " FI + sep);
|
||||
FOR col TO max DO printf((ifmt, col)) OD;
|
||||
printf(($lgl$, hr));
|
||||
|
||||
FOR row TO max DO
|
||||
[row:max]INT product;
|
||||
FOR col FROM row TO max DO product[col]:=row*col OD;
|
||||
STRING prefix=(empty+sep)*(row-1);
|
||||
printf(($g$, sep, ifmt, row, $g$, prefix, ifmt, product, $l$))
|
||||
OD;
|
||||
printf(($gl$, hr))
|
||||
)
|
||||
14
Task/Multiplication-tables/ALGOL-W/multiplication-tables.alg
Normal file
14
Task/Multiplication-tables/ALGOL-W/multiplication-tables.alg
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
begin
|
||||
% print a school style multiplication table %
|
||||
i_w := 3; s_w := 0; % set output formating %
|
||||
write( " " );
|
||||
for i := 1 until 12 do writeon( " ", i );
|
||||
write( " +" );
|
||||
for i := 1 until 12 do writeon( "----" );
|
||||
for i := 1 until 12 do begin
|
||||
write( i, "|" );
|
||||
for j := 1 until i - 1 do writeon( " " );
|
||||
for j := i until 12 do writeon( " ", i * j );
|
||||
end;
|
||||
|
||||
end.
|
||||
|
|
@ -0,0 +1 @@
|
|||
(⍳12)∘.×⍳12
|
||||
|
|
@ -0,0 +1 @@
|
|||
⎕←(' ×',2↑' '),4 0⍕⍳12⋄{⎕←((4 0⍕⍵),⊂1(4×(⍵-1))⍴' '),4 0⍕(⍵-1)↓(⍵×⍳12)}¨⍳12
|
||||
|
|
@ -0,0 +1 @@
|
|||
⎕←(' ×',4↑' '),4 0⍕⍳12⋄⍬⊣{⎕←((4 0⍕⍵),⊂1(4×(⍵-1))⍴' '),4 0⍕(⍵-1)↓(⍵×⍳12)}¨⍳12
|
||||
|
|
@ -0,0 +1,178 @@
|
|||
/* ARM assembly Raspberry PI */
|
||||
/* program multtable.s */
|
||||
|
||||
/************************************/
|
||||
/* Constantes */
|
||||
/************************************/
|
||||
.equ STDOUT, 1 @ Linux output console
|
||||
.equ EXIT, 1 @ Linux syscall
|
||||
.equ WRITE, 4 @ Linux syscall
|
||||
.equ MAXI, 12
|
||||
/*********************************/
|
||||
/* Initialized data */
|
||||
/*********************************/
|
||||
.data
|
||||
sMessValeur: .fill 11, 1, ' ' @ size => 11
|
||||
szCarriageReturn: .asciz "\n"
|
||||
sBlanc1: .asciz " "
|
||||
sBlanc2: .asciz " "
|
||||
sBlanc3: .asciz " "
|
||||
/*********************************/
|
||||
/* UnInitialized data */
|
||||
/*********************************/
|
||||
.bss
|
||||
/*********************************/
|
||||
/* code section */
|
||||
/*********************************/
|
||||
.text
|
||||
.global main
|
||||
main: @ entry of program
|
||||
push {fp,lr} @ saves 2 registers
|
||||
@ display first line
|
||||
mov r4,#0
|
||||
1: @ begin loop
|
||||
mov r0,r4
|
||||
ldr r1,iAdrsMessValeur @ display value
|
||||
bl conversion10 @ call function
|
||||
mov r2,#0 @ final zéro
|
||||
strb r2,[r1,r0] @ on display value
|
||||
ldr r0,iAdrsMessValeur
|
||||
bl affichageMess @ display message
|
||||
cmp r4,#10 @ one or two digit in résult
|
||||
ldrgt r0,iAdrsBlanc2 @ two display two spaces
|
||||
ldrle r0,iAdrsBlanc3 @ one display 3 spaces
|
||||
bl affichageMess @ display message
|
||||
add r4,#1 @ increment counter
|
||||
cmp r4,#MAXI
|
||||
ble 1b @ loop
|
||||
ldr r0,iAdrszCarriageReturn
|
||||
bl affichageMess @ display carriage return
|
||||
|
||||
mov r5,#1 @ line counter
|
||||
2: @ begin loop lines
|
||||
mov r0,r5 @ display column 1 with N° line
|
||||
ldr r1,iAdrsMessValeur @ display value
|
||||
bl conversion10 @ call function
|
||||
mov r2,#0 @ final zéro
|
||||
strb r2,[r1,r0]
|
||||
ldr r0,iAdrsMessValeur
|
||||
bl affichageMess @ display message
|
||||
cmp r5,#10 @ one or two digit in N° line
|
||||
ldrge r0,iAdrsBlanc2
|
||||
ldrlt r0,iAdrsBlanc3
|
||||
bl affichageMess
|
||||
mov r4,#1 @ counter column
|
||||
3: @ begin loop columns
|
||||
mul r0,r4,r5 @ multiplication
|
||||
mov r3,r0 @ save résult
|
||||
ldr r1,iAdrsMessValeur @ display value
|
||||
bl conversion10 @ call function
|
||||
mov r2,#0
|
||||
strb r2,[r1,r0]
|
||||
ldr r0,iAdrsMessValeur
|
||||
bl affichageMess @ display message
|
||||
cmp r3,#100 @ 3 digits in résult ?
|
||||
ldrge r0,iAdrsBlanc1 @ yes, display one space
|
||||
bge 4f
|
||||
cmp r3,#10 @ 2 digits in result
|
||||
ldrge r0,iAdrsBlanc2 @ yes display 2 spaces
|
||||
ldrlt r0,iAdrsBlanc3 @ no display 3 spaces
|
||||
4:
|
||||
bl affichageMess @ display message
|
||||
add r4,#1 @ increment counter column
|
||||
cmp r4,r5 @ < counter lines
|
||||
ble 3b @ loop
|
||||
ldr r0,iAdrszCarriageReturn
|
||||
bl affichageMess @ display carriage return
|
||||
add r5,#1 @ increment line counter
|
||||
cmp r5,#MAXI @ MAXI ?
|
||||
ble 2b @ loop
|
||||
|
||||
100: @ standard end of the program
|
||||
mov r0, #0 @ return code
|
||||
pop {fp,lr} @restaur 2 registers
|
||||
mov r7, #EXIT @ request to exit program
|
||||
svc #0 @ perform the system call
|
||||
|
||||
iAdrsMessValeur: .int sMessValeur
|
||||
iAdrszCarriageReturn: .int szCarriageReturn
|
||||
iAdrsBlanc1: .int sBlanc1
|
||||
iAdrsBlanc2: .int sBlanc2
|
||||
iAdrsBlanc3: .int sBlanc3
|
||||
/******************************************************************/
|
||||
/* display text with size calculation */
|
||||
/******************************************************************/
|
||||
/* r0 contains the address of the message */
|
||||
affichageMess:
|
||||
push {r0,r1,r2,r7,lr} @ save registres
|
||||
mov r2,#0 @ counter length
|
||||
1: @ loop length calculation
|
||||
ldrb r1,[r0,r2] @ read octet start position + index
|
||||
cmp r1,#0 @ if 0 its over
|
||||
addne r2,r2,#1 @ else add 1 in the length
|
||||
bne 1b @ and loop
|
||||
@ so here r2 contains the length of the message
|
||||
mov r1,r0 @ address message in r1
|
||||
mov r0,#STDOUT @ code to write to the standard output Linux
|
||||
mov r7, #WRITE @ code call system "write"
|
||||
svc #0 @ call systeme
|
||||
pop {r0,r1,r2,r7,lr} @ restaur des 2 registres */
|
||||
bx lr @ return
|
||||
/******************************************************************/
|
||||
/* Converting a register to a decimal unsigned */
|
||||
/******************************************************************/
|
||||
/* r0 contains value and r1 address area */
|
||||
/* r0 return size of result (no zero final in area) */
|
||||
/* area size => 11 bytes */
|
||||
.equ LGZONECAL, 10
|
||||
conversion10:
|
||||
push {r1-r4,lr} @ save registers
|
||||
mov r3,r1
|
||||
mov r2,#LGZONECAL
|
||||
|
||||
1: @ start loop
|
||||
bl divisionpar10U @unsigned r0 <- dividende. quotient ->r0 reste -> r1
|
||||
add r1,#48 @ digit
|
||||
strb r1,[r3,r2] @ store digit on area
|
||||
cmp r0,#0 @ stop if quotient = 0 */
|
||||
subne r2,#1 @ else previous position
|
||||
bne 1b @ and loop
|
||||
@ and move digit from left of area
|
||||
mov r4,#0
|
||||
2:
|
||||
ldrb r1,[r3,r2]
|
||||
strb r1,[r3,r4]
|
||||
add r2,#1
|
||||
add r4,#1
|
||||
cmp r2,#LGZONECAL
|
||||
ble 2b
|
||||
@ and move spaces in end on area
|
||||
mov r0,r4 @ result length
|
||||
mov r1,#' ' @ space
|
||||
3:
|
||||
strb r1,[r3,r4] @ store space in area
|
||||
add r4,#1 @ next position
|
||||
cmp r4,#LGZONECAL
|
||||
ble 3b @ loop if r4 <= area size
|
||||
|
||||
100:
|
||||
pop {r1-r4,lr} @ restaur registres
|
||||
bx lr @return
|
||||
|
||||
/***************************************************/
|
||||
/* division par 10 unsigned */
|
||||
/***************************************************/
|
||||
/* r0 dividende */
|
||||
/* r0 quotient */
|
||||
/* r1 remainder */
|
||||
divisionpar10U:
|
||||
push {r2,r3,r4, lr}
|
||||
mov r4,r0 @ save value
|
||||
mov r3,#0xCCCD @ r3 <- magic_number lower
|
||||
movt r3,#0xCCCC @ r3 <- magic_number upper
|
||||
umull r1, r2, r3, r0 @ r1<- Lower32Bits(r1*r0) r2<- Upper32Bits(r1*r0)
|
||||
mov r0, r2, LSR #3 @ r2 <- r2 >> shift 3
|
||||
add r2,r0,r0, lsl #2 @ r2 <- r0 * 5
|
||||
sub r1,r4,r2, lsl #1 @ r1 <- r4 - (r2 * 2) = r4 - (r0 * 10)
|
||||
pop {r2,r3,r4,lr}
|
||||
bx lr @ leave function
|
||||
46
Task/Multiplication-tables/ASIC/multiplication-tables.asic
Normal file
46
Task/Multiplication-tables/ASIC/multiplication-tables.asic
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
REM Multiplication tables
|
||||
N = 12
|
||||
PREDN = N - 1
|
||||
WDTH = 3
|
||||
CLS
|
||||
FOR J = 1 TO PREDN
|
||||
INTVAL = J
|
||||
GOSUB PRINTINT:
|
||||
PRINT " ";
|
||||
NEXT J
|
||||
INTVAL = N
|
||||
GOSUB PRINTINT:
|
||||
PRINT
|
||||
FOR J = 0 TO PREDN
|
||||
PRINT "----";
|
||||
NEXT J
|
||||
PRINT "+"
|
||||
FOR I = 1 TO N
|
||||
WDTH = 3
|
||||
FOR J = 1 TO N
|
||||
IF J < I THEN
|
||||
PRINT " ";
|
||||
ELSE
|
||||
INTVAL = I * J
|
||||
GOSUB PRINTINT:
|
||||
PRINT " ";
|
||||
ENDIF
|
||||
NEXT J
|
||||
PRINT "| ";
|
||||
INTVAL = I
|
||||
WDTH = 2
|
||||
GOSUB PRINTINT:
|
||||
PRINT
|
||||
NEXT I
|
||||
END
|
||||
|
||||
PRINTINT:
|
||||
REM Writes the value of INTVAL in a field of the given WDTH
|
||||
S2$ = STR$(INTVAL)
|
||||
S2$ = LTRIM$(S2$)
|
||||
SPNUM = LEN(S2$)
|
||||
SPNUM = WDTH - SPNUM
|
||||
S1$ = SPACE$(SPNUM)
|
||||
PRINT S1$;
|
||||
PRINT S2$;
|
||||
RETURN
|
||||
9
Task/Multiplication-tables/AWK/multiplication-tables.awk
Normal file
9
Task/Multiplication-tables/AWK/multiplication-tables.awk
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
BEGIN {
|
||||
for(i=1;i<=12;i++){
|
||||
for(j=1;j<=12;j++){
|
||||
if(j>=i||j==1){printf "%4d",i*j}
|
||||
else {printf " "}
|
||||
}
|
||||
print
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,61 @@
|
|||
PROC PrintRight(BYTE num,size)
|
||||
BYTE i
|
||||
|
||||
IF num<10 THEN
|
||||
size==-1
|
||||
ELSEIF num<100 THEN
|
||||
size==-2
|
||||
ELSE
|
||||
size==-3
|
||||
FI
|
||||
FOR i=1 TO size
|
||||
DO
|
||||
Put(' )
|
||||
OD
|
||||
PrintB(num)
|
||||
RETURN
|
||||
|
||||
PROC Main()
|
||||
BYTE ARRAY colw=[1 1 1 2 2 2 2 2 2 3 3 3]
|
||||
BYTE i,j,x,w
|
||||
|
||||
;clear screen
|
||||
Put(125)
|
||||
|
||||
;draw frame
|
||||
Position(1,3)
|
||||
FOR i=1 TO 38
|
||||
DO Put($12) OD
|
||||
|
||||
FOR j=2 TO 15
|
||||
DO
|
||||
Position(36,j)
|
||||
Put($7C)
|
||||
OD
|
||||
|
||||
Position(36,3)
|
||||
Put($13)
|
||||
|
||||
;draw numbers
|
||||
FOR j=1 TO 12
|
||||
DO
|
||||
x=1
|
||||
FOR i=1 TO 12
|
||||
DO
|
||||
w=colw(i-1)
|
||||
IF i>=j THEN
|
||||
IF j=1 THEN
|
||||
Position(x,j+1)
|
||||
PrintRight(i*j,w)
|
||||
FI
|
||||
IF i=12 THEN
|
||||
Position(37,j+3)
|
||||
PrintRight(j,2)
|
||||
FI
|
||||
Position(x,j+3)
|
||||
PrintRight(i*j,w)
|
||||
FI
|
||||
x==+w+1
|
||||
OD
|
||||
OD
|
||||
RETURN
|
||||
|
|
@ -0,0 +1,79 @@
|
|||
package {
|
||||
|
||||
import flash.display.Sprite;
|
||||
import flash.events.Event;
|
||||
import flash.text.TextField;
|
||||
import flash.text.TextFieldAutoSize;
|
||||
import flash.text.TextFormat;
|
||||
|
||||
[SWF (width = 550, height = 550)]
|
||||
public class MultiplicationTable extends Sprite {
|
||||
|
||||
public function MultiplicationTable() {
|
||||
if ( stage ) _init();
|
||||
else addEventListener(Event.ADDED_TO_STAGE, _init);
|
||||
}
|
||||
|
||||
private function _init(e:Event = null):void {
|
||||
|
||||
removeEventListener(Event.ADDED_TO_STAGE, _init);
|
||||
|
||||
var format:TextFormat = new TextFormat();
|
||||
format.size = 15;
|
||||
var blockSize:uint = 40;
|
||||
var max:uint = 12;
|
||||
|
||||
var i:uint, j:uint;
|
||||
var tf:TextField;
|
||||
|
||||
for ( i = 1; i <= max; i++ ) {
|
||||
tf = new TextField();
|
||||
tf.defaultTextFormat = format;
|
||||
tf.x = blockSize * i;
|
||||
tf.y = 0;
|
||||
tf.width = tf.height = blockSize;
|
||||
tf.autoSize = TextFieldAutoSize.CENTER;
|
||||
tf.text = String(i);
|
||||
addChild(tf);
|
||||
|
||||
tf = new TextField();
|
||||
tf.defaultTextFormat = format;
|
||||
tf.x = 0;
|
||||
tf.y = blockSize * i;
|
||||
tf.width = tf.height = blockSize;
|
||||
tf.autoSize = TextFieldAutoSize.CENTER;
|
||||
tf.text = String(i);
|
||||
addChild(tf);
|
||||
}
|
||||
|
||||
var yOffset:Number = tf.textHeight / 2;
|
||||
y += yOffset;
|
||||
|
||||
graphics.lineStyle(1, 0x000000);
|
||||
graphics.moveTo(blockSize, -yOffset);
|
||||
graphics.lineTo(blockSize, (blockSize * (max + 1)) - yOffset);
|
||||
graphics.moveTo(0, blockSize - yOffset);
|
||||
graphics.lineTo(blockSize * (max + 1), blockSize - yOffset);
|
||||
|
||||
|
||||
for ( i = 1; i <= max; i++ ) {
|
||||
for ( j = 1; j <= max; j++ ) {
|
||||
if ( j > i )
|
||||
continue;
|
||||
|
||||
tf = new TextField();
|
||||
tf.defaultTextFormat = format;
|
||||
tf.x = blockSize * i;
|
||||
tf.y = blockSize * j;
|
||||
tf.width = tf.height = blockSize;
|
||||
tf.autoSize = TextFieldAutoSize.CENTER;
|
||||
tf.text = String(i * j);
|
||||
addChild(tf);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
25
Task/Multiplication-tables/Ada/multiplication-tables.ada
Normal file
25
Task/Multiplication-tables/Ada/multiplication-tables.ada
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
with Ada.Text_IO; use Ada.Text_IO;
|
||||
with Ada.Strings.Fixed; use Ada.Strings.Fixed;
|
||||
procedure Multiplication_Table is
|
||||
package IO is new Integer_IO (Integer);
|
||||
use IO;
|
||||
begin
|
||||
Put (" | ");
|
||||
for Row in 1..12 loop
|
||||
Put (Row, Width => 4);
|
||||
end loop;
|
||||
New_Line;
|
||||
Put_Line ("--+-" & 12 * 4 * '-');
|
||||
for Row in 1..12 loop
|
||||
Put (Row, Width => 2);
|
||||
Put ("| ");
|
||||
for Column in 1..12 loop
|
||||
if Column < Row then
|
||||
Put (" ");
|
||||
else
|
||||
Put (Row * Column, Width => 4);
|
||||
end if;
|
||||
end loop;
|
||||
New_Line;
|
||||
end loop;
|
||||
end Multiplication_Table;
|
||||
14
Task/Multiplication-tables/Agena/multiplication-tables.agena
Normal file
14
Task/Multiplication-tables/Agena/multiplication-tables.agena
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
scope
|
||||
# print a school style multiplication table
|
||||
# NB: print outputs a newline at the end, write and printf do not
|
||||
write( " " );
|
||||
for i to 12 do printf( " %3d", i ) od;
|
||||
printf( "\n +" );
|
||||
for i to 12 do write( "----" ) od;
|
||||
for i to 12 do
|
||||
printf( "\n%3d|", i );
|
||||
for j to i - 1 do write( " " ) od;
|
||||
for j from i to 12 do printf( " %3d", i * j ) od;
|
||||
od;
|
||||
print()
|
||||
epocs
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
set n to 12 -- Size of table.
|
||||
repeat with x from 0 to n
|
||||
if x = 0 then set {table, x} to {{return}, -1}
|
||||
repeat with y from 0 to n
|
||||
if y's contents = 0 then
|
||||
if x > 0 then set row to {f(x)}
|
||||
if x = -1 then set {row, x} to {{f("x")}, 1}
|
||||
else
|
||||
if y ≥ x then set end of row to f(x * y)
|
||||
if y < x then set end of row to f("")
|
||||
end if
|
||||
end repeat
|
||||
set end of table to row & return
|
||||
end repeat
|
||||
return table as string
|
||||
|
||||
-- Handler/Function for formatting fixed width integer string.
|
||||
on f(x)
|
||||
set text item delimiters to ""
|
||||
return (characters -4 thru -1 of (" " & x)) as string
|
||||
end f
|
||||
|
|
@ -0,0 +1,183 @@
|
|||
------------------- MULTIPLICATION TABLE -----------------
|
||||
|
||||
-- multiplicationTable :: Int -> Int -> String
|
||||
on multiplicationTable(lower, upper)
|
||||
tell ap(my tableText, my mulTable)
|
||||
|λ|(enumFromTo(lower, upper))
|
||||
end tell
|
||||
end multiplicationTable
|
||||
|
||||
|
||||
-- mulTable :: [Int]-> [[Int]]
|
||||
on mulTable(axis)
|
||||
|
||||
script column
|
||||
on |λ|(x)
|
||||
script row
|
||||
on |λ|(y)
|
||||
if y < x then
|
||||
{}
|
||||
else
|
||||
{x * y}
|
||||
end if
|
||||
end |λ|
|
||||
end script
|
||||
|
||||
{{x} & map(row, axis)}
|
||||
end |λ|
|
||||
end script
|
||||
|
||||
concatMap(column, axis)
|
||||
end mulTable
|
||||
|
||||
|
||||
-- tableText :: [[Int]] -> String
|
||||
on tableText(axis, rows)
|
||||
|
||||
set colWidth to 1 + (length of (|last|(|last|(rows)) as string))
|
||||
set cell to replicate(colWidth, space)
|
||||
|
||||
script tableLine
|
||||
on |λ|(xys)
|
||||
script tableCell
|
||||
on |λ|(int)
|
||||
(characters (-colWidth) thru -1 of (cell & int)) as string
|
||||
end |λ|
|
||||
end script
|
||||
|
||||
intercalate(space, map(tableCell, xys))
|
||||
end |λ|
|
||||
end script
|
||||
|
||||
set legend to {{"x"} & axis}
|
||||
intercalate(linefeed, map(tableLine, legend & {{}} & rows))
|
||||
|
||||
end tableText
|
||||
|
||||
--------------------------- TEST -------------------------
|
||||
on run
|
||||
multiplicationTable(1, 12) & linefeed & linefeed & ¬
|
||||
multiplicationTable(30, 40)
|
||||
end run
|
||||
|
||||
|
||||
-------------------- GENERIC FUNCTIONS -------------------
|
||||
|
||||
-- ap :: (a -> b -> c) -> (a -> b) -> a -> c
|
||||
on ap(f, g)
|
||||
-- The application of f x to g x
|
||||
script go
|
||||
property mf : |λ| of mReturn(f)
|
||||
property mg : |λ| of mReturn(g)
|
||||
on |λ|(x)
|
||||
mf(x, mg(x))
|
||||
end |λ|
|
||||
end script
|
||||
end ap
|
||||
|
||||
|
||||
-- concatMap :: (a -> [b]) -> [a] -> [b]
|
||||
on concatMap(f, xs)
|
||||
set lst to {}
|
||||
set lng to length of xs
|
||||
tell mReturn(f)
|
||||
repeat with i from 1 to lng
|
||||
set lst to (lst & |λ|(item i of xs, i, xs))
|
||||
end repeat
|
||||
end tell
|
||||
return lst
|
||||
end concatMap
|
||||
|
||||
|
||||
-- enumFromTo :: Int -> Int -> [Int]
|
||||
on enumFromTo(m, n)
|
||||
if m > n then
|
||||
set d to -1
|
||||
else
|
||||
set d to 1
|
||||
end if
|
||||
set lst to {}
|
||||
repeat with i from m to n by d
|
||||
set end of lst to i
|
||||
end repeat
|
||||
return lst
|
||||
end enumFromTo
|
||||
|
||||
|
||||
-- foldl :: (a -> b -> a) -> a -> [b] -> a
|
||||
on foldl(f, startValue, xs)
|
||||
tell mReturn(f)
|
||||
set v to startValue
|
||||
set lng to length of xs
|
||||
repeat with i from 1 to lng
|
||||
set v to |λ|(v, item i of xs, i, xs)
|
||||
end repeat
|
||||
return v
|
||||
end tell
|
||||
end foldl
|
||||
|
||||
|
||||
-- intercalate :: Text -> [Text] -> Text
|
||||
on intercalate(strText, lstText)
|
||||
set {dlm, my text item delimiters} to {my text item delimiters, strText}
|
||||
set strJoined to lstText as text
|
||||
set my text item delimiters to dlm
|
||||
return strJoined
|
||||
end intercalate
|
||||
|
||||
|
||||
-- justifyRight :: Int -> Char -> Text -> Text
|
||||
on justifyRight(n, cFiller, strText)
|
||||
if n > length of strText then
|
||||
text -n thru -1 of ((replicate(n, cFiller) as text) & strText)
|
||||
else
|
||||
strText
|
||||
end if
|
||||
end justifyRight
|
||||
|
||||
|
||||
-- last :: [a] -> a
|
||||
on |last|(xs)
|
||||
item -1 of xs
|
||||
end |last|
|
||||
|
||||
|
||||
-- map :: (a -> b) -> [a] -> [b]
|
||||
on map(f, xs)
|
||||
tell mReturn(f)
|
||||
set lng to length of xs
|
||||
set lst to {}
|
||||
repeat with i from 1 to lng
|
||||
set end of lst to |λ|(item i of xs, i, xs)
|
||||
end repeat
|
||||
return lst
|
||||
end tell
|
||||
end map
|
||||
|
||||
|
||||
-- Lift 2nd class handler function into 1st class script wrapper
|
||||
-- mReturn :: Handler -> Script
|
||||
on mReturn(f)
|
||||
if class of f is script then
|
||||
f
|
||||
else
|
||||
script
|
||||
property |λ| : f
|
||||
end script
|
||||
end if
|
||||
end mReturn
|
||||
|
||||
|
||||
-- replicate :: Int -> String -> String
|
||||
on replicate(n, s)
|
||||
set out to ""
|
||||
if n < 1 then return out
|
||||
set dbl to s
|
||||
|
||||
repeat while (n > 1)
|
||||
if (n mod 2) > 0 then set out to out & dbl
|
||||
set n to (n div 2)
|
||||
set dbl to (dbl & dbl)
|
||||
end repeat
|
||||
return out & dbl
|
||||
end replicate
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
100 M = 12
|
||||
110 DEF FN T(X) = X * 3 + (X < 4) * (4 - X) + (X > 10) * (X - 10) - 1
|
||||
120 FOR N = -1 TO M
|
||||
130 IF NOT N THEN PRINT CHR$(13) TAB(5); : FOR J = 5 TO FN T(M + 1) - 2 : PRINT "-"; : NEXT J, N
|
||||
140 I = ABS(N)
|
||||
150 IF N > 0 THEN PRINT CHR$(13) MID$(" ", 1, I < 10) I" !";
|
||||
160 FOR J = I TO M
|
||||
170 V$ = STR$(I * J)
|
||||
180 PRINT TAB(FN T(J)) MID$(" ", 1, 3 - LEN(V$) - (J < 4)) V$;
|
||||
190 NEXT J, N
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
mulTable: function [n][
|
||||
print [" |"] ++ map 1..n => [pad to :string & 3]
|
||||
print "----+" ++ join map 1..n => "----"
|
||||
loop 1..n 'x [
|
||||
prints (pad to :string x 3) ++ " |"
|
||||
if x>1 -> loop 1..x-1 'y [prints " "]
|
||||
loop x..n 'y [prints " " ++ pad to :string x*y 3]
|
||||
print ""
|
||||
]
|
||||
]
|
||||
|
||||
mulTable 12
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
Gui, -MinimizeBox
|
||||
Gui, Margin, 0, 0
|
||||
Gui, Font, s9, Fixedsys
|
||||
Gui, Add, Edit, h0 w0
|
||||
Gui, Add, Edit, w432 r14 -VScroll
|
||||
Gosub, Table
|
||||
Gui, Show,, Multiplication Table
|
||||
Return
|
||||
|
||||
GuiClose:
|
||||
GuiEscape:
|
||||
ExitApp
|
||||
Return
|
||||
|
||||
Table:
|
||||
; top row
|
||||
Table := " x |"
|
||||
Loop, 12
|
||||
Table .= SubStr(" " A_Index, -3)
|
||||
Table .= "`n"
|
||||
|
||||
; underlines
|
||||
Table .= "----+"
|
||||
Loop, 48
|
||||
Table .= "-"
|
||||
Table .= "`n"
|
||||
|
||||
; table
|
||||
Loop, 12 { ; rows
|
||||
Table .= SubStr(" " Row := A_Index, -2) " |"
|
||||
Loop, 12 ; columns
|
||||
Table .= SubStr(" " (A_Index >= Row ? A_Index * Row : ""), -3)
|
||||
Table .= "`n"
|
||||
}
|
||||
GuiControl,, Edit2, %Table%
|
||||
Return
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
#AutoIt Version: 3.2.10.0
|
||||
$tableupto=12
|
||||
$table=""
|
||||
for $i = 1 To $tableupto
|
||||
for $j = $i to $tableupto
|
||||
$prod=string($i*$j)
|
||||
if StringLen($prod) == 1 then
|
||||
$prod = " "& $prod
|
||||
EndIf
|
||||
if StringLen($prod) == 2 then
|
||||
$prod = " "& $prod
|
||||
EndIf
|
||||
$table = $table&" "&$prod
|
||||
Next
|
||||
$table = $table&" - "&$i&@CRLF
|
||||
for $k = 1 to $i
|
||||
$table = $table&" "
|
||||
Next
|
||||
Next
|
||||
msgbox(0,"Multiplication Tables",$table)
|
||||
18
Task/Multiplication-tables/Axe/multiplication-tables.axe
Normal file
18
Task/Multiplication-tables/Axe/multiplication-tables.axe
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
Fix 5
|
||||
ClrDraw
|
||||
For(I,1,10)
|
||||
Text(I-1*9,0,I▶Dec)
|
||||
Text(91,I*7+1,I▶Dec)
|
||||
End
|
||||
|
||||
For(J,1,8)
|
||||
For(I,J,10)
|
||||
Text(I-1*9,J*7+1,I*J▶Dec)
|
||||
End
|
||||
End
|
||||
|
||||
HLine(7)
|
||||
VLine(89)
|
||||
DispGraph
|
||||
getKeyʳ
|
||||
Fix 4
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
print " X| 1 2 3 4 5 6 7 8 9 10 11 12"
|
||||
print "---+------------------------------------------------"
|
||||
|
||||
for i = 1 to 12
|
||||
nums$ = right(" " + string(i), 3) + "|"
|
||||
for j = 1 to 12
|
||||
if i <= j then
|
||||
if j >= 1 then
|
||||
nums$ += left(" ", (4 - length(string(i * j))))
|
||||
end if
|
||||
nums$ += string(i * j)
|
||||
else
|
||||
nums$ += " "
|
||||
end if
|
||||
next j
|
||||
print nums$
|
||||
next i
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
@% = 5 : REM Set column width
|
||||
FOR row% = 1 TO 12
|
||||
PRINT row% TAB(row% * @%) ;
|
||||
FOR col% = row% TO 12
|
||||
PRINT row% * col% ;
|
||||
NEXT col%
|
||||
PRINT
|
||||
NEXT row%
|
||||
12
Task/Multiplication-tables/BQN/multiplication-tables.bqn
Normal file
12
Task/Multiplication-tables/BQN/multiplication-tables.bqn
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
Table ← {
|
||||
m ← •Repr¨ ×⌜˜1+↕𝕩 # The numbers, formatted individually
|
||||
main ← ⟨ # Bottom part: three sections
|
||||
>(-⌈10⋆⁼𝕩)↑¨⊏m # Original numbers
|
||||
𝕩⥊'|' # Divider
|
||||
∾˘(-1+⌈10⋆⁼𝕩×𝕩)↑¨(≤⌜˜↕𝕩)/¨m # Multiplied numbers, padded and joined
|
||||
⟩
|
||||
head ← ' '¨⌾⊑ ⊏¨ main # Header: first row but with space left of |
|
||||
∾ >⟨head, "-+-"⊣¨¨head, main⟩ # Header, divider, and main
|
||||
}
|
||||
|
||||
•Out˘ Table 12
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
@echo off
|
||||
setlocal enabledelayedexpansion
|
||||
|
||||
::The Main Thing...
|
||||
cls
|
||||
set colum=12&set row=12
|
||||
call :multable
|
||||
echo.
|
||||
pause
|
||||
exit /b 0
|
||||
::/The Main Thing.
|
||||
|
||||
::The Functions...
|
||||
:multable
|
||||
echo.
|
||||
for /l %%. in (1,1,%colum%) do (
|
||||
call :numstr %%.
|
||||
set firstline=!firstline!!space!%%.
|
||||
set seconline=!seconline!-----
|
||||
)
|
||||
echo !firstline!
|
||||
echo !seconline!
|
||||
|
||||
::The next lines here until the "goto :EOF" prints the products...
|
||||
|
||||
for /l %%X in (1,1,%row%) do (
|
||||
for /l %%Y in (1,1,%colum%) do (
|
||||
if %%Y lss %%X (set "line%%X=!line%%X! ") else (
|
||||
set /a ans=%%X*%%Y
|
||||
call :numstr !ans!
|
||||
set "line%%X=!line%%X!!space!!ans!"
|
||||
)
|
||||
)
|
||||
echo.!line%%X! ^| %%X
|
||||
)
|
||||
goto :EOF
|
||||
|
||||
:numstr
|
||||
::This function returns the number of whitespaces to be applied on each numbers.
|
||||
set cnt=0&set proc=%1&set space=
|
||||
:loop
|
||||
set currchar=!proc:~%cnt%,1!
|
||||
if not "!currchar!"=="" set /a cnt+=1&goto loop
|
||||
set /a numspaces=5-!cnt!
|
||||
for /l %%A in (1,1,%numspaces%) do set "space=!space! "
|
||||
goto :EOF
|
||||
::/The Functions.
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
0>51p0>52p51g52g*:51g52g`!*\!51g52g+*+0\3>01p::55+%68*+\!28v
|
||||
w^p2<y|!`+66:+1,+*84*"\"!:g25$_,#!>#:<$$_^#!:-1g10/+55\-**<<
|
||||
"$9"^x>$55+,51g1+:66+`#@_055+68*\>\#<1#*-#9:#5_$"+---">:#,_$
|
||||
|
|
@ -0,0 +1,56 @@
|
|||
( multiplicationTable
|
||||
= high i j row row2 matrix padFnc tmp
|
||||
, celPad leftCelPad padFnc celDashes leftDashes
|
||||
. !arg:?high
|
||||
& ( padFnc
|
||||
= L i w d
|
||||
. @(!arg:? [?L)
|
||||
& 1+(!L:?i):?L
|
||||
& " ":?w
|
||||
& "-":?d
|
||||
& whl
|
||||
' ( !i+-1:~<0:?i
|
||||
& " " !w:?w
|
||||
& "-" !d:?d
|
||||
)
|
||||
& str$!w:?w
|
||||
& (
|
||||
' (
|
||||
. @(str$(rev$!arg ()$w):?arg [($L) ?)
|
||||
& rev$!arg
|
||||
)
|
||||
. str$!d
|
||||
)
|
||||
)
|
||||
& padFnc$(!high^2):((=?celPad).?celDashes)
|
||||
& @(!high:?tmp [-2 ?)
|
||||
& padFnc$!tmp:((=?leftCelPad).?leftDashes)
|
||||
& 0:?i
|
||||
& :?row:?row2
|
||||
& whl
|
||||
' ( 1+!i:~>!high:?i
|
||||
& !row celPad$!i:?row
|
||||
& !celDashes !row2:?row2
|
||||
)
|
||||
& str$(leftCelPad$X "|" !row \n !leftDashes "+" !row2 \n)
|
||||
: ?matrix
|
||||
& 0:?j
|
||||
& whl
|
||||
' ( 1+!j:~>!high:?j
|
||||
& 0:?i
|
||||
& :?row
|
||||
& whl
|
||||
' ( 1+!i:<!j:?i
|
||||
& celPad$() !row:?row
|
||||
)
|
||||
& leftCelPad$!j "|" !row:?row
|
||||
& whl
|
||||
' ( 1+!i:~>!high:?i
|
||||
& !row celPad$(!i*!j):?row
|
||||
)
|
||||
& !matrix str$(!row \n):?matrix
|
||||
)
|
||||
& str$!matrix
|
||||
)
|
||||
& out$(multiplicationTable$12)
|
||||
& done;
|
||||
77
Task/Multiplication-tables/C++/multiplication-tables.cpp
Normal file
77
Task/Multiplication-tables/C++/multiplication-tables.cpp
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
#include <iostream>
|
||||
#include <iomanip>
|
||||
#include <cmath> // for log10()
|
||||
#include <algorithm> // for max()
|
||||
|
||||
size_t table_column_width(const int min, const int max)
|
||||
{
|
||||
unsigned int abs_max = std::max(max*max, min*min);
|
||||
|
||||
// abs_max is the largest absolute value we might see.
|
||||
// If we take the log10 and add one, we get the string width
|
||||
// of the largest possible absolute value.
|
||||
// Add one more for a little whitespace guarantee.
|
||||
size_t colwidth = 2 + std::log10(abs_max);
|
||||
|
||||
// If only one of them is less than 0, then some will
|
||||
// be negative. If some values may be negative, then we need to add some space
|
||||
// for a sign indicator (-)
|
||||
if (min < 0 && max > 0)
|
||||
++colwidth;
|
||||
return colwidth;
|
||||
}
|
||||
|
||||
struct Writer_
|
||||
{
|
||||
decltype(std::setw(1)) fmt_;
|
||||
Writer_(size_t w) : fmt_(std::setw(w)) {}
|
||||
template<class T_> Writer_& operator()(const T_& info) { std::cout << fmt_ << info; return *this; }
|
||||
};
|
||||
|
||||
void print_table_header(const int min, const int max)
|
||||
{
|
||||
Writer_ write(table_column_width(min, max));
|
||||
|
||||
// table corner
|
||||
write(" ");
|
||||
for(int col = min; col <= max; ++col)
|
||||
write(col);
|
||||
|
||||
// End header with a newline and blank line.
|
||||
std::cout << std::endl << std::endl;
|
||||
}
|
||||
|
||||
void print_table_row(const int num, const int min, const int max)
|
||||
{
|
||||
Writer_ write(table_column_width(min, max));
|
||||
|
||||
// Header column
|
||||
write(num);
|
||||
|
||||
// Spacing to ensure only the top half is printed
|
||||
for(int multiplicand = min; multiplicand < num; ++multiplicand)
|
||||
write(" ");
|
||||
|
||||
// Remaining multiplicands for the row.
|
||||
for(int multiplicand = num; multiplicand <= max; ++multiplicand)
|
||||
write(num * multiplicand);
|
||||
|
||||
// End row with a newline and blank line.
|
||||
std::cout << std::endl << std::endl;
|
||||
}
|
||||
|
||||
void print_table(const int min, const int max)
|
||||
{
|
||||
// Header row
|
||||
print_table_header(min, max);
|
||||
|
||||
// Table body
|
||||
for(int row = min; row <= max; ++row)
|
||||
print_table_row(row, min, max);
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
print_table(1, 12);
|
||||
return 0;
|
||||
}
|
||||
38
Task/Multiplication-tables/C-sharp/multiplication-tables.cs
Normal file
38
Task/Multiplication-tables/C-sharp/multiplication-tables.cs
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
using System;
|
||||
|
||||
namespace multtbl
|
||||
{
|
||||
class Program
|
||||
{
|
||||
static void Main(string[] args)
|
||||
{
|
||||
Console.Write(" X".PadRight(4));
|
||||
for (int i = 1; i <= 12; i++)
|
||||
Console.Write(i.ToString("####").PadLeft(4));
|
||||
|
||||
Console.WriteLine();
|
||||
Console.Write(" ___");
|
||||
|
||||
for (int i = 1; i <= 12; i++)
|
||||
Console.Write(" ___");
|
||||
|
||||
Console.WriteLine();
|
||||
for (int row = 1; row <= 12; row++)
|
||||
{
|
||||
Console.Write(row.ToString("###").PadLeft(3).PadRight(4));
|
||||
for (int col = 1; col <= 12; col++)
|
||||
{
|
||||
if (row <= col)
|
||||
Console.Write((row * col).ToString("###").PadLeft(4));
|
||||
else
|
||||
Console.Write("".PadLeft(4));
|
||||
}
|
||||
|
||||
Console.WriteLine();
|
||||
}
|
||||
|
||||
Console.WriteLine();
|
||||
Console.ReadLine();
|
||||
}
|
||||
}
|
||||
}
|
||||
17
Task/Multiplication-tables/C/multiplication-tables.c
Normal file
17
Task/Multiplication-tables/C/multiplication-tables.c
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
#include <stdio.h>
|
||||
|
||||
int main(void)
|
||||
{
|
||||
int i, j, n = 12;
|
||||
|
||||
for (j = 1; j <= n; j++) printf("%3d%c", j, j != n ? ' ' : '\n');
|
||||
for (j = 0; j <= n; j++) printf(j != n ? "----" : "+\n");
|
||||
|
||||
for (i = 1; i <= n; i++) {
|
||||
for (j = 1; j <= n; j++)
|
||||
printf(j < i ? " " : "%3d ", i * j);
|
||||
printf("| %d\n", i);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
46
Task/Multiplication-tables/COBOL/multiplication-tables.cobol
Normal file
46
Task/Multiplication-tables/COBOL/multiplication-tables.cobol
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
identification division.
|
||||
program-id. multiplication-table.
|
||||
|
||||
environment division.
|
||||
configuration section.
|
||||
repository.
|
||||
function all intrinsic.
|
||||
|
||||
data division.
|
||||
working-storage section.
|
||||
01 multiplication.
|
||||
05 rows occurs 12 times.
|
||||
10 colm occurs 12 times.
|
||||
15 num pic 999.
|
||||
77 cand pic 99.
|
||||
77 ier pic 99.
|
||||
77 ind pic z9.
|
||||
77 show pic zz9.
|
||||
|
||||
procedure division.
|
||||
sample-main.
|
||||
perform varying cand from 1 by 1 until cand greater than 12
|
||||
after ier from 1 by 1 until ier greater than 12
|
||||
multiply cand by ier giving num(cand, ier)
|
||||
end-perform
|
||||
|
||||
perform varying cand from 1 by 1 until cand greater than 12
|
||||
move cand to ind
|
||||
display "x " ind "| " with no advancing
|
||||
perform varying ier from 1 by 1 until ier greater than 12
|
||||
if ier greater than or equal to cand then
|
||||
move num(cand, ier) to show
|
||||
display show with no advancing
|
||||
if ier equal to 12 then
|
||||
display "|"
|
||||
else
|
||||
display space with no advancing
|
||||
end-if
|
||||
else
|
||||
display " " with no advancing
|
||||
end-if
|
||||
end-perform
|
||||
end-perform
|
||||
|
||||
goback.
|
||||
end program multiplication-table.
|
||||
65
Task/Multiplication-tables/Chef/multiplication-tables.chef
Normal file
65
Task/Multiplication-tables/Chef/multiplication-tables.chef
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
Multigrain Bread.
|
||||
|
||||
Prints out a multiplication table.
|
||||
|
||||
Ingredients.
|
||||
12 cups flour
|
||||
12 cups grains
|
||||
12 cups seeds
|
||||
1 cup water
|
||||
9 dashes yeast
|
||||
1 cup nuts
|
||||
40 ml honey
|
||||
1 cup sugar
|
||||
|
||||
Method.
|
||||
Sift the flour.
|
||||
Put flour into the 1st mixing bowl.
|
||||
Put yeast into the 1st mixing bowl.
|
||||
Shake the flour until sifted.
|
||||
Put grains into the 2nd mixing bowl.
|
||||
Fold flour into the 2nd mixing bowl.
|
||||
Put water into the 2nd mixing bowl.
|
||||
Add yeast into the 2nd mixing bowl.
|
||||
Combine flour into the 2nd mixing bowl.
|
||||
Fold nuts into the 2nd mixing bowl.
|
||||
Liquify nuts.
|
||||
Put nuts into the 1st mixing bowl.
|
||||
Pour contents of the 1st mixing bowl into the baking dish.
|
||||
Sieve the flour.
|
||||
Put yeast into the 2nd mixing bowl.
|
||||
Add water into the 2nd mixing bowl.
|
||||
Sprinkle the seeds.
|
||||
Put flour into the 2nd mixing bowl.
|
||||
Combine seeds into the 2nd mixing bowl.
|
||||
Put yeast into the 2nd mixing bowl.
|
||||
Put seeds into the 2nd mixing bowl.
|
||||
Remove flour from the 2nd mixing bowl.
|
||||
Fold honey into the 2nd mixing bowl.
|
||||
Put water into the 2nd mixing bowl.
|
||||
Fold sugar into the 2nd mixing bowl.
|
||||
Squeeze the honey.
|
||||
Put water into the 2nd mixing bowl.
|
||||
Remove water from the 2nd mixing bowl.
|
||||
Fold sugar into the 2nd mixing bowl.
|
||||
Set aside.
|
||||
Drip until squeezed.
|
||||
Scoop the sugar.
|
||||
Crush the seeds.
|
||||
Put yeast into the 2nd mixing bowl.
|
||||
Grind the seeds until crushed.
|
||||
Put water into the 2nd mixing bowl.
|
||||
Fold seeds into the 2nd mixing bowl.
|
||||
Set aside.
|
||||
Drop until scooped.
|
||||
Randomize the seeds until sprinkled.
|
||||
Fold honey into the 2nd mixing bowl.
|
||||
Put flour into the 2nd mixing bowl.
|
||||
Put grains into the 2nd mixing bowl.
|
||||
Fold seeds into the 2nd mixing bowl.
|
||||
Shake the flour until sieved.
|
||||
Put yeast into the 2nd mixing bowl.
|
||||
Add water into the 2nd mixing bowl.
|
||||
Pour contents of the 2nd mixing bowl into the 2nd baking dish.
|
||||
|
||||
Serves 2.
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
100 cls
|
||||
110 print tab (4);
|
||||
120 for i = 1 to 12
|
||||
130 print using " ###";i;
|
||||
140 next
|
||||
150 print
|
||||
160 print " --+------------------------------------------------"
|
||||
170 for i = 1 to 12
|
||||
180 print using " ##|";i;
|
||||
190 print tab (i*4);
|
||||
200 for j = i to 12
|
||||
210 print using " ###";i*j;
|
||||
220 next
|
||||
230 print
|
||||
240 next
|
||||
250 end
|
||||
13
Task/Multiplication-tables/Clojure/multiplication-tables.clj
Normal file
13
Task/Multiplication-tables/Clojure/multiplication-tables.clj
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
(let [size 12
|
||||
trange (range 1 (inc size))
|
||||
fmt-width (+ (.length (str (* size size))) 1)
|
||||
fmt-str (partial format (str "%" fmt-width "s"))
|
||||
fmt-dec (partial format (str "% " fmt-width "d"))]
|
||||
|
||||
(doseq [s (cons
|
||||
(apply str (fmt-str " ") (map #(fmt-dec %) trange))
|
||||
(for [i trange]
|
||||
(apply str (fmt-dec i) (map #(fmt-str (str %))
|
||||
(map #(if (>= % i) (* i %) " ")
|
||||
(for [j trange] j))))))]
|
||||
(println s)))
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
print_multiplication_tables = (n) ->
|
||||
width = 4
|
||||
|
||||
pad = (s, n=width, c=' ') ->
|
||||
s = s.toString()
|
||||
result = ''
|
||||
padding = n - s.length
|
||||
while result.length < padding
|
||||
result += c
|
||||
result + s
|
||||
|
||||
s = pad('') + '|'
|
||||
for i in [1..n]
|
||||
s += pad i
|
||||
console.log s
|
||||
|
||||
s = pad('', width, '-') + '+'
|
||||
for i in [1..n]
|
||||
s += pad '', width, '-'
|
||||
console.log s
|
||||
|
||||
|
||||
for i in [1..n]
|
||||
s = pad i
|
||||
s += '|'
|
||||
s += pad '', width*(i - 1)
|
||||
for j in [i..n]
|
||||
s += pad i*j
|
||||
console.log s
|
||||
|
||||
print_multiplication_tables 12
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
100 PRINT CHR$(14);CHR$(147);
|
||||
110 PRINT " X";
|
||||
120 W=2
|
||||
130 FOR I=1 TO 10
|
||||
140 : N=I
|
||||
150 : GOSUB 520
|
||||
160 : PRINT ":"N$;
|
||||
170 NEXT I
|
||||
180 W=3
|
||||
190 FOR I=11 TO 12
|
||||
200 : N=I
|
||||
210 : GOSUB 520
|
||||
220 : PRINT ":"N$;
|
||||
230 NEXT
|
||||
240 FOR I=1 TO 12
|
||||
250 : PRINT "--";
|
||||
260 : FOR J=1 TO 10
|
||||
270 : PRINT "+--";
|
||||
280 : NEXT J
|
||||
290 : FOR J=11 TO 12
|
||||
300 : PRINT "+---";
|
||||
310 : NEXT J
|
||||
320 : N=I:W=2:GOSUB 520:PRINT N$;
|
||||
330 : FOR J=1 TO 10
|
||||
340 : W=2
|
||||
350 : IF J<I THEN N$=" ":GOSUB 530:GOTO 370
|
||||
360 : N=I*J:GOSUB 520
|
||||
370 : IF LEN(N$)<3 THEN PRINT ":";
|
||||
380 : PRINT N$;
|
||||
390 : NEXT J
|
||||
400 : FOR J=11 TO 12
|
||||
410 : W=3
|
||||
420 : IF J<I THEN N$=" ":GOSUB 530:GOTO 440
|
||||
430 : N=I*J:GOSUB 520
|
||||
440 : PRINT N$;
|
||||
450 : FOR K=1 TO LEN(N$): PRINT CHR$(157);:NEXT K
|
||||
460 : PRINT CHR$(148);":";
|
||||
470 : IF J<12 THEN FOR K=1 TO LEN(N$):PRINT CHR$(29);: NEXT K
|
||||
480 : NEXT J: IF I<12 THEN PRINT
|
||||
490 NEXT I
|
||||
500 GET K$: IF K$="" THEN 500
|
||||
510 END
|
||||
520 N$=MID$(STR$(N),2)
|
||||
530 IF LEN(N$)<W THEN N$=" "+N$:GOTO 530
|
||||
540 RETURN
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
(do ((m 0 (if (= 12 m) 0 (1+ m)))
|
||||
(n 0 (if (= 12 m) (1+ n) n)))
|
||||
((= n 13))
|
||||
(if (zerop n)
|
||||
(case m
|
||||
(0 (format t " *|"))
|
||||
(12 (format t " 12~&---+------------------------------------------------~&"))
|
||||
(otherwise
|
||||
(format t "~4,D" m)))
|
||||
(case m
|
||||
(0 (format t "~3,D|" n))
|
||||
(12 (format t "~4,D~&" (* n m)))
|
||||
(otherwise
|
||||
(if (>= m n)
|
||||
(format t "~4,D" (* m n))
|
||||
(format t " "))))))
|
||||
9
Task/Multiplication-tables/D/multiplication-tables.d
Normal file
9
Task/Multiplication-tables/D/multiplication-tables.d
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
void main() {
|
||||
import std.stdio, std.array, std.range, std.algorithm;
|
||||
|
||||
enum n = 12;
|
||||
writefln(" %(%4d%)\n%s", iota(1, n+1), "-".replicate(4*n + 4));
|
||||
foreach (immutable y; 1 .. n + 1)
|
||||
writefln("%4d" ~ " ".replicate(4 * (y - 1)) ~ "%(%4d%)", y,
|
||||
iota(y, n + 1).map!(x => x * y));
|
||||
}
|
||||
26
Task/Multiplication-tables/DCL/multiplication-tables.dcl
Normal file
26
Task/Multiplication-tables/DCL/multiplication-tables.dcl
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
$ max = 12
|
||||
$ h = f$fao( "!4* " )
|
||||
$ r = 0
|
||||
$ loop1:
|
||||
$ o = ""
|
||||
$ c = 0
|
||||
$ loop2:
|
||||
$ if r .eq. 0 then $ h = h + f$fao( "!4SL", c )
|
||||
$ p = r * c
|
||||
$ if c .ge. r
|
||||
$ then
|
||||
$ o = o + f$fao( "!4SL", p )
|
||||
$ else
|
||||
$ o = o + f$fao( "!4* " )
|
||||
$ endif
|
||||
$ c = c + 1
|
||||
$ if c .le. max then $ goto loop2
|
||||
$ if r .eq. 0
|
||||
$ then
|
||||
$ write sys$output h
|
||||
$ n = 4 * ( max + 2 )
|
||||
$ write sys$output f$fao( "!''n*-" )
|
||||
$ endif
|
||||
$ write sys$output f$fao( "!4SL", r ) + o
|
||||
$ r = r + 1
|
||||
$ if r .le. max then $ goto loop1
|
||||
18
Task/Multiplication-tables/DWScript/multiplication-tables.dw
Normal file
18
Task/Multiplication-tables/DWScript/multiplication-tables.dw
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
const size = 12;
|
||||
var row, col : Integer;
|
||||
|
||||
Print(' | ');
|
||||
for row:=1 to size do
|
||||
Print(Format('%4d', [row]));
|
||||
PrintLn('');
|
||||
PrintLn('--+-'+StringOfChar('-', size*4));
|
||||
for row:=1 to size do begin
|
||||
Print(Format('%2d', [row]));
|
||||
Print('| ');
|
||||
for col:=1 to size do begin
|
||||
if col<row then
|
||||
Print(' ')
|
||||
else Print(Format('%4d', [row*col]));
|
||||
end;
|
||||
PrintLn('');
|
||||
end;
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
program MultiplicationTables;
|
||||
|
||||
{$APPTYPE CONSOLE}
|
||||
|
||||
uses SysUtils;
|
||||
|
||||
const
|
||||
MAX_COUNT = 12;
|
||||
var
|
||||
lRow, lCol: Integer;
|
||||
begin
|
||||
Write(' | ');
|
||||
for lRow := 1 to MAX_COUNT do
|
||||
Write(Format('%4d', [lRow]));
|
||||
Writeln('');
|
||||
Writeln('--+-' + StringOfChar('-', MAX_COUNT * 4));
|
||||
for lRow := 1 to MAX_COUNT do
|
||||
begin
|
||||
Write(Format('%2d', [lRow]));
|
||||
Write('| ');
|
||||
for lCol := 1 to MAX_COUNT do
|
||||
begin
|
||||
if lCol < lRow then
|
||||
Write(' ')
|
||||
else
|
||||
Write(Format('%4d', [lRow * lCol]));
|
||||
end;
|
||||
Writeln;
|
||||
end;
|
||||
end.
|
||||
26
Task/Multiplication-tables/Draco/multiplication-tables.draco
Normal file
26
Task/Multiplication-tables/Draco/multiplication-tables.draco
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
/* Print N-by-N multiplication table */
|
||||
proc nonrec multab(byte n) void:
|
||||
byte i,j;
|
||||
|
||||
/* write header */
|
||||
write(" |");
|
||||
for i from 1 upto n do write(i:4) od;
|
||||
writeln();
|
||||
write("----+");
|
||||
for i from 1 upto n do write("----") od;
|
||||
writeln();
|
||||
|
||||
/* write lines */
|
||||
for i from 1 upto n do
|
||||
write(i:4, "|");
|
||||
for j from 1 upto n do
|
||||
if i <= j then write(i*j:4)
|
||||
else write(" ")
|
||||
fi
|
||||
od;
|
||||
writeln()
|
||||
od
|
||||
corp
|
||||
|
||||
/* Print 12-by-12 multiplication table */
|
||||
proc nonrec main() void: multab(12) corp
|
||||
14
Task/Multiplication-tables/E/multiplication-tables.e
Normal file
14
Task/Multiplication-tables/E/multiplication-tables.e
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
def size := 12
|
||||
println(`{|style="border-collapse: collapse; text-align: right;"`)
|
||||
println(`|`)
|
||||
for x in 1..size {
|
||||
println(`|style="border-bottom: 1px solid black; " | $x`)
|
||||
}
|
||||
for y in 1..size {
|
||||
println(`|-`)
|
||||
println(`|style="border-right: 1px solid black;" | $y`)
|
||||
for x in 1..size {
|
||||
println(`| ${if (x >= y) { x*y } else {""}}`)
|
||||
}
|
||||
}
|
||||
println("|}")
|
||||
10
Task/Multiplication-tables/EMal/multiplication-tables.emal
Normal file
10
Task/Multiplication-tables/EMal/multiplication-tables.emal
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
int NUMBER = 12
|
||||
for int j = 1; j <= NUMBER; ++j do write((text!j).padStart(3, " ") + " ") end
|
||||
writeLine()
|
||||
writeLine("----" * NUMBER + "+")
|
||||
for int i = 1; i <= NUMBER; i++
|
||||
for int j = 1; j <= NUMBER; ++j
|
||||
write(when(j < i, " ", (text!(i * j)).padStart(3, " ") + " "))
|
||||
end
|
||||
writeLine("| " + (text!i).padStart(2, " "))
|
||||
end
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
n = 12
|
||||
numfmt 0 4
|
||||
write " "
|
||||
for i = 1 to n
|
||||
write i
|
||||
.
|
||||
print ""
|
||||
write " "
|
||||
for i = 1 to n
|
||||
write "----"
|
||||
.
|
||||
print ""
|
||||
for i = 1 to n
|
||||
write i
|
||||
write "|"
|
||||
for j = 1 to n
|
||||
if j < i
|
||||
write " "
|
||||
else
|
||||
write i * j
|
||||
.
|
||||
.
|
||||
print ""
|
||||
.
|
||||
11
Task/Multiplication-tables/EchoLisp/multiplication-tables.l
Normal file
11
Task/Multiplication-tables/EchoLisp/multiplication-tables.l
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
(lib 'matrix)
|
||||
|
||||
(define (mtable i j)
|
||||
(cond
|
||||
((and (zero? i) (zero? j)) "😅")
|
||||
((= i 0) j)
|
||||
((= j 0) i)
|
||||
((>= j i ) (* i j ))
|
||||
(else " ")))
|
||||
|
||||
(array-print (build-array 13 13 mtable))
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
defmodule RC do
|
||||
def multiplication_tables(n) do
|
||||
IO.write " X |"
|
||||
Enum.each(1..n, fn i -> :io.fwrite("~4B", [i]) end)
|
||||
IO.puts "\n---+" <> String.duplicate("----", n)
|
||||
Enum.each(1..n, fn j ->
|
||||
:io.fwrite("~2B |", [j])
|
||||
Enum.each(1..n, fn i ->
|
||||
if i<j, do: (IO.write " "), else: :io.fwrite("~4B", [i*j])
|
||||
end)
|
||||
IO.puts ""
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
RC.multiplication_tables(12)
|
||||
24
Task/Multiplication-tables/Erlang/multiplication-tables.erl
Normal file
24
Task/Multiplication-tables/Erlang/multiplication-tables.erl
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
-module( multiplication_tables ).
|
||||
|
||||
-export( [print_upto/1, task/0, upto/1] ).
|
||||
|
||||
print_upto( N ) ->
|
||||
Upto_tuples = [{X, {Y, Sum}} || {X, Y, Sum} <- upto(N)],
|
||||
io:fwrite( " " ),
|
||||
[io:fwrite( "~5B", [X]) || X <- lists:seq(1, N)],
|
||||
io:nl(),
|
||||
io:nl(),
|
||||
[print_upto(X, proplists:get_all_values(X, Upto_tuples)) || X <- lists:seq(1, N)].
|
||||
|
||||
|
||||
task() -> print_upto( 12 ).
|
||||
|
||||
upto( N ) -> [{X, Y, X*Y} || X <- lists:seq(1, N), Y <- lists:seq(1, N), Y >= X].
|
||||
|
||||
|
||||
|
||||
print_upto( N, Uptos ) ->
|
||||
io:fwrite( "~2B", [N] ),
|
||||
io:fwrite( "~*s", [5*(N - 1), " "] ),
|
||||
[io:fwrite("~5B", [Sum]) || {_Y, Sum} <- Uptos],
|
||||
io:nl().
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
puts(1," x")
|
||||
for i = 1 to 12 do
|
||||
printf(1," %3d",i)
|
||||
end for
|
||||
|
||||
puts(1,'\n')
|
||||
|
||||
for i = 1 to 12 do
|
||||
printf(1,"%2d",i)
|
||||
for j = 1 to 12 do
|
||||
if j<i then
|
||||
puts(1," ")
|
||||
else
|
||||
printf(1," %3d",i*j)
|
||||
end if
|
||||
end for
|
||||
puts(1,'\n')
|
||||
end for
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
FNOVERHALFCARTESIANPRODUCT
|
||||
=LAMBDA(f,
|
||||
LAMBDA(n,
|
||||
LET(
|
||||
ixs, SEQUENCE(n, n, 1, 1),
|
||||
|
||||
REM, "1-based indices.",
|
||||
x, 1 + MOD(ixs - 1, n),
|
||||
y, 1 + QUOTIENT(ixs - 1, n),
|
||||
|
||||
IF(x >= y,
|
||||
f(x)(y),
|
||||
""
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
MUL
|
||||
=LAMBDA(a, LAMBDA(b, a * b))
|
||||
|
||||
|
||||
POW
|
||||
=LAMBDA(n,
|
||||
LAMBDA(e,
|
||||
POWER(n, e)
|
||||
)
|
||||
)
|
||||
19
Task/Multiplication-tables/F-Sharp/multiplication-tables.fs
Normal file
19
Task/Multiplication-tables/F-Sharp/multiplication-tables.fs
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
open System
|
||||
|
||||
let multTable () =
|
||||
Console.Write (" X".PadRight (4))
|
||||
for i = 1 to 12 do Console.Write ((i.ToString "####").PadLeft 4)
|
||||
Console.Write "\n ___"
|
||||
for i = 1 to 12 do Console.Write " ___"
|
||||
Console.WriteLine ()
|
||||
for row = 1 to 12 do
|
||||
Console.Write (row.ToString("###").PadLeft(3).PadRight(4))
|
||||
for col = 1 to 12 do
|
||||
if row <= col then Console.Write ((row * col).ToString("###").PadLeft(4))
|
||||
else
|
||||
Console.Write ("".PadLeft 4)
|
||||
Console.WriteLine ()
|
||||
Console.WriteLine ()
|
||||
Console.ReadKey () |> ignore
|
||||
|
||||
multTable ()
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[$100\>[" "]?$10\>[" "]?." "]p:
|
||||
[$p;! m: 2[$m;\>][" "1+]# [$13\>][$m;*p;!1+]#%"
|
||||
"]l:
|
||||
1[$13\>][$l;!1+]#%
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
USING: io kernel math math.parser math.ranges sequences ;
|
||||
IN: multiplication-table
|
||||
|
||||
: print-row ( n -- )
|
||||
[ number>string 2 CHAR: space pad-head write " |" write ]
|
||||
[ 1 - [ " " write ] times ]
|
||||
[
|
||||
dup 12 [a,b]
|
||||
[ * number>string 4 CHAR: space pad-head write ] with each
|
||||
] tri nl ;
|
||||
|
||||
: print-table ( -- )
|
||||
" " write
|
||||
1 12 [a,b] [ number>string 4 CHAR: space pad-head write ] each nl
|
||||
" +" write
|
||||
12 [ "----" write ] times nl
|
||||
1 12 [a,b] [ print-row ] each ;
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
class Main
|
||||
{
|
||||
static Void multiplicationTable (Int n)
|
||||
{
|
||||
// print column headings
|
||||
echo (" |" + (1..n).map |Int a -> Str| { a.toStr.padl(4)}.join("") )
|
||||
echo ("-----" + (1..n).map { "----" }.join("") )
|
||||
// work through each row
|
||||
(1..n).each |i|
|
||||
{
|
||||
echo ( i.toStr.padl(4) + "|" +
|
||||
Str.spaces(4*(i-1)) +
|
||||
(i..n).map |Int j -> Str| { (i*j).toStr.padl(4)}.join("") )
|
||||
}
|
||||
}
|
||||
|
||||
public static Void main ()
|
||||
{
|
||||
multiplicationTable (12)
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
: multiplication-table
|
||||
cr 2 spaces 13 2 do i 4 u.r loop
|
||||
cr
|
||||
13 2 do
|
||||
cr i 2 u.r
|
||||
13 2 do
|
||||
i j < if 4 spaces else i j * 4 u.r then
|
||||
loop
|
||||
loop ;
|
||||
19
Task/Multiplication-tables/Fortran/multiplication-tables-1.f
Normal file
19
Task/Multiplication-tables/Fortran/multiplication-tables-1.f
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
program multtable
|
||||
implicit none
|
||||
|
||||
integer :: i, j, k
|
||||
|
||||
write(*, "(a)") " x| 1 2 3 4 5 6 7 8 9 10 11 12"
|
||||
write(*, "(a)") "--+------------------------------------------------"
|
||||
do i = 1, 12
|
||||
write(*, "(i2, a)", advance="no") i, "|"
|
||||
do k = 2, i
|
||||
write(*, "(a4)", advance="no") ""
|
||||
end do
|
||||
do j = i, 12
|
||||
write(*, "(i4)", advance="no") i*j
|
||||
end do
|
||||
write(*, *)
|
||||
end do
|
||||
|
||||
end program multtable
|
||||
11
Task/Multiplication-tables/Fortran/multiplication-tables-2.f
Normal file
11
Task/Multiplication-tables/Fortran/multiplication-tables-2.f
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
Cast forth a twelve times table, suitable for chanting at school.
|
||||
INTEGER I,J !Steppers.
|
||||
CHARACTER*52 ALINE !Scratchpad.
|
||||
WRITE(6,1) (I,I = 1,12) !Present the heading.
|
||||
1 FORMAT (" ×|",12I4,/," --+",12("----")) !Alas, can't do overprinting with underlines now.
|
||||
DO 3 I = 1,12 !Step down the lines.
|
||||
WRITE (ALINE,2) I,(I*J, J = 1,12) !Prepare one line.
|
||||
2 FORMAT (I3,"|",12I4) !Aligned with the heading.
|
||||
ALINE(5:1 + 4*I) = "" !Scrub the unwanted part.
|
||||
3 WRITE (6,"(A)") ALINE !Print the text.
|
||||
END !"One one is one! One two is two! One three is three!...
|
||||
10
Task/Multiplication-tables/Fortran/multiplication-tables-3.f
Normal file
10
Task/Multiplication-tables/Fortran/multiplication-tables-3.f
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
Cast forth a twelve times table, suitable for chanting at school.
|
||||
INTEGER I,J !Steppers.
|
||||
CHARACTER*16 FORMAT !Scratchpad.
|
||||
WRITE(6,1) (I,I = 1,12) !Present the heading.
|
||||
1 FORMAT (" ×|",12I4,/," --+",12("----")) !Alas, can't do overprinting with underlines now.
|
||||
DO 3 I = 1,12 !Step down the lines.
|
||||
WRITE (FORMAT,2) (I - 1)*4,13 - I !Spacing for omitted fields, count of wanted fields.
|
||||
2 FORMAT ("(I3,'|',",I0,"X,",I0,"I4)") !The format of the FORMAT statement.
|
||||
3 WRITE (6,FORMAT) I,(I*J, J = I,12) !Use it.
|
||||
END !"One one is one! One two is two! One three is three!...
|
||||
24
Task/Multiplication-tables/Fortran/multiplication-tables-4.f
Normal file
24
Task/Multiplication-tables/Fortran/multiplication-tables-4.f
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
PROGRAM TABLES
|
||||
IMPLICIT NONE
|
||||
C
|
||||
C Produce a formatted multiplication table of the kind memorised by rote
|
||||
C when in primary school. Only print the top half triangle of products.
|
||||
C
|
||||
C 23 Nov 15 - 0.1 - Adapted from original for VAX FORTRAN - MEJT
|
||||
C
|
||||
INTEGER I,J,K ! Counters.
|
||||
CHARACTER*32 S ! Buffer for format specifier.
|
||||
C
|
||||
K=12
|
||||
C
|
||||
WRITE(S,1) K,K
|
||||
1 FORMAT(8H(4H0 |,,I2.2,11HI4,/,4H --+,I2.2,9H(4H----)))
|
||||
WRITE(6,S) (I,I = 1,K) ! Print heading.
|
||||
C
|
||||
DO 3 I=1,K ! Step down the lines.
|
||||
WRITE(S,2) (I-1)*4+1,K ! Update format string.
|
||||
2 FORMAT(12H(1H ,I2,1H|,,I2.2,5HX,I3,,I2.2,3HI4),8X) ! Format string includes an explicit carridge control character.
|
||||
WRITE(6,S) I,(I*J, J = I,K) ! Use format to print row with leading blanks, unused fields are ignored.
|
||||
3 CONTINUE
|
||||
C
|
||||
END
|
||||
35
Task/Multiplication-tables/Fortran/multiplication-tables-5.f
Normal file
35
Task/Multiplication-tables/Fortran/multiplication-tables-5.f
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
PROGRAM TABLES
|
||||
C
|
||||
C Produce a formatted multiplication table of the kind memorised by rote
|
||||
C when in primary school. Only print the top half triangle of products.
|
||||
C
|
||||
C 23 Nov 15 - 0.1 - Adapted from original for VAX FORTRAN - MEJT
|
||||
C 24 Nov 15 - 0.2 - FORTRAN IV version adapted from VAX FORTRAN and
|
||||
C compiled using Microsoft FORTRAN-80 - MEJT
|
||||
C
|
||||
DIMENSION K(12)
|
||||
DIMENSION A(6)
|
||||
DIMENSION L(12)
|
||||
C
|
||||
COMMON //A
|
||||
EQUIVALENCE (A(1),L(1))
|
||||
C
|
||||
DATA A/'(1H ',',I2,','1H|,','01X,','I3,1','2I4)'/
|
||||
C
|
||||
WRITE(1,1) (I,I=1,12)
|
||||
1 FORMAT(4H0 |,12I4,/,4H --+12(4H----))
|
||||
C
|
||||
C Overlaying the format specifier with an integer array makes it possibe
|
||||
C to modify the number of blank spaces. The number of blank spaces is
|
||||
C stored as two consecuitive ASCII characters that overlay on the
|
||||
C integer value in L(7) in the ordr low byte, high byte.
|
||||
C
|
||||
DO 3 I=1,12
|
||||
L(7)=(48+(I*4-3)-((I*4-3)/10)*10)*256+48+((I*4-3)/10)
|
||||
DO 2 J=1,12
|
||||
K(J)=I*J
|
||||
2 CONTINUE
|
||||
WRITE(1,A)I,(K(J), J = I,12)
|
||||
3 CONTINUE
|
||||
C
|
||||
END
|
||||
33
Task/Multiplication-tables/Fortran/multiplication-tables-6.f
Normal file
33
Task/Multiplication-tables/Fortran/multiplication-tables-6.f
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
PROGRAM TABLES
|
||||
C
|
||||
C Produce a formatted multiplication table of the kind memorised by rote
|
||||
C when in primary school. Only print the top half triangle of products.
|
||||
C
|
||||
C 23 Nov 15 - 0.1 - Adapted from original for VAX FORTRAN - MEJT
|
||||
C 24 Nov 15 - 0.2 - FORTRAN IV version adapted from VAX FORTRAN and
|
||||
C compiled using Microsoft FORTRAN-80 - MEJT
|
||||
C 25 Nov 15 - 0.3 - Microsoft FORTRAN-80 version using a BYTE array
|
||||
C which makes it easier to understand what is going
|
||||
C on. - MEJT
|
||||
C
|
||||
BYTE A
|
||||
DIMENSION A(24)
|
||||
DIMENSION K(12)
|
||||
C
|
||||
DATA A/'(','1','H',' ',',','I','2',',','1','H','|',',',
|
||||
+ '0','1','X',',','I','3',',','1','1','I','4',')'/
|
||||
C
|
||||
C Print a heading and (try to) underline it.
|
||||
C
|
||||
WRITE(1,1) (I,I=1,12)
|
||||
1 FORMAT(4H |,12I4,/,4H --+12(4H----))
|
||||
DO 3 I=1,12
|
||||
A(13)=48+((I*4-3)/10)
|
||||
A(14)=48+(I*4-3)-((I*4-3)/10)*10
|
||||
DO 2 J=1,12
|
||||
K(J)=I*J
|
||||
2 CONTINUE
|
||||
WRITE(1,A)I,(K(J), J = I,12)
|
||||
3 CONTINUE
|
||||
C
|
||||
END
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
WRITE(1,4) (A(J), J = 1,24)
|
||||
4 FORMAT(1x,24A1)
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
' FB 1.05.0 Win64
|
||||
|
||||
Print " X|";
|
||||
For i As Integer = 1 To 12
|
||||
Print Using "####"; i;
|
||||
Next
|
||||
|
||||
Print
|
||||
Print "---+"; String(48, "-")
|
||||
|
||||
For i As Integer = 1 To 12
|
||||
Print Using "###"; i;
|
||||
Print"|"; Spc(4 * (i - 1));
|
||||
For j As Integer = i To 12
|
||||
Print Using "####"; i * j;
|
||||
Next j
|
||||
Print
|
||||
Next i
|
||||
|
||||
Print
|
||||
Print "Press any key to quit"
|
||||
Sleep
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
a = makeArray[[13,13], {|a,b| a==0 ? b : (b==0 ? a : (a<=b ? a*b : ""))}]
|
||||
formatTable[a,"right"]
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
long i, j
|
||||
|
||||
window 1, @"Multiplication Table", (0,0,420,220)
|
||||
|
||||
print " |";
|
||||
for i = 1 to 12
|
||||
print using "####"; i;
|
||||
next
|
||||
print :print "---+"; string$(48, "-")
|
||||
for i = 1 to 12
|
||||
print using "###"; i;
|
||||
print"|"; spc(4 * (i - 1));
|
||||
for j = i to 12
|
||||
print using "####"; i * j;
|
||||
next
|
||||
print
|
||||
next
|
||||
|
||||
HandleEvents
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
10 ' Multiplication Tables
|
||||
20 LET N% = 12
|
||||
30 FOR J% = 1 TO N% - 1
|
||||
40 PRINT USING "###"; J%;
|
||||
50 PRINT " ";
|
||||
60 NEXT J%
|
||||
70 PRINT USING "###"; N%
|
||||
80 FOR J% = 0 TO N% - 1
|
||||
90 PRINT "----";
|
||||
100 NEXT J%
|
||||
110 PRINT "+"
|
||||
120 FOR I% = 1 TO N%
|
||||
130 FOR J% = 1 TO N%
|
||||
140 IF J% < I% THEN PRINT " "; ELSE PRINT USING "###"; I% * J%;: PRINT " ";
|
||||
150 NEXT J%
|
||||
160 PRINT "| "; USING "##"; I%
|
||||
170 NEXT I%
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
'Code 'stolen' from Free Basic and altered to work in Gambas
|
||||
|
||||
Public Sub Main()
|
||||
Dim i, j As Integer
|
||||
|
||||
Print " X|";
|
||||
For i = 1 To 12
|
||||
Print Format(i, "####");
|
||||
Next
|
||||
|
||||
Print
|
||||
Print "---+"; String(48, "-")
|
||||
|
||||
For i = 1 To 12
|
||||
Print Format(i, "###");
|
||||
Print "|"; Space(4 * (i - 1));
|
||||
For j = i To 12
|
||||
Print Format(i * j, "####");
|
||||
Next
|
||||
Print
|
||||
Next
|
||||
|
||||
End
|
||||
27
Task/Multiplication-tables/Go/multiplication-tables.go
Normal file
27
Task/Multiplication-tables/Go/multiplication-tables.go
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
)
|
||||
|
||||
func main() {
|
||||
fmt.Print(" x |")
|
||||
for i := 1; i <= 12; i++ {
|
||||
fmt.Printf("%4d", i)
|
||||
}
|
||||
fmt.Print("\n---+")
|
||||
for i := 1; i <= 12; i++ {
|
||||
fmt.Print("----")
|
||||
}
|
||||
for j := 1; j <= 12; j++ {
|
||||
fmt.Printf("\n%2d |", j)
|
||||
for i := 1; i <= 12; i++ {
|
||||
if i >= j {
|
||||
fmt.Printf("%4d", i*j)
|
||||
} else {
|
||||
fmt.Print(" ")
|
||||
}
|
||||
}
|
||||
}
|
||||
fmt.Println("")
|
||||
}
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
def printMultTable = { size = 12 ->
|
||||
assert size > 1
|
||||
|
||||
// factor1 line
|
||||
print ' |'; (1..size).each { f1 -> printf('%4d', f1) }; println ''
|
||||
|
||||
// dividing line
|
||||
print '--+'; (1..size).each { printf('----', it) }; println ''
|
||||
|
||||
// factor2 result lines
|
||||
(1..size).each { f2 ->
|
||||
printf('%2d|', f2)
|
||||
(1..<f2).each{ print ' ' }
|
||||
(f2..size).each{ f1 -> printf('%4d', f1*f2) }
|
||||
println ''
|
||||
}
|
||||
}
|
||||
|
||||
printMultTable()
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
import Data.Maybe (fromMaybe, maybe)
|
||||
|
||||
------------------- MULTIPLICATION TABLE -----------------
|
||||
|
||||
mulTable :: [Int] -> [[Maybe Int]]
|
||||
mulTable xs =
|
||||
(Nothing : labels) :
|
||||
zipWith
|
||||
(:)
|
||||
labels
|
||||
[[upperMul x y | y <- xs] | x <- xs]
|
||||
where
|
||||
labels = Just <$> xs
|
||||
upperMul x y
|
||||
| x > y = Nothing
|
||||
| otherwise = Just (x * y)
|
||||
|
||||
|
||||
--------------------------- TEST -------------------------
|
||||
main :: IO ()
|
||||
main =
|
||||
putStrLn . unlines $
|
||||
showTable . mulTable
|
||||
<$> [ [13 .. 20],
|
||||
[1 .. 12],
|
||||
[95 .. 100]
|
||||
]
|
||||
|
||||
------------------------ FORMATTING ----------------------
|
||||
showTable :: [[Maybe Int]] -> String
|
||||
showTable xs = unlines $ head rows : [] : tail rows
|
||||
where
|
||||
w = succ $ (length . show) (fromMaybe 0 $ (last . last) xs)
|
||||
gap = replicate w ' '
|
||||
rows = (maybe gap (rjust w ' ' . show) =<<) <$> xs
|
||||
rjust n c = (drop . length) <*> (replicate n c <>)
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
import Data.List (groupBy)
|
||||
import Data.Function (on)
|
||||
import Control.Monad (join)
|
||||
|
||||
main :: IO ()
|
||||
main =
|
||||
mapM_ print $
|
||||
fmap (uncurry (*)) <$>
|
||||
groupBy
|
||||
(on (==) fst)
|
||||
(filter (uncurry (>=)) $ join ((<*>) . fmap (,)) [1 .. 12])
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
fun format n l
|
||||
let n tostr n
|
||||
while len n < l; let n (" " + n); endwhile
|
||||
return n
|
||||
endfun
|
||||
|
||||
print " |"
|
||||
for let i 1; i <= 12; i++; print format i 4; endfor
|
||||
print "\n --+"
|
||||
for let i 1; i <= 12; i++; print "----"; endfor
|
||||
println ""
|
||||
for let i 1; i <= 12; i++
|
||||
print format i 3 + "|"
|
||||
for let j 1; j <= 12; j++
|
||||
if j < i; print " "
|
||||
else print format (i * j) 4; endif
|
||||
endfor
|
||||
println ""
|
||||
endfor
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
WRITE(Row=1) " x 1 2 3 4 5 6 7 8 9 10 11 12"
|
||||
DO line = 1, 12
|
||||
WRITE(Row=line+2, Format='i2') line
|
||||
DO col = line, 12
|
||||
WRITE(Row=line+2, Column=4*col, Format='i3') line*col
|
||||
ENDDO
|
||||
ENDDO
|
||||
21
Task/Multiplication-tables/HolyC/multiplication-tables.holyc
Normal file
21
Task/Multiplication-tables/HolyC/multiplication-tables.holyc
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
U8 i, j, n = 12;
|
||||
for (j = 1; j <= n; j++)
|
||||
if (j != n)
|
||||
Print("%3d%c", j, ' ');
|
||||
else
|
||||
Print("%3d%c", j, '\n');
|
||||
|
||||
for (j = 0; j <= n; j++)
|
||||
if (j != n)
|
||||
Print("----");
|
||||
else
|
||||
Print("+\n");
|
||||
|
||||
for (i = 1; i <= n; i++) {
|
||||
for (j = 1; j <= n; j++)
|
||||
if (j < i)
|
||||
Print(" ");
|
||||
else
|
||||
Print("%3d ", i * j);
|
||||
Print("| %d\n", i);
|
||||
}
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
100 PROGRAM "Multipli.bas"
|
||||
110 TEXT 80
|
||||
120 PRINT TAB(7);
|
||||
130 FOR I=1 TO 12
|
||||
140 PRINT USING " ###":I;
|
||||
150 NEXT
|
||||
160 PRINT AT 2,5:"----------------------------------------------------"
|
||||
170 FOR I=1 TO 12
|
||||
180 PRINT USING "### |":I;:PRINT TAB(I*4+3);
|
||||
190 FOR J=I TO 12
|
||||
200 PRINT USING " ###":I*J;
|
||||
210 NEXT
|
||||
220 PRINT
|
||||
230 NEXT
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
procedure main()
|
||||
lim := 13
|
||||
wid := 5
|
||||
every writes(right("* |" | (1 to lim) | "\n",wid)|right("\n",wid*(lim+1),"_")) # header row and separator
|
||||
every (i := 1 to lim) &
|
||||
writes(right( i||" |" | (j := 1 to lim, if j < i then "" else i*j) | "\n",wid)) # table content and triangle
|
||||
end
|
||||
19
Task/Multiplication-tables/J/multiplication-tables.j
Normal file
19
Task/Multiplication-tables/J/multiplication-tables.j
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
multtable=: <:/~ * */~
|
||||
format=: 'b4.0' 8!:2 ]
|
||||
(('*' ; ,.) ,. ({. ; ])@format@multtable) >:i.12
|
||||
┌──┬────────────────────────────────────────────────┐
|
||||
│* │ 1 2 3 4 5 6 7 8 9 10 11 12│
|
||||
├──┼────────────────────────────────────────────────┤
|
||||
│ 1│ 1 2 3 4 5 6 7 8 9 10 11 12│
|
||||
│ 2│ 4 6 8 10 12 14 16 18 20 22 24│
|
||||
│ 3│ 9 12 15 18 21 24 27 30 33 36│
|
||||
│ 4│ 16 20 24 28 32 36 40 44 48│
|
||||
│ 5│ 25 30 35 40 45 50 55 60│
|
||||
│ 6│ 36 42 48 54 60 66 72│
|
||||
│ 7│ 49 56 63 70 77 84│
|
||||
│ 8│ 64 72 80 88 96│
|
||||
│ 9│ 81 90 99 108│
|
||||
│10│ 100 110 120│
|
||||
│11│ 121 132│
|
||||
│12│ 144│
|
||||
└──┴────────────────────────────────────────────────┘
|
||||
20
Task/Multiplication-tables/Java/multiplication-tables.java
Normal file
20
Task/Multiplication-tables/Java/multiplication-tables.java
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
public class MultiplicationTable {
|
||||
public static void main(String[] args) {
|
||||
for (int i = 1; i <= 12; i++)
|
||||
System.out.print("\t" + i);
|
||||
|
||||
System.out.println();
|
||||
for (int i = 0; i < 100; i++)
|
||||
System.out.print("-");
|
||||
System.out.println();
|
||||
for (int i = 1; i <= 12; i++) {
|
||||
System.out.print(i + "|");
|
||||
for(int j = 1; j <= 12; j++) {
|
||||
System.out.print("\t");
|
||||
if (j >= i)
|
||||
System.out.print("\t" + i * j);
|
||||
}
|
||||
System.out.println();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
function timesTable(){
|
||||
let output = "";
|
||||
const size = 12;
|
||||
for(let i = 1; i <= size; i++){
|
||||
output += i.toString().padStart(3);
|
||||
output += i !== size ? " " : "\n";
|
||||
}
|
||||
for(let i = 0; i <= size; i++)
|
||||
output += i !== size ? "════" : "╕\n";
|
||||
|
||||
for(let i = 1; i <= size; i++){
|
||||
for(let j = 1; j <= size; j++){
|
||||
output += j < i
|
||||
? " "
|
||||
: (i * j).toString().padStart(3) + " ";
|
||||
}
|
||||
output += `│ ${i}\n`;
|
||||
}
|
||||
return output;
|
||||
}
|
||||
|
|
@ -0,0 +1,50 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
|
||||
<title>12 times table</title>
|
||||
<script type='text/javascript'>
|
||||
function multiplication_table(n, target) {
|
||||
var table = document.createElement('table');
|
||||
|
||||
var row = document.createElement('tr');
|
||||
var cell = document.createElement('th');
|
||||
cell.appendChild(document.createTextNode('x'));
|
||||
row.appendChild(cell);
|
||||
for (var x = 1; x <=n; x++) {
|
||||
cell = document.createElement('th');
|
||||
cell.appendChild(document.createTextNode(x));
|
||||
row.appendChild(cell);
|
||||
}
|
||||
table.appendChild(row);
|
||||
|
||||
for (var x = 1; x <=n; x++) {
|
||||
row = document.createElement('tr');
|
||||
cell = document.createElement('th');
|
||||
cell.appendChild(document.createTextNode(x));
|
||||
row.appendChild(cell);
|
||||
var y;
|
||||
for (y = 1; y < x; y++) {
|
||||
cell = document.createElement('td');
|
||||
cell.appendChild(document.createTextNode('\u00a0'));
|
||||
row.appendChild(cell);
|
||||
}
|
||||
for (; y <= n; y++) {
|
||||
cell = document.createElement('td');
|
||||
cell.appendChild(document.createTextNode(x*y));
|
||||
row.appendChild(cell);
|
||||
}
|
||||
table.appendChild(row);
|
||||
}
|
||||
target.appendChild(table);
|
||||
}
|
||||
</script>
|
||||
<style type='text/css'>
|
||||
body {font-family: sans-serif;}
|
||||
table {border-collapse: collapse;}
|
||||
th, td {border: 1px solid black; text-align: right; width: 4ex;}
|
||||
</style>
|
||||
</head>
|
||||
<body onload="multiplication_table(12, document.getElementById('target'));">
|
||||
<div id='target'></div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
(function (m, n) {
|
||||
|
||||
// [m..n]
|
||||
function range(m, n) {
|
||||
return Array.apply(null, Array(n - m + 1)).map(function (x, i) {
|
||||
return m + i;
|
||||
});
|
||||
}
|
||||
|
||||
// Monadic bind (chain) for lists
|
||||
function mb(xs, f) {
|
||||
return [].concat.apply([], xs.map(f));
|
||||
}
|
||||
|
||||
var rng = range(m, n),
|
||||
lstTable = [['x'].concat( rng )]
|
||||
.concat(mb(rng, function (x) {
|
||||
return [[x].concat(mb(rng, function (y) {
|
||||
return y < x ? [''] : [x * y]; // triangle only
|
||||
}))]}));
|
||||
|
||||
/* FORMATTING OUTPUT */
|
||||
|
||||
// [[a]] -> bool -> s -> s
|
||||
function wikiTable(lstRows, blnHeaderRow, strStyle) {
|
||||
return '{| class="wikitable" ' + (
|
||||
strStyle ? 'style="' + strStyle + '"' : ''
|
||||
) + lstRows.map(function (lstRow, iRow) {
|
||||
var strDelim = ((blnHeaderRow && !iRow) ? '!' : '|');
|
||||
|
||||
return '\n|-\n' + strDelim + ' ' + lstRow.map(function (v) {
|
||||
return typeof v === 'undefined' ? ' ' : v;
|
||||
}).join(' ' + strDelim + strDelim + ' ');
|
||||
}).join('') + '\n|}';
|
||||
}
|
||||
|
||||
// Formatted as WikiTable
|
||||
return wikiTable(
|
||||
lstTable, true,
|
||||
'text-align:center;width:33em;height:33em;table-layout:fixed;'
|
||||
) + '\n\n' +
|
||||
|
||||
// or simply stringified as JSON
|
||||
JSON.stringify(lstTable);
|
||||
})(1, 12);
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
[["x",1,2,3,4,5,6,7,8,9,10,11,12],
|
||||
[1,1,2,3,4,5,6,7,8,9,10,11,12],
|
||||
[2,"",4,6,8,10,12,14,16,18,20,22,24],
|
||||
[3,"","",9,12,15,18,21,24,27,30,33,36],
|
||||
[4,"","","",16,20,24,28,32,36,40,44,48],
|
||||
[5,"","","","",25,30,35,40,45,50,55,60],
|
||||
[6,"","","","","",36,42,48,54,60,66,72],
|
||||
[7,"","","","","","",49,56,63,70,77,84],
|
||||
[8,"","","","","","","",64,72,80,88,96],
|
||||
[9,"","","","","","","","",81,90,99,108],
|
||||
[10,"","","","","","","","","",100,110,120],
|
||||
[11,"","","","","","","","","","",121,132],
|
||||
[12,"","","","","","","","","","","",144]]
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
(() => {
|
||||
"use strict";
|
||||
|
||||
// -------------- MULTIPLICATION TABLE ---------------
|
||||
|
||||
// multTable :: Int -> Int -> [[String]]
|
||||
const multTable = m => n => {
|
||||
const xs = enumFromTo(m)(n);
|
||||
|
||||
return [
|
||||
["x", ...xs],
|
||||
...xs.flatMap(
|
||||
x => [
|
||||
[x, ...xs.flatMap(
|
||||
y => y < x ? (
|
||||
[""]
|
||||
) : [`${x * y}`]
|
||||
)]
|
||||
]
|
||||
)
|
||||
];
|
||||
};
|
||||
|
||||
// ---------------------- TEST -----------------------
|
||||
|
||||
// main :: () -> IO String
|
||||
const main = () =>
|
||||
wikiTable({
|
||||
class: "wikitable",
|
||||
style: [
|
||||
"text-align:center",
|
||||
"width:33em",
|
||||
"height:33em",
|
||||
"table-layout:fixed"
|
||||
].join(";")
|
||||
})(
|
||||
multTable(1)(12)
|
||||
);
|
||||
|
||||
// ---------------- GENERIC FUNCTIONS ----------------
|
||||
|
||||
// enumFromTo :: Int -> Int -> [Int]
|
||||
const enumFromTo = m => n =>
|
||||
n >= m ? Array.from({
|
||||
length: Math.floor(n - m) + 1
|
||||
}, (_, i) => m + i) : [];
|
||||
|
||||
|
||||
// ------------------- FORMATTING --------------------
|
||||
|
||||
// wikiTable :: Dict -> [[a]] -> String
|
||||
const wikiTable = opts =>
|
||||
rows => {
|
||||
const
|
||||
style = ["class", "style"].reduce(
|
||||
(a, k) => k in opts ? (
|
||||
`${a}${k}="${opts[k]}" `
|
||||
) : a, ""
|
||||
),
|
||||
body = rows.map((row, i) => {
|
||||
const
|
||||
cells = row.map(
|
||||
x => `${x}` || " "
|
||||
).join(" || ");
|
||||
|
||||
return `${i ? "|" : "!"} ${cells}`;
|
||||
}).join("\n|-\n");
|
||||
|
||||
return `{| ${style}\n${body}\n|}`;
|
||||
};
|
||||
|
||||
// MAIN ---
|
||||
return main();
|
||||
})();
|
||||
14
Task/Multiplication-tables/Jq/multiplication-tables.jq
Normal file
14
Task/Multiplication-tables/Jq/multiplication-tables.jq
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
def lpad($len): tostring | ($len - length) as $l | (" " * $l)[:$l] + .;
|
||||
|
||||
def multiplication($n):
|
||||
($n*$n|tostring|length) as $len
|
||||
| ["x", range(0; $n + 1)] | map(lpad($len)) | join(" "),
|
||||
(["", range(0; $n + 1)] | map($len*"-") | join(" ")),
|
||||
( range(0; $n + 1) as $i
|
||||
| [$i,
|
||||
range(0; $n + 1) as $j
|
||||
| if $j>=$i then $i*$j else "" end]
|
||||
| map(lpad($len))
|
||||
| join(" ") ) ;
|
||||
|
||||
multiplication(12)
|
||||
21
Task/Multiplication-tables/Jsish/multiplication-tables.jsish
Normal file
21
Task/Multiplication-tables/Jsish/multiplication-tables.jsish
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
/* Multiplication tables, is Jsish */
|
||||
var m, n, tableSize = 12;
|
||||
|
||||
if (console.args.length > 0) tableSize = parseInt(console.args[0]);
|
||||
if (tableSize < 1 || tableSize > 20) tableSize = 12;
|
||||
|
||||
var width = String(tableSize * tableSize).length;
|
||||
var spaces = ' '.repeat(width+1);
|
||||
|
||||
printf(spaces);
|
||||
for (m = 1; m <= tableSize; m++) printf(' %*d', width, m);
|
||||
printf('\n' + ' '.repeat(width) + '+');
|
||||
printf('-'.repeat((width+1) * tableSize));
|
||||
for (m = 1; m <= tableSize; m++) {
|
||||
printf('\n%*d|', width, m);
|
||||
for (n = m; n < m; n++) printf(spaces);
|
||||
for (n = 1; n <= tableSize; n++) {
|
||||
if (m <= n) printf(' %*d', width, m * n); else printf(spaces);
|
||||
}
|
||||
}
|
||||
printf('\n');
|
||||
14
Task/Multiplication-tables/Julia/multiplication-tables.julia
Normal file
14
Task/Multiplication-tables/Julia/multiplication-tables.julia
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
using Printf
|
||||
|
||||
println(" X | 1 2 3 4 5 6 7 8 9 10 11 12")
|
||||
println("---+------------------------------------------------")
|
||||
|
||||
for i=1:12, j=0:12
|
||||
if j == 0
|
||||
@printf("%2d | ", i)
|
||||
elseif i <= j
|
||||
@printf("%3d%c", i * j, j == 12 ? '\n' : ' ')
|
||||
else
|
||||
print(" ")
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
// version 1.0.6
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
print(" x|")
|
||||
for (i in 1..12) print("%4d".format(i))
|
||||
println("\n---+${"-".repeat(48)}")
|
||||
for (i in 1..12) {
|
||||
print("%3d".format(i) +"|${" ".repeat(4 * i - 4)}")
|
||||
for (j in i..12) print("%4d".format(i * j))
|
||||
println()
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
{def format
|
||||
{lambda {:w :c}
|
||||
{@ style="width::wpx;
|
||||
color::c;
|
||||
text-align:right;"
|
||||
}}}
|
||||
-> format
|
||||
|
||||
{def operation
|
||||
{lambda {:op :i :j}
|
||||
{if {and {= :i 0} {= :j 0}} // left top cell
|
||||
then {format 30 #fff} // is empty
|
||||
else {if {= :i 0} // top row
|
||||
then {format 30 #ff0}:j // is yellow
|
||||
else {if {= :j 0} // left col
|
||||
then {format 30 #0ff}:i // is cyan
|
||||
else {format 30 #ccc} // is lightgrey
|
||||
{if {<= :i :j} then {:op :i :j} else .} // cell [i,j]
|
||||
}}}}}
|
||||
-> operation
|
||||
|
||||
{def make_table
|
||||
{lambda {:func :row :col}
|
||||
{table {@ style="box-shadow:0 0 8px #000;"}
|
||||
{S.map // apply
|
||||
{{lambda {:func :col :j} // function row
|
||||
{tr {S.map // apply
|
||||
{{lambda {:func :i :j} // function cell
|
||||
{td {:func :i :j}}} :func :j} // apply func on [i,j]
|
||||
{S.serie 0 :col}}}} :func :col} // from 0 to col
|
||||
{S.serie 0 :row} // from 0 to row
|
||||
}}}}
|
||||
-> make_table
|
||||
|
||||
The following calls:
|
||||
|
||||
1) {make_table {operation +} 5 15}
|
||||
2) {make_table {operation *} 12 12}
|
||||
3) {make_table {operation pow} 6 10}
|
||||
29
Task/Multiplication-tables/Lasso/multiplication-tables.lasso
Normal file
29
Task/Multiplication-tables/Lasso/multiplication-tables.lasso
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
define printTimesTables(max::integer) => {
|
||||
local(result) = ``
|
||||
local(padSize) = string(#max*#max)->size + 1
|
||||
|
||||
// Print header row
|
||||
#result->append((' ' * #padSize) + '|')
|
||||
loop(#max) => {
|
||||
#result->append(loop_count->asString(-padding=#padSize))
|
||||
}
|
||||
#result->append("\n" + (`-` * #padSize) + '+' + (`-` * (#padSize * #max)))
|
||||
|
||||
with left in 1 to #max do {
|
||||
// left column
|
||||
#result->append("\n" + #left->asString(-padding=#padSize) + '|')
|
||||
|
||||
// Table results
|
||||
with right in 1 to #max do {
|
||||
#result->append(
|
||||
#right < #left
|
||||
? ' ' * #padSize
|
||||
| (#left * #right)->asString(-padding=#padSize)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
return #result
|
||||
}
|
||||
|
||||
printTimesTables(12)
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
Print " | 1 2 3 4 5 6 7 8 9 10 11 12"
|
||||
Print "--+------------------------------------------------------------"
|
||||
|
||||
For i = 1 To 12
|
||||
nums$ = Right$(" " + str$(i), 2) + "|"
|
||||
For ii = 1 To 12
|
||||
If i <= ii Then
|
||||
If ii >= 1 Then
|
||||
nums$ = nums$ + Left$(" ", (5 - Len(str$(i * ii))))
|
||||
End If
|
||||
nums$ = nums$ + str$(i * ii)
|
||||
Else
|
||||
nums$ = nums$ + " "
|
||||
End If
|
||||
Next ii
|
||||
Print nums$
|
||||
Next i
|
||||
13
Task/Multiplication-tables/Logo/multiplication-tables.logo
Normal file
13
Task/Multiplication-tables/Logo/multiplication-tables.logo
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
to mult.table :n
|
||||
type "| | for [i 2 :n] [type form :i 4 0] (print)
|
||||
(print)
|
||||
for [i 2 :n] [
|
||||
type form :i 2 0
|
||||
for [j 2 :n] [
|
||||
type ifelse :i > :j ["| |] [form :i*:j 4 0]
|
||||
]
|
||||
(print)
|
||||
]
|
||||
end
|
||||
|
||||
mult.table 12
|
||||
18
Task/Multiplication-tables/Lua/multiplication-tables.lua
Normal file
18
Task/Multiplication-tables/Lua/multiplication-tables.lua
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
io.write( " |" )
|
||||
for i = 1, 12 do
|
||||
io.write( string.format( "%#5d", i ) )
|
||||
end
|
||||
io.write( "\n", string.rep( "-", 12*5+4 ), "\n" )
|
||||
|
||||
for i = 1, 12 do
|
||||
io.write( string.format( "%#2d |", i ) )
|
||||
|
||||
for j = 1, 12 do
|
||||
if j < i then
|
||||
io.write( " " )
|
||||
else
|
||||
io.write( string.format( "%#5d", i*j ) )
|
||||
end
|
||||
end
|
||||
io.write( "\n" )
|
||||
end
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
Module CheckIt {
|
||||
Dim Base 1, A(12)
|
||||
Mult=lambda (n)-> {
|
||||
Flush ' empty stack
|
||||
For i=1 to n : Data i*n : Next i
|
||||
=Array([]) ' copy stack in an array, and return a pointer
|
||||
}
|
||||
i=Each(A())
|
||||
Print " |";
|
||||
while i {
|
||||
Print Format$("{0:0:-4}",i^+1);
|
||||
A(i^+1)=Mult(i^+1)
|
||||
}
|
||||
Print
|
||||
Print "--+"+string$("-",4*12)
|
||||
For i=1 to 12 {
|
||||
Print Format$("{0:0:-2}|",i);
|
||||
For j=1 to 12 {
|
||||
If len(A(j)())>=i then {
|
||||
Print Format$("{0:0:-4}",A(j)(i-1));
|
||||
} Else Print " ";
|
||||
}
|
||||
Print
|
||||
}
|
||||
}
|
||||
CheckIt
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
function table = timesTable(N)
|
||||
table = [(0:N); (1:N)' triu( kron((1:N),(1:N)') )];
|
||||
end
|
||||
17
Task/Multiplication-tables/MATLAB/multiplication-tables-2.m
Normal file
17
Task/Multiplication-tables/MATLAB/multiplication-tables-2.m
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
function table = timesTable(N)
|
||||
|
||||
%Generates a column vector with integers from 1 to N
|
||||
rowLabels = (1:N)';
|
||||
|
||||
%Generate a row vector with integers from 0 to N
|
||||
columnLabels = (0:N);
|
||||
|
||||
%Generate the multiplication table using the kronecker tensor product
|
||||
%of two vectors one a column vector and the other a row vector
|
||||
table = kron((1:N),(1:N)');
|
||||
|
||||
%Make it upper triangular and concatenate the rowLabels and
|
||||
%columnLabels to the table
|
||||
table = [columnLabels; rowLabels triu(table)];
|
||||
|
||||
end
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue