結果
| 問題 |
No.24 数当てゲーム
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2019-01-03 14:16:10 |
| 言語 | Kotlin (2.1.0) |
| 結果 |
AC
|
| 実行時間 | 362 ms / 5,000 ms |
| コード長 | 2,678 bytes |
| コンパイル時間 | 16,150 ms |
| コンパイル使用メモリ | 449,748 KB |
| 実行使用メモリ | 57,124 KB |
| 最終ジャッジ日時 | 2024-11-20 17:20:35 |
| 合計ジャッジ時間 | 17,876 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 10 |
コンパイルメッセージ
Main.kt:35:10: warning: parameter 'args' is never used
fun main(args: Array<String>) {
^
ソースコード
// No.24 数当てゲーム
// https://yukicoder.me/problems/no/24
package no01.yukicoder.no24
/** インプットデータ */
data class InputData(
/** ターン数 */
val turn: Int,
/** 質問と回答 */
val qaList: List<QA>
)
/** 質問と回答 */
data class QA(
/** 質問 */
val question: List<Int>,
/** 回答 */
val answer: YesNo
)
/** 正誤 */
enum class YesNo {
/** 不明 */
Unknown,
/** 正解 */
Yes,
/** 不正解 */
No
}
/**
* エントリポイント
*/
fun main(args: Array<String>) {
val input = getStandardInput()
println(numbersGame(input))
}
/**
* 数あてゲームの回答を返します。
*/
fun numbersGame(input: List<String>): Int {
val data = createInputData(input)
// YesNo型の配列を10個作る。初期値はUnknown
val arrayYesNo = Array(10) { YesNo.Unknown }
for (v in data.qaList) {
if (v.answer == YesNo.No) {
for (q in v.question) {
arrayYesNo[q] = YesNo.No
}
}
if (v.answer == YesNo.Yes) {
for ((i, num) in arrayYesNo.withIndex()) {
// UnknownとYes以外はすべてNo
if ((num == YesNo.Unknown || num == YesNo.Yes) && v.question.any { it == i }) {
arrayYesNo[i] = YesNo.Yes
} else {
arrayYesNo[i] = YesNo.No
}
}
}
}
// 結果を探す
for ((i, num) in arrayYesNo.withIndex()) {
if (num == YesNo.Yes) {
return i
}
}
for ((i, num) in arrayYesNo.withIndex()) {
if (num == YesNo.Unknown) {
return i
}
}
// ここには来ないはず
return 0
}
/**
* 標準入力から取得した文字列をInputDataに変換して返します。
*/
fun createInputData(input: List<String>): InputData {
val turn = input[0].toInt()
val qaList = mutableListOf<QA>()
for ((i, v) in input.withIndex()) {
if (i == 0) {
continue
}
val sp = v.split(" ")
val qList = sp.take(sp.size - 1).map { it.toInt() }
val a = if (sp[sp.size - 1] == "YES") {
YesNo.Yes
} else {
YesNo.No
}
val qa = QA(qList, a)
qaList.add(qa)
}
return InputData(turn, qaList)
}
/**
* 標準入力から文字列を全て取得します。
*/
fun getStandardInput(): List<String> {
val lines = mutableListOf<String>()
var line: String?
line = readLine()
while (line != null) {
lines.add(line)
line = readLine()
}
return lines
}