Problem #213
Tags:
assembly
challenge
games
c-1
c-0
special
This task has a Challenge attached.
You may
View Stats
or read a Help on Challenges.
Tento problém bol navrhnutý naším kolegom Andrey 'GlideThestral' - ďakujem veľmi pekne za nápad!_
Bola tu úloha Game of Life. Teraz to poďme implementovať pre Intel-4004 CPU emulátor, v programovacom jazyku assembler. Pred týmto problémom vám odporúčame sa pohrať s úlohami z assembleru a vedieť ako použiť emulátor atď.
Keďže malé CPU má obmedzené množstvo kódu a dátovej pamäte , poďme sa pozrieť na zjednodušenú verziu hry:
8*8
;Na vysvetlenie použijeme klzák
pohybujúci sa po takejto hracej ploche:
- - - - - X - - - - - - - - - - - - - - - - - - - - X X X - - -
- - - - - - X - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - X X X - - - - - - - - X - - - - - - - - - - - - - - - -
- - - - - - - - X - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - X - - - - - X X - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - X - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - X - - - - - - - X - - - -
- - - - - - - - - - - - - - - - - X X X - - - - - - - - X - - -
krok 0 krok 8 krok 20 krok 24
Takáto topológia nám dovoľuje vyhnúť sa kolíziám s okrajmi - t.j. predstierajme, že takáto plocha ja kvázi-nekonečná (aj keď veľké konfigurácie zvyčajne skončia kolíziami so sebou).
Výzva
Cieľom je vytvoriť najrýchlejší program na spracovanie 1
kroku hry Game of Life.
Ako vždy, nekontrolujeme špecifickú odpoveď, ale váš kód v Asm-4004. Bude spustený proti nejakému tajnému
vstupu (rovnaký pre všetkých užívateľov). Nezaberie viac ako 50000
cyklov - a program by nemal prekročiť 256
bajtov.
Nová verzia emulátora dovoľuje výpočet cyklov (sú zobrazené spolu s registrami) - alebo jednoducho zobrazené v
rozhraní nášho online emulátora.
Dvoj-bajtové inštrukcie zaberú dva hodinové cykly. Jedno-bajtové inštrukcie zaberú jeden hodinový cyklus - okrem cyklu fin
ktorý tiež zaberá dva.
Vstup obsahuje 8
riadkov po 8
znakov, každý - buď 0
pre prázdnu bunku alebo 1
pre obsadenú bunku. Riadky
sú oddelené jedným znakom nového riadku (taktiež je tu "trailing newline"). Takže vstup pozostáva z 72
znakov.
Odpoveď by tiež mala dávať rovnaké riadky, ale môžu byť oddelené akýmkoľvek znakom, ktorý preferujete (t.j. newline, bodka, pomlčka).
Príklad:
vstupné dáta:
01000000
10100110
01100111
00111001
00000001
00001000
00001000
01100000
odpoveď:
10000000
10100100
00000000
01111101
00001000
00000000
00010000
01100000