Loops/Break: Difference between revisions
(MOO) |
(Added R code) |
||
Line 207: | Line 207: | ||
b = random.randrange(20) |
b = random.randrange(20) |
||
print b</lang> |
print b</lang> |
||
=={{header|R}}== |
|||
{{works with|R|2.8.1}} |
|||
<lang R> |
|||
while (FALSE != TRUE) |
|||
{ |
|||
result1 <- sample(1:19,1,replace=TRUE) |
|||
if (result1 == 10) |
|||
{ |
|||
print(result1) |
|||
break |
|||
} |
|||
result2 <- sample(1:19,1,replace=TRUE) |
|||
cat(result1,result2,"\n") |
|||
} |
|||
</lang> |
|||
=={{header|Ruby}}== |
=={{header|Ruby}}== |
Revision as of 22:58, 27 July 2009
You are encouraged to solve this task according to the task description, using any language you may know.
Show a loop which prints two random numbers (newly generated each loop) from 0 to 19 (inclusive). If the first number is 10, print it, stop the loop, and do not generate the second. Otherwise, loop forever.
Ada
<lang Ada> with Ada.Text_IO; use Ada.Text_IO; with Ada.Numerics.Discrete_Random;
procedure Test_Loop_Break is
type Value_Type is range 1..20; package Random_Values is new Ada.Numerics.Discrete_Random (Value_Type); use Random_Values; Dice : Generator; A, B : Value_Type;
begin
loop A := Random (Dice); Put_Line (Value_Type'Image (A)); exit when A = 10; B := Random (Dice); Put_Line (Value_Type'Image (B)); end loop;
end Test_Loop_Break; </lang>
AutoHotkey
<lang AutoHotkey> Loop {
Random, var, 0, 19 output = %output%`n%var% If (var = 10) Break Random, var, 0, 19 output = %output%`n%var%
} MsgBox % output </lang>
BASIC
<lang qbasic>do
a = int(rnd * 20) print a if a = 10 then exit loop 'EXIT FOR works the same inside FOR loops b = int(rnd * 20) print b
loop</lang>
C
<lang c>#include <stdlib.h>
- include <time.h>
- include <stdio.h>
int main() {
int a, b;
srand(time(NULL)); while (1) { a = rand() % 20; /* not exactly uniformly distributed, but doesn't matter */ printf("%d\n", a); if (a == 10) break; b = rand() % 20; /* not exactly uniformly distributed, but doesn't matter */ printf("%d\n", b); } return 0;
}</lang>
Common Lisp
<lang lisp>(loop
(setq a (random 20)) (print a) (if (= a 10) (return)) (setq b (random 20)) (print b))</lang>
D
Using Mersenne twister;
<lang D>import tango.io.Stdout; import tango.math.random.Twister;
void main() {
alias Twister.instance r; uint x;
while (~1) { x = r.natural(20); Stdout (x) (" "); if (x == 10) break; Stdout (r.natural(20)).newline; }
}</lang>
E
<lang e>while (true) {
def a := entropy.nextInt(20) print(a) if (a == 10) { println() break } println(" ", entropy.nextInt(20))
}</lang>
Forth
<lang forth>include random.fs
- main
begin 20 random dup . 10 <> while 20 random . repeat ;
\ use LEAVE to break out of a counted loop
- main
100 0 do i random dup . 10 = if leave then i random . loop ;
</lang>
Fortran
<lang fortran>program Example
implicit none
real :: r integer :: a, b
do call random_number(r) a = int(r * 20) write(*,*) a if (a == 10) exit call random_number(r) b = int(r * 20) write(*,*) b end do
end program Example</lang>
Java
<lang java>import java.util.Random;
Random rand = new Random(); while(true){
int a = rand.nextInt(20); System.out.println(a); if(a == 10) break; int b = rand.nextInt(20); System.out.println(b);
}</lang>
MOO
<lang moo>while (1)
a = random(20) - 1; player:tell(a); if (a == 10) break; endif b = random(20) - 1; player:tell(b);
endwhile</lang>
Octave
<lang octave>while(1)
a = floor(unifrnd(0,20, 1)); disp(a) if ( a == 10 ) break endif b = floor(unifrnd(0,20, 1)); disp(b)
endwhile</lang>
Perl
<lang perl>while (1) {
my $a = int(rand(20)); print "$a\n"; if ($a == 10) { last; } my $b = int(rand(20)); print "$b\n";
}</lang>
PHP
<lang php>while (true) {
$a = rand(0,19); echo "$a\n"; if ($a == 10) break; $b = rand(0,19); echo "$b\n";
}</lang>
Python
<lang python>import random
while True:
a = random.randrange(20) print a if a == 10: break b = random.randrange(20) print b</lang>
R
<lang R> while (FALSE != TRUE)
{ result1 <- sample(1:19,1,replace=TRUE) if (result1 == 10) { print(result1) break } result2 <- sample(1:19,1,replace=TRUE) cat(result1,result2,"\n") }
</lang>
Ruby
<lang ruby>loop do
a = rand(20) puts a if a == 10 break end b = rand(20) puts b
end</lang>
Tcl
<lang tcl>while true {
set a [expr int(20*rand())] puts $a if {$a == 10} { break } set b [expr int(20*rand())] puts $b
}</lang>