import Foundation protocol MItemsCount { var itemsCount: Int { get } } func memorySide() -> CGFloat { return 50 } func memorySpace() -> CGFloat { return 20 } func memoryGap() -> CGFloat { return memorySide() + memorySpace() } func memoryItemPositions(M: MItemsCount) -> [(CGFloat, CGFloat)] { var pos = [(CGFloat, CGFloat)]() for i in stride(from: 0, to: M.itemsCount, by: 1) { let row = floor(Double(i) / 4) let x = memoryGap() + (Double(i) - row * 4) * memoryGap() let y = memoryGap() + row * memoryGap() pos.append((x, y)) } return pos }