Объявление результатов немного задержалось, все работы загружены на scene.org, видео презентации(logiker любезно поделился). До публикации работ я думал, что посмотрю на код и опубликую минимальные этюды, но после просмотра исходников отказался от затеи.
Сначала я подумал, что неплохо бы применить RLE, но из-за незнания алгоритма я отказался. Нечто похожее использовал Uris(47 байт):
org $6008
start:
ld hl, archa
ld de, buf+1
l0:
ld b,(hl)
inc hl
push hl
ld l,(hl)
l1:
ld a,(hl)
ld (de),a
rst 16
inc hl
inc de
djnz l1
pop hl
inc hl
dec c
jr nz, l0
archa:
db 8, buf, 6, buf0, 7, buf+14
db 10, buf+13, 10, buf1, 10, buf+33
db 140, buf+32, 200, buf+12
buf0:
db 92, 79, 47, 13, 43, 45
buf1:
db 13, 33
buf:
db 32
start:
ld hl, archa
ld de, buf+1
l0:
ld b,(hl)
inc hl
push hl
ld l,(hl)
l1:
ld a,(hl)
ld (de),a
rst 16
inc hl
inc de
djnz l1
pop hl
inc hl
dec c
jr nz, l0
archa:
db 8, buf, 6, buf0, 7, buf+14
db 10, buf+13, 10, buf1, 10, buf+33
db 140, buf+32, 200, buf+12
buf0:
db 92, 79, 47, 13, 43, 45
buf1:
db 13, 33
buf:
db 32
Во время проведения я перепробовал несколько вариантов, но остановился на этом:
OpenConsole()
EnableGraphicalConsole(1)
For y=0 To 18
For x=0 To 18
ConsoleLocate(x, y)
Print( Str(y%9) )
ConsoleLocate(x+20, y)
Print( Str(x%9) )
; c$=" "
If x%9=0
If y%9=0
c$="+"
Else
c$="!"
EndIf
Else
If y%9=0
c$="-"
Else
c$=" "
EndIf
EndIf
ConsoleLocate(x+40, y)
Print( c$ )
Next x
Next y
Input()
Написал код на ассемблере, получил 66 байт:
org $6000
db "+!- "
start
; jr $
ld d,b
ld c,0
ylp:
ld b,0
xlp:
ld e,0
;x%9==0 y%9==0 + 00
;x%9==0 y%9!=0 ! 01
;x%9!=0 y%9==0 - 10
;x%9!=0 y%9!=0 11
ld a,b
call mod9
jr z,set1
set 1,e
set1
ld a,c
call mod9
jr z,set2
inc e;set 0,e
set2
; push bc
; ld a,b
; add a,6
; ld b,a
; inc c
; inc c
inc c
call $200a; B=x,C=y
dec c
ld a,(de)
rst 16
; pop bc
inc b
ld a,b
cp 19
jr nz,xlp
;Next y
inc c
ld a,c
cp 19
jr nz,ylp
; ld de,msg_b
ld e,msg_b
ld bc,msg_e-msg_b
call 8252 ; print our string,DE=adr,BC=len
mod9:
d9
sub 9
jr nc,d9
add a,9
ret
msg_b
db 22,0,8,$5c,$4f,$2F
msg_e
end start
Торопиться было некуда, и код сократился до 54 байт. Какой способ использовать лучше? Наверное, отказаться от позиционирования печати(процедура $200A) и просто выводить последовательно символы? Через годик придется еще раз потренироваться.
Комментарии
Отправить комментарий