Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

216
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda