quarta-feira, 16 de maio de 2012

etbjxntqrdke

Ontem havia duas reuniões sendo travadas ao meu redor; eu não participava de nenhuma, mas sofria com a gritaria das duas. Como no Brasil é falta de educação apontar a falta de educação dos outros, tive que me contentar com alterar a mensagem do MSN.

Então, um colega me apontou um sítio que vende uma camiseta com a seguinte linha de Perl:

perl -e '
"$a="etbjxntqrdke";
$a=~s/(.)/chr(ord($1)+1)/eg;
print "$a\n;"'
Claro, achei muito explicadinho e limpinho e resolvi arrumar as coisas para manter a má fama do Perl.

perl -e "map { print chr 1+ ord } 'etbjxntqrdke'=~/./g"
Achei o resultado esteticamente aprazível.

6 comentários:

  1. s = ''
    for c in 'etbjxntqrdke':
    s += chr(ord(c)+1)
    print s


    (ja' que eu estava curioso, mas com preguica de fazer de cabeca, e sem um interpretador perl 'a mao ...)

    ResponderExcluir
  2. Pensando bem, como disse o mestre, one-liners sao cool, alem de nao tao obvios para uma olhada rapida :)

    ''.join(map(lambda c: chr(ord(c)+1), 'etbjxntqrdke'))

    ResponderExcluir
  3. Aqui no teletrabalho passei a tarde tranquilo ouvindo bach, paganini, folk, o programa do front da ciencia sobre o Tesla, escrevendo triguers mecanicamente e discutindo hash pelo msn com o Marcus.
    Falaram de quê ?

    ResponderExcluir
  4. Parece que disparei um golfe! Vou tentar mais uma tacada:

    perl -e "print chr 1+ ord foreach split //,'etbjxntqrdke'"

    ResponderExcluir
  5. E mais uma!
    perl -e "print chr 1+ ord for split //,'etbjxntqrdke'"

    ResponderExcluir
  6. Em Lua:

    print((string.gsub('etbjxntqrdke', '.', function(s) return string.char(string.byte(s)+1) end)))

    Não tão compacto, mas no estilo "1 linha".

    Testável aqui:
    http://www.lua.org/cgi-bin/demo

    ResponderExcluir