import Foundation
// ------------------------------------------------------------
// Date struct for proper date handling
// ------------------------------------------------------------
struct DateStruct {
let year: Int
let month: Int
let day: Int
}
// ------------------------------------------------------------
// Print a date in YYYY-MM-DD format
// ------------------------------------------------------------
func formatDate(_ d: DateStruct) -> String {
String(format: "%04d-%02d-%02d", d.year, d.month, d.day)
}
// ------------------------------------------------------------
// File entry struct
// ------------------------------------------------------------
struct FileEntry {
let name: String // File name without extension
let extensionName: String // Extension including dot
let date: DateStruct // Real date struct
let size: Int // Bytes
}
// ------------------------------------------------------------
// Sort by name (lexicographically)
// ------------------------------------------------------------
func sortByName(_ files: [FileEntry]) -> [FileEntry] {
files.sorted { $0.name < $1.name }
}
// ------------------------------------------------------------
// Sort by extension (lexicographically)
// ------------------------------------------------------------
func sortByExtension(_ files: [FileEntry]) -> [FileEntry] {
files.sorted { $0.extensionName < $1.extensionName }
}
// ------------------------------------------------------------
// Sort by date (year → month → day)
// ------------------------------------------------------------
func sortByDate(_ files: [FileEntry]) -> [FileEntry] {
files.sorted {
($0.date.year, $0.date.month, $0.date.day) <
($1.date.year, $1.date.month, $1.date.day)
}
}
// ------------------------------------------------------------
// Sort by size (ascending)
// ------------------------------------------------------------
func sortBySize(_ files: [FileEntry]) -> [FileEntry] {
files.sorted { $0.size < $1.size }
}
// ------------------------------------------------------------
// Print file list
// ------------------------------------------------------------
func printFiles(_ files: [FileEntry]) {
for f in files {
print("\(f.name)\(f.extensionName) \(formatDate(f.date)) \(f.size) bytes")
}
print()
}
// ------------------------------------------------------------
// Main program
// ------------------------------------------------------------
let files: [FileEntry] = [
FileEntry(name: "G1zTo5jJk", extensionName: ".jpg", date: DateStruct(year: 2007, month: 7, day: 8), size: 51954),
FileEntry(name: "LTEE4SI0j", extensionName: ".jpg", date: DateStruct(year: 2011, month: 11, day: 13), size: 43442),
FileEntry(name: "PDqmuO3GH", extensionName: ".cpp", date: DateStruct(year: 2004, month: 5, day: 21), size: 3346),
FileEntry(name: "qJO2qjukZ", extensionName: ".png", date: DateStruct(year: 2010, month: 8, day: 27), size: 67087),
FileEntry(name: "HqclTqxb4", extensionName: ".cpp", date: DateStruct(year: 2020, month: 9, day: 5), size: 70531),
FileEntry(name: "imVyTyoaF", extensionName: ".jpg", date: DateStruct(year: 2011, month: 3, day: 19), size: 43846),
FileEntry(name: "rXwXdy8XO", extensionName: ".txt", date: DateStruct(year: 2017, month: 10, day: 12), size: 70193),
FileEntry(name: "9Z4fbOBUc", extensionName: ".pdf", date: DateStruct(year: 2004, month: 6, day: 9), size: 1754),
FileEntry(name: "ZHahuu4vS", extensionName: ".txt", date: DateStruct(year: 2003, month: 10, day: 10), size: 65126),
FileEntry(name: "0SnZHh2GT", extensionName: ".png", date: DateStruct(year: 2006, month: 10, day: 18), size: 25890)
]
print("Original:")
printFiles(files)
print("Sorted by name:")
printFiles(sortByName(files))
print("Sorted by extension:")
printFiles(sortByExtension(files))
print("Sorted by date:")
printFiles(sortByDate(files))
print("Sorted by size:")
printFiles(sortBySize(files))
/* Run:
Original:
G1zTo5jJk.jpg 2007-07-08 51954 bytes
LTEE4SI0j.jpg 2011-11-13 43442 bytes
PDqmuO3GH.cpp 2004-05-21 3346 bytes
qJO2qjukZ.png 2010-08-27 67087 bytes
HqclTqxb4.cpp 2020-09-05 70531 bytes
imVyTyoaF.jpg 2011-03-19 43846 bytes
rXwXdy8XO.txt 2017-10-12 70193 bytes
9Z4fbOBUc.pdf 2004-06-09 1754 bytes
ZHahuu4vS.txt 2003-10-10 65126 bytes
0SnZHh2GT.png 2006-10-18 25890 bytes
Sorted by name:
0SnZHh2GT.png 2006-10-18 25890 bytes
9Z4fbOBUc.pdf 2004-06-09 1754 bytes
G1zTo5jJk.jpg 2007-07-08 51954 bytes
HqclTqxb4.cpp 2020-09-05 70531 bytes
LTEE4SI0j.jpg 2011-11-13 43442 bytes
PDqmuO3GH.cpp 2004-05-21 3346 bytes
ZHahuu4vS.txt 2003-10-10 65126 bytes
imVyTyoaF.jpg 2011-03-19 43846 bytes
qJO2qjukZ.png 2010-08-27 67087 bytes
rXwXdy8XO.txt 2017-10-12 70193 bytes
Sorted by extension:
PDqmuO3GH.cpp 2004-05-21 3346 bytes
HqclTqxb4.cpp 2020-09-05 70531 bytes
G1zTo5jJk.jpg 2007-07-08 51954 bytes
LTEE4SI0j.jpg 2011-11-13 43442 bytes
imVyTyoaF.jpg 2011-03-19 43846 bytes
9Z4fbOBUc.pdf 2004-06-09 1754 bytes
qJO2qjukZ.png 2010-08-27 67087 bytes
0SnZHh2GT.png 2006-10-18 25890 bytes
rXwXdy8XO.txt 2017-10-12 70193 bytes
ZHahuu4vS.txt 2003-10-10 65126 bytes
Sorted by date:
ZHahuu4vS.txt 2003-10-10 65126 bytes
PDqmuO3GH.cpp 2004-05-21 3346 bytes
9Z4fbOBUc.pdf 2004-06-09 1754 bytes
0SnZHh2GT.png 2006-10-18 25890 bytes
G1zTo5jJk.jpg 2007-07-08 51954 bytes
qJO2qjukZ.png 2010-08-27 67087 bytes
imVyTyoaF.jpg 2011-03-19 43846 bytes
LTEE4SI0j.jpg 2011-11-13 43442 bytes
rXwXdy8XO.txt 2017-10-12 70193 bytes
HqclTqxb4.cpp 2020-09-05 70531 bytes
Sorted by size:
9Z4fbOBUc.pdf 2004-06-09 1754 bytes
PDqmuO3GH.cpp 2004-05-21 3346 bytes
0SnZHh2GT.png 2006-10-18 25890 bytes
LTEE4SI0j.jpg 2011-11-13 43442 bytes
imVyTyoaF.jpg 2011-03-19 43846 bytes
G1zTo5jJk.jpg 2007-07-08 51954 bytes
ZHahuu4vS.txt 2003-10-10 65126 bytes
qJO2qjukZ.png 2010-08-27 67087 bytes
rXwXdy8XO.txt 2017-10-12 70193 bytes
HqclTqxb4.cpp 2020-09-05 70531 bytes
*/