46 lines
1.5 KiB
Kotlin
Vendored
46 lines
1.5 KiB
Kotlin
Vendored
import java.time.LocalDateTime
|
|
import java.time.format.DateTimeFormatter
|
|
import java.time.temporal.ChronoUnit
|
|
import java.time.temporal.Temporal
|
|
import org.jetbrains.kotlinx.dataframe.*
|
|
import org.jetbrains.kotlinx.dataframe.annotations.*
|
|
import org.jetbrains.kotlinx.dataframe.api.*
|
|
import org.jetbrains.kotlinx.dataframe.io.*
|
|
|
|
fun <T, V : Temporal> DataRow<T>.diff(unit: ChronoUnit, expression: RowExpression<T, V>): Long? = prev()?.let { p -> unit.between(expression(p, p), expression(this, this)) }
|
|
|
|
/**
|
|
char,level,race,charclass,zone,guild,timestamp
|
|
59425,1,Orc,Rogue,Orgrimmar,165,01/01/08 00:02:04
|
|
65494,9,Orc,Hunter,Durotar,-1,01/01/08 00:02:04
|
|
*/
|
|
@DataSchema
|
|
interface ActivePlayer {
|
|
val char: Int
|
|
val level: Int
|
|
val race: String
|
|
val charclass: String
|
|
val zone: String
|
|
val guild: Int
|
|
val timestamp: String
|
|
}
|
|
|
|
fun box(): String {
|
|
val df = @DisableInterpretation DataFrame.readDelimStr("""
|
|
char,level,race,charclass,zone,guild,timestamp
|
|
59425,1,Orc,Rogue,Orgrimmar,165,01/01/08 00:02:04
|
|
65494,9,Orc,Hunter,Durotar,-1,01/01/08 00:02:04
|
|
""".trimIndent())
|
|
val df1 = df.cast<ActivePlayer>()
|
|
|
|
val format = DateTimeFormatter.ofPattern("MM/dd/yy HH:mm:ss")
|
|
val df2 = df1
|
|
.convert { timestamp }.with { LocalDateTime.parse(it, format) }
|
|
.sortBy { char and timestamp }
|
|
.add("tsDiff") { diff(ChronoUnit.MINUTES) { timestamp }?.let { it > 20 } ?: true }
|
|
.add("charDiff") { diffOrNull { char }?.let { it != 0 } ?: true }
|
|
|
|
df2.print()
|
|
return "OK"
|
|
}
|