Last active
August 29, 2015 14:11
-
-
Save kozake/d1b7b8093acd58232d75 to your computer and use it in GitHub Desktop.
Kotlin Advent Calendar 2014 のソース(Main)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package syobochim.kotlin | |
import java.math.BigDecimal | |
import kotlin.math.* | |
inline val String.bd : BigDecimal get() = BigDecimal(this) | |
data class 可能性<T> (val 選択肢 : T, val 確率 : BigDecimal) | |
enum class しょぼちむ { | |
バイトの女の子 | |
ようおっさん | |
二年目女子SE | |
おまえ誰だ | |
まじレッドキング | |
class object { | |
fun とは() : List<可能性<しょぼちむ>> = | |
listOf( | |
可能性(バイトの女の子, "0.6".bd ), | |
可能性(ようおっさん, "0.2".bd ), | |
可能性(二年目女子SE, "0.1".bd ), | |
可能性(おまえ誰だ, "0.09".bd ), | |
可能性(まじレッドキング, "0.01".bd ) | |
) | |
} | |
} | |
enum class 支払い { | |
おごるよ | |
ごちになります | |
割り勘 | |
class object { | |
fun どうする(しょぼちむの正体: 可能性<しょぼちむ>) : List<可能性<支払い>> { | |
val (選択肢, 確率) = しょぼちむの正体 | |
return when(選択肢) { | |
しょぼちむ.バイトの女の子 -> | |
// かわいい!! | |
listOf( | |
可能性(おごるよ, "0.9".bd * 確率), | |
可能性(割り勘, "0.1".bd * 確率) | |
) | |
しょぼちむ.ようおっさん -> | |
// おっさん乙 | |
listOf( | |
可能性(ごちになります, "0.9".bd * 確率), | |
可能性(おごるよ, "0.1".bd * 確率) | |
) | |
しょぼちむ.二年目女子SE -> | |
// 若い!! | |
listOf( | |
可能性(おごるよ, "0.7".bd * 確率), | |
可能性(割り勘, "0.3".bd * 確率) | |
) | |
しょぼちむ.まじレッドキング -> | |
// おごるどうこうの問題ではない | |
listOf() | |
else -> | |
// お前誰だ? | |
listOf(可能性(割り勘, "1.0".bd * 確率)) | |
} | |
} | |
} | |
} | |
enum class おこづかい(val value : String) { | |
金欠 : おこづかい("金欠だ~ヽ(;▽;)ノ") | |
金ならあるんだ : おこづかい("金ならあるんだ!!(((o(*゚▽゚*)o)))") | |
override fun toString() : String { | |
return value | |
} | |
class object { | |
fun のこるの(おごり: 可能性<支払い>) : List<可能性<おこづかい>> { | |
val (選択肢, 確率) = おごり | |
return when(選択肢) { | |
支払い.おごるよ -> | |
listOf( | |
可能性(金欠, "0.9".bd * 確率), | |
可能性(金ならあるんだ, "0.1".bd * 確率) | |
) | |
支払い.ごちになります -> | |
listOf( | |
可能性(金欠, "0.1".bd * 確率), | |
可能性(金ならあるんだ, "0.9".bd * 確率) | |
) | |
支払い.割り勘 -> | |
listOf( | |
可能性(金欠, "0.7".bd * 確率), | |
可能性(金ならあるんだ, "0.3".bd * 確率) | |
) | |
else -> listOf(可能性(金欠, "1.0".bd * 確率)) | |
} | |
} | |
} | |
} | |
fun main(args: Array<String>) { | |
val l = しょぼちむ.とは() | |
.flatMap { 正体 -> 支払い.どうする(正体) } | |
.flatMap { おごり -> おこづかい.のこるの(おごり) } | |
.groupBy { t -> t.選択肢 } | |
.map { e -> | |
e.key to (e.value.fold ( BigDecimal.ZERO, { (a, n) -> a + n.確率 } )) } | |
println(l) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment