Skip to content

Latest commit

 

History

History
113 lines (84 loc) · 3.07 KB

README.md

File metadata and controls

113 lines (84 loc) · 3.07 KB

Rubik's Cube

The program is a simulation of a puzzle called Rubik's Cube.

The program executes a sequence of commands rotating layers of the cube with dimensions N x N x N. On request it prints the current state of the cube.

Some detailed information about the program in Polish can be found below.

Kostka Rubika

Wprowadzenie

Program jest symulacją łamigłówki zwanej Kostką Rubika.

Program wykonuje ciąg rozkazów obracających warstwy kostki o wymiarach N x N x N. Na życzenie drukuje aktualny stan kostki.

Inną wartość stałej N (domyślnie N = 5) można wybrać podczas kompilacji programu za pomocą opcji -DN=wartość.

Postać danych

Dane programu to ciąg rozkazów obrotu warstw i wydruku aktualnego stanu kostki, zakończony kropką.

Program ignoruje zawartość wejścia po kropce kończącej dane.

Rozkazem wydruku stanu kostki jest koniec wiersza.

Rozkaz obrotu warstw składa się z trzech części, które wskazują:

ścianę kostki,

liczbę warstw,

kąt obrotu.

Ściana jest określona literą:

u - góra (ang. up),

l - lewo (ang. left),

f - przód (ang. front),

r - prawo (ang. right),

b - tył (ang. back),

d - dół (ang. down).

Liczba warstw

puste pole - wskazuje liczbę 1
liczba dodatnia - jest pozycyjnym dziesiętnym zapisem liczby warstw

Kąt

puste pole - wskazuje kąt 90 stopni
apostrof  - to -90 stopni 
cudzysłów - to 180 stopni.

Wykonanie rozkazu obrotu, ze ścianą S, liczbą warstw W i kątem K, powoduje jednoczesne obrócenie W warstw, patrząc od strony ściany S, o kąt K, zgodnie z ruchem wskazówek zegara.

Składnię danych opisuje gramatyka z symbolem początkowym Dane:

Dane → CiągRozkazów Kropka
CiągRozkazów -> ε | Rozkaz CiągRozkazów
Rozkaz → Obrót | Drukowanie
Obrót → Strona LiczbaWarstw Kąt
Drukowanie → KoniecWiersza
Strona → Litera
LiczbaWarstw → Jedna | Wiele
Jedna → ε
Wiele → Liczba
Liczba → Cyfra | Liczba Cyfra
Kąt → Prosty | MinusProsty | Półpełny
Prosty → ε
MinusProsty → Apostrof
Półpełny → Cudzysłów
Litera → u | l | f | r | b | d
Cyfra → 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Apostrof → '
Cudzysłów → "
KoniecWiersza → \n
Kropka → .

Postać wyniku

Wynik programu jest efektem wykonania rozkazów drukowania aktualnego stanu kostki.

Wydruk stanu kostki składa się ze znaków 0, 1, 2, 3, 4, 5, symbolizujących kolory kwadratów na ścianach kostki, oraz ze spacji i kresek pionowych |.

Przyjmujemy, że w ułożonej kostce:

kwadraty ściany górnej mają kolor 0,
kwadraty ściany lewej mają kolor 1,
kwadraty ściany przedniej mają kolor 2,
kwadraty ściany prawej mają kolor 3,
kwadraty ściany tylnej mają kolor 4,
kwadraty ściany dolnej mają kolor 5.

Położenie ścian na wydruku stanu kostki jest zgodne ze schematem:

  u
l|f|r|b
  d

gdzie u, l, f, r, b, d to, odpowiednio, ściana górna, lewa, przednia, prawa, tylna i dolna.

Uwagi

Zakładamy, że dane są poprawne oraz że każdy wiersz danych, także ostatni, jest zakończony reprezentacją końca wiersza \n.