Positive decimal integers with the digit 1 occurring exactly twice: Difference between revisions

From Rosetta Code
Content added Content deleted
(Created page with "{{Draft task}} ;Task:Find numbers '''n''' in which number '''1''' occur twice, where '''n < 1,000''' <br><br> =={{header|Ring}}== <lang ring> load "stdlib.ring" see "workin...")
 
(Added Algol 68)
Line 4: Line 4:


<br><br>
<br><br>

=={{header|ALGOL 68}}==
Generates the numbers. In order to print them in order, a table of double 1 numbers yes/no is generated.
<lang algol68>BEGIN # find numbers where the digit 1 occurs twice, up to 999 #
[ 1 : 999 ]BOOL double 1; FOR i TO UPB double 1 DO double 1[ i ] := FALSE OD;
# generte the numbers #
FOR i FROM 0 TO 9 DO
IF i /= 1 THEN
double 1[ 110 + i ] := TRUE;
double 1[ 101 + ( i * 10 ) ] := TRUE;
double 1[ ( i * 100 ) + 11 ] := TRUE
FI
OD;
# print the numbers in order #
INT double 1 count := 0;
FOR i TO UPB double 1 DO
IF double 1[ i ] THEN
print( ( " ", whole( i, -3 ) ) );
IF ( double 1 count +:= 1 ) MOD 10 = 0 THEN print( ( newline ) ) FI
FI
OD
END</lang>
{{out}}
<pre>
11 101 110 112 113 114 115 116 117 118
119 121 131 141 151 161 171 181 191 211
311 411 511 611 711 811 911
</pre>


=={{header|Ring}}==
=={{header|Ring}}==

Revision as of 11:35, 8 July 2021

Positive decimal integers with the digit 1 occurring exactly twice 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
Find numbers n in which number 1 occur twice, where n < 1,000



ALGOL 68

Generates the numbers. In order to print them in order, a table of double 1 numbers yes/no is generated. <lang algol68>BEGIN # find numbers where the digit 1 occurs twice, up to 999 #

   [ 1 : 999 ]BOOL double 1; FOR i TO UPB double 1 DO double 1[ i ] := FALSE OD;
   # generte the numbers                                      #
   FOR i FROM 0 TO 9 DO
       IF i /= 1 THEN
           double 1[ 110 + i ] := TRUE;
           double 1[ 101 + ( i * 10 ) ] := TRUE;
           double 1[ ( i * 100 ) + 11 ] := TRUE
       FI
   OD;
   # print the numbers in order                               #
   INT double 1 count := 0;
   FOR i TO UPB double 1 DO
       IF double 1[ i ] THEN
           print( ( " ", whole( i, -3 ) ) );
           IF ( double 1 count +:= 1 ) MOD 10 = 0 THEN print( ( newline ) ) FI
       FI
   OD

END</lang>

Output:
  11 101 110 112 113 114 115 116 117 118
 119 121 131 141 151 161 171 181 191 211
 311 411 511 611 711 811 911

Ring

<lang ring> load "stdlib.ring" see "working..." + nl see "Numbers n in which number 1 occur twice:" + nl

row = 0 sum = 0 limit = 1000

for n = 1 to limit

   strn = string(n)
   ind = count(strn,"1")
   if ind = 2
      see "" + n + " " 
      row = row + 1
      if row%5 = 0
         see nl
      ok
   ok

next

see nl + "Found " + row + " numbers" + nl see "done..." + nl

func count(cstring,dstring)

    sum = 0
    while substr(cstring,dstring) > 0
          sum = sum + 1
          cstring = substr(cstring,substr(cstring,dstring)+len(string(sum)))
    end
    return sum

</lang>

Output:
working...
Numbers n in which number 1 occur twice:
11 101 110 112 113 
114 115 116 117 118 
119 121 131 141 151 
161 171 181 191 211 
311 411 511 611 711 
811 911 
Found 27 numbers
done...