Skip to content

Commit

Permalink
- Added the Array.last_by{} method.
Browse files Browse the repository at this point in the history
- Minor fixed inside the Array class.
  • Loading branch information
trizen committed Dec 6, 2015
1 parent 84483ef commit 423f190
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 8 deletions.
26 changes: 20 additions & 6 deletions lib/Sidef/Types/Array/Array.pm
Original file line number Diff line number Diff line change
Expand Up @@ -228,7 +228,7 @@ package Sidef::Types::Array::Array {
sub concat {
my ($self, $arg) = @_;

defined($arg) && $arg->isa('ARRAY')
eval { $arg->isa('ARRAY') }
? $self->new(@{$self}, @{$arg})
: $self->new(@{$self}, $arg);
}
Expand Down Expand Up @@ -459,8 +459,9 @@ package Sidef::Types::Array::Array {
my ($self, $arg) = @_;

if (defined $arg) {

if (ref($arg) eq 'Sidef::Types::Block::Code') {
return return $self->find($arg);
return $self->first_by($arg);
}

my $max = $#{$self};
Expand All @@ -475,6 +476,11 @@ package Sidef::Types::Array::Array {
my ($self, $arg) = @_;

if (defined $arg) {

if (ref($arg) eq 'Sidef::Types::Block::Code') {
return $self->last_by($arg);
}

my $from = @{$self} - $arg->get_value;
return $self->new(@{$self}[($from < 0 ? 0 : $from) .. $#{$self}]);
}
Expand Down Expand Up @@ -689,15 +695,23 @@ package Sidef::Types::Array::Array {

*frequency = \&freq;

sub find {
sub first_by {
my ($self, $code) = @_;
foreach my $val (@{$self}) {
return $val if $code->run($val);
}
return;
}

*first_by = \&find;
*find = \&first_by;

sub last_by {
my ($self, $code) = @_;
for (my $i = $#{$self} ; $i >= 0 ; --$i) {
return $self->[$i] if $code->run($self->[$i]);
}
return;
}

sub any {
my ($self, $code) = @_;
Expand Down Expand Up @@ -742,7 +756,7 @@ package Sidef::Types::Array::Array {
sub index {
my ($self, $obj) = @_;

if (defined $obj) {
if (@_ > 1) {

if (ref($obj) eq 'Sidef::Types::Block::Code') {
foreach my $i (0 .. $#{$self}) {
Expand All @@ -768,7 +782,7 @@ package Sidef::Types::Array::Array {
sub rindex {
my ($self, $obj) = @_;

if (defined $obj) {
if (@_ > 1) {
if (ref($obj) eq 'Sidef::Types::Block::Code') {
for (my $i = $#{$self} ; $i >= 0 ; $i--) {
$obj->run($self->[$i])
Expand Down
9 changes: 7 additions & 2 deletions scripts/Expensive/sudoku_solver.sf
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,13 @@ func solve(board) {
_check(i, j)
}...
);
1..9 -> grep {!(.~~t)}
-> each {|k| board[i] = k; solve(board) };

{ |k|
t.contains(k) && next;
board[i] = k;
solve(board);
} * 9;

board[i] = 0;
return;
}
Expand Down

0 comments on commit 423f190

Please sign in to comment.