Fraction reduction: Difference between revisions
Content added Content deleted
m (→{{header|Ada}}) |
|||
Line 1,889: | Line 1,889: | ||
} |
} |
||
}</lang> |
}</lang> |
||
{{out}} |
|||
<pre>16/64 = 1/4 by omitting 6's |
|||
19/95 = 1/5 by omitting 9's |
|||
26/65 = 2/5 by omitting 6's |
|||
49/98 = 4/8 by omitting 9's |
|||
132/231 = 12/21 by omitting 3's |
|||
134/536 = 14/56 by omitting 3's |
|||
134/938 = 14/98 by omitting 3's |
|||
136/238 = 16/28 by omitting 3's |
|||
138/345 = 18/45 by omitting 3's |
|||
139/695 = 13/65 by omitting 9's |
|||
143/341 = 13/31 by omitting 4's |
|||
146/365 = 14/35 by omitting 6's |
|||
149/298 = 14/28 by omitting 9's |
|||
149/596 = 14/56 by omitting 9's |
|||
149/894 = 14/84 by omitting 9's |
|||
154/253 = 14/23 by omitting 5's |
|||
1234/4936 = 124/496 by omitting 3's |
|||
1239/6195 = 123/615 by omitting 9's |
|||
1246/3649 = 126/369 by omitting 4's |
|||
1249/2498 = 124/248 by omitting 9's |
|||
1259/6295 = 125/625 by omitting 9's |
|||
1279/6395 = 127/635 by omitting 9's |
|||
1283/5132 = 128/512 by omitting 3's |
|||
1297/2594 = 127/254 by omitting 9's |
|||
1297/3891 = 127/381 by omitting 9's |
|||
1298/2596 = 128/256 by omitting 9's |
|||
1298/3894 = 128/384 by omitting 9's |
|||
1298/5192 = 128/512 by omitting 9's |
|||
12349/24698 = 1234/2468 by omitting 9's |
|||
12356/67958 = 1236/6798 by omitting 5's |
|||
12358/14362 = 1258/1462 by omitting 3's |
|||
12358/15364 = 1258/1564 by omitting 3's |
|||
12358/17368 = 1258/1768 by omitting 3's |
|||
12358/19372 = 1258/1972 by omitting 3's |
|||
12358/21376 = 1258/2176 by omitting 3's |
|||
12358/25384 = 1258/2584 by omitting 3's |
|||
12359/61795 = 1235/6175 by omitting 9's |
|||
12364/32596 = 1364/3596 by omitting 2's |
|||
12379/61895 = 1237/6185 by omitting 9's |
|||
12386/32654 = 1386/3654 by omitting 2's |
|||
There are 4 2-digit fractions of which: |
|||
2 have 6's omitted |
|||
2 have 9's omitted |
|||
There are 122 3-digit fractions of which: |
|||
9 have 3's omitted |
|||
1 have 4's omitted |
|||
6 have 5's omitted |
|||
15 have 6's omitted |
|||
16 have 7's omitted |
|||
15 have 8's omitted |
|||
60 have 9's omitted |
|||
There are 660 4-digit fractions of which: |
|||
14 have 1's omitted |
|||
25 have 2's omitted |
|||
92 have 3's omitted |
|||
14 have 4's omitted |
|||
29 have 5's omitted |
|||
63 have 6's omitted |
|||
16 have 7's omitted |
|||
17 have 8's omitted |
|||
390 have 9's omitted |
|||
There are 5087 5-digit fractions of which: |
|||
75 have 1's omitted |
|||
40 have 2's omitted |
|||
376 have 3's omitted |
|||
78 have 4's omitted |
|||
209 have 5's omitted |
|||
379 have 6's omitted |
|||
591 have 7's omitted |
|||
351 have 8's omitted |
|||
2988 have 9's omitted</pre> |
|||
=={{header|Lua}}== |
|||
{{trans|C++}} |
|||
<lang lua>function indexOf(haystack, needle) |
|||
for idx,straw in pairs(haystack) do |
|||
if straw == needle then |
|||
return idx |
|||
end |
|||
end |
|||
return -1 |
|||
end |
|||
function getDigits(n, le, digits) |
|||
while n > 0 do |
|||
local r = n % 10 |
|||
if r == 0 or indexOf(digits, r) > 0 then |
|||
return false |
|||
end |
|||
le = le - 1 |
|||
digits[le + 1] = r |
|||
n = math.floor(n / 10) |
|||
end |
|||
return true |
|||
end |
|||
function removeDigit(digits, le, idx) |
|||
local pows = { 1, 10, 100, 1000, 10000 } |
|||
local sum = 0 |
|||
local pow = pows[le - 2 + 1] |
|||
for i = 1, le do |
|||
if i ~= idx then |
|||
sum = sum + digits[i] * pow |
|||
pow = math.floor(pow / 10) |
|||
end |
|||
end |
|||
return sum |
|||
end |
|||
function main() |
|||
local lims = { {12, 97}, {123, 986}, {1234, 9875}, {12345, 98764} } |
|||
local count = { 0, 0, 0, 0, 0 } |
|||
local omitted = { |
|||
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, |
|||
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, |
|||
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, |
|||
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, |
|||
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, |
|||
} |
|||
for i,_ in pairs(lims) do |
|||
local nDigits = {} |
|||
local dDigits = {} |
|||
for j = 1, i + 2 - 1 do |
|||
nDigits[j] = -1 |
|||
dDigits[j] = -1 |
|||
end |
|||
for n = lims[i][1], lims[i][2] do |
|||
for j,_ in pairs(nDigits) do |
|||
nDigits[j] = 0 |
|||
end |
|||
local nOk = getDigits(n, i + 2 - 1, nDigits) |
|||
if nOk then |
|||
for d = n + 1, lims[i][2] + 1 do |
|||
for j,_ in pairs(dDigits) do |
|||
dDigits[j] = 0 |
|||
end |
|||
local dOk = getDigits(d, i + 2 - 1, dDigits) |
|||
if dOk then |
|||
for nix,_ in pairs(nDigits) do |
|||
local digit = nDigits[nix] |
|||
local dix = indexOf(dDigits, digit) |
|||
if dix >= 0 then |
|||
local rn = removeDigit(nDigits, i + 2 - 1, nix) |
|||
local rd = removeDigit(dDigits, i + 2 - 1, dix) |
|||
if (n / d) == (rn / rd) then |
|||
count[i] = count[i] + 1 |
|||
omitted[i][digit + 1] = omitted[i][digit + 1] + 1 |
|||
if count[i] <= 12 then |
|||
print(string.format("%d/%d = %d/%d by omitting %d's", n, d, rn, rd, digit)) |
|||
end |
|||
end |
|||
end |
|||
end |
|||
end |
|||
end |
|||
end |
|||
end |
|||
print() |
|||
end |
|||
for i = 2, 5 do |
|||
print("There are "..count[i - 2 + 1].." "..i.."-digit fractions of which:") |
|||
for j = 1, 9 do |
|||
if omitted[i - 2 + 1][j + 1] > 0 then |
|||
print(string.format("%6d have %d's omitted", omitted[i - 2 + 1][j + 1], j)) |
|||
end |
|||
end |
|||
print() |
|||
end |
|||
end |
|||
main()</lang> |
|||
{{out}} |
{{out}} |
||
<pre>16/64 = 1/4 by omitting 6's |
<pre>16/64 = 1/4 by omitting 6's |