Autor Wątek: Wyzwanie dla programistów #4  (Przeczytany 51802 razy)

Tygrys

  • Administrator
  • *****
  • Wiadomości: 4540
  • Miejsce pobytu:
    Warszawa
  • mistrz ceremonii
Odp: Wyzwanie dla programistów #4
« Odpowiedź #90 dnia: 2017.06.05, 19:10:16 »
smoku, dajesz radę! to świetny argument aby skończyć swój efekt i pokazać go światu... już za kilka dni ;)

smok.wawelski

  • ***
  • Wiadomości: 225
  • Miejsce pobytu:
    Warszawa
Odp: Wyzwanie dla programistów #4
« Odpowiedź #91 dnia: 2017.06.05, 20:08:31 »
Możesz też zrobić tak że 254 częściej występujące słowa zdefiniujesz jednym bajtem, a 2 bajty przeznaczysz na przełącznik na kolejne zestawy po 256 innych słów. Wtedy dwu-bajtowo określisz tylko te rzadziej występujące słowa co pewnie da trochę oszczędności. :)
Bardzo dobry pomysł, wziąłbym jeszcze pod uwagę iloczyn (długość słowa x liczba powtórzeń), bo zamiana 2 literowych wyrazów, które występują 40 razy na 40 bajtów vs zamiana 12 literowego wyrazu występującego 14 razy nawet na 2 bajty nie opłaca się tak bardzo.

RafalM

  • *****
  • Wiadomości: 1133
  • Miejsce pobytu:
    Sulejówek
Odp: Wyzwanie dla programistów #4
« Odpowiedź #92 dnia: 2017.06.05, 20:24:41 »
Bardzo fajna gra.

Od strony technicznej wybrałeś Smoku łatwiejszą opcję - przejścia od punktu do punktu zamiast męczyć się z parserem interpretującym wpisywane słowa. Ale podejrzewam że wielu graczy wręcz będzie się to podobało bo dzięki temu gra jest istotnie łatwiejsza. No i w końcu pisałeś to w 10 dni!

Fajnie jest od strony wizualnej - czcionka, kolorowa grafika. Podoba mi się też styl pisania.

Jeśli jeszcze masz zapał to nie zostawiaj tego tak jak teraz. Skompresuj tekst, wrzuć grafikę która się nie zmieściła.

I pomyśl o wersji po angielsku bo chyba warto by gra miała zasięg ponadlokalny ;)

dox

  • *
  • Wiadomości: 25
  • Miejsce pobytu:
    Rybnik
    • www.slanina.pl
Odp: Wyzwanie dla programistów #4
« Odpowiedź #93 dnia: 2017.06.05, 21:04:52 »
Hej,
Daaaawno nic na ZX nie pisałem. Na szybko dwa rocznicowe mini-mini efekty ( prawie 35 i prawie 53 ( hex 35)  bajtów, zostało kilka wolnych ;)
Z założenia nie chciałem w ogóle korzystać z ROM-u.
Fajnie wrócić do 8 bitów chociaż na chwilę ....
Do kompilacji korzystałem z pasmo (macOS ).

35

; 35
; dox^DC-S
; [email protected]

org 0xc000
start:
ld de,gfx
ld hl,$4800
outer_loop:
ld a,[de]
or a
jr z,start
inc e
ld b,l
inner_loop:
add a,a
jr nc,skip_write
ld [hl],c
skip_write:
inc hl
djnz inner_loop
inc c
jr outer_loop
gfx:
db %11101111
db %00101000
db %00101000
db %01101110
db %00100001
db %00100001
db %11101110
db 0
db 0,0,0,0,0  ; padding

end start

53 = $35

; 53 = $35
; dox^DC-S
; [email protected]

org 0xff00
start:
halt ; sync
ld hl,$5900
ld b,l
ld d,$8 ; max color for skew
color_loop:
ld a,c
add a,d
jr nc,skew
ld a,d
skew:
ld c,a
and %111000    ; no flash / brightness
ld [hl],a

inc hl
djnz color_loop

ld de,gfx
ld hl,$5948
outer_loop:
ld a,[de]
or a
jr z,start
inc e
ld b,16
inner_loop:
add a,a ;  c = bit 7
jr nc,skip_write
ld [hl],d  ; d = $ff
inc hl
ld [hl],d
dec hl
skip_write:
inc hl
inc hl
djnz inner_loop
jr outer_loop
gfx:
db %11101110
db %00101000
db %01101111
db %00100001
db %11100111
db 0
db 0,0        ; padding = 2 extra bytes to reach $53 size limit
end start


smok.wawelski

  • ***
  • Wiadomości: 225
  • Miejsce pobytu:
    Warszawa
Odp: Wyzwanie dla programistów #4
« Odpowiedź #94 dnia: 2017.06.05, 23:10:42 »
Bardzo fajna gra.

