Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
|
|
@ -0,0 +1,127 @@
|
|||
use AppleScript version "2.3.1" -- Mac OS X 10.9 (Mavericks) or later.
|
||||
use sorter : script "Insertion sort" -- <https://rosettacode.org/wiki/Sorting_algorithms/Insertion_sort#AppleScript>
|
||||
|
||||
on sieveOfEratosthenes(limit)
|
||||
set mv to missing value
|
||||
script o
|
||||
property numberList : makelist(limit, missing value)
|
||||
end script
|
||||
set o's numberList's item 2 to 2
|
||||
set o's numberList's item 3 to 3
|
||||
repeat with n from 5 to (limit - 2) by 6
|
||||
set o's numberList's item n to n
|
||||
tell (n + 2) to set o's numberList's item it to it
|
||||
end repeat
|
||||
if (limit - n > 5) then tell (n + 6) to set o's numberList's item it to it
|
||||
repeat with n from 5 to (limit ^ 0.5 div 1) by 6
|
||||
if (o's numberList's item n = n) then
|
||||
repeat with multiple from (n * n) to limit by n
|
||||
set o's numberList's item multiple to mv
|
||||
end repeat
|
||||
end if
|
||||
tell (n + 2)
|
||||
if (o's numberList's item it = it) then
|
||||
repeat with multiple from (it * it) to limit by it
|
||||
set o's numberList's item multiple to mv
|
||||
end repeat
|
||||
end if
|
||||
end tell
|
||||
end repeat
|
||||
|
||||
return o's numberList's numbers
|
||||
end sieveOfEratosthenes
|
||||
|
||||
on makelist(limit, filler)
|
||||
if (limit < 1) then return {}
|
||||
script o
|
||||
property lst : {filler}
|
||||
end script
|
||||
|
||||
set counter to 1
|
||||
repeat until (counter + counter > limit)
|
||||
set o's lst to o's lst & o's lst
|
||||
set counter to counter + counter
|
||||
end repeat
|
||||
if (counter < limit) then set o's lst to o's lst & o's lst's items 1 thru (limit - counter)
|
||||
return o's lst
|
||||
end makelist
|
||||
|
||||
on join(lst, delim)
|
||||
set astid to AppleScript's text item delimiters
|
||||
set AppleScript's text item delimiters to delim
|
||||
set txt to lst as text
|
||||
set AppleScript's text item delimiters to astid
|
||||
return txt
|
||||
end join
|
||||
|
||||
on ordinalise(n)
|
||||
set units to n mod 10
|
||||
if ((units > 3) or (n div 10 mod 10 is 1) or (units < 1) or (units mod 1 > 0)) then ¬
|
||||
return (n as text) & "th"
|
||||
return (n as text) & item units of {"st", "nd", "rd"}
|
||||
end ordinalise
|
||||
|
||||
on task()
|
||||
script o
|
||||
-- Enough primes to include the first > the square root of 100,000,000.
|
||||
property primes : sieveOfEratosthenes(10020)
|
||||
-- Collector for enough not-quite-ordered brilliants to include the first 100.
|
||||
property first250 : {}
|
||||
end script
|
||||
-- List of data collectors for nine magnitudes.
|
||||
set {magData, mag, mv} to {{}, 1, missing value}
|
||||
repeat 9 times
|
||||
set magData's end to {magnitude:mag, lowest:mv, |count|:0}
|
||||
set mag to mag * 10
|
||||
end repeat
|
||||
|
||||
-- Calculate the brilliant numbers and store the relevant info.
|
||||
set {primeMag, counter} to {1, 0}
|
||||
repeat with k from 1 to (count o's primes)
|
||||
set thisPrime to o's primes's item k
|
||||
if (thisPrime ≥ primeMag) then
|
||||
set primeMag to primeMag * 10
|
||||
set i to k
|
||||
end if
|
||||
repeat with j from i to k
|
||||
set thisBrill to thisPrime * (o's primes's item j)
|
||||
if (counter < 250) then
|
||||
set counter to counter + 1
|
||||
set o's first250's end to thisBrill
|
||||
end if
|
||||
repeat with m from 9 to 1 by -1
|
||||
set theseData to magData's item m
|
||||
if (thisBrill ≥ theseData's magnitude) then
|
||||
if ((theseData's lowest is mv) or (theseData's lowest > thisBrill)) then ¬
|
||||
set theseData's lowest to thisBrill
|
||||
set theseData's |count| to (theseData's |count|) + 1
|
||||
exit repeat
|
||||
end if
|
||||
end repeat
|
||||
end repeat
|
||||
end repeat
|
||||
|
||||
-- Get the first 100 brilliants from the first 250 collected.
|
||||
tell sorter to sort(o's first250, 1, counter)
|
||||
set output to {"The first 100 brilliant numbers are:"}
|
||||
set theseTen to {}
|
||||
repeat with i from 1 to 100 by 10
|
||||
repeat with j from i to i + 9
|
||||
set theseTen's end to (" " & o's first250's item j)'s text -6 thru end
|
||||
end repeat
|
||||
set output's end to join(theseTen, "")
|
||||
set theseTen to {}
|
||||
end repeat
|
||||
|
||||
-- Get the data from the magnitude records.
|
||||
set counter to 1
|
||||
repeat with theseData in magData
|
||||
set output's end to "The first ≥ " & (theseData's magnitude) & ¬
|
||||
" is the " & ordinalise(counter) & ": " & (theseData's lowest)
|
||||
set counter to counter + (theseData's |count|)
|
||||
end repeat
|
||||
|
||||
return join(output, linefeed)
|
||||
end task
|
||||
|
||||
task()
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
"The first 100 brilliant numbers are:
|
||||
4 6 9 10 14 15 21 25 35 49
|
||||
121 143 169 187 209 221 247 253 289 299
|
||||
319 323 341 361 377 391 403 407 437 451
|
||||
473 481 493 517 527 529 533 551 559 583
|
||||
589 611 629 649 667 671 689 697 703 713
|
||||
731 737 767 779 781 793 799 803 817 841
|
||||
851 869 871 893 899 901 913 923 943 949
|
||||
961 979 989 1003 1007 1027 1037 1067 1073 1079
|
||||
1081 1121 1139 1147 1157 1159 1189 1207 1219 1241
|
||||
1247 1261 1271 1273 1333 1343 1349 1357 1363 1369
|
||||
The first ≥ 1 is the 1st: 4
|
||||
The first ≥ 10 is the 4th: 10
|
||||
The first ≥ 100 is the 11th: 121
|
||||
The first ≥ 1000 is the 74th: 1003
|
||||
The first ≥ 10000 is the 242nd: 10201
|
||||
The first ≥ 100000 is the 2505th: 100013
|
||||
The first ≥ 1000000 is the 10538th: 1018081
|
||||
The first ≥ 10000000 is the 124364th: 10000043
|
||||
The first ≥ 100000000 is the 573929th: 100140049"
|
||||
Loading…
Add table
Add a link
Reference in a new issue