10 J One Liners to Impress Your Friends

Pô, fizeram em Scala (acho que foi o primeiro) e, logo vieram versões em CoffeScript, Python, Clojure, F#, C#, Haskell e Ruby (já devem ter outras ou nem foi nessa ordem). É aquele negócio de: “Uau! Olha só do que a minha linguagem é capaz!”. E lá vem uma dúzia dizendo: “A minha também faz!”. Mas fiquei imaginando: “Quem ficaria impressionado com os exemplos?”. Apenas quem conhece só uma linguagem que não faz aquilo.

Vendo os primeiros exemplos, lembrei de Lisp e Scheme (todos conhecem o Apply do Lisp né?). Bem as duas linguagens trabalham normalmente com listas e muitas linguagens estão implementando algumas facilidades ali encontradas, o que é legal. Também justifica o programador conhecer mais de uma linguagem o que permite acoplar soluções mais inteligentes para os problemas.

Programas em uma linha são coisas antigas e, desde quando me conheço por gente, tenho visto. Até jogos completos feitos em uma linha de BASIC (acho que era do MSX). Recentemente (nem tanto assim) achei alguns programas em uma linha de REBOL bastante interessantes.

Por exemplo, a linha abaixo cria uma janela com um relógio digital (e que funciona)

view layout[origin 0 t: h1 red black (to string! now/time) rate 1 feel[engage: [t/text: now/time show t]]]

E a linha abaixo cria uma janela. Clicando na imagem é possível selecionar uma outra imagem do seu computador para ser visualizada e assim sucessivamente. Um visualizador de imagens em uma linha.

view l: layout[origin 0x0 b: box "Load" [error? try [b/image: i: load first request-file b/text: "" l/size: b/size: i/size show l]]]

Para ficar mais impressionante, funciona no Linux, Windows, Mac, etc. e basta baixar o REBOL/View que tem apenas 600KiB para testar. Mas é claro que os fãns das respectivas linguagens irão dizer: “Bah, não vou perder tempo baixando pois a minha linguagem é melhor. Prefiro preder o meu tempo mostrando que a minha linguagem faz a mesma coisa que as outras.”

Como? Refazer os 10 exemplos de uma linha em J para provar que a linguagem também é capaz só para alguém dizer: “E daí?”. Ou como no comentário de Ruby sobre o Crivo de Erastótenes que diz: “The Scala one liner is very clever, but entirely unreadable. …”. É claro santa. Se tu não conheces não entende. Em J, os 10 primeiros números primos são fornecidos pela frase: p: i.10 o que nem considero ‘one liner’.

Mas tem algumas coisinhas que eu achei legal em J e envolvem gráficos. Pode impressionar uns e não impressionar outros. Por exemplo:

'surface' plot sin */~ steps 0 3 50

viewmat |. j.~/~ i:2j16

Um poquinho de asciiart

3 6$<^:6]0 0$0

┌──────────┬──────────┬──────────┬──────────┬──────────┬──────────┐
│┌────────┐│┌────────┐│┌────────┐│┌────────┐│┌────────┐│┌────────┐│
││┌──────┐│││┌──────┐│││┌──────┐│││┌──────┐│││┌──────┐│││┌──────┐││
│││┌────┐│││││┌────┐│││││┌────┐│││││┌────┐│││││┌────┐│││││┌────┐│││
││││┌──┐│││││││┌──┐│││││││┌──┐│││││││┌──┐│││││││┌──┐│││││││┌──┐││││
│││││┌┐│││││││││┌┐│││││││││┌┐│││││││││┌┐│││││││││┌┐│││││││││┌┐│││││
│││││└┘│││││││││└┘│││││││││└┘│││││││││└┘│││││││││└┘│││││││││└┘│││││
││││└──┘│││││││└──┘│││││││└──┘│││││││└──┘│││││││└──┘│││││││└──┘││││
│││└────┘│││││└────┘│││││└────┘│││││└────┘│││││└────┘│││││└────┘│││
││└──────┘│││└──────┘│││└──────┘│││└──────┘│││└──────┘│││└──────┘││
│└────────┘│└────────┘│└────────┘│└────────┘│└────────┘│└────────┘│
├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
│┌────────┐│┌────────┐│┌────────┐│┌────────┐│┌────────┐│┌────────┐│
││┌──────┐│││┌──────┐│││┌──────┐│││┌──────┐│││┌──────┐│││┌──────┐││
│││┌────┐│││││┌────┐│││││┌────┐│││││┌────┐│││││┌────┐│││││┌────┐│││
││││┌──┐│││││││┌──┐│││││││┌──┐│││││││┌──┐│││││││┌──┐│││││││┌──┐││││
│││││┌┐│││││││││┌┐│││││││││┌┐│││││││││┌┐│││││││││┌┐│││││││││┌┐│││││
│││││└┘│││││││││└┘│││││││││└┘│││││││││└┘│││││││││└┘│││││││││└┘│││││
││││└──┘│││││││└──┘│││││││└──┘│││││││└──┘│││││││└──┘│││││││└──┘││││
│││└────┘│││││└────┘│││││└────┘│││││└────┘│││││└────┘│││││└────┘│││
││└──────┘│││└──────┘│││└──────┘│││└──────┘│││└──────┘│││└──────┘││
│└────────┘│└────────┘│└────────┘│└────────┘│└────────┘│└────────┘│
├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
│┌────────┐│┌────────┐│┌────────┐│┌────────┐│┌────────┐│┌────────┐│
││┌──────┐│││┌──────┐│││┌──────┐│││┌──────┐│││┌──────┐│││┌──────┐││
│││┌────┐│││││┌────┐│││││┌────┐│││││┌────┐│││││┌────┐│││││┌────┐│││
││││┌──┐│││││││┌──┐│││││││┌──┐│││││││┌──┐│││││││┌──┐│││││││┌──┐││││
│││││┌┐│││││││││┌┐│││││││││┌┐│││││││││┌┐│││││││││┌┐│││││││││┌┐│││││
│││││└┘│││││││││└┘│││││││││└┘│││││││││└┘│││││││││└┘│││││││││└┘│││││
││││└──┘│││││││└──┘│││││││└──┘│││││││└──┘│││││││└──┘│││││││└──┘││││
│││└────┘│││││└────┘│││││└────┘│││││└────┘│││││└────┘│││││└────┘│││
││└──────┘│││└──────┘│││└──────┘│││└──────┘│││└──────┘│││└──────┘││
│└────────┘│└────────┘│└────────┘│└────────┘│└────────┘│└────────┘│
└──────────┴──────────┴──────────┴──────────┴──────────┴──────────┘

color 2 rem int 7 7

Impressionado? Eu realmente não me importo.

(}.i.!4) A. 'CASA'

CAAS
CSAA
CSAA
CAAS
CASA
ACSA
ACAS
ASCA
ASAC
AACS
AASC
SCAA
SCAA
SACA
SAAC
SACA
SAAC
ACAS
ACSA
AACS
AASC
ASCA
ASAC

=-=-=-=-=
Powered by Blogilo

Anúncios

3 opiniões sobre “10 J One Liners to Impress Your Friends

  1. REBOL é de outro mundo.

    O último problema é implementar a “Sieve of Erasthotenes” que é um algoritmo específico pra encontrar números primos. Várias linguagens tem métodos nativos pra isso.

  2. Pingback: Projeto Euler – Problema #29 « Fotomix’s Weblog

  3. Pingback: Projeto Euler – Problema #24 « Fotomix’s Weblog

Os comentários estão desativados.