Od strony technicznej wybrałeś Smoku łatwiejszą opcję - przejścia od punktu do punktu zamiast męczyć się z parserem interpretującym wpisywane słowa. Ale podejrzewam że wielu graczy wręcz będzie się to podobało bo dzięki temu gra jest istotnie łatwiejsza. No i w końcu pisałeś to w 10 dni!

Fajnie jest od strony wizualnej - czcionka, kolorowa grafika. Podoba mi się też styl pisania.

Jeśli jeszcze masz zapał to nie zostawiaj tego tak jak teraz. Skompresuj tekst, wrzuć grafikę która się nie zmieściła.

I pomyśl o wersji po angielsku bo chyba warto by gra miała zasięg ponadlokalny ;)
Po pierwsze bardzo dziękuję wszystkim, którym gra się podoba. To jest bardzo miłe i ważne dla mnie.

Jeśli chodzi o parser, to zrezygnowałem z niego świadomie, nic by nie dało wpisywanie NW N czy S, kiedy można wybrać pomieszczenie. Poza tym jest niestety niewiele lokacji (czas! czas!) więc tylko by to irytowało gracza.

To co jest dla mnie ciekawym przeżyciem, to powrót 30 lat wstecz, gdy w Art Studio rysowałem swoje fonty - tym razem miałem SevenUpa i myszkę ale przypomniałem sobie stare czasy.
Jeśli chodzi o grafikę - to w 48K wejdzie screen czy dwa jak zoptymalizuję teksty ale ZX Basic nie wspiera Spectrum 128K i byłoby dosyć ciężko wykorzystać dodatkową pamięć. Może fajnie byłoby pisać na DivIDE (lub coś podobnego), tak żeby ograniczenie pamięci nie było istotne.

PS. Gra tekstowa po angielsku... chyba się nie widzę w tej roli :) Musiałbym zatrudnić native'a.

ZbyniuR

  • *****
  • Wiadomości: 3333
  • Miejsce pobytu:
    Carlisle w UK
  • CPC AGA PSX
Odp: Wyzwanie dla programistów #4
« Odpowiedź #95 dnia: 2017.06.06, 05:54:55 »
Smoku jak na mój rozum to nie ma znaczenia czy częściej występują słowa dłuższe czy te krótsze. Tak czy inaczej musisz mieć zapisane każde z nich w całości raz, a od tej chwili przy dalszej kompresji nie ma znaczenia czy były dłuższe czy nie, liczy się tylko to, że bardziej się kalkuluje by jednym bajtem określić te częściej występujące.

Bardziej mnie zastanawia to jak potraktować spacje i inne znaki interpunkcyjne. Czy te ostatnie traktować jako osobne słowo, tyle że nie poprzedzone spacją, czy jako część słowa po którym występuje, ale wtedy to samo słowo zakończone spacją, kropką czy też innym znaczkiem byłoby osobnym słowem. Trzeba by policzyć w konkretnym tekście co się bardziej kalkuluje.
- Jeśli masz w domu światło i wodę, tzn. że masz światłowód. ;)

tooloud

  • *****
  • Wiadomości: 3188
  • Miejsce pobytu:
    Warszawa
  • mydłem go!
Odp: Wyzwanie dla programistów #4
« Odpowiedź #96 dnia: 2017.06.06, 08:40:49 »
...i wszystko dużymi literami, bo inaczej dochodzi cały zestaw słów zaczynających zdania.
dużo sprzętu mało czasu.

matofesi

  • *****
  • Wiadomości: 2049
  • Miejsce pobytu:
    Toruń/Poland
Odp: Wyzwanie dla programistów #4
« Odpowiedź #97 dnia: 2017.06.06, 09:19:10 »
Bardziej mnie zastanawia to jak potraktować spacje i inne znaki interpunkcyjne. Czy te ostatnie traktować jako osobne słowo, tyle że nie poprzedzone spacją, czy jako część słowa po którym występuje, ale wtedy to samo słowo zakończone spacją, kropką czy też innym znaczkiem byłoby osobnym słowem. Trzeba by policzyć w konkretnym tekście co się bardziej kalkuluje.

Albo po prostu w wypadku znaków interpunkcyjnych pomijać spacje przed/po - mamy dokładnie określone zasady typograficzne dotyczące tego dla których znaków stawia się spację przed a dla których po. Jedyny problem to odrobinę bardziej skomplikowany dekoder.

smok.wawelski

  • ***
  • Wiadomości: 225
  • Miejsce pobytu:
    Warszawa
Odp: Wyzwanie dla programistów #4
« Odpowiedź #98 dnia: 2017.06.06, 10:25:19 »
...i wszystko dużymi literami, bo inaczej dochodzi cały zestaw słów zaczynających zdania.

Wystarczy dodać kapitalizację jeśli poprzednim znakiem była kropka. Powinno zadziałać w większości wypadków. Nazwy własne (imiona, nazwiska) zawsze z wielkiej więc też nie problem.

