From: Benjamin David Lunt on 5 Oct 2009 11:14 "io_x" <a(a)b.c.invalid> wrote in message news:4ac9886b$0$828$4fafbaef(a)reader5.news.tin.it... > >> 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?? Sorry. The rules may not specifically say that. We have been doing this for many years, and it has just been a given. Each compo much pass a test suite of some kind. We have always had a test suite. Also, we have had many discussion about the current and previous compos on the forum and email list. Again, sorry about that, but we usually don't get many new entrants. However, I would bet that if you change your code to produce the same random number as the example, it will pass the test. Thanks, Ben
From: io_x on 5 Oct 2009 13:15 "io_x" <a(a)b.c.invalid> ha scritto nel messaggio news:4ac833e4$0$1114$4fafbaef(a)reader1.news.tin.it... ; Costruttore di Labirinti %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 i=081h|bl=' ' ; punta alla size riga comando ..0: aad 10 ; al+=10*ah e ah=0 ah=al lodsb|al-=bl bl='0' ; prima ' ' poi '0' >=?#.0 ; o un char minore di '0' al=ah ; ritorna numeri del tipo al:ah=n:n *seed=a ; inizializza il seed per rand ; 21 ; ******************************************* ; *** Fa la griglia ; ******************************************* 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 ; ******************************************* ; *** Fa il labirinto ; ******************************************* ; suppone all'ingresso che cx==0 ; parte dalla casella puntata da si ++i ; punta all'interno della casella, dove c'e' 'N' ..4: W*i=" " ; " " significa visitata ..5: a=*seed|mul W*298 ; rand() --a|*seed=a aad 1 ; al=al+ah ed ah=0; valore casuale in al cl=4 ; le caselle confinanti sono 4 ..6: al&=03h ; al=0[sotto],1[alto],2[sinistra],3[destra] j=a |k=a|b=*muro+j+k ; in bx offset del muro; se bp=2*bx-(al/2) j>>=1|k=b|k+=b|k-=j ; => in bp offset della prossima casella B*i+k=='N'#.a ; se tale casella non e' visitata va in .a ++a|loop .6 ; vai alla prossima casella ; ** caso le caselle sono tutte visitate s>=0FFFEh#.z ; se lo stack e' vuoto esci[ e'in casella iniziale] pop i ; altrimenti prende la casella precedente #.5 %if BytesMemory>24000 ..e: s=0FFFEh|ret ; nel caso di errore non stampa proprio niente: ; ritorna al DOS %endif ..a: ; ** caso vi � una casella non visitata W*i+b=" " ; leva il muro di divisione [ed eventualemente una N] ; che verra' in ogni caso levata dall'istruzione in .4 %if BytesMemory>24000 s<=fine#.e ; lo stack non puo' invadere questo file in memoria %endif push i i+=k #.4 ..z: ; usa la casella iniziale in si e la ritorna ; ****************************** ; *** Stampa sullo schermo ; ****************************** r=&*i-sopra2-1|ah=09h|int 21h ; usa si per stampare l'array ret ; to 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 ----------------- %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 si, 081h ; punta a fine riga o spazio mov bl, ' ' ..0: aad 10 ; al+=10*ah e ah=0 mov ah, al lodsb sub al, bl mov bl, '0' ; prima ' ' poi '0' jge .0 ; o un char minore di '0' mov al, ah ; ritorna numeri del tipo al:ah=n:n mov [seed], ax ; inizializza il seed per rand ; 21 ; ******************************************* ; *** 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 ch==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[298] ; rand() dec ax mov [seed], ax aad 1 ; al=al+ah ed ah=0; valore casuale in al mov cl, 4 ; le caselle confinanti sono 4 ..6: and al, 03h ; al=0[sotto],1[alto],2[sinistra],3[destra] 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 mov bp, bx add bp, bx sub bp, di ; => in bp offset della prossima casella cmp byte[si+bp], 'N' je .a ; se tale casella non e' visitata va in .a inc ax 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 si ; altrimenti prende la 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 %if BytesMemory>24000 cmp sp, fine jbe .e ; lo stack non puo' invadere questo file in memoria %endif push si add si, bp 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 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
From: Benjamin David Lunt on 5 Oct 2009 13:24 "io_x" <a(a)b.c.invalid> wrote in message news:4aca2836$0$1102$4fafbaef(a)reader3.news.tin.it... > > "io_x" <a(a)b.c.invalid> ha scritto nel messaggio > news:4ac833e4$0$1114$4fafbaef(a)reader1.news.tin.it... > > Sorry. Still doesn't pass the test.bat test. Thanks, Ben
From: io_x on 6 Oct 2009 03:54 "Benjamin David Lunt" <zfysz(a)frontiernet.net> ha scritto nel messaggio news:%2oym.93874$u76.41064(a)newsfe10.iad... > > "io_x" <a(a)b.c.invalid> wrote in message > news:4ac9886b$0$828$4fafbaef(a)reader5.news.tin.it... >> >>> 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?? > > Sorry. The rules may not specifically say that. We have > been doing this for many years, and it has just been a > given. Each compo much pass a test suite of some kind. > We have always had a test suite. > > Also, we have had many discussion about the current and > previous compos on the forum and email list. Again, > sorry about that, but we usually don't get many new entrants. > > However, I would bet that if you change your code to produce > the same random number as the example, it will pass the test. what to change for to past test0.bat? change the random number generator, the association cell numbers 0..4, the function that calculate from the wall the position, and push/pop the current cell number (it should be 204 byte) %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 si, 081h mov bl, ' ' ..0: aad 10 ; al+=10*ah e ah=0 mov ah, al lodsb sub al, bl mov bl, '0' ; prima ' ' poi '0' jge .0 ; o un char minore di '0' mov [seed], ah ; 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 ; ************************************** ; *** Trova una casella casuale ; ************************************** ; P(x,y)=i_inz+y*(L+1)*6+x*3 mov cx, L call ran mov di, dx add di, dx add di, dx ; x*3 mov cx, H call ran mov ax, sopra mul dx ; y*(L+1)*6 add ax, di add si, ax ; in si la casella iniziale del labirinto ; ******************************************* ; *** 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 cl, 4 call ran ; le caselle confinanti sono 4 ..6: and dx, 03h ; dl=0[destra],1[basso],2[sinistra],3[alto] mov di, dx mov bp, dx mov bx, [muro+di+bp] ; in bx offset del muro not di and di, 1 mov bp, bx add bp, bx ; se bp=2*bx-(not(di)&1) sub bp, di ; => in bp offset della prossima casella cmp byte[si+bp], 'N' je .a ; se tale casella non e' visitata va in .a ..7: inc dx 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 dx pop si ; altrimenti prende la casella precedente mov cl, 4 jmp short .7 %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 %if BytesMemory>24000 cmp sp, limite jbe .e ; lo stack non puo' invadere questo file in memoria %endif push si push dx add si, bp jmp short .4 ..z: ; ****************************** ; *** Stampa sullo schermo ; ****************************** lea dx, [arr+sopra2] mov ah, 09h int 21h ; usa si per stampare l'array ret ; ritorna un numero 0..cx in dx ran: mov ax, 04e35h imul word[seed] inc ax mov [seed], ax shr ax, 8 xor dx, dx idiv cx ret align 2 seed dw 0 ;; ; +--+--+--+ ; | |3 | | ; +--+--+--+ ; | 2|NN|0 | ; +--+--+--+ ; | |1 | | ; +--+--+--+ ; dl=0[destra],1[basso],2[sinistra],3[alto] ;; ; 0 1 2 3 muro dw 2, sopra2, -1, -sopra2 Section .bss arr resb BytesMemory fine resb 512 ; for to be sure limite resb 4
From: io_x on 6 Oct 2009 03:57
"io_x" <a(a)b.c.invalid> ha scritto nel messaggio news:4acaf615$0$830$4fafbaef(a)reader5.news.tin.it... > what to change for to past test0.bat? > change the random number generator, the association cell numbers 0..4, > the function that calculate from the wall the position, > and push/pop the current cell number (it should be 204 byte) and to read the code in the example.asm :) |