From: io_x on 4 Oct 2009 01:41 "io_x" <a(a)b.c.invalid> ha scritto nel messaggio news:4ac5c7f6$0$1106$4fafbaef(a)reader4.news.tin.it... > http://www.frontiernet.net/~fys/hugi/hcompo.htm > This for other information > > In few words the hugi size competition #29 is about > to write a .com program, the few bytes is possible, > that return in the dos screen pseudo random mazes. > > The generated mazes are of the kind > +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ > ? | | | | | | | | | > +--+--+--+ + + + + +--+ + + + +--+ +--+ + +--+ + + + + + + > | | | | | | | | | | | | | | | | | | | > + + + + + + +--+ +--+--+--+ +--+ +--+ +--+ + + + +--+--+ +--+ > | | | | | | | | | | | | | | | | > +--+--+ +--+--+--+ +--+ + + +--+ + + +--+ +--+--+ + + + +--+ + > | | | | | | | | | | | | > + +--+--+ +--+--+--+ +--+ + + +--+--+ + +--+--+--+--+ + +--+--+ + > | | | | | | | | | | | | | > + + + +--+ +--+ +--+--+--+ +--+--+--+--+--+--+--+ + + + + +--+ + > | | | | | | | | | | | | | > + + +--+ + + +--+ + + + +--+--+--+--+--+--+--+--+--+--+--+--+ +--+ > | | | | | | | | | | | | > + +--+ +--+--+ +--+ + + + +--+ + +--+ +--+ + +--+ +--+ + + + > | | | | | | | | | | | | | | | | > +--+ +--+ +--+--+ +--+--+--+--+ + +--+--+--+ +--+--+--+ + + +--+ + > | | | | | | | | | | | | | > + +--+ +--+ + +--+--+--+ +--+ + + +--+ + +--+ + + + +--+ + + > | | | | | | | | ? > +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ this is 164 bytes using the Esra way for to get the integer; i not think i could do better of this -------------------------- ;com file ;nasmw -o m.com m.asm ;>nasmw -v ; NASM version 0.98.38 compiled on Sep 12 2003 ;; ; xx-10-2009 ; Hugi compo 29 - random mazes ; Ho applicato il seguente metodo ricorsivo: ;1) Prima si costruisce una griglia dentro un rettangolo ; in cui tutte le caselle della suddivisione sono marcate ; non visitate ['N'], ; mentre il bordo della griglia e' marcato: visitato. ;2) Si sceglie una casella di detto rettangolo da cui partire ;3) Si marca tale casella con 'visitata' ;4) Se tale casella non ha una casella confinante marcata non visitata ; Se lo stack e' vuoto ; esci ; altrimenti ; pop dallo stack la posizione della precedente casella ; si rende tale casella la casella attuale ; goto 4 ; altrimenti ; scegliere casualmente una casella confinante non visitata ; si leva il muro tra tale casella confinante e la casella iniziale ; push nello stack la posizione della casella iniziale ; si rende tale casella confinante la casella attuale ; goto 3 ;Una casella e' la seguente scrittura ; +-- ; |XY ;quindi e' formata da 6 chars. ;N significa *non visitato*, se a posto di N ci sta un qualsiasi altro ;carattere significa visitato. ;+--+--+--+ ;| |1 | | ;+--+--+--+ ;| 3|NN|2 | ;+--+--+--+ ;| |0 | | ;+--+--+--+ ; Per levare il muro da: ; W muro 1 W*i-162/2=" " ; B muro 2 B*i+2=' ' ; W muro 0 W*i+162/2=" " ; B muro 3 B*i-1=' ' ; L == lunghezza in caselle del rettangolo del labirinto ; H == altezza in caselle del rettangolo del labirinto ; Discussione sui valori limite ; Per la *corretta* rappresentazione in un Box Dos ; L_Max=26 L_Min=1, H_Max=20 H_Min=1. ; Utilizzando "> programma > file.txt" ; ho provato i valori fino a (L_Max,H_Max)=(97,97) ottenendo ; un labirinto di 56 Kb nel file.txt ; da (L,H)=(98, 97) il programma non funziona; ; sospetto che cio' sia dovuto all'array "arr" in .bss ; vicino a o maggiore ai 64kb (0..0FFFFh oppure 0..65535) ; che non puo' essere gestito dal programma. ; per il corrente file "arr" ha size ; BytesMemory(L,H)=((L+1)*(H+2)*6) ; qui ; BytesMemory(98,97)=99*99*6=58806 non funziona ; mentre ; BytesMemory(97,97)=98*99*6=58212 funziona ;; %define L 25 %define H 10 ;%define L 97 ;%define H 97 ;%define L 50 ;%define H 23 %define BytesMemory ((L+1)*(H+2)*6) %define H21 (2*H+1) %define sopra (L+1)*6 %define sopra2 (L+1)*3 %define LineareMax 3*((L-1)+2*(L+1)*H)+1 %define passi (LineareMax-sopra-1)/3 org 100h Start: ; **************************** ; *** Prende il numero with the help by Esra Sdrawkcab ; **************************** ; assumo che ax==0 mov di, 080h ; punta alla size riga comando scasb jz .1 ; nessun argomento ritorna 0 xchg di, si inc si ; elimina l'unico spazio ; assicurato dalle regole e unico ..0: aad 10 ; al+=10*ah e ah=0 ; nel primo giro qui al=ah=0 mov ah, al ; risultato in ah lodsb sub al, '0' ; finisce quando incontra uno spazio jge .0 ; o un char minore di '0' mov al, ah ; ritorna numeri del tipo al:ah=n:n ..1: mov [seed], ax ; inizializza il seed per rand ; ******************************************* ; *** Fa la griglia ; ******************************************* mov di, arr mov cx, BytesMemory mov al, 10 lea si, [di+sopra] rep stosb ; tutto 10 [visitato] qui cx=0 lea di, [si-sopra2] mov bx, H21 mov ax, "+-" mov dx, "|N" ; le caselle NN: non visitate ..2: mov cx, L ; altrimenti visitate ..3: stosw mov byte[di], ah inc di loop .3 stosb mov byte[di], 0Dh inc di inc di ; fa la linea xchg ax, dx dec bx jnz .2 ; passa alla linea successiva mov byte[di], '$' mov byte[di-sopra2-3], 07fh mov byte[si], 02h ; ritorna in si la casella iniziale ; ******************************************* ; *** Fa il labirinto ; ******************************************* ; suppone all'ingresso che cx==0 ; parte dalla casella puntata da si inc si ; punta all'interno della casella, dove c'e' 'N' ..4: mov word[si], " " ; " " significa visitata ..5: mov ax, [seed] mul word[318] ; rand() inc ax mov [seed], ax aad 1 ; al=al+ah ed ah=0; valore casuale in al and al, 03h ; al=0[sotto],1[alto],2[sinistra],3[destra] mov cl, 4 ; le caselle confinanti sono 4 ..6: mov di, ax mov bp, ax mov bx, [muro+di+bp] ; in bx offset del muro; se bp=2*bx-(al/2) shr di, 1 ; => in bp offset della prossima casella mov bp, bx add bp, bx sub bp, di cmp byte[si+bp], 'N' je .a ; se tale casella non e' visitata va in .a inc ax and al, 3 loop .6 ; vai alla prossima casella ; ** caso le caselle sono tutte visitate cmp sp, 0FFFEh jae .z ; se lo stack e' vuoto esci[ e'in casella iniziale] pop ax ; altrimenti prende la casella precedente add si, ax ; ax=-162, +3, +162, -3 passa alla casella precedente jmp short .5 ..a: ; ** caso vi � una casella non visitata ; leva il muro di divisione [ed eventualemente una N] mov word[si+bx], " " ; che verra' in ogni caso levata dall'istruzione in .4 add si, bp neg bp ; neg bp poiche' trova la casella precedente %if BytesMemory>24000 cmp sp, fine jb .z ; lo stack non puo' invadere questo file in memoria %endif push bp ; quando fa il pop ritrova la strada jmp short .4 ..z: ; usa la casella iniziale in si e la ritorna ; ****************************** ; *** Stampa sullo schermo ; ****************************** lea dx, [si-sopra2-1] mov ah, 09h int 21h ; usa si per stampare l'array ret ; ritorna al chiamante align 2 ; val dw 32581 ; 0 1 2 3 muro dw sopra2, -sopra2, 2, -1 Section .bss seed resw 1 arr resb BytesMemory fine resb 512 ; for to be sure
From: io_x on 4 Oct 2009 04:22 "io_x" <a(a)b.c.invalid> ha scritto nel messaggio news:4ac833e4$0$1114$4fafbaef(a)reader1.news.tin.it... > > "io_x" <a(a)b.c.invalid> ha scritto nel messaggio > news:4ac5c7f6$0$1106$4fafbaef(a)reader4.news.tin.it... >> http://www.frontiernet.net/~fys/hugi/hcompo.htm >> This for other information >> >> In few words the hugi size competition #29 is about >> to write a .com program, the few bytes is possible, >> that return in the dos screen pseudo random mazes. >> >> The generated mazes are of the kind >> +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ >> ? | | | | | | | | | >> +--+--+--+ + + + + +--+ + + + +--+ +--+ + +--+ + + + + + + >> | | | | | | | | | | | | | | | | | | | >> + + + + + + +--+ +--+--+--+ +--+ +--+ +--+ + + + +--+--+ +--+ >> | | | | | | | | | | | | | | | | >> +--+--+ +--+--+--+ +--+ + + +--+ + + +--+ +--+--+ + + + +--+ + >> | | | | | | | | | | | | >> + +--+--+ +--+--+--+ +--+ + + +--+--+ + +--+--+--+--+ + +--+--+ + >> | | | | | | | | | | | | | >> + + + +--+ +--+ +--+--+--+ +--+--+--+--+--+--+--+ + + + + +--+ + >> | | | | | | | | | | | | | >> + + +--+ + + +--+ + + + +--+--+--+--+--+--+--+--+--+--+--+--+ +--+ >> | | | | | | | | | | | | >> + +--+ +--+--+ +--+ + + + +--+ + +--+ +--+ + +--+ +--+ + + + >> | | | | | | | | | | | | | | | | >> +--+ +--+ +--+--+ +--+--+--+--+ + +--+--+--+ +--+--+--+ + + +--+ + >> | | | | | | | | | | | | | >> + +--+ +--+ + +--+--+--+ +--+ + + +--+ + +--+ + + + +--+ + + >> | | | | | | | | ? >> +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ > > this is 164 bytes using the Esra way for to get the integer; > i not think i could do better of this always 164 is it ok that for mazes too much big (if error => no print)? Are problems or error i not see? ;com file ;nasmw -o m.com m.asm ;>nasmw -v ; NASM version 0.98.38 compiled on Sep 12 2003 ;; ; xx-10-2009 ; Hugi compo 29 - random mazes ; Ho applicato il seguente metodo ricorsivo: ;1) Prima si costruisce una griglia dentro un rettangolo ; in cui tutte le caselle della suddivisione sono marcate ; non visitate ['N'], ; mentre il bordo della griglia e' marcato: visitato. ;2) Si sceglie una casella di detto rettangolo da cui partire ;3) Si marca tale casella con 'visitata' ;4) Se tale casella non ha una casella confinante marcata non visitata ; Se lo stack e' vuoto ; esci ; altrimenti ; pop dallo stack la posizione della precedente casella ; si rende tale casella la casella attuale ; goto 4 ; altrimenti ; scegliere casualmente una casella confinante non visitata ; si leva il muro tra tale casella confinante e la casella iniziale ; push nello stack la posizione della casella iniziale ; si rende tale casella confinante la casella attuale ; goto 3 ;Una casella e' la seguente scrittura ; +-- ; |XY ;quindi e' formata da 6 chars. ;N significa *non visitato*, se a posto di N ci sta un qualsiasi altro ;carattere significa visitato. ;+--+--+--+ ;| |1 | | ;+--+--+--+ ;| 3|NN|2 | ;+--+--+--+ ;| |0 | | ;+--+--+--+ ; Per levare il muro da: ; W muro 1 W*i-162/2=" " ; B muro 2 B*i+2=' ' ; W muro 0 W*i+162/2=" " ; B muro 3 B*i-1=' ' ; L == lunghezza in caselle del rettangolo del labirinto ; H == altezza in caselle del rettangolo del labirinto ; Discussione sui valori limite ; Per la *corretta* rappresentazione in un Box Dos ; L_Max=26 L_Min=1, H_Max=20 H_Min=1. ; Utilizzando "> programma > file.txt" ; ho provato i valori fino a (L_Max,H_Max)=(97,97) ottenendo ; un labirinto di 56 Kb nel file.txt ; da (L,H)=(98, 97) il programma non funziona; ; sospetto che cio' sia dovuto all'array "arr" in .bss ; vicino a o maggiore ai 64kb (0..0FFFFh oppure 0..65535) ; che non puo' essere gestito dal programma. ; per il corrente file "arr" ha size ; BytesMemory(L,H)=((L+1)*(H+2)*6) ; qui ; BytesMemory(98,97)=99*99*6=58806 non funziona ; mentre ; BytesMemory(97,97)=98*99*6=58212 funziona ;; %define L 25 %define H 10 ;%define L 97 ;%define H 97 ;%define L 10 ;%define H 749 %define BytesMemory ((L+1)*(H+2)*6) %define H21 (2*H+1) %define sopra (L+1)*6 %define sopra2 (L+1)*3 %define LineareMax 3*((L-1)+2*(L+1)*H)+1 %define passi (LineareMax-sopra-1)/3 org 100h Start: ; **************************** ; *** Prende il numero with the help by Esra Sdrawkcab ; **************************** ; assumo che ax==0 mov di, 080h ; punta alla size riga comando scasb jz .1 ; nessun argomento ritorna 0 xchg di, si inc si ; elimina l'unico spazio ; assicurato dalle regole e unico ..0: aad 10 ; al+=10*ah e ah=0 ; nel primo giro qui al=ah=0 mov ah, al ; risultato in ah lodsb sub al, '0' ; finisce quando incontra uno spazio jge .0 ; o un char minore di '0' mov al, ah ; ritorna numeri del tipo al:ah=n:n ..1: mov [seed], ax ; inizializza il seed per rand ; ******************************************* ; *** Fa la griglia ; ******************************************* mov di, arr mov cx, BytesMemory mov al, 10 lea si, [di+sopra] rep stosb ; tutto 10 [visitato] qui cx=0 lea di, [si-sopra2] mov bx, H21 mov ax, "+-" mov dx, "|N" ; le caselle NN: non visitate ..2: mov cx, L ; altrimenti visitate ..3: stosw mov byte[di], ah inc di loop .3 stosb mov byte[di], 0Dh inc di inc di ; fa la linea xchg ax, dx dec bx jnz .2 ; passa alla linea successiva mov byte[di], '$' mov byte[di-sopra2-3], 07fh mov byte[si], 02h ; ritorna in si la casella iniziale ; ******************************************* ; *** Fa il labirinto ; ******************************************* ; suppone all'ingresso che cx==0 ; parte dalla casella puntata da si inc si ; punta all'interno della casella, dove c'e' 'N' ..4: mov word[si], " " ; " " significa visitata ..5: mov ax, [seed] mul word[318] ; rand() inc ax mov [seed], ax aad 1 ; al=al+ah ed ah=0; valore casuale in al and al, 03h ; al=0[sotto],1[alto],2[sinistra],3[destra] mov cl, 4 ; le caselle confinanti sono 4 ..6: mov di, ax mov bp, ax mov bx, [muro+di+bp] ; in bx offset del muro; se bp=2*bx-(al/2) shr di, 1 ; => in bp offset della prossima casella mov bp, bx add bp, bx sub bp, di cmp byte[si+bp], 'N' je .a ; se tale casella non e' visitata va in .a inc ax and al, 3 loop .6 ; vai alla prossima casella ; ** caso le caselle sono tutte visitate cmp sp, 0FFFEh jae .z ; se lo stack e' vuoto esci ; [ e'in casella iniziale] pop ax ; altrimenti prende la casella precedente add si, ax ; ax=-162, +3, +162, -3 passa ; alla casella precedente jmp short .5 %if BytesMemory>24000 ..e: mov sp, 0FFFEh ret ; nel caso di errore non stampa proprio niente: ; ritorna al DOS %endif ..a: ; ** caso vi � una casella non visitata ; leva il muro di divisione [ed eventualemente una N] mov word[si+bx], " " ; che verra' in ogni caso levata dall'istruzione in .4 add si, bp neg bp ; neg bp poiche' trova la casella precedente %if BytesMemory>24000 cmp sp, fine jbe .e ; lo stack non puo' invadere la memoria ; dati o code di questo programma %endif push bp ; quando fa il pop ritrova la strada jmp short .4 ..z: ; usa la casella iniziale in si e la ritorna ; ****************************** ; *** Stampa sullo schermo ; ****************************** lea dx, [si-sopra2-1] mov ah, 09h int 21h ; usa si per stampare l'array ret ; ritorna al Dos align 2 ; 0 1 2 3 muro dw sopra2, -sopra2, 2, -1 Section .bss seed resw 1 arr resb BytesMemory fine resb 512 ; for to be sure ------------------------------------------- j=arr|c=BytesMemory al=10|i=&*j+sopra|rep stosb ; tutto 10 [visitato] qui cx=0 j=&*i-sopra2|b=H21 |a="+-"|r="|N" ; le caselle NN: non visitate ..2: c=L ; altrimenti visitate ..3: stosw|B*j=ah|++j|loop .3|stosb|B*j=0Dh|++j|++j ; fa la linea a<->r|--b#.2 ; passa alla linea successiva B*j='$'|B*j-sopra2-3=07fh|B*i=02h ; ritorna in si la casella iniziale
From: io_x on 4 Oct 2009 05:50 "Esra Sdrawkcab" <admin(a)127.0.0.1> ha scritto nel messaggio news:op.u07rhes0hswpfo(a)dell3100... > On Sat, 03 Oct 2009 08:23:30 +0100, io_x <a(a)b.c.invalid> wrote: > >> >> "Esra Sdrawkcab" <admin(a)127.0.0.1> ha scritto nel messaggio >> news:op.u06rdzmrhswpfo(a)dell3100... >>> On Fri, 02 Oct 2009 10:36:20 +0100, io_x <a(a)b.c.invalid> wrote: >>> You don't set the initial cell using the random number generator. >> >> why have i to set the initial cell *random*? >> i choose the first one of the maze >> > To match the example competition results! What is this result? for the program that test mazes "mazetest -v" all is ok
From: Benjamin David Lunt on 4 Oct 2009 13:40 "io_x" <a(a)b.c.invalid> wrote in message news:4ac833e4$0$1114$4fafbaef(a)reader1.news.tin.it... > > "io_x" <a(a)b.c.invalid> ha scritto nel messaggio > news:4ac5c7f6$0$1106$4fafbaef(a)reader4.news.tin.it... >> http://www.frontiernet.net/~fys/hugi/hcompo.htm >> This for other information Hi, The code below does not pass the test. The test.bat file included in the rules does similar to the following: example n > x.txt entry n > e.txt fc e.txt x.txt where n is a number from 0 to 100 if e.txt and x.txt are not equal, then the entry does not pass. After looking at your entry, I think you don't get the correct random number. Ben > this is 164 bytes using the Esra way for to get the integer; > i not think i could do better of this > > -------------------------- > ;com file > ;nasmw -o m.com m.asm > ;>nasmw -v > ; NASM version 0.98.38 compiled on Sep 12 2003 > ;; > ; xx-10-2009 > ; Hugi compo 29 - random mazes > ; Ho applicato il seguente metodo ricorsivo: > ;1) Prima si costruisce una griglia dentro un rettangolo > ; in cui tutte le caselle della suddivisione sono marcate > ; non visitate ['N'], > ; mentre il bordo della griglia e' marcato: visitato. > ;2) Si sceglie una casella di detto rettangolo da cui partire > > ;3) Si marca tale casella con 'visitata' > ;4) Se tale casella non ha una casella confinante marcata non visitata > ; Se lo stack e' vuoto > ; esci > ; altrimenti > ; pop dallo stack la posizione della precedente casella > ; si rende tale casella la casella attuale > ; goto 4 > ; altrimenti > ; scegliere casualmente una casella confinante non visitata > ; si leva il muro tra tale casella confinante e la casella iniziale > ; push nello stack la posizione della casella iniziale > ; si rende tale casella confinante la casella attuale > ; goto 3 > > ;Una casella e' la seguente scrittura > ; +-- > ; |XY > > ;quindi e' formata da 6 chars. > ;N significa *non visitato*, se a posto di N ci sta un qualsiasi altro > ;carattere significa visitato. > > ;+--+--+--+ > ;| |1 | | > ;+--+--+--+ > ;| 3|NN|2 | > ;+--+--+--+ > ;| |0 | | > ;+--+--+--+ > > ; Per levare il muro da: > ; W muro 1 W*i-162/2=" " > ; B muro 2 B*i+2=' ' > ; W muro 0 W*i+162/2=" " > ; B muro 3 B*i-1=' ' > > ; L == lunghezza in caselle del rettangolo del labirinto > ; H == altezza in caselle del rettangolo del labirinto > ; Discussione sui valori limite > ; Per la *corretta* rappresentazione in un Box Dos > ; L_Max=26 L_Min=1, H_Max=20 H_Min=1. > > ; Utilizzando "> programma > file.txt" > ; ho provato i valori fino a (L_Max,H_Max)=(97,97) ottenendo > ; un labirinto di 56 Kb nel file.txt > ; da (L,H)=(98, 97) il programma non funziona; > ; sospetto che cio' sia dovuto all'array "arr" in .bss > ; vicino a o maggiore ai 64kb (0..0FFFFh oppure 0..65535) > ; che non puo' essere gestito dal programma. > > ; per il corrente file "arr" ha size > ; BytesMemory(L,H)=((L+1)*(H+2)*6) > ; qui > ; BytesMemory(98,97)=99*99*6=58806 non funziona > ; mentre > ; BytesMemory(97,97)=98*99*6=58212 funziona > ;; > > %define L 25 > %define H 10 > > ;%define L 97 > ;%define H 97 > > ;%define L 50 > ;%define H 23 > > %define BytesMemory ((L+1)*(H+2)*6) > %define H21 (2*H+1) > > %define sopra (L+1)*6 > %define sopra2 (L+1)*3 > > %define LineareMax 3*((L-1)+2*(L+1)*H)+1 > %define passi (LineareMax-sopra-1)/3 > > org 100h > Start: > ; **************************** > ; *** Prende il numero with the help by Esra Sdrawkcab > ; **************************** > ; assumo che ax==0 > mov di, 080h ; punta alla size riga comando > scasb > jz .1 ; nessun argomento ritorna 0 > xchg di, si > inc si ; elimina l'unico spazio > ; assicurato dalle regole e unico > .0: aad 10 ; al+=10*ah e ah=0 > ; nel primo giro qui al=ah=0 > mov ah, al ; risultato in ah > lodsb > sub al, '0' ; finisce quando incontra uno spazio > jge .0 ; o un char minore di '0' > mov al, ah ; ritorna numeri del tipo al:ah=n:n > .1: mov [seed], ax ; inizializza il seed per rand > ; ******************************************* > ; *** Fa la griglia > ; ******************************************* > mov di, arr > mov cx, BytesMemory > mov al, 10 > lea si, [di+sopra] > rep stosb ; tutto 10 [visitato] qui cx=0 > lea di, [si-sopra2] > mov bx, H21 > mov ax, "+-" > mov dx, "|N" ; le caselle NN: non visitate > .2: mov cx, L ; altrimenti visitate > .3: stosw > mov byte[di], ah > inc di > loop .3 > stosb > mov byte[di], 0Dh > inc di > inc di ; fa la linea > xchg ax, dx > dec bx > jnz .2 ; passa alla linea successiva > mov byte[di], '$' > mov byte[di-sopra2-3], 07fh > mov byte[si], 02h ; ritorna in si la casella iniziale > ; ******************************************* > ; *** Fa il labirinto > ; ******************************************* > ; suppone all'ingresso che cx==0 > ; parte dalla casella puntata da si > inc si ; punta all'interno della casella, dove > c'e' 'N' > .4: mov word[si], " " ; " " significa visitata > .5: mov ax, [seed] > mul word[318] ; rand() > inc ax > mov [seed], ax > aad 1 ; al=al+ah ed ah=0; valore casuale in al > and al, 03h ; al=0[sotto],1[alto],2[sinistra],3[destra] > mov cl, 4 ; le caselle confinanti sono 4 > .6: > mov di, ax > mov bp, ax > mov bx, [muro+di+bp] ; in bx offset del muro; se > bp=2*bx-(al/2) > shr di, 1 ; => in bp offset della prossima > casella > mov bp, bx > add bp, bx > sub bp, di > cmp byte[si+bp], 'N' > je .a ; se tale casella non e' visitata va in .a > inc ax > and al, 3 > loop .6 ; vai alla prossima casella > ; ** caso le caselle sono tutte visitate > cmp sp, 0FFFEh > jae .z ; se lo stack e' vuoto esci[ e'in casella iniziale] > pop ax ; altrimenti prende la casella precedente > add si, ax ; ax=-162, +3, +162, -3 passa alla casella > precedente > jmp short .5 > .a: ; ** caso vi � una casella non visitata > ; leva il muro di divisione [ed eventualemente una N] > mov word[si+bx], " " > ; che verra' in ogni caso levata dall'istruzione in .4 > add si, bp > neg bp ; neg bp poiche' trova la casella > precedente > %if BytesMemory>24000 > cmp sp, fine > jb .z ; lo stack non puo' invadere questo file in > memoria > %endif > push bp ; quando fa il pop ritrova la strada > jmp short .4 > .z: ; usa la casella iniziale in si e la > ritorna > ; ****************************** > ; *** Stampa sullo schermo > ; ****************************** > lea dx, [si-sopra2-1] > mov ah, 09h > int 21h ; usa si per stampare l'array > ret ; ritorna al chiamante > > align 2 > ; val dw 32581 > ; 0 1 2 3 > muro dw sopra2, -sopra2, 2, -1 > > Section .bss > seed resw 1 > arr resb BytesMemory > fine resb 512 ; for to be sure
From: io_x on 5 Oct 2009 01:54
"Benjamin David Lunt" <zfysz(a)frontiernet.net> ha scritto nel messaggio news:w65ym.24806$tG1.5005(a)newsfe22.iad... > > "io_x" <a(a)b.c.invalid> wrote in message > news:4ac833e4$0$1114$4fafbaef(a)reader1.news.tin.it... >> >> "io_x" <a(a)b.c.invalid> ha scritto nel messaggio >> news:4ac5c7f6$0$1106$4fafbaef(a)reader4.news.tin.it... >>> http://www.frontiernet.net/~fys/hugi/hcompo.htm >>> This for other information > > Hi, > > The code below does not pass the test. The test.bat file > included in the rules does similar to the following: > > example n > x.txt > entry n > e.txt > fc e.txt x.txt > where n is a number from 0 to 100 Are you saying that the program "entry n" has to be the same output of the "example n" for n from 0 to 100 ? but where it is written in the rules?? > if e.txt and x.txt are not equal, then the entry does not > pass. After looking at your entry, I think you don't get > the correct random number. > > Ben |