Floyd's triangle: Difference between revisions
Added XBasic
(→AppleScript :: Functional: Added a variant defining Floyd as a partially populated matrix) |
(Added XBasic) |
||
(35 intermediate revisions by 17 users not shown) | |||
Line 24:
{{trans|Python}}
<
V rows = [[1]]
L rows.len < rowcount
Line 37:
pfloyd(floyd(5))
pfloyd(floyd(14))</
{{out}}
Line 66:
A very concise coding, an illustration of CISC power of the S/360 operation codes. Also an example of the use of EDMK and EX instructions.
For macro usage see [[360_Assembly_macros#360_Assembly_Structured_Macros|Structured Macros]] .
<
FLOYDTRI PROLOG
L R5,NN nn
Line 104:
ZN DC X'4020202020202020' mask CL8 7num
YREGS
END FLOYDTRI</
{{out}}
<pre>
Line 130:
92 93 94 95 96 97 98 99 100 101 102 103 104 105
</pre>
=={{header|ABAP}}==
REPORT zmbr_test.
PARAMETERS: p_row TYPE i.
START-OF-SELECTION.
DATA(lv_column) = 0.
DATA(lv_number) = 0.
DO p_row TIMES.
lv_column += 1.
DO lv_column TIMES.
lv_number += 1.
WRITE: lv_number.
ENDDO.
WRITE:/ space.
ENDDO.
{{out}}
<pre>
1
2 3
4 5 6
7 8 9 10
11 12 13 14 15
</pre>
{{out}}
<pre>
1
2 3
4 5 6
7 8 9 10
11 12 13 14 15
16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 32 33 34 35 36
37 38 39 40 41 42 43 44 45
46 47 48 49 50 51 52 53 54 55
</pre>
=={{header|ABC}}==
<syntaxhighlight lang="ABC">HOW TO RETURN width n:
SELECT:
n<10: RETURN 1
ELSE: RETURN 1 + width floor (n/10)
HOW TO DISPLAY A FLOYD TRIANGLE WITH lines LINES:
PUT lines * (lines+1)/2 IN maxno
PUT 1 IN n
FOR line IN {1..lines}:
FOR col IN {1..line}:
WRITE n >> (1 + width (maxno - lines + col))
PUT n+1 IN n
WRITE /
DISPLAY A FLOYD TRIANGLE WITH 5 LINES
WRITE /
DISPLAY A FLOYD TRIANGLE WITH 14 LINES
WRITE /</syntaxhighlight>
{{out}}
<pre> 1
2 3
4 5 6
7 8 9 10
11 12 13 14 15
1
2 3
4 5 6
7 8 9 10
11 12 13 14 15
16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 32 33 34 35 36
37 38 39 40 41 42 43 44 45
46 47 48 49 50 51 52 53 54 55
56 57 58 59 60 61 62 63 64 65 66
67 68 69 70 71 72 73 74 75 76 77 78
79 80 81 82 83 84 85 86 87 88 89 90 91
92 93 94 95 96 97 98 99 100 101 102 103 104 105</pre>
=={{header|Action!}}==
<
INT v,i
BYTE x,y
Line 182 ⟶ 270:
LMARGIN=oldLMARGIN ;restore left margin on the screen
RETURN</
{{out}}
[https://gitlab.com/amarok8bit/action-rosetta-code/-/raw/master/images/Floyd's_triangle.png Screenshot from Atari 8-bit computer]
Line 209 ⟶ 297:
=={{header|Ada}}==
<syntaxhighlight lang="ada">
with Ada.Text_IO, Ada.Integer_Text_IO, Ada.Command_Line;
Line 222 ⟶ 310:
end loop;
end Floyd_Triangle;
</syntaxhighlight>
{{out}}
Line 252 ⟶ 340:
=={{header|ALGOL 68}}==
{{works with|ALGOL 68G|Any - tested with release 2.8.win32}}
<
PROC floyds triangle = ( INT n )VOID:
BEGIN
Line 284 ⟶ 372:
floyds triangle( 14 )
)</
{{out}}
<pre>
Line 310 ⟶ 398:
=={{header|ALGOL W}}==
{{trans|
<
% prints a Floyd's Triangle with n lines %
procedure floydsTriangle ( integer value n ) ;
Line 351 ⟶ 439:
floydsTriangle( 14 )
end.</
{{out}}
<pre>
Line 375 ⟶ 463:
92 93 94 95 96 97 98 99 100 101 102 103 104 105
</pre>
=={{header|APL}}==
{{works with|Dyalog APL}}
<syntaxhighlight lang="apl">floyd←{
max←⍵×(⍵+1)÷2
tri←↑(⍳max)⊂⍨(0,⍳max-1)∊+\0,⍳⍵
wdt←⌈⍀⊖≢∘⍕¨tri
↑,/wdt{' ',(-⍺××⍵)↑⍕⍵}¨tri
}</syntaxhighlight>
{{out}}
<syntaxhighlight lang="apl"> floyd 5
1
2 3
4 5 6
7 8 9 10
11 12 13 14 15
floyd 14
1
2 3
4 5 6
7 8 9 10
11 12 13 14 15
16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 32 33 34 35 36
37 38 39 40 41 42 43 44 45
46 47 48 49 50 51 52 53 54 55
56 57 58 59 60 61 62 63 64 65 66
67 68 69 70 71 72 73 74 75 76 77 78
79 80 81 82 83 84 85 86 87 88 89 90 91
92 93 94 95 96 97 98 99 100 101 102 103 104 105</syntaxhighlight>
=={{header|AppleScript}}==
Line 380 ⟶ 499:
{{Trans|JavaScript}}
{{Trans|Haskell}} (mapAccumL versions)
<
-- floyd :: Int -> [[Int]]
Line 655 ⟶ 774:
return lst
end tell
end zipWith</
{{Out}}
<pre> 1
Line 681 ⟶ 800:
Or, defining only the relationship between successive terms:
<
on floyd(xs)
set n to succ(length of xs)
Line 888 ⟶ 1,007:
set my text item delimiters to dlm
str
end unlines</
{{Out}}
<pre> 1
Line 898 ⟶ 1,017:
Or as a partially populated matrix:
<
-- floyd :: Int -> [[Maybe Int]]
Line 1,141 ⟶ 1,260:
set my text item delimiters to dlm
return s
end unwords</
{{Out}}
<pre> 1
Line 1,164 ⟶ 1,283:
92 93 94 95 96 97 98 99 100 101 102 103 104 105
</pre>
----
===Straightforward===
<
set triangle to {}
set i to 0
repeat with i from (i + 1) to (i + w)
set end of
end repeat
set end of triangle to
end repeat
return triangle
end FloydsTriangle
Line 1,214 ⟶ 1,332:
set triangle14 to FloydsTriangle(14)
set text14 to matrixToText(triangle14, (count (end of end of triangle14 as text)) + 1)
return linefeed & text5 & (linefeed & linefeed & text14 & linefeed)</
{{output}}
<
1
2 3
Line 1,238 ⟶ 1,356:
79 80 81 82 83 84 85 86 87 88 89 90 91
92 93 94 95 96 97 98 99 100 101 102 103 104 105
"</
=={{header|Arturo}}==
<
floor 2 + log col + 1 + (rows * rows - 1) / 2 10
]
floyd: function [rows][
n: 1
row: 1
col: 0
while -> row =< rows [
prints pad ~"|n|" width rows col
inc 'col
inc 'n
if col = row [
print ""
col: 0
inc 'row
]
]
]
floyd 5
print ""
floyd 14</syntaxhighlight>
{{out}}
<pre> 1
2
4
7
11
1
2
4
7
11
16
22
29
37
46
56
67
79
92
=={{header|AutoHotkey}}==
<
i = 0
loop %row%
Line 1,304 ⟶ 1,429:
res.=" "
return % res
}</
Examples:<syntaxhighlight lang
Outputs:<pre> 1
2 3
Line 1,322 ⟶ 1,447:
=={{header|AWK}}==
<
BEGIN {
Line 1,337 ⟶ 1,462:
}
}
</syntaxhighlight>
<p>output from: awk -f floyds_triangle.awk -v rows=5</p>
<pre>
Line 1,367 ⟶ 1,492:
==={{header|Applesoft BASIC}}===
Line <code>150,160</code> creates a vector of the length of all entries is the last row. These values are used in line <code>210,220</code> to put the cursor at the correct horizontal position.
<
100 :
110 REM FLOYD'S TRIANGLE
Line 1,379 ⟶ 1,504:
220 HTAB COL: PRINT NR;: NEXT C
230 PRINT : NEXT R
</syntaxhighlight>
{{out}}
<pre>]RUN
Line 1,403 ⟶ 1,528:
79 80 81 82 83 84 85 86 87 88 89 90 91
92 93 94 95 96 97 98 99 100 101 102 103 104 105</pre>
==={{header|BASIC256}}===
{{works with|BASIC256|2.0.0.11}}
<syntaxhighlight lang="basic256">
function trianglevalue(col, row)
return (row-1)*row\2 + col
Line 1,424 ⟶ 1,550:
print
call printtriangle(14)
</syntaxhighlight>
{{out}}
<pre>
Line 1,448 ⟶ 1,574:
92 93 94 95 96 97 98 99 100 101 102 103 104 105
</pre>
==={{header|BBC BASIC}}===
<
num = 1
last = (n^2 - n + 2) DIV 2
Line 1,460 ⟶ 1,587:
NEXT
PRINT
NEXT row</
Output for n = 5:
<pre>
Line 1,486 ⟶ 1,613:
92 93 94 95 96 97 98 99 100 101 102 103 104 105
</pre>
==={{header|Chipmunk Basic}}===
{{works with|Chipmunk Basic|3.6.4}}
{{works with|Applesoft BASIC}}
{{works with|BASICA}}
{{works with|GW-BASIC}}
{{works with|PC-BASIC}}
{{works with|QBasic}}
{{works with|QuickBasic}}
{{works with|Just BASIC}}
{{works with|Liberty BASIC}}
{{works with|Run BASIC}}
<syntaxhighlight lang="qbasic">100 CLS : REM 100 HOME for Applesoft BASIC
110 INPUT "Number of rows: "; ROWS
120 DIM COLSIZE(ROWS)
130 FOR COL = 1 TO ROWS
140 COLSIZE(COL) = LEN(STR$(COL + ROWS * (ROWS - 1) / 2))
150 NEXT
160 THISNUM = 1
170 FOR R = 1 TO ROWS
180 FOR COL = 1 TO R
190 PRINT RIGHT$(" " + STR$(THISNUM), COLSIZE(COL)); " ";
200 THISNUM = THISNUM + 1
210 NEXT
220 PRINT
230 NEXT
240 END</syntaxhighlight>
==={{header|Commodore BASIC}}===
<
110 print "How many rows? ";
120 open 1,0:input#1,ro$:close 1:print
Line 1,506 ⟶ 1,660:
260 : print
270 next i
280 end</
{{Out}}
<pre>Floyd's triangle
Line 1,531 ⟶ 1,685:
79 80 81 82 83 84 85 86 87 88 89 90 91
92 93 94 95 96 97 98 99 100 101 102 103 104 105</pre>
==={{header|GW-BASIC}}===
The [[#Chipmunk_Basic|Chipmunk Basic]] solution works without any changes.
==={{header|IS-BASIC}}===
{{incorrect|IS-BASIC|last line should only have one space between values}}
<
110 LET N=14:LET J=1
120 TEXT 80
Line 1,542 ⟶ 1,699:
160 NEXT
170 PRINT
180 NEXT</
==={{header|MasmBasic}}===
'''[http://www.webalice.it/jj2006/Masm32_Tips_Tricks_and_Traps.htm Builds with Masm, UAsm or AsmC plus the MasmBasic library]'''
<
SetGlobals rows, columns, ct, maxrows=4
Init
Line 1,565 ⟶ 1,722:
.Until maxrows>13
Inkey
EndOfCode</
{{out}}
<pre> 1
2 3
4 5 6
Line 1,591 ⟶ 1,745:
92 93 94 95 96 97 98 99 100 101 102 103 104 105</pre>
==={{header|
The [[#Chipmunk_Basic|Chipmunk Basic]] solution works without any changes.
==={{header|QBasic}}===
<syntaxhighlight lang="qbasic">SUB FloydTriangle (fila)
DIM numColum(fila)
FOR colum = 1 TO fila
numColum(colum) = LEN(STR$(colum + fila * (fila - 1) / 2))
NEXT colum
PRINT "output for "; STR$(fila): PRINT
thisNum = 1
FOR r = 1 TO fila
FOR colum = 1 TO r
PRINT RIGHT$(" " + STR$(thisNum), numColum(colum)); " ";
thisNum = thisNum + 1
NEXT colum
PRINT
NEXT
END SUB
FloydTriangle (5)
PRINT
FloydTriangle (14)</syntaxhighlight>
==={{header|True BASIC}}===
{{trans|QBasic}}
<syntaxhighlight lang="qbasic">SUB floydtriangle (fila)
MAT REDIM numcolum(fila)
FOR colum = 1 TO fila
LET numcolum(colum) = LEN(STR$(colum+fila*(fila-1)/2))
NEXT colum
PRINT "output for "; STR$(fila)
PRINT
LET thisnum = 1
FOR r = 1 TO fila
FOR colum = 1 TO r
PRINT (" " & STR$(thisnum))[LEN(" " & STR$(thisnum))-numcolum(colum)+1:maxnum]; " ";
LET thisnum = thisnum+1
NEXT colum
PRINT
NEXT r
END SUB
CALL FLOYDTRIANGLE (5)
PRINT
CALL FLOYDTRIANGLE (14)
END</syntaxhighlight>
==={{header|XBasic}}===
{{works with|Windows XBasic}}
<syntaxhighlight lang="qbasic">PROGRAM "Floyd's triangle"
VERSION "0.0001"
DECLARE FUNCTION Entry ()
DECLARE FUNCTION FloydTriangle (n)
FUNCTION Entry ()
FloydTriangle (5)
PRINT
FloydTriangle (14)
END FUNCTION
FUNCTION FloydTriangle (fila)
DIM numColum[fila]
FOR colum = 1 TO fila
t$ = STR$(colum + fila * (fila - 1) / 2)
numColum[colum] = LEN(t$)
NEXT colum
PRINT "output for "; STR$(fila)
PRINT
thisNum = 1
FOR r = 1 TO fila
FOR colum = 1 TO r
PRINT RIGHT$(" " + STR$(thisNum), numColum[colum]); " ";
INC thisNum
NEXT colum
PRINT
NEXT r
END FUNCTION
END PROGRAM</syntaxhighlight>
==={{header|Yabasic}}===
<syntaxhighlight lang="freebasic">sub FloydTriangle (fila)
dim numColum(fila)
for colum = 1 to fila
numColum(colum) = len(str$(colum + fila * (fila - 1) / 2))
next colum
print "output for ", str$(fila), "\n"
thisNum = 1
for r = 1 to fila
for colum = 1 to r
print right$(" " + str$(thisNum), numColum(colum)), " ";
thisNum = thisNum + 1
next colum
print
next
end sub
FloydTriangle (5)
print
FloydTriangle (14)</syntaxhighlight>
=={{header|Batch File}}==
{{trans|QBasic}}
<syntaxhighlight lang="dos">:: Floyd's triangle Task from Rosetta Code
:: Batch File Implementation
@echo off
rem main thing
setlocal enabledelayedexpansion
call :floydtriangle 5
echo(
call :floydtriangle 14
exit /b 0
:floydtriangle
set "fila=%1"
for /l %%c in (1,1,%fila%) do (
set /a "lastRowNum=%%c+fila*(fila-1)/2"
rem count number of digits of whole number trick
rem source: https://stackoverflow.com/a/45472269
set /a "Log=1!lastRowNum:~1!-!lastRowNum:~1!-0"
set /a "numColum[%%c]=!Log:0=+1!"
)
echo(Output for %fila%
set "thisNum=1"
for /l %%r in (1,1,%fila%) do (
set "printLine="
for /l %%c in (1,1,%%r) do (
rem count number of digits of whole number trick
set /a "Log=1!thisNum:~1!-!thisNum:~1!-0"
set /a "thisNumColum=!Log:0=+1!"
rem handle spacing
set "space= "
set /a "extra=!numColum[%%c]!-!thisNumColum!"
for /l %%s in (1,1,!extra!) do set "space=!space! "
rem append current number to printLine
set "printLine=!printLine!!space!!thisNum!"
set /a "thisNum=!thisNum!+1"
)
echo(!printLine!
)
goto :EOF</syntaxhighlight>
{{out}}
<pre>Output for 5
1
2 3
Line 1,655 ⟶ 1,900:
11 12 13 14 15
Output for 14
2
4
11 12 13 14 15
16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 32 33 34 35 36
37 38 39 40 41 42 43 44 45
46 47 48 49 50 51 52 53 54 55
56 57
67 68
79 80
92 93 94 95 96 97 98 99 100 101 102 103 104 105</pre>
=={{header|BCPL}}==
<
let width(n) = n<10 -> 1, 1 + width(n/10)
Line 1,692 ⟶ 1,937:
wrch('*N')
floyd(14)
$)</
{{out}}
<pre> 1
Line 1,717 ⟶ 1,962:
=={{header|Befunge}}==
<
vv+1:\-1p01g5-\g00<v`*9"o"\+`"c"\`9:::_
$>>\:::9`\"c"`+\9v:>>+00g1-:00p5p1-00g^
<v\*84-\g01+`*"o"<^<<p00:+1\+1/2*+1:::\
^>:#\1#,-#:\_$$.\:#^_$$>>1+\1-55+,:!#@_</
{{out}}
Line 1,750 ⟶ 1,995:
=={{header|Bracmat}}==
<
= lowerLeftCorner lastInColumn lastInRow row i W w
. put$(str$("Floyd " !arg ":\n"))
Line 1,775 ⟶ 2,020:
& floyd$5
& floyd$14
);</
Output:
<pre>Floyd 5:
Line 1,800 ⟶ 2,045:
=={{header|C}}==
<
void t(int n)
Line 1,861 ⟶ 2,106:
// t(10000);
return 0;
}</
Output identical to D's.
=={{header|C sharp|C#}}==
{{Trans|Perl}}
<
using System.Text;
Line 1,911 ⟶ 2,156:
return output.ToString();
}
}</
=={{header|C++}}==
<
#include <windows.h>
#include <sstream>
Line 1,997 ⟶ 2,242:
return 0;
}
//--------------------------------------------------------------------------------------------------</
{{out}}
<pre>Floyd's Triangle - 5 rows
Line 2,027 ⟶ 2,272:
=={{header|Clojure}}==
I didn't translete this, it's from my own creation.
<
(defn TriangleList [n]
(let [l (map inc (range))]
Line 2,045 ⟶ 2,290:
e (map #(map (fn [x] (str " " x)) %) l)]
(map #(println (apply str %)) e)))
</syntaxhighlight>
By Average-user.
Line 2,075 ⟶ 2,320:
=={{header|CLU}}==
<
rep = null
Line 2,106 ⟶ 2,351:
stream$putl(po, floyd$triangle(5))
stream$putl(po, floyd$triangle(14))
end start_up</
{{out}}
<pre> 1
Line 2,130 ⟶ 2,375:
=={{header|COBOL}}==
<
PROGRAM-ID. FLOYD-TRIANGLE.
Line 2,198 ⟶ 2,443:
MOVE CUR-NUM TO THREE-DIGITS.
STRING THREE-DIGITS DELIMITED BY SIZE INTO OUT-LINE
WITH POINTER LINE-PTR.</
{{out}}
<pre> 1
Line 2,223 ⟶ 2,468:
=={{header|CoffeeScript}}==
{{trans|Kotlin}}
<
console.log "#{n} rows:"
printMe = 1
Line 2,242 ⟶ 2,487:
printMe++
triangle [5, 14]</
Output as Kotlin.
=={{header|Common Lisp}}==
===Version 1===
<
;;;verbose, but more readable and efficient than version 2
Line 2,263 ⟶ 2,508:
(dotimes (col (+ 1 row))
(format t "~vd " (aref column-widths col)(+ col (lazycat row))))
(format t "~%")))))</
===Version 2 - any base===
<
;;;optional "base" parameter will allow use of any base from 2 to 36
Line 2,273 ⟶ 2,518:
(dotimes (column (+ 1 row))
(format t "~v,vr " base (length (format nil "~vr" base (+ column (/ (+ (expt (- rows 1) 2) (- rows 1) 2) 2)))) (+ column (/ (+ (expt row 2) row 2) 2))))
(format t "~%")))</
{{out}}
Line 2,325 ⟶ 2,570:
=={{header|Cowgol}}==
<
sub width(n: uint16): (w: uint8) is
Line 2,362 ⟶ 2,607:
floyd(5);
print_nl();
floyd(14);</
{{out}}
<pre> 1
Line 2,385 ⟶ 2,630:
92 93 94 95 96 97 98 99 100 101 102 103 104 105</pre>
=={{header|D}}==
<
void floydTriangle(in uint n) {
Line 2,400 ⟶ 2,645:
floydTriangle(5);
floydTriangle(14);
}</
{{out}}
<pre> 1
Line 2,421 ⟶ 2,666:
79 80 81 82 83 84 85 86 87 88 89 90 91
92 93 94 95 96 97 98 99 100 101 102 103 104 105</pre>
=={{header|Delphi}}==
{{works with|Delphi|6.0}}
{{libheader|SysUtils,StdCtrls}}
<syntaxhighlight lang="Delphi">
procedure FloydsTriangle(Memo: TMemo; Rows: integer);
var I,R,C: integer;
var S: string;
begin
I:=1;
S:='';
for R:=1 to Rows do
begin
for C:=1 to R do
begin
S:=S+Format('%4d',[I]);
Inc(I);
end;
S:=S+#$0D#$0A;
end;
Memo.Lines.Add(S);
end;
procedure ShowFloydsTriangles(Memo: TMemo);
begin
FloydsTriangle(Memo,5);
FloydsTriangle(Memo,14);
end;
</syntaxhighlight>
{{out}}
<pre>
1
2 3
4 5 6
7 8 9 10
11 12 13 14 15
1
2 3
4 5 6
7 8 9 10
11 12 13 14 15
16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 32 33 34 35 36
37 38 39 40 41 42 43 44 45
46 47 48 49 50 51 52 53 54 55
56 57 58 59 60 61 62 63 64 65 66
67 68 69 70 71 72 73 74 75 76 77 78
79 80 81 82 83 84 85 86 87 88 89 90 91
92 93 94 95 96 97 98 99 100 101 102 103 104 105
</pre>
=={{header|Draco}}==
<syntaxhighlight lang="draco">proc width(word n) word:
word w;
w := 0;
while n>0 do
w := w + 1;
n := n / 10
od;
w
corp
proc floyd(word rows) void:
word n, row, col, maxno;
maxno := rows * (rows+1)/2;
n := 1;
for row from 1 upto rows do
for col from 1 upto row do
write(n : 1+width(maxno - rows + col));
n := n+1
od;
writeln()
od
corp
proc main() void:
floyd(5);
writeln();
floyd(14)
corp</syntaxhighlight>
{{out}}
<pre> 1
2 3
4 5 6
7 8 9 10
11 12 13 14 15
1
2 3
4 5 6
7 8 9 10
11 12 13 14 15
16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 32 33 34 35 36
37 38 39 40 41 42 43 44 45
46 47 48 49 50 51 52 53 54 55
56 57 58 59 60 61 62 63 64 65 66
67 68 69 70 71 72 73 74 75 76 77 78
79 80 81 82 83 84 85 86 87 88 89 90 91
92 93 94 95 96 97 98 99 100 101 102 103 104 105</pre>
=={{header|EasyLang}}==
{{trans|Java}}
<syntaxhighlight>
func ceil h .
f = floor h
if h <> f
f += 1
.
return f
.
proc triangle n . .
print n & " rows:"
row = 1
while row <= n
printme += 1
cols = ceil log10 (n * (n - 1) / 2 + nprinted + 2)
numfmt 0 cols
write printme & " "
nprinted += 1
if nprinted = row
print ""
row += 1
nprinted = 0
.
.
print ""
.
triangle 5
triangle 14
</syntaxhighlight>
{{out}}
<pre>
5 rows:
1
2 3
4 5 6
7 8 9 10
11 12 13 14 15
14 rows:
1
2 3
4 5 6
7 8 9 10
11 12 13 14 15
16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 32 33 34 35 36
37 38 39 40 41 42 43 44 45
46 47 48 49 50 51 52 53 54 55
56 57 58 59 60 61 62 63 64 65 66
67 68 69 70 71 72 73 74 75 76 77 78
79 80 81 82 83 84 85 86 87 88 89 90 91
92 93 94 95 96 97 98 99 100 101 102 103 104 105
</pre>
=={{header|Elixir}}==
<
def triangle(n) do
max = trunc(n * (n + 1) / 2)
Line 2,440 ⟶ 2,850:
Floyd.triangle(5)
Floyd.triangle(14)</
{{out}}
Line 2,466 ⟶ 2,876:
=={{header|Erlang}}==
<
-module( floyds_triangle ).
Line 2,511 ⟶ 2,921:
strings_from_integers( Integers ) -> [erlang:integer_to_list(X) || X <- Integers].
</syntaxhighlight>
{{out}}
<pre>
Line 2,536 ⟶ 2,946:
=={{header|ERRE}}==
<syntaxhighlight lang="erre">
PROGRAM FLOYD
Line 2,557 ⟶ 2,967:
END FOR
END PROGRAM
</syntaxhighlight>
Example for n=14
{{out}}
Line 2,585 ⟶ 2,995:
{{Works with|Office 365 betas 2021}}
<
=LAMBDA(n,
IF(0 < n,
Line 2,606 ⟶ 3,016:
""
)
)</
{{Out}}
Line 2,974 ⟶ 3,384:
=={{header|F_Sharp|F#}}==
<
[<EntryPoint>]
Line 2,993 ⟶ 3,403:
printf "%s%d" pad value
printfn ""
0</
Output for 5 and 14 (via command line argument)
<pre style="float:left"> 1
Line 3,016 ⟶ 3,426:
=={{header|Factor}}==
<
sequences ;
IN: rosetta-code.floyds-triangle
Line 3,029 ⟶ 3,439:
] each nl 3drop ;
5 14 [ floyd. ] bi@</
{{out}}
<pre>
Line 3,055 ⟶ 3,465:
=={{header|Forth}}==
<
: width ( n -- n ) s>f flog ftrunc f>s 2 + ;
Line 3,069 ⟶ 3,479:
loop
2drop ;
</syntaxhighlight>
=={{header|Fortran}}==
Please find compilation instructions on GNU/linux system at the beginning of the source. There, also, are the example output triangles produced by running the program. The environment variable setting and command line argument are vestigial. Ignore them. The code demonstrates writing to an in memory buffer, an old feature of FORTRAN.
<syntaxhighlight lang="fortran">
!-*- mode: compilation; default-directory: "/tmp/" -*-
!Compilation started at Tue May 21 22:55:08
Line 3,138 ⟶ 3,548:
end program p
</syntaxhighlight>
=={{header|FreeBASIC}}==
<
' compile with: fbc -s console
Line 3,193 ⟶ 3,603:
Print : Print "hit any key to end program"
Sleep
End</
{{out}}
<pre>output for 5 output for 14
Line 3,214 ⟶ 3,624:
=={{header|Gambas}}==
'''[https://gambas-playground.proko.eu/?gist=57ab1f58785b7e07765881657e4589ab Click this link to run this code]'''
<
Dim siCount, siNo, siCounter As Short
Dim siLine As Short = 1
Line 3,238 ⟶ 3,648:
Next
End</
Output:
<pre>
Line 3,266 ⟶ 3,676:
=={{header|Go}}==
<
import "fmt"
Line 3,292 ⟶ 3,702:
}
}
}</
{{out}}
<pre>
Line 3,320 ⟶ 3,730:
=={{header|Groovy}}==
{{trans|Java}}
<
static void main(String[] args) {
printTriangle(5)
Line 3,340 ⟶ 3,750:
}
}
}</
{{out}}
<pre>5 rows:
Line 3,365 ⟶ 3,775:
=={{header|Haskell}}==
<syntaxhighlight lang="haskell">--------------------- FLOYDS TRIANGLE --------------------
floydTriangle :: [[Int]]
floydTriangle =
( zipWith
(fmap
<$> scanl (+) 1
<*> id
)
--------------------------- TEST -------------------------
main :: IO ()
main = mapM_ (putStrLn . formatFT) [5, 14]
------------------------- DISPLAY ------------------------
formatFT :: Int -> String
Line 3,385 ⟶ 3,799:
ws = length . show <$> last t
alignR :: Int -> Int -> String
alignR n =
( (<>)
=<< flip replicate ' '
. (-) n
. length
)
. show</syntaxhighlight>
{{Out}}
<pre> 1
Line 3,412 ⟶ 3,832:
Or, simplifying a little by delegating the recursion scheme to '''mapAccumL'''
<
import Data.List (mapAccumL)
Line 3,440 ⟶ 3,860:
)
x
)</
{{Out}}
<pre> 1
Line 3,465 ⟶ 3,885:
Or, defining just the relationship between successive terms:
<
floyds :: [[Int]]
Line 3,486 ⟶ 3,906:
mapM_ print $ take 5 floyds
putStrLn ""
mapM_ print $ take 14 floyds</
{{Out}}
<pre>[1]
Line 3,512 ⟶ 3,932:
Or as a partially populated matrix:
<
import Data.Matrix (Matrix, getElem, matrix, nrows, toLists)
Line 3,543 ⟶ 3,963:
padRight :: Int -> String -> String
padRight n = (drop . length) <*> (replicate n ' ' <>)</
{{Out}}
<pre> 1
Line 3,569 ⟶ 3,989:
The following solution works in both languages:
<
n := integer(a[1]) | 5
w := ((n*(n-1))/2)-n
Line 3,580 ⟶ 4,000:
write()
}
end</
Sample outputs:
Line 3,616 ⟶ 4,036:
Note: <code>require 'strings'</code> does nothing in J7, but is harmless (strings is already incorporated in J7).
<
floyd=: [: rplc&(' 0';' ')"1@":@(* ($ $ +/\@,)) >:/~@:i.</
Note, the parenthesis around ($ $ +/\@,) is optional, and only included for emphasis.
Line 3,623 ⟶ 4,043:
Example use:
<
1
2 3
Line 3,643 ⟶ 4,063:
67 68 69 70 71 72 73 74 75 76 77 78
79 80 81 82 83 84 85 86 87 88 89 90 91
92 93 94 95 96 97 98 99 100 101 102 103 104 105</
How it works:
Line 3,655 ⟶ 4,075:
Efficiency note: In a measurement of time used: in floyd 100, 80% the time here goes into the string manipulations -- sequential additions and multiplications are cheap. In floyd 1000 this jumps to 98% of the time. Here's a faster version (about 3x on floyd 1000) courtesy of Aai of the J forums:
<
=={{header|Java}}==
<
public class Floyd {
public static void main(String[] args){
Line 3,678 ⟶ 4,098:
}
}
}</
Output:
<pre>5 rows:
Line 3,710 ⟶ 4,130:
:#and a mapping of that expression to a formatted string.
<
'use strict';
Line 3,830 ⟶ 4,250:
return showFloyd(floyd(n)) + '\n';
}, [5, 14]));
})();</
{{Out}}
<pre> 1
Line 3,855 ⟶ 4,275:
===ES6===
{{Trans|Haskell}} (mapAccumL version)
<
'use strict';
Line 3,951 ⟶ 4,371:
return unlines(map(n => showFloyd(floyd(n)) + '\n', [5, 14]))
})();</
{{Out}}
<pre> 1
Line 3,978 ⟶ 4,398:
(Used TCL example as a starting point.)
<
function main() {
Line 4,013 ⟶ 4,433:
}
main();</
{{out}}
Line 4,040 ⟶ 4,460:
=={{header|jq}}==
<
def floyd(n):
def lpad(len): tostring | (((len - length) * " ") + .);
Line 4,062 ⟶ 4,482:
| [ ($i + $row),
($string + "\n" + line($i; $row + 1; $widths )) ] )
| .[1] ) ;</
'''Task:'''
<
{{out}}
<
floyd(5):
1
Line 4,088 ⟶ 4,508:
67 68 69 70 71 72 73 74 75 76 77 78
79 80 81 82 83 84 85 86 87 88 89 90 91
92 93 94 95 96 97 98 99 100 101 102 103 104 105 </
=={{header|Julia}}==
<
r = collect(1:div(rows *(rows + 1), 2))
for i in 1:rows
Line 4,103 ⟶ 4,523:
floydtriangle(5); println(); floydtriangle(14)
</
<pre>
1
Line 4,129 ⟶ 4,549:
=={{header|Kotlin}}==
{{trans|Java}}
<
internal class Triangle(n: Int) {
Line 4,144 ⟶ 4,564:
}
}
}</
Output as Java.
=={{header|Lasso}}==
{{Output?|Lasso|There should only be one space between the numbers on the last row.}}
<
local(out = array(array(1)),comp = array, num = 1)
while(#out->size < #n) => {
Line 4,172 ⟶ 4,592:
floyds_triangle(5)
'\r\r'
floyds_triangle(14)</
{{out}}
<pre> 1
Line 4,196 ⟶ 4,616:
=={{header|Liberty BASIC}}==
<
dim colWidth(rowsNeeded) ' 5 rows implies 5 columns
Line 4,212 ⟶ 4,632:
next
print
next</
{{out}}
<pre>Number of rows needed:- 5
Line 4,238 ⟶ 4,658:
=={{header|Lua}}==
<
local c = 1
local h = rows*(rows-1)/2
Line 4,256 ⟶ 4,676:
print_floyd(5)
print_floyd(14)</
Output:
Line 4,281 ⟶ 4,701:
=={{header|Maple}}==
<
local num, numRows, numInRow, i, digits;
digits := Array([]);
Line 4,311 ⟶ 4,731:
floyd(5);
floyd(14);</
{{out}}
<pre>
Line 4,336 ⟶ 4,756:
=={{header|Mathematica}} / {{header|Wolfram Language}}==
<syntaxhighlight lang="mathematica">
f=Function[n,
Most/@(Range@@@Partition[FindSequenceFunction[{1,2,4,7,11}]/@Range[n+1],2,1])]
TableForm[f@5,TableAlignments->Right,TableSpacing->{1,1}]
TableForm[f@14,TableAlignments->Right,TableSpacing->{1,1}]
</syntaxhighlight>
Output:
<pre>
Line 4,367 ⟶ 4,787:
=={{header|MATLAB}} / {{header|Octave}}==
<
s = 1;
for k = 1 : n
disp(s : s + k - 1)
s = s + k;
end</
{{out}}:
<pre>
Line 4,383 ⟶ 4,803:
</pre>
=={{header|Maxima}}==
<syntaxhighlight lang="maxima">
floyd_t(m):=block(
t:m*(m+1)/2,
L1:makelist(makelist(k,k,1,t),j,0,m),
L2:makelist(rest(L1[i],((i-1)^2+(i-1))/2),i,1,m+1),
makelist(firstn(L2[i],i),i,1,m),
table_form(%%))$
/* Test cases */
floyd_t(5);
floyd_t(14);
</syntaxhighlight>
[[File:FloydTriangleMaxima5.png|thumb|center]]
[[File:FloydTriangleMaxima14.png|thumb|center]]
=={{header|Miranda}}==
<Syntaxhighlight lang="miranda">main :: [sys_message]
main = [Stdout (lay (map floyd [5, 14]))]
floyd :: num->[char]
floyd n = lay (map fmt rws)
where rws = rows n
cws = map ((+1).width) (last rws)
fmt rw = concat (map (uncurry rjust) (zip2 cws rw))
rows :: num->[[num]]
rows n = rows' [1..n] [1..]
where rows' [] ns = []
rows' (l:ls) ns = row : rows' ls rest
where (row, rest) = split l ns
split :: num->[*]->([*],[*])
split n ls = (take n ls, drop n ls)
rjust :: num->num->[char]
rjust w n = reverse (take w (reverse (show n) ++ repeat ' '))
width :: num->num
width = (#) . show
uncurry :: (*->**->***)->(*,**)->***
uncurry f (a,b) = f a b</syntaxhighlight>
{{out}}
<pre> 1
2 3
4 5 6
7 8 9 10
11 12 13 14 15
1
2 3
4 5 6
7 8 9 10
11 12 13 14 15
16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 32 33 34 35 36
37 38 39 40 41 42 43 44 45
46 47 48 49 50 51 52 53 54 55
56 57 58 59 60 61 62 63 64 65 66
67 68 69 70 71 72 73 74 75 76 77 78
79 80 81 82 83 84 85 86 87 88 89 90 91
92 93 94 95 96 97 98 99 100 101 102 103 104 105
</pre>
=={{header|Modula-2}}==
<
FROM FormatString IMPORT FormatString;
FROM Terminal IMPORT WriteString,WriteLn,ReadChar;
Line 4,420 ⟶ 4,906:
ReadChar
END FloydTriangle.</
{{out}}
<pre> 1
Line 4,447 ⟶ 4,933:
===Version 1===
{{Trans|REXX}}
<
options replace format comments java crossref symbols binary
/* REXX ***************************************************************
Line 4,474 ⟶ 4,960:
end i
Say ll -- output last line
</syntaxhighlight>
'''Output:
<pre>
Line 4,504 ⟶ 4,990:
===Version 2===
{{Trans|REXX}}
<
options replace format comments java crossref symbols binary
/*REXX program constructs & displays Floyd's triangle for any number of rows.*/
Line 4,523 ⟶ 5,009:
say output
end row
</syntaxhighlight>
'''Output:
Line 4,555 ⟶ 5,041:
=={{header|Nim}}==
{{trans|Python}}
<
proc floyd(rowcount = 5): seq[seq[int]] =
Line 4,576 ⟶ 5,062:
for i in [5, 14]:
pfloyd(floyd(i))
echo ""</
Output:
<pre> 1
Line 4,601 ⟶ 5,087:
=={{header|OCaml}}==
<
let rec last = function x::[] -> x | _::tl -> last tl | [] -> raise Not_found
let rec list_map2 f l1 l2 =
Line 4,626 ⟶ 5,112:
let () =
print_floyd (floyd (int_of_string Sys.argv.(1)))</
=={{header|OxygenBasic}}==
{{output?|OxygenBasic}}
<
function Floyd(sys n) as string
sys i,t
Line 4,658 ⟶ 5,144:
putfile "s.txt",Floyd(5)+floyd(14)
</syntaxhighlight>
=={{header|PARI/GP}}==
<
\\ +++ fl is a vector of fieldlengths in the last row
lastrow_e=m*(m+1)/2;lastrow_a=lastrow_e+1-m;
Line 4,678 ⟶ 5,164:
floyd(5)
floyd(14)
</syntaxhighlight>
{{out}}
<pre>
Line 4,704 ⟶ 5,190:
=={{header|Pascal}}==
{{works with|Free_Pascal}}
<
function digits(number: integer): integer;
Line 4,758 ⟶ 5,244:
writeln ('*** Floyd 14 ***');
floyd2(14);
end.</
Output:
<pre>% ./Floyd
Line 4,786 ⟶ 5,272:
=={{header|Perl}}==
{{Trans|NetRexx}}
<
use strict;
use warnings;
Line 4,820 ⟶ 5,306:
0;
__END__
</syntaxhighlight>
'''Output:
<pre>
Line 4,850 ⟶ 5,336:
=={{header|Phix}}==
<!--<
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
<span style="color: #008080;">procedure</span> <span style="color: #000000;">Floyds_triangle</span><span style="color: #0000FF;">(</span><span style="color: #004080;">integer</span> <span style="color: #000000;">n</span><span style="color: #0000FF;">)</span>
Line 4,869 ⟶ 5,355:
<span style="color: #000000;">Floyds_triangle</span><span style="color: #0000FF;">(</span><span style="color: #000000;">5</span><span style="color: #0000FF;">)</span>
<span style="color: #000000;">Floyds_triangle</span><span style="color: #0000FF;">(</span><span style="color: #000000;">14</span><span style="color: #0000FF;">)</span>
<!--</
{{out}}
<pre style="float:left">
Line 4,897 ⟶ 5,383:
=={{header|PHP}}==
<
<?php
floyds_triangle(5);
Line 4,915 ⟶ 5,401:
}
?>
</syntaxhighlight>
{{out}}
<pre>
Line 4,940 ⟶ 5,426:
92 93 94 95 96 97 98 99 100 101 102 103 104 105
</pre>
=={{header|Picat}}==
===List comprehension===
<syntaxhighlight lang="picat">import util.
% Calculate the numbers first and then format them
floyd1(N) = S =>
M = [[J+SS : J in 1..I] : I in 1..N, SS=sum(1..I-1)],
S = [slice(SS,2) : Row in M, SS = [to_fstring(to_fstring("%%%dd",M[N,I].to_string().length+1),E) :
{E,I} in zip(Row,1..Row.length)].join('')].join("\n").</syntaxhighlight>
===Loop based===
{{trans|Prolog}}
Picat doesn't support all of SWI-Prolog's nifty format options so we have to tweak a bit.
<syntaxhighlight lang="picat">
floyd2(N) = S =>
S = [],
foreach(I in 1..N)
SS = "",
foreach(J in 1..I)
Last = N * (N-1)/2+J,
V = I * (I-1) // 2 + J,
C = Last.to_string().length-1,
SS := SS ++ to_fstring(to_fstring("%%%dd",C), V)
end,
S := S ++ slice(SS,2) ++ "\n"
end.</syntaxhighlight>
===Test===
<syntaxhighlight lang="picat">
go =>
println("N=5:"),
println(floyd1(5)),
nl,
println("N=14:"),
println(floyd2(14)),
nl.</syntaxhighlight>
{{out}}
<pre>N=5:
1
2 3
4 5 6
7 8 9 10
11 12 13 14 15
N=14:
1
2 3
4 5 6
7 8 9 10
11 12 13 14 15
16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 32 33 34 35 36
37 38 39 40 41 42 43 44 45
46 47 48 49 50 51 52 53 54 55
56 57 58 59 60 61 62 63 64 65 66
67 68 69 70 71 72 73 74 75 76 77 78
79 80 81 82 83 84 85 86 87 88 89 90 91
92 93 94 95 96 97 98 99 100 101 102 103 104 105</pre>
=={{header|PicoLisp}}==
===Calculate widths relative to lower left corner===
<
(let LLC (/ (* N (dec N)) 2)
(for R N
Line 4,951 ⟶ 5,498:
(length (+ LLC C))
(+ C (/ (* R (dec R)) 2)) ) )
(if (= C R) (prinl) (space)) ) ) ) )</
===Pre-calculate all rows, and take format from last one===
<
(let
(Rows
Line 4,962 ⟶ 5,509:
(map inc (cdr Fmt))
(for R Rows
(apply tab R Fmt) ) ) )</
Output in both cases:
<pre>: (floyd 5)
Line 4,988 ⟶ 5,535:
=={{header|PL/I}}==
<
floyd: procedure options (main); /* Floyd's Triangle. Wiki 12 July 2012 */
Line 5,004 ⟶ 5,551:
end;
end floyd;</
{{out}}
Line 5,034 ⟶ 5,581:
991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035
</pre>
=={{header|PL/M}}==
<syntaxhighlight lang="plm">100H:
BDOS: PROCEDURE (FN, ARG); DECLARE FN BYTE, ARG ADDRESS; GO TO 5; END BDOS;
EXIT: PROCEDURE; GO TO 0; END EXIT;
PRINT: PROCEDURE (S); DECLARE S ADDRESS; CALL BDOS(9,S); END PRINT;
PUT$NUM: PROCEDURE (N, WIDTH);
DECLARE S (6) BYTE INITIAL (' $');
DECLARE N ADDRESS, (I, WIDTH) BYTE;
I = 5;
DIGIT:
S(I := I-1) = N MOD 10 + '0';
IF (N := N/10) > 0 THEN GO TO DIGIT;
DO I=I-1 TO 0 BY -1;
S(I) = ' ';
END;
CALL PRINT(.S(6-WIDTH));
END PUT$NUM;
WIDTH: PROCEDURE (N) BYTE;
DECLARE (N, W) BYTE;
W = 1;
DO WHILE N>0;
N = N/10;
W = W+1;
END;
RETURN W;
END WIDTH;
FLOYD: PROCEDURE (ROWS);
DECLARE (ROWS, ROW, COL) BYTE;
DECLARE (N, MAXNO) ADDRESS;
MAXNO = ROWS * (ROWS+1)/2;
N = 1;
DO ROW = 1 TO ROWS;
DO COL = 1 TO ROW;
CALL PUT$NUM(N, 1 + WIDTH(MAXNO - ROWS + COL));
N = N+1;
END;
CALL PRINT(.(13,10,'$'));
END;
END FLOYD;
CALL FLOYD(5);
CALL PRINT(.(13,10,'$'));
CALL FLOYD(14);
CALL EXIT;
EOF</syntaxhighlight>
{{out}}
<pre> 1
2 3
4 5 6
7 8 9 10
11 12 13 14 15
11
12 13
14 15 16
17 18 19 10
11 12 13 14 15
16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 32 33 34 35 36
37 38 39 40 41 42 43 44 45
46 47 48 49 50 51 52 53 54 55
56 57 58 59 60 61 62 63 64 65 66
67 68 69 70 71 72 73 74 75 76 77 78
79 80 81 82 83 84 85 86 87 88 89 90 91
92 93 94 95 96 97 98 99 100 101 102 103 104 105</pre>
=={{header|Prolog}}==
Works with SWI-Prolog version 6.5.3
<
forall(between(1, N, I),
( forall(between(1,I, J),
Line 5,050 ⟶ 5,669:
get_column(Last, C) :-
name(Last, N1), length(N1,C).
</syntaxhighlight>
Output :
<pre> ?- floyd(5).
Line 5,080 ⟶ 5,699:
=={{header|PureBasic}}==
<
Protected r,i
For i=1 To n
Line 5,129 ⟶ 5,748:
Print(#crlf$ + #crlf$ + "Press ENTER to exit"): Input()
CloseConsole()
EndIf</
'''Sample Output'''
Line 5,156 ⟶ 5,775:
=={{header|Python}}==
===Procedural===
<
rows = [[1]]
while len(rows) < rowcount:
Line 5,197 ⟶ 5,816:
79 80 81 82 83 84 85 86 87 88 89 90 91
92 93 94 95 96 97 98 99 100 101 102 103 104 105
>>> </
===Functional===
Line 5,203 ⟶ 5,822:
Using the mathematical formula for each row directly,
either in a list comprehension:
<
return [list(range(i * (i - 1) // 2 + 1, i * (i + 1) // 2 + 1))
for i in range(1, rowcount + 1)]</
or in terms of concatMap:
{{Works with|Python|3}}
<
from itertools import chain
Line 5,280 ⟶ 5,899:
if __name__ == '__main__':
main()</
Or alternatively, defining just the relationship between successive terms:
{{Works with|Python|3}}
<
from itertools import islice
Line 5,377 ⟶ 5,996:
# MAIN ----------------------------------------------------
if __name__ == '__main__':
main()</
{{Out}}
<pre>[1]
Line 5,386 ⟶ 6,005:
=={{header|q}}==
<syntaxhighlight lang="q">
floyd:{n:1+ til sum 1+til x;
t:d:0;
Line 5,398 ⟶ 6,017:
floyd[5]
floyd2[14]</
{{out}}
<pre>
Line 5,426 ⟶ 6,045:
=={{header|Quackery}}==
<
[ number$ tuck size -
Line 5,442 ⟶ 6,061:
5 floyd
cr
14 floyd</
{{out}}
Line 5,471 ⟶ 6,090:
=={{header|R}}==
If it weren't for the printing requirements, we could do this in one line.
<
{
#The first argument of the seq call is a well-known formula for triangle numbers.
Line 5,479 ⟶ 6,098:
}
Floyd(5)
Floyd(14)</
{{out}}
<pre>
Line 5,504 ⟶ 6,123:
=={{header|Racket}}==
<
#lang racket
(require math)
Line 5,523 ⟶ 6,142:
(floyd 5)
(floyd 14)
</syntaxhighlight>
Output:
<pre>
Line 5,550 ⟶ 6,169:
(formerly Perl 6)
Here's two ways of doing it.
<syntaxhighlight lang="raku"
constant @floyd2 = gather for 1..* -> $s { take [++$ xx $s] }
Line 5,564 ⟶ 6,183:
say format-rows(@floyd1[^5]);
say '';
say format-rows(@floyd2[^14]);</
{{out}}
<pre> 1
Line 5,587 ⟶ 6,206:
92 93 94 95 96 97 98 99 100 101 102 103 104 105</pre>
=={{header|Refal}}==
<syntaxhighlight lang="refal">$ENTRY Go {
= <Prout <Floyd 5>>
<Prout <Floyd 14>>;
};
Floyd {
s.N, <Rows s.N>: e.Rows,
e.Rows: e.X (e.MaxRow),
<Each Width e.MaxRow>: e.ColWidths =
<Each ((e.ColWidths)) FormatRow e.Rows>;
}
FormatRow {
(e.W) () = '\n';
(s.W e.WS) (s.C e.CS) = <Cell <+ 1 s.W> s.C> <FormatRow (e.WS) (e.CS)>;
};
Cell {
s.Width s.N, <Repeat s.Width ' '> <Symb s.N>: e.Rfill,
<Last s.Width e.Rfill>: (e.X) e.Cell = e.Cell;
}
Rows {
s.Rows = <Rows s.Rows 1 1>;
s.Rows s.Row s.N, <+ s.Rows 1>: s.Row = ;
s.Rows s.Row s.N, <+ s.N s.Row>: s.Next =
(<Row s.N <- s.Next 1>>)
<Rows s.Rows <+ s.Row 1> s.Next>;
}
Row {
s.To s.To = s.To;
s.From s.To = s.From <Row <+ s.From 1> s.To>;
};
Each {
s.F e.X = <Each () s.F e.X>;
(e.Arg) s.F = ;
(e.Arg) s.F t.I e.X = <Mu s.F e.Arg t.I> <Each (e.Arg) s.F e.X>;
};
Width {
s.N, <Symb s.N>: e.X, <Lenw e.X>: s.Width e.X = s.Width;
};
Repeat {
0 s.X = ;
s.N s.X = s.X <Repeat <- s.N 1> s.X>;
};</syntaxhighlight>
{{out}}
<pre> 1
2 3
4 5 6
7 8 9 10
11 12 13 14 15
1
2 3
4 5 6
7 8 9 10
11 12 13 14 15
16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 32 33 34 35 36
37 38 39 40 41 42 43 44 45
46 47 48 49 50 51 52 53 54 55
56 57 58 59 60 61 62 63 64 65 66
67 68 69 70 71 72 73 74 75 76 77 78
79 80 81 82 83 84 85 86 87 88 89 90 91
92 93 94 95 96 97 98 99 100 101 102 103 104 105</pre>
=={{header|REXX}}==
===version 1===
<
/* REXX ***************************************************************
* Parse Arg rowcount
Line 5,612 ⟶ 6,302:
end
Say ll /* output last line */
</syntaxhighlight>
Output:
<pre>
Line 5,641 ⟶ 6,331:
===version 2, simple formula===
This REXX version uses a simple formula to calculate the maximum value (triangle element) displayed.
<
parse arg N .; if N=='' | N=="," then N= 5 /*Not specified? Then use the default.*/
mx= N * (N+1) % 2 - N /*calculate the maximum of any value. */
Line 5,651 ⟶ 6,341:
end /*#*/ /*calculate the max length on the fly. */
say substr(_, 2) /*remove 1st leading blank in the line.*/
end /*r*/ /*stick a fork in it, we're all done. */</
{{out|output|text= when using the default input:}}
<pre>
Line 5,688 ⟶ 6,378:
===version 3, hexadecimal===
<
parse arg N .; if N=='' | N=="," then N=6 /*Not specified? Then use the default.*/
mx=N * (N+1) % 2 - N /*calculate maximum value of any value.*/
Line 5,698 ⟶ 6,388:
end /*#*/
say substr(_, 2) /*remove 1st leading blank in the line.*/
end /*r*/ /*stick a fork in it, we're all done. */</
{{out|output|text= when using the default input:}}
<pre>
Line 5,743 ⟶ 6,433:
This version of the '''base''' function has some boilerplate for signed numbers and various error checking.
<
parse arg N radx . /*obtain optional arguments from the CL*/
if N=='' | N=="," then N= 5 /*Not specified? Then use the default.*/
Line 5,792 ⟶ 6,482:
erd: call ser 'illegal "digit" in' x":" _
erm: call ser 'no argument specified.'
ser: say; say '***error***'; say arg(1); say; exit 13</
{{out|output|text= when using the input of: <tt> 6 2 </tt>}}
<pre>
Line 5,868 ⟶ 6,558:
=={{header|Ring}}==
<
rows = 10
n = 0
Line 5,879 ⟶ 6,569:
next
</syntaxhighlight>
Output:
<pre>
Line 5,897 ⟶ 6,587:
92 93 94 95 96 97 98 99 100 101 102 103 104 105
</pre>
=={{header|RPL}}==
HP-28 display has 4 lines only, so the task must be run on an HP-48 or greater to achieve n=5, with the advantage of benefitting from additional instructions: <code>INCR</code> increments a variable and returns its updated value and <code>FREEZE</code> acts as a <code>DO UNTIL KEY END</code> loop.
n=14 is out of reach for HP-48+, since only capable of displaying 22 characters per line.
{| class="wikitable"
! RPL code
! Comment
|-
|
≪
0 → c
≪ CLLCD 1 5 '''FOR''' line
"" '''DO'''
'''IF''' c 9 < '''THEN''' " " + '''END'''
'c' INCR →STR + " " +
'''UNTIL''' line DUP 1 + * 2 / c == '''END'''
line DISP
'''NEXT''' 3 FREEZE
≫ ≫ ‘'''FLOYD'''’ STO
|
'''FLOYD''' ''( -- )''
initialize counter
clear screen, for line=1 to 5
initialize output string, loop
if counter<9 then add one space
increment counter and put it in string
until line*(line+1)/2 == counter
display string
freeze screen until key pressed
.
|}
====Output====
[https://aerobarfilms.files.wordpress.com/2023/04/hp-48-floyds-triangle-1-15.png Screenshot from HP-48 emulator]
=={{header|Ruby}}==
<
max = (rows * (rows + 1)) / 2
widths = ((max - rows + 1)..max).map {|n| n.to_s.length + 1}
Line 5,909 ⟶ 6,633:
floyd(5)
floyd(14)</
{{out}}
Line 5,935 ⟶ 6,659:
=={{header|Run BASIC}}==
<
dim colSize(rows)
for col=1 to rows
Line 5,948 ⟶ 6,672:
next
print
next</
<pre>Number of rows: ?14
1
Line 5,966 ⟶ 6,690:
=={{header|Rust}}==
<
floyds_triangle(5);
floyds_triangle(14);
Line 6,000 ⟶ 6,724:
}
</syntaxhighlight>
=={{header|Scala}}==
<
val s = (1 to n)
val t = s map {i => (s
(s zip t) foreach { n =>
Line 6,022 ⟶ 6,746:
// Test
floydstriangle(5)
floydstriangle(14)</
{{out}}
<pre>
Line 6,049 ⟶ 6,773:
=={{header|Seed7}}==
<
const proc: writeFloyd (in integer: rows) is func
Line 6,075 ⟶ 6,799:
writeFloyd(5);
writeFloyd(14);
end func;</
Output:
Line 6,099 ⟶ 6,823:
92 93 94 95 96 97 98 99 100 101 102 103 104 105
</pre>
=={{header|SETL}}==
<syntaxhighlight lang="setl">program floyd_triangle;
floyd(5);
print;
floyd(14);
print;
proc floyd(rows);
maxno := rows * (rows+1) div 2;
n := 1;
loop for row in [1..rows] do
loop for col in [1..row] do
nprint(lpad(str n, 1 + #str (maxno - rows + col)));
n +:=1;
end loop;
print;
end loop;
end proc;
end program;
</syntaxhighlight>
{{out}}
<pre> 1
2 3
4 5 6
7 8 9 10
11 12 13 14 15
1
2 3
4 5 6
7 8 9 10
11 12 13 14 15
16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 32 33 34 35 36
37 38 39 40 41 42 43 44 45
46 47 48 49 50 51 52 53 54 55
56 57 58 59 60 61 62 63 64 65 66
67 68 69 70 71 72 73 74 75 76 77 78
79 80 81 82 83 84 85 86 87 88 89 90 91
92 93 94 95 96 97 98 99 100 101 102 103 104 105</pre>
=={{header|Sidef}}==
<
var max = Math.range_sum(1, rows)
var widths = (max-rows .. max-1 -> map{.+n->to_s.len})
Line 6,110 ⟶ 6,876:
floyd(5) # or: floyd(5, 88)
floyd(14) # or: floyd(14, 900)</
{{out}}
<pre>
Line 6,135 ⟶ 6,901:
=={{header|SPL}}==
<
floyd(14)
Line 6,149 ⟶ 6,915:
#.output(s)
<
.</
{{out}}
<pre>
Line 6,174 ⟶ 6,940:
=={{header|Tcl}}==
<
# Compute the column widths
for {set i [expr {$n*($n-1)/2+1}]} {$i <= $n*($n+1)/2} {incr i} {
Line 6,192 ⟶ 6,958:
floydTriangle 5
puts "Floyd 14:"
floydTriangle 14</
{{out}}
<pre>
Line 6,220 ⟶ 6,986:
=={{header|TXR}}==
<
(let* ((last (trunc (* n (+ n 1)) 2))
(colw (mapcar [chain tostring length]
Line 6,238 ⟶ 7,004:
((num blah . etc) (usage "too many arguments"))
((num) (flotri (int-str num)))
(() (usage "need an argument")))</
{{out}}
Line 6,271 ⟶ 7,037:
79 80 81 82 83 84 85 86 87 88 89 90 91
92 93 94 95 96 97 98 99 100 101 102 103 104 105</pre>
=={{header|Uiua}}==
Probably terrible and unidiomatic...
<syntaxhighlight lang="Uiua">
Floyd ← ⇌⍥(⊂⍚(+⇡∩(+1)⊃⧻(⊢⇌))⊢.):{[1]}-1
JoinUsing ← ↘1/◇⊂≡(□◇⊂)↯:⊙(⧻.)□
PadL ← ⊂/⊂↯:" "
Lengths ← ⍚∵◇∵(⧻°⋕)°□
PrintIt ← (
# Create table of [last row sizes] [this row sizes] [this row numbers]
⊢⊞⊂⊢⊢↙¯1.⍉[Lengths.]
≡(
# Calculate last row sizes - this row sizes and use to calculate paddings
⍉⊟⊃(-:↙:⊙(⧻.)∩°□°⊟↙2)(°⋕°□⊢↘2)
&pJoinUsing " " ≡(⍚PadL°⊟)
)
)
PrintIt Floyd 4
PrintIt Floyd 14
</syntaxhighlight>
{{out}}
<pre>
1
2 3
4 5 6
7 8 9 10
1
2 3
4 5 6
7 8 9 10
11 12 13 14 15
16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 32 33 34 35 36
37 38 39 40 41 42 43 44 45
46 47 48 49 50 51 52 53 54 55
56 57 58 59 60 61 62 63 64 65 66
67 68 69 70 71 72 73 74 75 76 77 78
79 80 81 82 83 84 85 86 87 88 89 90 91
92 93 94 95 96 97 98 99 100 101 102 103 104 105
</pre>
=={{header|VBA}}==
Solution in Microsoft Office Word. Based on VBScript
<
Dim o As String
Sub floyd(L As Integer)
Line 6,297 ⟶ 7,109:
.TypeText Text:=o
End With
End Sub</
{{out}}
<syntaxhighlight lang="text">5 lines
1
2 3
Line 6,320 ⟶ 7,132:
67 68 69 70 71 72 73 74 75 76 77 78
79 80 81 82 83 84 85 86 87 88 89 90 91
92 93 94 95 96 97 98 99 100 101 102 103 104 105</
=={{header|VBScript}}==
{{works with|Windows Script Host|*}}
<syntaxhighlight lang="vbscript">
' Read the number of rows to use..
intRows = WScript.StdIn.ReadLine
Line 6,340 ⟶ 7,152:
WScript.StdOut.WriteLine ""
Next
</syntaxhighlight>
=={{header|Visual Basic .NET}}==
{{trans|C#}}
<
Module Module1
Line 6,383 ⟶ 7,195:
End Sub
End Module</
{{out}}
<pre> 1
Line 6,409 ⟶ 7,221:
=={{header|Wren}}==
{{libheader|Wren-fmt}}
<
var floyd = Fn.new { |n|
Line 6,425 ⟶ 7,237:
floyd.call(5)
System.print("\nFloyd(14):")
floyd.call(14)</
{{out}}
Line 6,453 ⟶ 7,265:
=={{header|XPL0}}==
<
func IntLen(N); \Return number of digits in a positive integer
Line 6,476 ⟶ 7,288:
[Floyd(5);
Floyd(14);
]</
Output:
Line 6,503 ⟶ 7,315:
=={{header|zkl}}==
Format last line and then fit each line to that format (which is wider than terminal width before formating breaks down (at 10 digit numbers)):
<
fcn floydsTriangle(rows){
fmt:=[lcNum(rows-1)..lcNum(rows)-1].pump(String,fcn(n){
Line 6,513 ⟶ 7,325:
}
floydsTriangle(5); println();
floydsTriangle(14);</
{{out}}
<pre>
Line 6,539 ⟶ 7,351:
=={{header|ZX Spectrum Basic}}==
<
20 FOR r=1 TO n
30 FOR j=j TO j+r-1
Line 6,547 ⟶ 7,359:
70 PRINT
80 LET col=1
90 NEXT r</
|