123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- #!perl -T
- use utf8;
- use 5.006;
- use strict;
- use warnings;
- use Test::More;
- plan tests => 6;
- use Sidef;
- my $code = <<'EOT';
- func best_shuffle(str) {
- var s = str.chars
- var t = s.shuffle
- for i in ^s {
- for j in ^s {
- if ((i == j) || (t[i] == s[j]) || (t[j] == s[i])) {
- next
- }
- t[i, j] = t[j, i]
- break
- }
- }
- s ~Z== t -> count(true)
- }
- EOT
- my $sidef = Sidef->new(name => 'best_shuffle');
- my $bshuffle = $sidef->execute_code($code);
- my @tests = (
- {
- str => 'abracadabra',
- score => 0,
- },
- {
- str => 'seesaw',
- score => 0,
- },
- {
- str => 'elk',
- score => 0,
- },
- {
- str => 'grrrrrr',
- score => 5,
- },
- {
- str => 'up',
- score => 0,
- },
- {
- str => 'a',
- score => 1,
- },
- );
- foreach my $t (@tests) {
- my $score = $bshuffle->call(Sidef::Types::String::String->new($t->{str}));
- is("$score", "$t->{score}", "bshuffle($t->{str}) = $t->{score}");
- }
|