Advertisement
Guest User

Untitled

a guest
Jan 23rd, 2018
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.40 KB | None | 0 0
  1. // Power Set
  2. import Foundation
  3.  
  4. infix operator >>>> : BitwiseShiftPrecedence
  5.  
  6. extension Int {
  7.  
  8. var binaryString: String {
  9. return convertToBinaryString(size: Int.bitWidth)
  10. }
  11.  
  12. func convertToBinaryString(size: Int) -> String {
  13. let mask = 0b1 << (size - 1)
  14. let signBit = ( mask & self ) != 0 ? "1" : "0"
  15. let number = ~mask & self
  16. let binaryForm = String(number, radix: 2)
  17. return signBit + String(repeatElement("0", count: size - binaryForm.count - 1)) + binaryForm
  18. }
  19.  
  20. static func >>>> (lhs: Int, rhs: Int) -> Int {
  21. let mask = ~( ~0 << (Int.bitWidth - rhs))
  22. return ( lhs >> rhs ) & mask
  23. }
  24. }
  25.  
  26. func calculate(mask: Int, start: Int, end: Int) {
  27.  
  28. for i in start..<end {
  29. let val = 1 << i
  30. let result = (val | mask)
  31. let newStart = start - 1
  32. if newStart >= 0 {
  33. let newMask = result & ~(1 << newStart)
  34. calculate(mask: newMask, start: newStart, end: i)
  35. } else {
  36. print(result.binaryString)
  37. }
  38. }
  39. }
  40.  
  41. func calculate(n: Int, size: Int) {
  42. if size > Int.bitWidth {
  43. return
  44. }
  45. if n == 0 {
  46. print(0.binaryString)
  47. return
  48. }
  49. let start = n - 1
  50. let mask = (1 << start) - 1
  51. let end = size
  52. calculate(mask: mask, start: start, end: end)
  53.  
  54. }
  55.  
  56. calculate(n: 2, size: 3)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement