I went for append after all.
Here's a little script:
NB. list of invertible digits - could perhaps include 2, 5
digs =: 0 1 6 8 9 NB. or 0 1 2 5 6 8 9
NB. indices of "inverses"
ix =: 0 1 4 3 2 NB. or 0 1 3 2 6 5 4
NB. drop leading zeros
dlz =: }.~ (=&0 (i.) 0:)
NB. construct 1 list of indices, y
NB. x = 0 1: don't/do repeat middle digit
cons1 =: {{0 cons1 y
:
10#.digs{~y,(-.2|x)}.|.ix{~y =. dlz y
}}
NB. construct first 2y - 1 "invertible" numbers
cons =: {{
nd=. #digs
ns=. nd#.inv i. y
/:~~.,/0 1 cons1"0 1/ ns
}}
eg first 21
3 7$cons 11
0 1 6 8 9 11 69
88 96 101 111 161 181 191
609 1001 1111 1691 1881 1961 6009
Is that what's needed?
Mike
Sent from my iPad
> On 26 Aug 2023, at 19:08, Mike Day <[email protected]> wrote:
> Not J as such, but one might consider including 2 & 5, which are also
> "upside-downable"-ish, partly depending on the font.
>
> Have you considered a constructive approach?
> Eg take any number with only u-d digits possibly starting 0 in but not ending
> in 0;
> prepend the rotations of the reverse of all its digits or of all but the
> first.
> Say, 016: prepend 910 for 910016 or 91 for 91016.
>
> Any use?
>
> Mike
>
> Sent from my iPad
>
>> On 26 Aug 2023, at 15:43, Richard Donovan <[email protected]> wrote:
>> Thanks Pascal, Raul et al
>>
>> For context, a friend just celebrated his 69th birthday and I noted this age
>> reads the same either way up. For practice i wanted to write a J function
>> that outputs all such possible numbers!
>>
>> I am starting by finding all candidate numbers (those having only digits 0 1
>> 6 8 9, (I'm assuming 1 is upside-downable, even though when typed it
>> isn't!). The next steps will be (1) to swap 6s with 9s and v.v. , then (2)
>> reverse the digits and compare for equality.
>>
>> So using the supplied algorithm, i can now perform the first step as follows:
>>
>> seli=: 1 : 'u # ]'
>>
>> 5 20 $ 0 1 6 8 9 (*./@:(e.~)&~.&(/:~) 10&#. inv)("1 0) seli i.1000
>>
>> 0 1 6 8 9 10 11 16 18 19 60 61 66 68 69 80 81 86 88
>> 89
>>
>> 90 91 96 98 99 100 101 106 108 109 110 111 116 118 119 160 161 166 168
>> 169
>>
>> 180 181 186 188 189 190 191 196 198 199 600 601 606 608 609 610 611 616 618
>> 619
>>
>> 660 661 666 668 669 680 681 686 688 689 690 691 696 698 699 800 801 806 808
>> 809
>>
>> 810 811 816 818 819 860 861 866 868 869 880 881 886 888 889 890 891 896 898
>> 899..
>>
>>
>> That is step 0. I can now try to add steps 1 and 2!
>>
>>
>> Sorry to be so frivolous but it helps me learn!
>>
>> [I just noticed I also need to remove all found numbers ending with zero!]
>>
>> Cheers,
>>
>> Richard
>> ________________________________
>> From: Programming <[email protected]> on behalf of
>> Raul Miller <[email protected]>
>> Sent: 26 August 2023 13:46
>> To: [email protected] <[email protected]>
>> Subject: Re: [Jprogramming] integers occur in integers?
>>
>> Yes... using rank 1 0 on the implementation is a good alternative to
>> boxing. Using the approach I had come up with (I have not done any
>> benchmarking here), this could be:
>>
>> 3 2 1((0 = #@-.~) 10&#. inv)("1 0) 230 123 111 123123132
>> 0 1 1 1
>>
>> --
>> Raul
>>
>> On Sat, Aug 26, 2023 at 8:30 AM 'Pascal Jasmin' via Programming
>> <[email protected]> wrote:
>>>
>>>
>>> 3 2 1(*./@:(e.~)&~.&(/:~) 10&#. inv)("1 0) 230 123 111 123123132
>>>
>>> 0 1 1 1
>>>
>>>
>>> On Saturday, August 26, 2023 at 06:31:01 a.m. EDT, Richard Donovan
>>> <[email protected]> wrote:
>>>
>>> I am trying to find out whether a series of integers y only contain a set
>>> of integers x
>>>
>>> That is, 1 3 5 verb 5311 10531 536 1111111
>>> should return 1 0 1 1
>>>
>>> NB. only 1 3 5 occur in 5311
>>> NB. not only 1 3 5 occur in 10531
>>> NB. not only 1 3 5 occur in 536
>>> NB. only 1 3 5 occur in 1111111
>>>
>>> NB. x only contains digits 0-9 without repeat. #x is max 10
>>> NB. leading zeros should be ignored in elements of y. No max for #y
>>>
>>> I have tried several methods using combinations of e. i. under< etc. but
>>> haven't yet found a succinct verb that achieves what I want.
>>>
>>> I hope my description is clear
>>>
>>> Help gratefully received!
>>> ----------------------------------------------------------------------
>>> For information about J forums see
>>> https://gbr01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.jsoftware.com%2Fforums.htm&data=05%7C01%7C%7Cfc3c691e115b40932d0308dba6328760%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C638286508177264390%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=1ytPgz0JzCdAkwUd%2FHZFVD9fIHh870N5I%2BFPql2qy1w%3D&reserved=0<http://www.jsoftware.com/forums.htm>
>>>
>>> ----------------------------------------------------------------------
>>> For information about J forums see
>>> https://gbr01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.jsoftware.com%2Fforums.htm&data=05%7C01%7C%7Cfc3c691e115b40932d0308dba6328760%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C638286508177264390%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=1ytPgz0JzCdAkwUd%2FHZFVD9fIHh870N5I%2BFPql2qy1w%3D&reserved=0<http://www.jsoftware.com/forums.htm>
>> ----------------------------------------------------------------------
>> For information about J forums see
>> https://gbr01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.jsoftware.com%2Fforums.htm&data=05%7C01%7C%7Cfc3c691e115b40932d0308dba6328760%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C638286508177264390%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=1ytPgz0JzCdAkwUd%2FHZFVD9fIHh870N5I%2BFPql2qy1w%3D&reserved=0<http://www.jsoftware.com/forums.htm>
>> ----------------------------------------------------------------------
>> For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm