Undulating numbers: Difference between revisions
(Created a new draft task and added a Wren example.) |
|||
Line 33: | Line 33: | ||
* OEIS sequence [[oeis:A046075|A046075: Non-trivial undulants]] |
* OEIS sequence [[oeis:A046075|A046075: Non-trivial undulants]] |
||
<br> |
<br> |
||
=={{header|Phix}}== |
|||
{{trans|Wren}} |
|||
<!--<syntaxhighlight lang="phix">(phixonline)--> |
|||
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span> |
|||
<span style="color: #008080;">for</span> <span style="color: #000000;">base</span> <span style="color: #008080;">in</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">10</span><span style="color: #0000FF;">,</span><span style="color: #000000;">7</span><span style="color: #0000FF;">}</span> <span style="color: #008080;">do</span> |
|||
<span style="color: #004080;">integer</span> <span style="color: #000000;">n</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">600</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">mpow</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">53</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">bsquare</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">base</span> <span style="color: #0000FF;">*</span> <span style="color: #000000;">base</span> |
|||
<span style="color: #004080;">atom</span> <span style="color: #000000;">limit</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">power</span><span style="color: #0000FF;">(</span><span style="color: #000000;">2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">53</span><span style="color: #0000FF;">)-</span><span style="color: #000000;">1</span> |
|||
<span style="color: #004080;">sequence</span> <span style="color: #000000;">u3</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{},</span> <span style="color: #000000;">u4</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{}</span> |
|||
<span style="color: #008080;">for</span> <span style="color: #000000;">a</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #000000;">base</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span> <span style="color: #008080;">do</span> |
|||
<span style="color: #008080;">for</span> <span style="color: #000000;">b</span><span style="color: #0000FF;">=</span><span style="color: #000000;">0</span> <span style="color: #008080;">to</span> <span style="color: #000000;">base</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span> <span style="color: #008080;">do</span> |
|||
<span style="color: #008080;">if</span> <span style="color: #000000;">b</span><span style="color: #0000FF;">!=</span><span style="color: #000000;">a</span> <span style="color: #008080;">then</span> |
|||
<span style="color: #004080;">integer</span> <span style="color: #000000;">u</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">a</span> <span style="color: #0000FF;">*</span> <span style="color: #000000;">base</span> <span style="color: #0000FF;">+</span> <span style="color: #000000;">b</span><span style="color: #0000FF;">,</span> |
|||
<span style="color: #000000;">v</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">u</span> <span style="color: #0000FF;">*</span> <span style="color: #000000;">base</span> <span style="color: #0000FF;">+</span> <span style="color: #000000;">a</span><span style="color: #0000FF;">,</span> |
|||
<span style="color: #000000;">w</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">v</span> <span style="color: #0000FF;">*</span> <span style="color: #000000;">base</span> <span style="color: #0000FF;">+</span> <span style="color: #000000;">b</span> |
|||
<span style="color: #000000;">u3</span> <span style="color: #0000FF;">&=</span> <span style="color: #000000;">v</span> |
|||
<span style="color: #000000;">u4</span> <span style="color: #0000FF;">&=</span> <span style="color: #000000;">w</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span> |
|||
<span style="color: #008080;">for</span> <span style="color: #000000;">d</span><span style="color: #0000FF;">,</span><span style="color: #000000;">u</span> <span style="color: #008080;">in</span> <span style="color: #0000FF;">{{</span><span style="color: #000000;">u3</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"%3d"</span><span style="color: #0000FF;">},{</span><span style="color: #000000;">u4</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"%4d"</span><span style="color: #0000FF;">}}</span> <span style="color: #008080;">do</span> |
|||
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"All %d digit undulating numbers in base %d:\n%s\n"</span><span style="color: #0000FF;">,</span> |
|||
<span style="color: #0000FF;">{</span><span style="color: #000000;">d</span><span style="color: #0000FF;">+</span><span style="color: #000000;">2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">base</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">join_by</span><span style="color: #0000FF;">(</span><span style="color: #000000;">u</span><span style="color: #0000FF;">[</span><span style="color: #000000;">1</span><span style="color: #0000FF;">],</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">9</span><span style="color: #0000FF;">,</span><span style="color: #008000;">" "</span><span style="color: #0000FF;">,</span><span style="color: #000000;">fmt</span><span style="color: #0000FF;">:=</span><span style="color: #000000;">u</span><span style="color: #0000FF;">[</span><span style="color: #000000;">2</span><span style="color: #0000FF;">])})</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span> |
|||
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"All 3 digit undulating numbers which are primes in base %d:\n%s\n"</span><span style="color: #0000FF;">,</span> |
|||
<span style="color: #0000FF;">{</span><span style="color: #000000;">base</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">join_by</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">filter</span><span style="color: #0000FF;">(</span><span style="color: #000000;">u3</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">is_prime</span><span style="color: #0000FF;">),</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">10</span><span style="color: #0000FF;">,</span><span style="color: #008000;">" "</span><span style="color: #0000FF;">,</span><span style="color: #000000;">fmt</span><span style="color: #0000FF;">:=</span><span style="color: #008000;">"%3d"</span><span style="color: #0000FF;">)})</span> |
|||
<span style="color: #004080;">sequence</span> <span style="color: #000000;">un</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">u3</span> <span style="color: #0000FF;">&</span> <span style="color: #000000;">u4</span> |
|||
<span style="color: #004080;">integer</span> <span style="color: #000000;">unc</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">un</span><span style="color: #0000FF;">),</span> <span style="color: #000000;">j</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">done</span> <span style="color: #0000FF;">=</span> <span style="color: #004600;">false</span> |
|||
<span style="color: #008080;">while</span> <span style="color: #008080;">not</span> <span style="color: #000000;">done</span> <span style="color: #008080;">do</span> |
|||
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #000000;">unc</span> <span style="color: #008080;">do</span> |
|||
<span style="color: #004080;">atom</span> <span style="color: #000000;">u</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">un</span><span style="color: #0000FF;">[</span><span style="color: #000000;">j</span> <span style="color: #0000FF;">*</span> <span style="color: #000000;">unc</span> <span style="color: #0000FF;">+</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">*</span> <span style="color: #000000;">bsquare</span> <span style="color: #0000FF;">+</span> <span style="color: #7060A8;">remainder</span><span style="color: #0000FF;">(</span><span style="color: #000000;">un</span><span style="color: #0000FF;">[</span><span style="color: #000000;">j</span> <span style="color: #0000FF;">*</span> <span style="color: #000000;">unc</span> <span style="color: #0000FF;">+</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">],</span><span style="color: #000000;">bsquare</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #008080;">if</span> <span style="color: #000000;">u</span><span style="color: #0000FF;">></span><span style="color: #000000;">limit</span> <span style="color: #008080;">then</span> <span style="color: #000000;">done</span> <span style="color: #0000FF;">=</span> <span style="color: #004600;">true</span><span style="color: #0000FF;">;</span> <span style="color: #008080;">exit</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span> |
|||
<span style="color: #000000;">un</span> <span style="color: #0000FF;">&=</span> <span style="color: #000000;">u</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span> |
|||
<span style="color: #000000;">j</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">1</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">while</span> |
|||
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"The %,d%s undulating number in base %d is: %,d\n"</span><span style="color: #0000FF;">,</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">n</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">ord</span><span style="color: #0000FF;">(</span><span style="color: #000000;">n</span><span style="color: #0000FF;">),</span><span style="color: #000000;">base</span><span style="color: #0000FF;">,</span><span style="color: #000000;">un</span><span style="color: #0000FF;">[</span><span style="color: #000000;">n</span><span style="color: #0000FF;">]})</span> |
|||
<span style="color: #008080;">if</span> <span style="color: #000000;">base</span><span style="color: #0000FF;">!=</span><span style="color: #000000;">10</span> <span style="color: #008080;">then</span> <span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"or expressed in base %d : %,a\n"</span><span style="color: #0000FF;">,</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">base</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">base</span><span style="color: #0000FF;">,</span><span style="color: #000000;">un</span><span style="color: #0000FF;">[</span><span style="color: #000000;">n</span><span style="color: #0000FF;">]}})</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span> |
|||
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"\nTotal number of undulating numbers in base %d < 2^%d = %,d\n"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">base</span><span style="color: #0000FF;">,</span><span style="color: #000000;">mpow</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">un</span><span style="color: #0000FF;">)})</span> |
|||
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"of which the largest is: %,d\n"</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">un</span><span style="color: #0000FF;">[$])</span> |
|||
<span style="color: #008080;">if</span> <span style="color: #000000;">base</span><span style="color: #0000FF;">!=</span><span style="color: #000000;">10</span> <span style="color: #008080;">then</span> <span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"or expressed in base %d : %,a\n"</span><span style="color: #0000FF;">,</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">base</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">base</span><span style="color: #0000FF;">,</span><span style="color: #000000;">un</span><span style="color: #0000FF;">[$]}})</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span> |
|||
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"\n"</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span> |
|||
<!--</syntaxhighlight>--> |
|||
Output same as Wren. Note that comma-fill on %a under p2js needs a trivial fix/1.0.3 or later. |
|||
=={{header|Wren}}== |
=={{header|Wren}}== |
||
{{libheader|Wren-fmt}} |
{{libheader|Wren-fmt}} |
Revision as of 21:07, 1 June 2023
An Undulating number in some base is a number which has the digit form ABABAB... where A and B are digits in that base.
For the purposes of this task, we shall only consider a number to be undulating if it has at least 3 digits in a given base and A != B.
- Examples
The numbers: 101 and 9898 are undulating numbers in base 10.
The numbers: 50 and 2350 are undulating numbers in base 7 because their base 7 representations are: 101 and 6565 respectively.
- Task
For base 10, find and show on this page:
1. All three digit undulating numbers.
2. All four digit undulating numbers.
3. All three digit undulating numbers which are primes.
4. The 600th undulating number.
5. How many undulating numbers are less than 2^53 and the largest such number.
- Bonus
Do the same for base 7 expressing the results in base 10 apart from 4. and 5. which should be expressed in base 7 also.
Note that undulating numbers with a given number of digits in base 7 may, of course, have less digits when expressed in base 10 and are unlikely to be still undulating. However, 121 (or 232 in base 7) is an exception to this.
- References
- Wikipedia article : Undulating number
- OEIS sequence A046075: Non-trivial undulants
Phix
with javascript_semantics for base in {10,7} do integer n = 600, mpow = 53, bsquare = base * base atom limit = power(2,53)-1 sequence u3 = {}, u4 = {} for a=1 to base-1 do for b=0 to base-1 do if b!=a then integer u = a * base + b, v = u * base + a, w = v * base + b u3 &= v u4 &= w end if end for end for for d,u in {{u3,"%3d"},{u4,"%4d"}} do printf(1,"All %d digit undulating numbers in base %d:\n%s\n", {d+2,base,join_by(u[1],1,9," ",fmt:=u[2])}) end for printf(1,"All 3 digit undulating numbers which are primes in base %d:\n%s\n", {base,join_by(filter(u3,is_prime),1,10," ",fmt:="%3d")}) sequence un = u3 & u4 integer unc = length(un), j = 0, done = false while not done do for i=1 to unc do atom u = un[j * unc + i] * bsquare + remainder(un[j * unc + i],bsquare) if u>limit then done = true; exit end if un &= u end for j += 1 end while printf(1,"The %,d%s undulating number in base %d is: %,d\n", {n,ord(n),base,un[n]}) if base!=10 then printf(1,"or expressed in base %d : %,a\n", {base,{base,un[n]}}) end if printf(1,"\nTotal number of undulating numbers in base %d < 2^%d = %,d\n",{base,mpow,length(un)}) printf(1,"of which the largest is: %,d\n", un[$]) if base!=10 then printf(1,"or expressed in base %d : %,a\n", {base,{base,un[$]}}) end if printf(1,"\n") end for
Output same as Wren. Note that comma-fill on %a under p2js needs a trivial fix/1.0.3 or later.
Wren
import "./fmt" for Fmt, Conv
import "./math" for Int
var undulating = Fn.new { |base, n|
var mpow = 53
var limit = 2.pow(mpow) - 1
var u3 = []
var u4 = []
var bsquare = base * base
for (a in 1...base) {
for (b in 0...base) {
if (b == a) continue
var u = a * bsquare + b * base + a
u3.add(u)
var v = a * base + b
u4.add(v * bsquare + v)
}
}
System.print("All 3 digit undulating numbers in base %(base):")
Fmt.tprint("$3d ", u3, 9)
System.print("\nAll 4 digit undulating numbers in base %(base):")
Fmt.tprint("$4d ", u4, 9)
System.print("\nAll 3 digit undulating numbers which are primes in base %(base):")
var primes = []
for (u in u3) {
if (u % 2 == 1 && u % 5 != 0 && Int.isPrime(u)) primes.add(u)
}
Fmt.tprint("$3d ", primes, 10)
var un = u3 + u4
var unc = un.count
var j = 0
var done = false
while (true) {
for (i in 0...unc) {
var u = un[j * unc + i] * bsquare + un[j * unc + i] % bsquare
if (u > limit) {
done = true
break
}
un.add(u)
}
if (done) break
j = j + 1
}
Fmt.print("\nThe $,r undulating number in base $d is: $,d", n, base, un[n-1])
if (base != 10) Fmt.print("or expressed in base $d : $,s", base, Conv.itoa(un[n-1], base))
Fmt.print("\nTotal number of undulating numbers in base $d < 2$S = $,d", base, mpow, un.count)
Fmt.print("of which the largest is: $,d", un[-1])
if (base != 10) Fmt.print("or expressed in base $d : $,s", base, Conv.itoa(un[-1], base))
System.print()
}
for (base in [10, 7]) undulating.call(base, 600)
- Output:
All 3 digit undulating numbers in base 10: 101 121 131 141 151 161 171 181 191 202 212 232 242 252 262 272 282 292 303 313 323 343 353 363 373 383 393 404 414 424 434 454 464 474 484 494 505 515 525 535 545 565 575 585 595 606 616 626 636 646 656 676 686 696 707 717 727 737 747 757 767 787 797 808 818 828 838 848 858 868 878 898 909 919 929 939 949 959 969 979 989 All 4 digit undulating numbers in base 10: 1010 1212 1313 1414 1515 1616 1717 1818 1919 2020 2121 2323 2424 2525 2626 2727 2828 2929 3030 3131 3232 3434 3535 3636 3737 3838 3939 4040 4141 4242 4343 4545 4646 4747 4848 4949 5050 5151 5252 5353 5454 5656 5757 5858 5959 6060 6161 6262 6363 6464 6565 6767 6868 6969 7070 7171 7272 7373 7474 7575 7676 7878 7979 8080 8181 8282 8383 8484 8585 8686 8787 8989 9090 9191 9292 9393 9494 9595 9696 9797 9898 All 3 digit undulating numbers which are primes in base 10: 101 131 151 181 191 313 353 373 383 727 757 787 797 919 929 The 600th undulating number in base 10 is: 4,646,464,646 Total number of undulating numbers in base 10 < 2⁵³ = 1,125 of which the largest is: 8,989,898,989,898,989 All 3 digit undulating numbers in base 7: 50 64 71 78 85 92 100 107 121 128 135 142 150 157 164 178 185 192 200 207 214 221 235 242 250 257 264 271 278 292 300 307 314 321 328 335 All 4 digit undulating numbers in base 7: 350 450 500 550 600 650 700 750 850 900 950 1000 1050 1100 1150 1250 1300 1350 1400 1450 1500 1550 1650 1700 1750 1800 1850 1900 1950 2050 2100 2150 2200 2250 2300 2350 All 3 digit undulating numbers which are primes in base 7: 71 107 157 257 271 307 The 600th undulating number in base 7 is: 8,074,217,422,972,642 or expressed in base 7 : 4,646,464,646,464,646,464 Total number of undulating numbers in base 7 < 2⁵³ = 603 of which the largest is: 8,786,648,372,058,464 or expressed in base 7 : 5,252,525,252,525,252,525