Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- initialize: size
- "metoda instancji"
- next := Array new: size.
- previous := Array new: size.
- value := nil
- new: aSize
- "metoda klasy"
- ^super new initialize: aSize
- shape: intCollection
- | nodes intArray mySize iterator iteratorIdx iteratorUpdater nodesCount node a b c change multipleBy|
- intArray := intCollection asArray.
- mySize := intArray size.
- iterator := Array new: mySize.
- nodesCount := 1.
- 1 to: mySize do: [:idx|
- iterator at: idx put: 1.
- nodesCount := nodesCount * (intArray at: idx)
- ].
- nodes := Array new: nodesCount.
- 1 to: nodesCount do: [:idx |
- nodes at: idx put: (Torus new: mySize ).
- ].
- 1 to: nodesCount do: [:idx |
- node := (nodes at: idx).
- multipleBy := 1.
- 1 to: mySize do: [:i |
- "next"
- a := iterator at: i.
- b := a + 1.
- (b < (intArray at: i)) ifTrue: [
- change := multipleBy.
- c := idx + change.
- ] ifFalse: [
- change := ((iterator at: i) - 1) * multipleBy .
- c := idx - change.
- ].
- (node next) at: i put: (nodes at: c).
- "previous"
- b := a - 1.
- (b > 0) ifTrue: [
- change := multipleBy.
- c := idx - change.
- ] ifFalse: [
- change := ((intArray at: i) - 1) * multipleBy .
- c := idx + change.
- ].
- (node previous) at: i put: (nodes at: c).
- ].
- (idx < nodesCount) ifTrue: [
- iteratorIdx := 1.
- iteratorUpdater := (iterator at: iteratorIdx) + 1.
- [iteratorUpdater > (intArray at: iteratorIdx )] whileTrue: [
- iterator at: iteratorIdx put: 1.
- iteratorIdx := iteratorIdx + 1.
- iteratorUpdater := (iterator at: iteratorIdx) + 1.
- ].
- iterator at: iteratorIdx put: iteratorUpdater.
- ].
- ].
- ^(nodes at: 1).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement