From: io_x on

"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

"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
"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

"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

"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