Download or view piPoster.frink in plain text format
/** This is a program to print a poster of the digits of pi. It uses a
system-of-equations solver to do the algebra to fit as closely to the
dimensions of a page as possible. */
use systemSolver2.frink
use pi2.frink
symbolicMode[true]
layout = new System[[pageWidth pageHeight === charHeight charWidth numChars,
charWidth === 6/10 charHeight,
lines === pageHeight / charHeight,
charsPerLine === numChars / lines],
[]]
digits = 10000
pageWidth = 8 in
pageHeight = 10.5 in
// Read number of digits from command-line argument if there is one.
if length[ARGS] > 0
digits = eval[ARGS@0]
// Read width and height from command-line arguments if they exist.
if length[ARGS] >= 3
{
pageWidth = eval[ARGS@1]
pageHeight = eval[ARGS@2]
}
numChars = digits + 1 // Account for decimal point
if eval["FrinkGeneration[]"] == 0
println["""Note: this program will be orders of magnitude faster with
Frink:The Next Generation, available at:
https://frinklang.org/experimental.html
"""]
args = [["pageWidth", pageWidth], ["pageHeight", pageHeight], ["numChars", numChars]]
println[join["\n", layout.solveAll[]]]
charsPerLine = ceil[positive[eval[layout.solveForValues["charsPerLine", args]]]@0]
println["Chars per line: $charsPerLine"]
lines = ceil[numChars/charsPerLine]
println["Lines: $lines"]
pi = Pi.getPi[digits]
piStr = toString[pi]
println["Pi calculated to $digits digits"]
g = new graphics[]
g.font["Monospaced", 1]
line = 0
for pos = 0 to length[piStr]-1 step charsPerLine
{
sub = substringLen[piStr, pos, charsPerLine]
g.text[sub, 0, line, "left", "center"]
line = line + .9
}
g.show[]
filename = "piPoster$digits.svg"
g.write[filename, 1000, 1000]
//browse[ filename]
Download or view piPoster.frink in plain text format
This is a program written in the programming language Frink.
For more information, view the Frink
Documentation or see More Sample Frink Programs.
Alan Eliasen was born 20145 days, 13 hours, 21 minutes ago.