[Rio-pm] [Golf] Função drop Haskell

Nilson Santos Figueiredo Jr. acid06 em gmail.com
Quarta Fevereiro 3 11:54:38 PST 2010


Pronto, 80 caracteres (sem strict).
Estou satisfeito, agora é com vocês:

sub drop{($n,$w)=@_;$n=0if$n<0;ref$w?@$w[$n..$#{$w}]:$n>length$w?'':substr$w,$n}

-Nilson

2010/2/3 Nilson Santos Figueiredo Jr. <acid06 at gmail.com>:
> Melhorando a minha solução anterior, 85 caracteres (83 tirando o my):
>
> sub drop{my($n,$w)=@_;$n=0
> if$n<0;ref$w?@$w[$n..$#{$w}]:$n>length$w?'':substr($w,$n)}
>
> -Nilson
>
> 2010/2/3 Nilson Santos Figueiredo Jr. <acid06 at gmail.com>:
>> Uma solução, warnings and strict compliant:
>>
>> sub drop {
>>    my ($n, $w) = @_;
>>    $n = 0 if $n < 0;
>>    return ( $n > length $w ? '' : substr($w,$n) ) if !ref $w;
>>    @$w[$n..$#{$w}];
>> }
>>
>> Se colocar tudo em uma linha:
>>
>> sub drop{my($n,$w)=@_;$n=0
>> if$n<0;return($n>length$w?'':substr($w,$n))if!ref$w;@$w[$n..$#{$w}];}
>>
>> 96 caracteres. Deve dar pra melhorar bastante ainda. Se tirar o "my"
>> pra deixar de ser strict compliant, cai pra 94.
>>
>> -Nilson
>>
>> 2010/2/3 Daniel de Oliveira Mantovani <daniel.oliveira.mantovani at gmail.com>:
>>> Olá pessoal, o desafio envolve a função drop do Haskell:
>>>
>>> <haskell>
>>> ghci> myDrop 2 "foobar"
>>> "obar"
>>> ghci> myDrop 4 "foobar"
>>> "ar"
>>> ghci> myDrop 4 [1,2]
>>> []
>>> ghci> myDrop 0 [1,2]
>>> [1,2]
>>> ghci> myDrop 7 []
>>> []
>>> ghci> myDrop (-2) "foo"
>>> "foo"
>>> </haskell>
>>>
>>> Eu fiz em Perl, para ficar claro:
>>>
>>> <perl>
>>> sub drop {
>>>    my ( $n, $xs ) = @_;
>>>    if ( ref $_[1] ne 'ARRAY' ) {
>>>        $n <= 0 ? return $_[1] : return substr( $_[1], $n );
>>>    }
>>>    if ( $n <= 0 || !@_ ) {
>>>        return @{$xs};
>>>    }
>>>    else {
>>>        shift @{$xs};
>>>        drop( ( $n - 1 ), $xs );
>>>    }
>>> }
>>> </perl>
>>>
>>> Exemplos:
>>> mantovani at mantovani-desktop:~/Perl/Funcional$ perl -MHaskell -E 'say
>>> $_ for drop(3,[1,2,3,4,5,6])'
>>> 4
>>> 5
>>> 6
>>>
>>> mantovani at mantovani-desktop:~/Perl/Funcional$ perl -MHaskell -E 'say
>>> $_ for drop(1,"ofernandoagoragolf")'
>>> fernandoagoragolf
>>>
>>> mantovani at mantovani-desktop:~/Perl/Funcional$ perl -MHaskell -E 'say
>>> $_ for drop(2,["mantovani","garu","fernando","blabos"])'
>>> fernando
>>> blabos
>>>
>>> mantovani at mantovani-desktop:~/Perl/Funcional$ perl -MHaskell -E 'say
>>> $_ for drop(-1,["mantovani","garu","fernando","blabos"])'
>>> mantovani
>>> garu
>>> fernando
>>> blabos
>>>
>>> mantovani at mantovani-desktop:~/Perl/Funcional$ perl -MHaskell -E 'say
>>> $_ for drop(-1,"mantovani")'
>>> mantovani
>>>
>>> mantovani at mantovani-desktop:~/Perl/Funcional$ perl -MHaskell -E 'say
>>> $_ for drop(10,"mantovani")'
>>>
>>> --
>>> "If you’ve never written anything thoughtful, then you’ve never had
>>> any difficult, important, or interesting thoughts. That’s the secret:
>>> people who don’t write, are people who don’t think."
>>> _______________________________________________
>>> Rio-pm mailing list
>>> Rio-pm at pm.org
>>> http://mail.pm.org/mailman/listinfo/rio-pm
>>>
>>
>


Mais detalhes sobre a lista de discussão Rio-pm