Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

208
Vistas
Cómo generar todas las permutaciones de 1 y 0 bits de un tamaño determinado en Swift

Me gustaría poder generar una matriz de todas las permutaciones posibles de un Bool ( true/false o 1/0 ) de un tamaño dado n , en Swift. Por ejemplo, dado n=2 , el resultado de llamar a generate(2) sería

 let array: [Bool] = generate(2) // [[false, false], [false, true], [true, false], [true, true]]

Busqué en Swift-algorithms pero todo lo que veo son permutaciones y combinaciones de una matriz de elementos proporcionada. Estos algoritmos no parecen abordar el escenario de un Bool con n>2 . Además, no estoy seguro de qué nombre llamar a este algoritmo.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Aquí hay una implementación recursiva simple:

 import Foundation func recursion(depth: Int, arr: [[Bool]]) -> [[Bool]] { if depth == .zero { return arr } var newArr: [[Bool]] = [] for item in arr { let newItem1 = item + [false] let newItem2 = item + [true] newArr += [newItem1, newItem2] } return recursion(depth: depth-1, arr: newArr) } print(recursion(depth: 1, arr: [[]])) print(recursion(depth: 2, arr: [[]])) print(recursion(depth: 3, arr: [[]]))

Esto da la salida:

 [[false], [true]] [[false, false], [false, true], [true, false], [true, true]] [[false, false, false], [false, false, true], [false, true, false], [false, true, true], [true, false, false], [true, false, true], [true, true, false], [true, true, true]]
over 4 years ago · Santiago Trujillo Denunciar

0

Solo por diversión, un enfoque funcional:

 extension RangeReplaceableCollection { var combinations: [Self] { generate(2) } func generate(_ n: Int) -> [Self] { repeatElement(self, count: n).reduce([.init()]) { result, element in result.flatMap { elements in element.map { elements + CollectionOfOne($0) } } } } }

Uso:

 let elements = [false, true] // [false, true] let combinations = elements.combinations // [[false, false], [false, true], [true, false], [true, true]] let generateThree = elements.generate(3) // [[false, false, false], [false, false, true], [false, true, false], [false, true, true], [true, false, false], [true, false, true], [true, true, false], [true, true, true]]

o

 let elements = [0, 1] // [0, 1] let combinations = elements.combinations // [[0, 0], [0, 1], [1, 0], [1, 1]] let generateThree = elements.generate(3) // [0, 0, 0], [0, 0, 1], [0, 1, 0], [0, 1, 1], [1, 0, 0], [1, 0, 1], [1, 1, 0], [1, 1, 1]]

o con cadenas (colección de caracteres):

 let elements = "01" // "01" let combinations = elements.combinations // ["00", "01", "10", "11"] let generateThree = elements.generate(3) // ["000", "001", "010", "011", "100", "101", "110", "111"]
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda