// ------------------------------------------------------------
// Date struct for proper date handling
// ------------------------------------------------------------
data class DateStruct(
val year: Int,
val month: Int,
val day: Int
)
// ------------------------------------------------------------
// Print a date in YYYY-MM-DD format
// ------------------------------------------------------------
fun formatDate(d: DateStruct): String =
"%04d-%02d-%02d".format(d.year, d.month, d.day)
// ------------------------------------------------------------
// File entry struct
// ------------------------------------------------------------
data class FileEntry(
val name: String, // File name without extension
val extension: String, // Extension including dot
val date: DateStruct, // Real date struct
val size: Int // Bytes
)
// ------------------------------------------------------------
// Sort by name (lexicographically)
// ------------------------------------------------------------
fun sortByName(files: List<FileEntry>) =
files.sortedBy { it.name }
// ------------------------------------------------------------
// Sort by extension (lexicographically)
// ------------------------------------------------------------
fun sortByExtension(files: List<FileEntry>) =
files.sortedBy { it.extension }
// ------------------------------------------------------------
// Sort by date (year → month → day)
// ------------------------------------------------------------
fun sortByDate(files: List<FileEntry>) =
files.sortedWith(
compareBy<FileEntry> { it.date.year }
.thenBy { it.date.month }
.thenBy { it.date.day }
)
// ------------------------------------------------------------
// Sort by size (ascending)
// ------------------------------------------------------------
fun sortBySize(files: List<FileEntry>) =
files.sortedBy { it.size }
// ------------------------------------------------------------
// Print file list
// ------------------------------------------------------------
fun printFiles(files: List<FileEntry>) {
for (f in files) {
println("${f.name}${f.extension} ${formatDate(f.date)} ${f.size} bytes")
}
println()
}
// ------------------------------------------------------------
// Main program
// ------------------------------------------------------------
fun main() {
val files = listOf(
FileEntry("G1zTo5jJk", ".jpg", DateStruct(2007,7,8), 51954),
FileEntry("LTEE4SI0j", ".jpg", DateStruct(2011,11,13), 43442),
FileEntry("PDqmuO3GH", ".cpp", DateStruct(2004,5,21), 3346),
FileEntry("qJO2qjukZ", ".png", DateStruct(2010,8,27), 67087),
FileEntry("HqclTqxb4", ".cpp", DateStruct(2020,9,5), 70531),
FileEntry("imVyTyoaF", ".jpg", DateStruct(2011,3,19), 43846),
FileEntry("rXwXdy8XO", ".txt", DateStruct(2017,10,12), 70193),
FileEntry("9Z4fbOBUc", ".pdf", DateStruct(2004,6,9), 1754),
FileEntry("ZHahuu4vS", ".txt", DateStruct(2003,10,10), 65126),
FileEntry("0SnZHh2GT", ".png", DateStruct(2006,10,18), 25890)
)
println("Original:")
printFiles(files)
println("Sorted by name:")
printFiles(sortByName(files))
println("Sorted by extension:")
printFiles(sortByExtension(files))
println("Sorted by date:")
printFiles(sortByDate(files))
println("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
*/