#!/usr/bin/ruby

#
## Break
#

var lim = 20;
while (true) {
    say (var n = lim.irand);
    n == 10 && break;
    say lim.irand;
}


#
## Continue
#

for (1..10) { |i|
    print i;
    if (i % 5 == 0) {
        print "\n";
        next;
    };
    print ', ';
}


#
## Do-while
#

var value = 0;
do {
    say ++value;
} while (value % 6);


#
## Downward for
#

for (var k = 10; k >= 0; k--) {
    say k;
}


#
## For
#

for (var i = 1; i <= 5; i++) {
    for (var j = 1; j <= i; j++) {
        print '*';
    };
    print "\n";
}

for (1..5) { |i|
    for (1..i) { print '*' };
    print "\n";
}

for (1..5) { |i|
    for (i..5) { |j|
        say '*'*j; break;
    }
}

#
## For with a specified step
#

for (var p = 2; p <= 8; p += 2) {
    say p;
}

#
## Foreach
#

for ([1,2,3]) { |i|
    say i;
}

[1,2,3].each { |i|
    say i;
}

#
## N plus one half
#

for (1..10) { |i|
    print i;
    i == 10 && break;
    print ', ';
}

print "\n";


#
## Nested
#

var arr = 10.of{ 10.of{ 20.irand + 1 } };

for (arr) { |row|
    for (row) { |num|
        "%3d".printf(num);
        num == 20 && goto :LOOPEND;
    };
    print "\n";
}

@:LOOPEND;
print "\n";

#
## While
#

var b = 1024;
while (b > 0) {
    say b;
    b.div!(2).int!;
}