Vibrating rectangles: Difference between revisions

→‎{{header|Perl 6}}: Add a Perl 6 example
m (→‎{{header|Ring}}: Remove vanity tags)
(→‎{{header|Perl 6}}: Add a Perl 6 example)
Line 1:
=={{header|Ring}}==
{{draft task}}
Create [https://1drv.ms/v/s!AqDUIunCqVnIg1MxKPi5DzwUbJEf Vibrating rectangles]
<br>
 
=={{header|Perl 6}}==
{{works with|Rakudo|2018.06}}
Ok. The task description is essentially non-existent. In looking the reference implementation (Ring) it seems like we are supposed to draw a series of concentric rectangles and then alter the colors step-wise. No actual vibration apparent.
 
Could fire up a GUI but WTH, let's try it at a command line with ANSI.
 
Draws a series of concentric rectangles then rotates through the color palette. Every three seconds, chooses new random palette colors and reverses rotation direction.
 
<lang perl6># box drawing characters
my %r = :tl<┌>, :h<─>, :tr<┐>, :v<│>, :bl<└>, :br<┘>;
 
my %colors = rd => "\e[1;31m", gn => "\e[1;32m", yw => "\e[1;33m",
bu => "\e[1;34m", mg => "\e[1;35m", cy => "\e[1;36m";
 
# color palette
my @c = flat %colors<rd> xx 12, %colors<bu> xx 12, %colors<yw> xx 12;
 
my @vibe;
 
rect($_, 30-$_) for 0..13;
 
print "\e[?25l"; # hide the cursor
 
signal(SIGINT).tap: {
print "\e[0H\e[0J\e[?25h"; # clean up on exit
exit;
}
 
my $rot = 1;
 
loop {
display @vibe;
@c.=rotate($rot);
if ++$ %% 30 {
@c = |%colors.values.roll(3);
@c = sort(flat @c xx 12);
$rot *= -1;
}
rect($_, 30-$_) for 0..13;
sleep .1;
}
 
sub rect ($b, $e) {
@vibe[$b;$b..$e] = @c[$b % @c]~%r<tl>, |((%r<h>) xx ($e - $b - 1)), %r<tr>~"\e[0m";
@vibe[$e;$b..$e] = @c[$b % @c]~%r<bl>, |((%r<h>) xx ($e - $b - 1)), %r<br>~"\e[0m";
( $b ^..^ $e).map: {
@vibe[$_;$b] = @c[$b % @c]~%r<v>~"\e[0m";
@vibe[$_;$e] = @c[$b % @c]~%r<v>~"\e[0m";
}
}
 
sub display (@rect) {
print "\e[0H\e[0J\n\n";
for @rect -> @row {
print "\t\t\t";
print $_ // ' ' for @row;
print "\n";
}
}</lang>
See: [https://github.com/thundergnat/rc/blob/master/img/vibrating-rectangles-perl6.gif Vibrating rectangles] (.gif image)
 
=={{header|Ring}}==
<lang ring>
# Project : Vibrating rectangles
10,333

edits