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
8 comentários a “Arvorezinha - Java Bytecode [e optimizado]”
fds....
.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
istore 2 ; int j=0
InicioFor2:
iload 2
iload 1
if_icmpge SairFor2 ; j<i></i>
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
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;;
select repeat('*',generate_series(1,5)) as arvorezinha;