100 doors: Difference between revisions

737 bytes added ,  27 days ago
m
mNo edit summary
(7 intermediate revisions by 5 users not shown)
Line 1,117:
<syntaxhighlight lang="apl">doors←{100⍴((⍵-1)⍴0),1}
≠⌿⊃doors¨ ⍳100</syntaxhighlight>
{{out}}
<pre>
1 0 0 1 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
</pre>
 
'''optimized'''
Line 1,132 ⟶ 1,126:
 
{{works with|Dyalog APL}}
{{works with|langur|0.8GNU APL}}
<syntaxhighlight lang="apl">
⍸≠⌿0≠⌿0=(⍳100)∘.|⍳100</syntaxhighlight>
⍝⍝ Also works with GNU APL after introduction of
 
⍝⍝ the ⍸ function with SVN r1368, Dec 03 2020
Each of the above solutions produces the same output:
⍸≠⌿0=(⍳100)∘.|⍳100</syntaxhighlight>
{{out}}
<pre>
1 0 0 1 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
1 4 9 16 25 36 49 64 81 100
0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
</pre>
0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1</pre>
 
However the result is obtained, applying the ⍸ function (which has been in Dyalog since 16.0 and was added to GNU APL in SVN r1368, 2020-12-03) will transform the Boolean array into a list of the indices of the true values (open doors):
 
<syntaxhighlight lang="langurapl">writeln map f{^2}, 1⍸≠⌿0=(⍳100)∘..10|⍳100</syntaxhighlight>
{{out}}
<pre>1 4 9 16 25 36 49 64 81 100</pre>
 
=={{header|AppleScript}}==
Line 6,743 ⟶ 6,745:
 
=={{header|Haxe}}==
 
===Unoptimised===
x</syntaxhighlight lang="haxe">
class Main
{
static public function main()
{
findOpenDoors( 100 );
}
 
static function findOpenDoors( n : Int )
{
var door = [];
for( i in 0...n + 1 ){ door[ i ] = false; }
for( i in 1...n + 1 ){
var j = i;
while( j <= n ){
door[ j ] = ! door[ j ];
j += i;
}
}
for( i in 1...n + 1 ){
if( door[ i ] ){ Sys.print( ' $i' ); }
}
}
}</syntaxhighlight>
{{out}}
<pre>
1 4 9 16 25 36 49 64 81 100
</pre>
 
===Optimised===
 
<syntaxhighlight lang="haxe">class RosettaDemo
{
Line 6,756 ⟶ 6,791:
while((i*i) <= n)
{
Sys.printprintln(i*i + "\n");
i++;
}
Line 7,868 ⟶ 7,903:
=={{header|langur}}==
=== not optimized ===
<syntaxhighlight lang="langur">var .doors = [false] x* 100
{{works with|langur|0.8}}
<syntaxhighlight lang="langur">var .doors = [false] x 100
 
for .i of .doors {
Line 7,880 ⟶ 7,914:
 
Or, we could use the foldfrom() function to produce the output.
<syntaxhighlight lang="langur">writeln foldfrom(ffn(.a, .b, .c) { if(.b: .a~[.c]; .a) }, [], .doors, series 1..len .doors)</syntaxhighlight>
 
=== optimized ===
<syntaxhighlight lang="langur">writeln map(f .x fn{^ 2}, series 1..10)</syntaxhighlight>
 
{{works with|langur|0.8.11}}
<syntaxhighlight lang="langur">writeln map f{^2}, 1..10</syntaxhighlight>
 
{{out}}
Line 9,176 ⟶ 9,207:
echo outputString</syntaxhighlight>
 
=={{header|Oberon-07}}==
[http://oberon07.com/ Oberon-07], by [http://people.inf.ethz.ch/wirth/index.html Niklaus Wirth].
<syntaxhighlight lang="oberonmodula2">MODULE Doors;
IMPORT Out;
Line 11,393 ⟶ 11,424:
 
'''ultra-optimized''': ported from Julia version<br>
<syntaxhighlight lang="python">for i in range(1,10111): print("Door %s is open" % i**2)</syntaxhighlight>
 
=={{header|Q}}==
Line 13,362 ⟶ 13,393:
 
=={{header|Stringle}}==
<syntaxhighlight lang="stringle">id "."
#d
d "."
i d "."
y
#i
y 1
z
z 1
p "door" #i
*p *p "."
#i +100d zf 0"oc"
i d #@f #*p
i d .\f "o" $ #i
i i d
#i +100101 xi 0""
z
#i
i d "."
#d +100 y 0
d d "."
#d +100101 yd 0""
y
#d</syntaxhighlight>
 
i "."
x
p "door" #i
f "oc"
#@f #*p
.\f "o" $ #i
x 1
#i +100 x 0
i i "."
x</syntaxhighlight>
{{out}}
<pre>1
889

edits