tooloud

  • *****
  • Wiadomości: 3188
  • Miejsce pobytu:
    Warszawa
  • mydłem go!
Odp: Wyzwanie dla programistów #4
« Odpowiedź #99 dnia: 2017.06.06, 10:48:54 »
jeżeli była kropka to po spacji duża litera.
dużo sprzętu mało czasu.

Tygrys

  • Administrator
  • *****
  • Wiadomości: 4540
  • Miejsce pobytu:
    Warszawa
  • mistrz ceremonii
Odp: Wyzwanie dla programistów #4
« Odpowiedź #100 dnia: 2017.06.06, 10:53:45 »
dox - świetne pchełki ;-)

RafalM

  • *****
  • Wiadomości: 1133
  • Miejsce pobytu:
    Sulejówek
Odp: Wyzwanie dla programistów #4
« Odpowiedź #101 dnia: 2017.06.06, 16:33:50 »
Cytuj
Wystarczy dodać kapitalizację jeśli poprzednim znakiem była kropka. Powinno zadziałać w większości wypadków. Nazwy własne (imiona, nazwiska) zawsze z wielkiej więc też nie problem.

Z mojego doświadczenia to masz takie opcje by tekst był mniejszy:

1. Nie zapisywać litery całym bajtem tylko na mniejszej ilości bitów. W języku angielskim dawałem radę na 5 bitach - to są 32 kombinacje a liter jest tam 26. W polskim może być gorzej ale 6 bitów na pewno wystarczy.

Co do dużych liter to można przyjąć reguły że pierwszy znak to zawsze duża litera, że po kropce to zawsze duża litera... Nie załatwi to wszystkich przypadków typu np. imię i nazwisko w środku zdania ale dla nich możemy mieć specjalny znak sterujący którego nie piszemy ale jak wystąpi to po nim kolejny znak to duża litera. Jeśli to będzie dość rzadko to i tak będzie oszczędność.

Ja u siebie stosowałem różne takie znaki kontrolne - przejście do nowej linii, zmiana koloru czcionki itp. Miałem nawet specjalny znak dla bardzo rzadko występujących symboli że jak się pojawił to kolejny znak był brany z innego zestawu - dzięki temu w 99% przypadków miałem znak na 5 bitach a w 1% na 10 bitach ale miałem 64 dostępne znaki a nie 32.

2. Kodować najczęściej występujące słowa/fragmenty słów pojedynczymi wartościami. Była już wyżej o tym mowa.

3. Stosować ogólny algorytm kompresji typu MegaLZ

Powyższe metody można czasem łączyć dla lepszego efektu.

smok.wawelski

  • ***
  • Wiadomości: 225
  • Miejsce pobytu:
    Warszawa
Odp: Wyzwanie dla programistów #4
« Odpowiedź #102 dnia: 2017.06.06, 16:44:26 »
Hmm nie chcę wychodzić przed szereg ale coś widzę, że będzie ciekawy temat na Wyzwanie dla programistów #5 ;)

ZX Freeq

  • *****
  • Wiadomości: 1835
  • Miejsce pobytu:
    Warszawa
Odp: Wyzwanie dla programistów #4
« Odpowiedź #103 dnia: 2017.06.06, 17:05:09 »
@smok.wawelski: Spóźnione, ale szczere BRAWO! W tak szybkim tempie bardzo przyjemna produkcja! Super!

@dox: niesamowite, że można zrobić coś fajnego w tak małej liczbie bajtów :)
ZX80|ZX81+16kB+PandAY|ZX 48k/+/128k+/+2/+2A/+3/Vega/Next|QL+QIDE|JS128|Timex 2048+2040|UK2086|FDD3000+3.5''|AY|ZX HD|Divide2k11/2k14|DivMMC/PicoDivSD|BetaDisk 128|Opus|Masakrator FM|If 1/2/Microdrv|Multiface 1|+2A\B SDI-1|SJS 1/2|ZX Printer|TZXDuino|+3 HxC USB|ZXUno|Omni
Z88|A500/600|PC200|Ent128

Dalthon

  • ****
  • Wiadomości: 428
  • Miejsce pobytu:
    TriCity
Odp: Wyzwanie dla programistów #4
« Odpowiedź #104 dnia: 2017.06.06, 18:49:27 »
Hmm nie chcę wychodzić przed szereg ale coś widzę, że będzie ciekawy temat na Wyzwanie dla programistów #5 ;)
pracuję nad połączeniem LZW (http://teleinfo.pb.edu.pl/krashan/files/syst_mult_wyklad_2.pdf) z bitowym przypisaniu słów/ciągów ze słownika - jak skończę, wrzucę swoje wypociny :)
ZX Spectrum +2 Grey | Just Speccy 128 | ZX Spectrum Next | ZX-Uno 2MB |  Murmulator | Amstrad 6128 | MSX2 Philips VG-8235 | Commodore 64 | Commodore +4 | Atari 520 STF | Amiga 1200