Thanks for using Compiler Explorer
Sponsors
Jakt
C++
Ada
Analysis
Android Java
Android Kotlin
Assembly
C
C3
Carbon
C++ (Circle)
CIRCT
Clean
CMake
CMakeScript
COBOL
C++ for OpenCL
MLIR
Cppx
Cppx-Blue
Cppx-Gold
Cpp2-cppfront
Crystal
C#
CUDA C++
D
Dart
Elixir
Erlang
Fortran
F#
Go
Haskell
HLSL
Hook
Hylo
ispc
Java
Julia
Kotlin
LLVM IR
LLVM MIR
Modula-2
Nim
Objective-C
Objective-C++
OCaml
OpenCL C
Pascal
Pony
Python
Racket
Ruby
Rust
Snowball
Scala
Solidity
Spice
Swift
LLVM TableGen
Toit
TypeScript Native
V
Vala
Visual Basic
Zig
Javascript
GIMPLE
swift source #1
Output
Compile to binary object
Link to binary
Execute the code
Intel asm syntax
Demangle identifiers
Verbose demangling
Filters
Unused labels
Library functions
Directives
Comments
Horizontal whitespace
Debug intrinsics
Compiler
x86-64 swiftc 3.1.1
x86-64 swiftc 4.0.2
x86-64 swiftc 4.0.3
x86-64 swiftc 4.1
x86-64 swiftc 4.1.1
x86-64 swiftc 4.1.2
x86-64 swiftc 4.2
x86-64 swiftc 5.0
x86-64 swiftc 5.1
x86-64 swiftc 5.10
x86-64 swiftc 5.2
x86-64 swiftc 5.3
x86-64 swiftc 5.4
x86-64 swiftc 5.5
x86-64 swiftc 5.6
x86-64 swiftc 5.7
x86-64 swiftc 5.8
x86-64 swiftc 5.9
x86-64 swiftc nightly
Options
Source code
import Foundation extension String { static var random: String { UUID().uuidString } } enum Education: String, CaseIterable, Codable { case no case primary case secondary case university case phd static var random: Self { Education.allCases.randomElement()! } } struct Address: Hashable, Codable { var firstLine: String var secondLine: String var thirdLine: String var postcode: String var county: String var country: String static func == (a: Address, b: Address) -> Bool { a.firstLine == b.firstLine && a.secondLine == b.secondLine && a.thirdLine == b.thirdLine && a.postcode == b.postcode && a.county == b.county && a.county == b.county } func hash(into hasher: inout Hasher) { hasher.combine(firstLine) hasher.combine(secondLine) hasher.combine(thirdLine) hasher.combine(postcode) hasher.combine(county) hasher.combine(country) } init(firstLine: String, secondLine: String, thirdLine: String, postcode: String, county: String, country: String) { self.firstLine = firstLine self.secondLine = secondLine self.thirdLine = thirdLine self.postcode = postcode self.county = county self.country = country } static var random: Address { Address( firstLine: .random, secondLine: .random, thirdLine: .random, postcode: .random, county: .random, country: .random ) } var string: String { firstLine + secondLine + thirdLine + county + country } } struct School: Hashable, Codable { static func == (a: School, b: School) -> Bool { a.name == b.name && a.address == b.address && a.rank == b.rank && a.students == b.students && a.teachers == b.teachers } func hash(into hasher: inout Hasher) { hasher.combine(name) hasher.combine(address) hasher.combine(rank) hasher.combine(students) hasher.combine(teachers) } init(name: String, address: Address, rank: Int, students: Int, teachers: Int) { self.name = name self.address = address self.rank = rank self.students = students self.teachers = teachers } var name: String var address: Address var rank: Int var students: Int var teachers: Int static var random: School { School( name: .random, address: .random, rank: Int.random(in: 0 ..< 100), students: Int.random(in: 1 ..< 10000), teachers: Int.random(in: 1 ..< 300) ) } } struct Employment: Equatable, Codable { static func == (a: Employment, b: Employment) -> Bool { a.name == b.name && a.address == b.address && a.glassdoorRating == b.glassdoorRating && a.numEmployees == b.numEmployees } init(name: String, address: Address, glassdoorRating: Double?, numEmployees: Int) { self.name = name self.address = address self.glassdoorRating = glassdoorRating self.numEmployees = numEmployees } var name: String var address: Address var glassdoorRating: Double? var numEmployees: Int static var random: Employment { Employment( name: .random, address: .random, glassdoorRating: Double((10 ... 50).randomElement()!) / 10, numEmployees: (1 ..< 1000).randomElement()! ) } } struct Person: Equatable, Codable { static func == (a: Person, b: Person) -> Bool { a.name == b.name && a.surname == b.surname && a.age == b.age && a.education == b.education && a.schools == b.schools && a.employments == b.employments && a.hobbies == b.hobbies } init(name: String, surname: String, age: Int, education: Education, schools: [School], employments: [Employment], hobbies: [String]) { self.name = name self.surname = surname self.age = age self.education = education self.schools = schools self.employments = employments self.hobbies = hobbies } var name: String var surname: String var age: Int var education: Education var schools: [School] var employments: [Employment] var hobbies: [String] static var random: Person { let numSchools = Int.random(in: 0 ..< 4) let numEmployments = Int.random(in: 0 ..< 4) let numHobbies = Int.random(in: 0 ..< 4) return Person( name: .random, surname: .random, age: Int.random(in: 0 ..< 100), education: Education.random, schools: (0 ..< numSchools).map { _ in School.random }, employments: (0 ..< numEmployments).map { _ in Employment.random }, hobbies: (0 ..< numHobbies).map { _ in String.random } ) } } struct TeamMembers { init(admins: [Person], members: [Person], noobs: [Person]) { self.admins = admins self.members = members self.noobs = noobs } let admins: [Person] let members: [Person] let noobs: [Person] } func generate() -> TeamMembers { TeamMembers( admins: (1 ..< 100).map { _ in Person.random }, members: (1 ..< 100).map { _ in Person.random }, noobs: (1 ..< 100).map { _ in Person.random } ) } func traverse(_ members: TeamMembers) -> String { traverseInternal(members.admins) + traverseInternal(members.members) + traverseInternal(members.noobs) } func traverseInternal(_ members: [Person]) -> String { let memStrs = members.map { (person: Person) -> String in let hb = person.hobbies.joined(separator: ", ") let emp = person.employments.reduce("") { r, e in r + String(e.glassdoorRating ?? 0) + e.address.string + String(e.numEmployees) + e.name } var schoolSet: Set<School> = [] for school in person.schools { if school.teachers > 100 { schoolSet.insert(school) } } let sc = Array(schoolSet).map { $0.name }.joined(separator: "; ") return person.name + person.surname + String(person.age) + person.education.rawValue + sc + emp + hb } return memStrs.joined(separator: ".") } let members = generate() let s = traverse(members) print(s)
Become a Patron
Sponsor on GitHub
Donate via PayPal
Source on GitHub
Mailing list
Installed libraries
Wiki
Report an issue
How it works
Contact the author
CE on Mastodon
About the author
Statistics
Changelog
Version tree