Fraction reduction: Difference between revisions
Content added Content deleted
(→{{header|zkl}}: added code) |
|||
Line 2,906: | Line 2,906: | ||
For 5-digit fractions, there are 2988 with crossed-out 9's. |
For 5-digit fractions, there are 2988 with crossed-out 9's. |
||
</pre> |
</pre> |
||
=={{header|Visual Basic .NET}}== |
|||
{{trans|C#}} |
|||
<lang vbnet>Module Module1 |
|||
Function IndexOf(n As Integer, s As Integer()) As Integer |
|||
For ii = 1 To s.Length |
|||
Dim i = ii - 1 |
|||
If s(i) = n Then |
|||
Return i |
|||
End If |
|||
Next |
|||
Return -1 |
|||
End Function |
|||
Function GetDigits(n As Integer, le As Integer, digits As Integer()) As Boolean |
|||
While n > 0 |
|||
Dim r = n Mod 10 |
|||
If r = 0 OrElse IndexOf(r, digits) >= 0 Then |
|||
Return False |
|||
End If |
|||
le -= 1 |
|||
digits(le) = r |
|||
n \= 10 |
|||
End While |
|||
Return True |
|||
End Function |
|||
Function RemoveDigit(digits As Integer(), le As Integer, idx As Integer) As Integer |
|||
Dim pows = {1, 10, 100, 1000, 10000} |
|||
Dim sum = 0 |
|||
Dim pow = pows(le - 2) |
|||
For ii = 1 To le |
|||
Dim i = ii - 1 |
|||
If i = idx Then |
|||
Continue For |
|||
End If |
|||
sum += digits(i) * pow |
|||
pow \= 10 |
|||
Next |
|||
Return sum |
|||
End Function |
|||
Sub Main() |
|||
Dim lims = {{12, 97}, {123, 986}, {1234, 9875}, {12345, 98764}} |
|||
Dim count(5) As Integer |
|||
Dim omitted(5, 10) As Integer |
|||
Dim upperBound = lims.GetLength(0) |
|||
For ii = 1 To upperBound |
|||
Dim i = ii - 1 |
|||
Dim nDigits(i + 2 - 1) As Integer |
|||
Dim dDigits(i + 2 - 1) As Integer |
|||
Dim blank(i + 2 - 1) As Integer |
|||
For n = lims(i, 0) To lims(i, 1) |
|||
blank.CopyTo(nDigits, 0) |
|||
Dim nOk = GetDigits(n, i + 2, nDigits) |
|||
If Not nOk Then |
|||
Continue For |
|||
End If |
|||
For d = n + 1 To lims(i, 1) + 1 |
|||
blank.CopyTo(dDigits, 0) |
|||
Dim dOk = GetDigits(d, i + 2, dDigits) |
|||
If Not dOk Then |
|||
Continue For |
|||
End If |
|||
For nixt = 1 To nDigits.Length |
|||
Dim nix = nixt - 1 |
|||
Dim digit = nDigits(nix) |
|||
Dim dix = IndexOf(digit, dDigits) |
|||
If dix >= 0 Then |
|||
Dim rn = RemoveDigit(nDigits, i + 2, nix) |
|||
Dim rd = RemoveDigit(dDigits, i + 2, dix) |
|||
If (n / d) = (rn / rd) Then |
|||
count(i) += 1 |
|||
omitted(i, digit) += 1 |
|||
If count(i) <= 12 Then |
|||
Console.WriteLine("{0}/{1} = {2}/{3} by omitting {4}'s", n, d, rn, rd, digit) |
|||
End If |
|||
End If |
|||
End If |
|||
Next |
|||
Next |
|||
Next |
|||
Console.WriteLine() |
|||
Next |
|||
For i = 2 To 5 |
|||
Console.WriteLine("There are {0} {1}-digit fractions of which:", count(i - 2), i) |
|||
For j = 1 To 9 |
|||
If omitted(i - 2, j) = 0 Then |
|||
Continue For |
|||
End If |
|||
Console.WriteLine("{0,6} have {1}'s omitted", omitted(i - 2, j), j) |
|||
Next |
|||
Console.WriteLine() |
|||
Next |
|||
End Sub |
|||
End Module</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|zkl}}== |
=={{header|zkl}}== |