telefónico telefono telefonicos prefijos prefijo paises méxico llamar interior fijo desde como codigos codigo celular característica caracteristica buenos argentina aires swift swift3

swift - telefono - méxico prefijo telefónico



¿Cuál es el código más corto para obtener las coordenadas circundantes? (2)

Bueno, siempre puedes codificarlo. Aquí, codifiqué los deltas y creo una nueva Position para cada delta:

var surroundingPositionsHardcoded: [Position] { let deltas: [(Int, Int)] = [(-1, -1), (-1, 0), (-1, +1), (0, -1), (0, +1), (+1, -1), (+1, 0), (+1, +1)] return deltas.map { Position(x: x+$0.0, y: y+$0.1) } }

O bien, puede calcular los deltas usando el map . Esto tiene el beneficio adicional de que puede aumentar la distancia circundante.

var surroundingPositionsComputed: [Position] { let deltas = (-1...1).map { dx in (-1...1).map { dy in (dx, dy) } } .joined() .filter { $0.0 != 0 || $0.1 != 0 } return deltas.map { Position(x: x+$0.0, y: y+$0.1) } }

No me gusta la siguiente implementación de las posiciones surroundingPositions para obtener las coordenadas xey en torno a una posición específica, porque en mi opinión es demasiado larga para la intención simple y tiene una estructura piramidal de fatalidad.

struct Position: CustomStringConvertible { let x, y: Int var surroundingPositions: [Position] { var surroundingPositions: [Position] = [] for x in (self.x - 1)...(self.x + 1) { for y in (self.y - 1)...(self.y + 1) { if !(x == self.x && y == self.y) { surroundingPositions.append(Position(x: x, y: y)) } } } return surroundingPositions } var description: String { return "(/(x),/(y))" } }

Uso:

let testPosition = Position(x: 1, y: 1) print(testPosition.surroundingPositions) // Output: [(0,0), (0,1), (0,2), (1,0), (1,2), (2,0), (2,1), (2,2)]

¿Cuál es la forma más corta de implementar esto con el mismo resultado (correcto)? Estoy pensando en funciones como map , filter , reduce , etc., pero no puedo encontrar la combinación correcta hasta el momento ...


Como solo busca las posiciones vecinas y aparentemente no tiene ninguna restricción sobre x o y , puede guardar una matriz de (x, y) traducciones que cada una asigna una Position dada a una de sus 8 vecinas diferentes.

struct Position: CustomStringConvertible { let x, y: Int // order of resulting neighbouring positions, given a position P // (1) (2) (3) // (4) (P) (5) // (6) (7) (8) private static let surroundingPositionsTranslations: [(x: Int, y: Int)] = [ (-1, -1), (0, -1), (1, -1), (-1, 0), (1, 0), (-1, -1), (0, -1), (1, -1)] var surroundingPositions: [Position] { return Position.surroundingPositionsTranslations .map { Position(x: x + $0.x, y: y + $0.y) } } var description: String { return "(/(x),/(y))" } } // Note that I''ve changed the order w.r.t. OP:s original code // (modify the transfotmation above to modify the order) let testPosition = Position(x: 1, y: 1) print(testPosition.surroundingPositions) // Output: [(0,0), (1,0), (2,0), (0,1), (2,1), (0,0), (1,0), (2,0)]