У вас в основном есть весь необходимый механизм - вам просто нужно его развернуть. Две части, которые вам не хватает, - это сбор букв при перемещении по матрице и обновление текущей позиции с помощью функции обновления:
grelha1 = [
"PIGATOS",
"ANRBKFD",
"TMCAOXA",
"OOBBYQU",
"MACOUIV",
"EEJMIWL"
]
def proxima_pos(pos, dire):
""" sums position and direction, eg. >>> proxima_pos((1, 2), (1, 0)) >>> (2, 2) """
return pos[0] + dire[0], pos[1] + dire[1]
def dimensions_grelha(grelha):
""" gives the dimension of line and column of grelha """
return len(grelha), len(grelha[0])
def gera_cadeia_fila(grelha, pos_start, dire):
letters = ""
dimension_max_line, dimension_max_column = dimensions_grelha(grelha)
position_line, position_column = pos_start
while position_line < dimension_max_line and position_column < dimension_max_column:
letters += grelha1[position_line][position_column]
position_line, position_column = proxima_pos((position_line, position_column), dire)
return letters
print(gera_cadeia_fila(grelha1, (1, 0), (0, 1))) # ’ANRBKFD’
print(gera_cadeia_fila(grelha1, (0, 5), (1, 0))) # ’OFXQIW’
print(gera_cadeia_fila(grelha1, (2, 0), (1, 1))) # ’TOCM’
Чтобы вы знали:
У меня был один проект с разными целями для разных платформ. Но я не включил фреймворк, от которого завис, в сами цели, а добавил их в настройки сборки Other Linker Flags :
-framework Foundation -framework Security
Вы можете проверить это в своем проекте ] github .
Вероятно, самое легкое (с точки зрения того, что необходимо сделать) способом сделать его являются два проекта (который можно обернуть как подпроекты фиктивного проекта зонтика, если Вам нравится), которые используют те же наборы источников — одно предназначение Mac OS X, другая iPhone OS.
С другой стороны, разве Вы не можете создать две отдельных цели в рамках того же проекта и изменить “Основу SDK” от вкладки “Build” окна “Get Info” для каждого? У меня нет XCode передо мной для проверки, но я думаю, что он позволит Вам сделать это.
(Конечно, с любым подходом, можно добавить третью цель: статическая библиотека для средства моделирования, которое будет полезно при тестировании!)
Разве Вы не можете использовать идиому PIMPL? И/или общий заголовок для обоих имеет, но использует различный файл реализации на основе целевой архитектуры или SDK?
На самом деле все не так уж и плохо. Просто создайте вторую цель соответствующего типа и затем измените параметр сборки «Базовый SDK». Затем обязательно добавьте все необходимые файлы. Если вы хотите создать и то и другое одновременно, создайте совокупную цель. Практический пример см. В моем проекте SSPromise .