Arvorezinha – Java Bytecode [e optimizado]
Ora viva amigos.
Tive alta submissão por amigo meu e colega de trabalho de uma arvorezinha numa coisa mesmo verdadeiramente inutil. Tive mesmo de blogar sobre isso!
Esta arvorezinha é em java bytecode, só mesmo para quem ama!
.class public Avorezinha .super java/lang/Object .method public <init>()V aload_0 invokenonvirtual java/lang/Object/<init>()V return .end method .method public static main([Ljava/lang/String;)V ; set limits used by this method .limit locals 4 .limit stack 3 ; setup local variables: ; 1 - the PrintStream object held in java.lang.System.out getstatic java/lang/System/out Ljava/io/PrintStream; astore_1 ; 2 - the integer 10 - the counter used in the loop bipush 1 istore_2 ; now loop 10 times printing out a number Loop1: goto InitLoop2 endLoop1: aload_1 ; push the PrintStream object ldc "" invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V ; decrement the counter and loop iinc 2 1 iload_2 bipush 6 isub ifne Loop1 goto exit InitLoop2: iload_2 istore_3 Loop2: aload_1 ; push the PrintStream object ldc "*" invokevirtual java/io/PrintStream/print(Ljava/lang/String;)V iinc 3 -1 iload_3 ifne Loop2 goto endLoop1 exit: ; done return .end method
Ele disse me que se tem de usar o assemblador Jasmin. Espero que amem porque esta eu amei mesmo bues!
EDIT: Estive a ver os comentarios, ele submeteu uma versao mais optizada aqui vai o código completo, copiado dos comentarios.
Aqui fica uma versão melhorada: .class public Arvorezinha .super java/lang/Object .method public static main([Ljava/lang/String;)V .limit locals 4 .limit stack 3 bipush 1 istore 1 ; int i=1 InicioFor1: iload 1 bipush 5 if_icmpgt SairFor1 ; i bipush 0 istore 2 ; int j=0 InicioFor2: iload 2 iload 1 if_icmpge SairFor2 ; j getstatic java/lang/System/out Ljava/io/PrintStream; ldc "*" invokevirtual java/io/PrintStream/print(Ljava/lang/String;)V ; System.out.print("*") iinc 2 1 ; j++ goto InicioFor2 SairFor2: getstatic java/lang/System/out Ljava/io/PrintStream; invokevirtual java/io/PrintStream/println()V ; System.out.println() iinc 1 1 ; i++ goto InicioFor1 SairFor1: return .end method
este gajo em vez de tar ca gaja vai fazer codigo
fds....
ok mas falta a arvorezinha em PostgreSQL:
select repeat('*',generate_series(1,5)) as arvorezinha;
Mas a arvorezinha em java bytecode bate tudo. :D
Aqui fica uma versão melhorada:
.class public Arvorezinha
.super java/lang/Object
.method public static main([Ljava/lang/String;)V
.limit locals 4
.limit stack 3
bipush 1
istore 1 ; int i=1
InicioFor1:
iload 1
bipush 5
if_icmpgt SairFor1 ; i
bipush 0
istore 2 ; int j=0
InicioFor2:
iload 2
iload 1
if_icmpge SairFor2 ; j
getstatic java/lang/System/out Ljava/io/PrintStream;
ldc "*"
invokevirtual java/io/PrintStream/print(Ljava/lang/String;)V ; System.out.print("*")
iinc 2 1 ; j++
goto InicioFor2
SairFor2:
getstatic java/lang/System/out Ljava/io/PrintStream;
invokevirtual java/io/PrintStream/println()V ; System.out.println()
iinc 1 1 ; i++
goto InicioFor1
SairFor1:
return
.end method
Aqui fica tb a arvorezinha em ml(ocaml):
let rec arvorezinha_aux x =
match x with
5 -> print_string "*";
|_ -> print_string "*"; arvorezinha_aux (x+1)
;;
let rec arvorezinha a =
match a with
1 -> arvorezinha_aux a;
|_ -> arvorezinha_aux a; print_string "\n";arvorezinha (a-1)
;;
arvorezinha 5;;
[...] gostei da outra versão (está nos comentários) ... estava pouco ML like. Espero que gostes desta [...]