結果
問題 | No.428 小数から逃げる夢 |
ユーザー | nobigomu |
提出日時 | 2018-06-08 13:50:55 |
言語 | Kotlin (1.9.23) |
結果 |
CE
(最新)
AC
(最初)
|
実行時間 | - |
コード長 | 1,683 bytes |
コンパイル時間 | 13,496 ms |
コンパイル使用メモリ | 413,572 KB |
最終ジャッジ日時 | 2024-11-14 20:27:00 |
合計ジャッジ時間 | 14,606 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
コンパイルエラー時のメッセージ・ソースコードは、提出者また管理者しか表示できないようにしております。(リジャッジ後のコンパイルエラーは公開されます)
ただし、clay言語の場合は開発者のデバッグのため、公開されます。
ただし、clay言語の場合は開発者のデバッグのため、公開されます。
コンパイルメッセージ
Main.kt:1:26: error: unresolved reference: experimental import kotlin.coroutines.experimental.buildSequence ^ Main.kt:10:9: error: unresolved reference: buildSequence buildSequence { ^ Main.kt:12:17: error: unresolved reference: yield yield(n * D.slice(i..i).toInt()) ^ Main.kt:15:9: error: unresolved reference: buildSequence buildSequence { ^ Main.kt:16:13: error: unresolved reference: yield yield(0); yieldAll(f(m)) //; yield(0) ^ Main.kt:16:23: error: unresolved reference: yieldAll yield(0); yieldAll(f(m)) //; yield(0) ^ Main.kt:17:15: error: unresolved reference: buildSequence }.zip(buildSequence { ^ Main.kt:18:13: error: unresolved reference: yieldAll yieldAll(f(n)); yield(0) //; yield(0) ^ Main.kt:18:29: error: unresolved reference: yield yieldAll(f(n)); yield(0) //; yield(0) ^ Main.kt:21:9: error: unresolved reference: buildSequence buildSequence { ^ Main.kt:24:17: error: unresolved reference: yield yield(add(e,c)%10); yieldAll(iter(add(e,c)/10, sq.drop(1), add)) ^ Main.kt:24:37: error: unresolved reference: yieldAll yield(add(e,c)%10); yieldAll(iter(add(e,c)/10, sq.drop(1), add)) ^ Main.kt:26:29: error: unresolved reference: yield if (c!=0) { yield(c) } ^
ソースコード
import kotlin.coroutines.experimental.buildSequence val D = "1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991" inline fun add1(e: Int, c: Int): Int = e+c inline fun add2(e: Pair<Int,Int>, c: Int): Int = e.first+e.second+c fun f(s: String): Sequence<Int> { fun f(n: Int): Sequence<Int> = buildSequence { for (i in (D.length-1) downTo 0) yield(n * D.slice(i..i).toInt()) } fun g(m: Int, n: Int): Sequence<Pair<Int,Int>> = buildSequence { yield(0); yieldAll(f(m)) //; yield(0) }.zip(buildSequence { yieldAll(f(n)); yield(0) //; yield(0) }) tailrec fun <T> iter(c: Int, sq: Sequence<T>, add: (T, Int) -> Int): Sequence<Int> = buildSequence { val e = sq.firstOrNull() if (e!=null) { yield(add(e,c)%10); yieldAll(iter(add(e,c)/10, sq.drop(1), add)) } else { if (c!=0) { yield(c) } } } return ( if (s.length==1) iter(0, f(s.toInt()), ::add1) else iter(0, g(s.slice(0..0).toInt(),s.slice(1..1).toInt()), ::add2) ) } fun fmt(s: String) = if (s.length!=D.length) s.slice(0..s.length-D.length-1)+"."+s.slice(s.length-D.length..s.length-1) else "0."+s fun main(args: Array<String>) { val s = readLine()!! println( if (s=="100") D.slice(0..1)+"."+D.slice(2..D.length-1) else fmt(f(s).fold("", fun (a,e) = e.toString()+a)) ) }