see http://e-scribe.com/news/193
================================================
Ruby (10 lines, 274 bytes)
numbers = (1..9).sort_by{ rand }
steps = 0
while numbers != numbers.sort
puts numbers.join(" ")
print "Reverse how many? "
flipcount = gets.to_i
numbers[0...flipcount] = numbers[0...flipcount].reverse
steps += 1
end
print "Done! That took you #{steps} steps.\n"
=================================================
Python (9 lines, 304 bytes)
import random
numbers = random.sample(range(1,10), 9)
steps = 0
while numbers != sorted(numbers):
print " ".join(map(str, numbers))
flipcount = int(raw_input("Reverse how many? "))
numbers[:flipcount] = reversed(numbers[:flipcount])
steps += 1
print "Done! That took you %d steps." % steps
=========================================================
PHP (12 lines, 381 bytes)
$numbers = range(1, 9);
shuffle($numbers);
$sorted = $numbers;
sort($sorted);
$steps = 0;
while ($numbers != $sorted)
{
print implode(" ", $numbers) . "\n";
print "Reverse how many? ";
$flipcount = (int)trim(fgets(STDIN));
array_splice($numbers, 0, $flipcount,
array_reverse(array_slice($numbers, 0, $flipcount)));
$steps++;
}
print "Done! That took you $steps steps.\n";
==========================================================
perl 5 (9 lines, 353 bytes)
use FreezeThaw qw(cmpStr);
my @a1_9 = (1 .. 9);
my @numbers = sort {rand(10) > $a} @a1_9;
for (my $steps = 0; cmpStr(\@numbers, \@a1_9); ++$steps) {
print join(" ", @numbers), "\nReverse how many? ";
my $flipcount = <STDIN>;
@numbers[0..$flipcount - 1] = reverse(@numbers[0..($flipcount-1)]);
}
print "Done! That took you $steps steps.\n";
==================================================================
Does perl6's Array class allow for more compact syntax, without
FreezeThaw.pm?
This is the nicest example, so I'll base my response off this one.
my @numbers = (1..9).sort:{ rand };
my $steps = 0;
while ("@numbers[]" ne "@numbers.sort()") {
say "@numbers";
my $flipcount = prompt "Reverse how many?";
@numbers[0..^$flipcount].=reverse;
$steps++;
}
say "Done! That took you $steps steps.\n";
> Does perl6's Array class allow for more compact syntax, without
> FreezeThaw.pm?
Interpolate the arrays:
while ("@numbers" ne "@{[ sort @numbers ]}") { ... }
--
korajn salutojn,
juerd waalboer: perl hacker <ju...@juerd.nl> <http://juerd.nl/sig>
convolution: ict solutions and consultancy <sa...@convolution.nl>
To be fair, Perl 5 can be a good deal nicer. 10 lines, 316 bytes,
and much less punctuation:
use List::Util 'shuffle';
my @numbers = shuffle my @goal = ( 1 .. 9 );
my $num_steps;
while ( "@numbers" ne "@goal" ) {
print "@numbers\nReverse how many? ";
my @slice = 0 .. <STDIN> - 1;
@numbers[ @slice ] = reverse @numbers[ @slice ];
++$num_steps;
}
print "Done! That took you $num_steps steps.\n";
Regards,
--
#Aristotle
*AUTOLOAD=*_;sub _{s/(.*)::(.*)/print$2,(",$\/"," ")[defined wantarray]/e;$1};
&Just->another->Perl->hacker;
Should C<eqv> be used here?
while @numbers !eqv @numbers.sort {
--
Ilmari Vacklin <ilmari....@helsinki.fi>
my @numbers = sort { rand }, constant @goal = 1..9;
my $steps = 0;
until @numbers ~~ @goal {
say ~@numbers;
@numbers[ 0 ..^ prompt "Reverse how many? " ] .= reverse;
++$steps;
}
say "Done! That took you $steps steps.";
Larry
Can I just say: I've never written a line of Perl6, and I love it
already :).
Ben
--
I've seen things you people wouldn't believe: attack ships on fire off
the shoulder of Orion; I watched C-beams glitter in the dark near the
Tannhauser Gate. All these moments will be lost, in time, like tears in rain.
Time to die. benm...@tiscali.co.uk