Special divisors

From Rosetta Code
Revision as of 17:18, 30 March 2021 by Thundergnat (talk | contribs) (→‎{{header|Raku}}: Add a Raku example)
Special divisors is a draft programming task. It is not yet considered ready to be promoted as a complete task, for reasons that should be found in its talk page.
Task

Numbers n such that reverse(d) divides reverse(n) for all divisors d of n, where n < 200

Raku

<lang perl6>use Prime::Factor:ver<0.3.0+>;

say "{+$_} matching numbers:\n{.batch(10)».fmt('%3d').join: "\n"}"

   given (1..^200).grep: { all .flip «%%« .&divisors».flip };</lang>
Output:
72 matching numbers:
  1   2   3   4   5   6   7   8   9  11
 13  17  19  22  23  26  27  29  31  33
 37  39  41  43  44  46  47  53  55  59
 61  62  66  67  69  71  73  77  79  82
 83  86  88  89  93  97  99 101 103 107
109 113 121 127 131 137 139 143 149 151
157 163 167 169 173 179 181 187 191 193
197 199

Ring

<lang ring> load "stdlib.ring"

see "working..." + nl

row = 0 limit1 = 200

for n = 1 to limit1

   flag = 1
   revNum = rever(string(n))
   revNum = number(revNum)
   for m = 1 to n/2
       revDiv = rever(String(m))
       revDiv = number(revDiv)
       if n%m = 0
          if revNum % revDiv = 0
             flag = 1
          else
             flag = 0
             exit
          ok
       ok
   next 
   if flag = 1
      row = row + 1
      see "" + n + " "
      if row%10 = 0
         see nl
      ok
   ok

next

see nl + "done..." + nl

func rever(str)

    rev = ""
    for n = len(str) to 1 step -1
        rev = rev + str[n]
    next
    return rev  

</lang>

Output:
working...
1 2 3 4 5 6 7 8 9 11 
13 17 19 22 23 26 27 29 31 33 
37 39 41 43 44 46 47 53 55 59 
61 62 66 67 69 71 73 77 79 82 
83 86 88 89 93 97 99 101 103 107 
109 113 121 127 131 137 139 143 149 151 
157 163 167 169 173 179 181 187 191 193 
197 199 
done...