Deutsch   English   Français   Italiano  
<09acnYe4UemsSnD4nZ2dnZfqnPidnZ2d@supernews.com>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!weretis.net!feeder6.news.weretis.net!usenet.blueworldhosting.com!diablo1.usenet.blueworldhosting.com!feeder.usenetexpress.com!tr1.iad1.usenetexpress.com!69.80.99.22.MISMATCH!local-2.nntp.ord.giganews.com!nntp.supernews.com!news.supernews.com.POSTED!not-for-mail
NNTP-Posting-Date: Sun, 10 Mar 2024 15:52:17 +0000
From: Tyrone <none@none.none>
Newsgroups: comp.os.linux.advocacy
Subject: Re: Simple math/programming challenge for the "REAL programmer" Feeb
X-No-Archive: Yes
References: <usj06r$2jn18$3@dont-email.me> <87h6heilev.fsf@yaxley.in> <uskh40$30qhq$2@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8; format=fixed
Content-Transfer-Encoding: 8bit
User-Agent: Usenapp for MacOS
X-Usenapp: v1.27.2/l - Full License
Message-ID: <09acnYe4UemsSnD4nZ2dnZfqnPidnZ2d@supernews.com>
Date: Sun, 10 Mar 2024 15:52:17 +0000
Lines: 133
X-Trace: sv3-ogjR72aV/KXGcUK7LgjPpLu9lVA+UKZ9q+SZY8HZehcVjGdAkkDM7kSaAiwneOxE2mMqk0miEJWdhcX!wTMEzwzYFfzZEJYAdrdif1wYpeLcuRbYhucTpjA8OP7yIyfvGK5rUsitGE61E5fk0rMCAA3dcDq5!yl4i6/pc
X-Complaints-To: www.supernews.com/docs/abuse.html
X-DMCA-Complaints-To: www.supernews.com/docs/dmca.html
X-Abuse-and-DMCA-Info: Please be sure to forward a copy of ALL headers
X-Abuse-and-DMCA-Info: Otherwise we will be unable to process your complaint properly
X-Postfilter: 1.3.40
Bytes: 8168

On Mar 10, 2024 at 10:46:27 AM EDT, "DFS" <nospam@dfs.com> wrote:

> On 3/10/2024 3:41 AM, Yaxley Peaks wrote:
>> Does emacs lisp count?
>> 
>> ;; ------------------
>> (defun kaprekarp (n)
>>    (let* ((num (* n n))
>>           (snum (number-to-string num))
>>           (num-digits (length (number-to-string n)))
>>           (num-list (string-split snum "" t))
>>           (right-side (reverse (take num-digits (reverse num-list))))
>>           (left-side (reverse (nthcdr num-digits (reverse num-list))))
>>           (left-side-num (string-to-number (mapconcat 'identity left-side)))
>>           (right-side-num (string-to-number (mapconcat 'identity right-side))))
>>      (= n (+ right-side-num left-side-num))))
>> (defun solve-problem (low high)
>>    (seq-keep (lambda (x)
>>                (and (kaprekarp x) x))
>>              (number-sequence low high)))
>> (solve-problem 1 100000000)
>> ;; ------------------
>> 
>> A very naive solution, but I am sorry, I am very drunk right now lol
> 
> 
> ha!  Were you drunk before you started writing the Lisp code?
> 
> 
> I submitted it here:
> https://rextester.com/l/common_lisp_online_compiler
> 
> And got:
> Error(s), warning(s):
> *** - EVAL: undefined function SEQ-KEEP
> 
> 
> 
> When you sober up:
> ------------------------------------------------------------------------
> import sys, time
> k=1
> start = time.time()
> for i in range(4,int(sys.argv[1].replace(',', ''))):
>     s, n = str(i**2), len(str(i))
>     if len(s) % 2 != 0: n-=1
>     p1, p2 = int(s[0:n]), int(s[n:])
>     if p1 + p2 == i:
>         print("%4d. %7d ^ 2 = %-16s   %8s  + %8s  =  %d" % (k, i, s, p1, p2,
> p1+p2))
>         k+=1
> print("%.1fs" % (time.time() - start))
> ------------------------------------------------------------------------
> 
> $ python Knums.py 10,000,000
> 
> 
>     1.       9 ^ 2 = 81                        8  +        1  =  9
>     2.      45 ^ 2 = 2025                     20  +       25  =  45
>     3.      55 ^ 2 = 3025                     30  +       25  =  55
>     4.      99 ^ 2 = 9801                     98  +        1  =  99
>     5.     297 ^ 2 = 88209                    88  +      209  =  297
>     6.     703 ^ 2 = 494209                  494  +      209  =  703
>     7.     999 ^ 2 = 998001                  998  +        1  =  999
>     8.    2223 ^ 2 = 4941729                 494  +     1729  =  2223
>     9.    2728 ^ 2 = 7441984                 744  +     1984  =  2728
>    10.    4950 ^ 2 = 24502500               2450  +     2500  =  4950
>    11.    5050 ^ 2 = 25502500               2550  +     2500  =  5050
>    12.    7272 ^ 2 = 52881984               5288  +     1984  =  7272
>    13.    7777 ^ 2 = 60481729               6048  +     1729  =  7777
>    14.    9999 ^ 2 = 99980001               9998  +        1  =  9999
>    15.   17344 ^ 2 = 300814336              3008  +    14336  =  17344
>    16.   22222 ^ 2 = 493817284              4938  +    17284  =  22222
>    17.   77778 ^ 2 = 6049417284            60494  +    17284  =  77778
>    18.   82656 ^ 2 = 6832014336            68320  +    14336  =  82656
>    19.   95121 ^ 2 = 9048004641            90480  +     4641  =  95121
>    20.   99999 ^ 2 = 9999800001            99998  +        1  =  99999
>    21.  142857 ^ 2 = 20408122449           20408  +   122449  =  142857
>    22.  148149 ^ 2 = 21948126201           21948  +   126201  =  148149
>    23.  181819 ^ 2 = 33058148761           33058  +   148761  =  181819
>    24.  187110 ^ 2 = 35010152100           35010  +   152100  =  187110
>    25.  208495 ^ 2 = 43470165025           43470  +   165025  =  208495
>    26.  318682 ^ 2 = 101558217124         101558  +   217124  =  318682
>    27.  329967 ^ 2 = 108878221089         108878  +   221089  =  329967
>    28.  351352 ^ 2 = 123448227904         123448  +   227904  =  351352
>    29.  356643 ^ 2 = 127194229449         127194  +   229449  =  356643
>    30.  390313 ^ 2 = 152344237969         152344  +   237969  =  390313
>    31.  461539 ^ 2 = 213018248521         213018  +   248521  =  461539
>    32.  466830 ^ 2 = 217930248900         217930  +   248900  =  466830
>    33.  499500 ^ 2 = 249500250000         249500  +   250000  =  499500
>    34.  500500 ^ 2 = 250500250000         250500  +   250000  =  500500
>    35.  533170 ^ 2 = 284270248900         284270  +   248900  =  533170
>    36.  538461 ^ 2 = 289940248521         289940  +   248521  =  538461
>    37.  609687 ^ 2 = 371718237969         371718  +   237969  =  609687
>    38.  643357 ^ 2 = 413908229449         413908  +   229449  =  643357
>    39.  648648 ^ 2 = 420744227904         420744  +   227904  =  648648
>    40.  670033 ^ 2 = 448944221089         448944  +   221089  =  670033
>    41.  681318 ^ 2 = 464194217124         464194  +   217124  =  681318
>    42.  791505 ^ 2 = 626480165025         626480  +   165025  =  791505
>    43.  812890 ^ 2 = 660790152100         660790  +   152100  =  812890
>    44.  818181 ^ 2 = 669420148761         669420  +   148761  =  818181
>    45.  851851 ^ 2 = 725650126201         725650  +   126201  =  851851
>    46.  857143 ^ 2 = 734694122449         734694  +   122449  =  857143
>    47.  961038 ^ 2 = 923594037444         923594  +    37444  =  961038
>    48.  994708 ^ 2 = 989444005264         989444  +     5264  =  994708
>    49.  999999 ^ 2 = 999998000001         999998  +        1  =  999999
>    50. 4444444 ^ 2 = 19753082469136      1975308  +  2469136  =  4444444
>    51. 4927941 ^ 2 = 24284602499481      2428460  +  2499481  =  4927941
>    52. 5072059 ^ 2 = 25725782499481      2572578  +  2499481  =  5072059
>    53. 5555556 ^ 2 = 30864202469136      3086420  +  2469136  =  5555556
>    54. 9372385 ^ 2 = 87841600588225      8784160  +   588225  =  9372385
>    55. 9999999 ^ 2 = 99999980000001      9999998  +        1  =  9999999
> 6.2s
> 
> And 1 is somehow considered a Kaprekar number.

1 IS a Kaprekar number. 

Other than 1, your list above is missing at least 4 numbers: 4879, 5292, 38962
and 627615. The reason is you are not handling zeros correctly.

But seriously, these numbers are constants. There is no need to waste my time
and computer time calculating them. Put them in an array and do a search for
whatever number you want to check. "Is 123456 a Kaprekar number?" Not in the
array, so no it is not. 

Done.

If I was writing a program that used PI (3.14159265) in many places, I would
define it as a CONST. I would not waste my time calculating it every time I
needed it. PI has already been calculated to one million digits. 

Why waste time re-inventing the wheel?