結果
| 問題 |
No.701 ひとりしりとり
|
| コンテスト | |
| ユーザー |
tak
|
| 提出日時 | 2018-06-16 08:52:22 |
| 言語 | F# (F# 4.0) |
| 結果 |
AC
|
| 実行時間 | 482 ms / 2,000 ms |
| コード長 | 1,471 bytes |
| コンパイル時間 | 14,491 ms |
| コンパイル使用メモリ | 206,896 KB |
| 実行使用メモリ | 54,272 KB |
| 最終ジャッジ日時 | 2024-06-30 16:08:06 |
| 合計ジャッジ時間 | 11,073 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 12 |
コンパイルメッセージ
復元対象のプロジェクトを決定しています... /home/judge/data/code/main.fsproj を復元しました (357 ms)。 MSBuild のバージョン 17.9.6+a4ecab324 (.NET) main -> /home/judge/data/code/bin/Release/net8.0/main.dll main -> /home/judge/data/code/bin/Release/net8.0/publish/
ソースコード
let genSafeWord =
let rec num2alp num =
match num with
| 0 -> ""
| num ->
let alpSize = ('z' |> int) - ('a' |> int)
let alpOffset = ('a' |> int) - 1
let n =
match num%alpSize with
| 0 -> alpSize
| n -> n
let s = (n + alpOffset) |> char |> string
match n with
| x when x = num -> s
| x -> num2alp((num - n) / alpSize) + s
let cnt=ref 1
let genWord startCharacter =
let newWord = startCharacter + (num2alp cnt.Value)
incr cnt
newWord
(fun (preWord:string) ->
let preLastCharacter = preWord.ToCharArray() |> Array.last |> string
let newWord = genWord preLastCharacter
match newWord.ToCharArray()|> Array.last |> string with
| "n" -> genWord preLastCharacter
| _ -> newWord)
let genOutWord (preWord:string) =
let preLastCharacter = preWord.ToCharArray() |> Array.last |> string
preLastCharacter + "n"
let n = stdin.ReadLine() |> int
Seq.unfold(fun (word,cnt)->
match cnt = (n-1) with
| true ->
let nextWord = genOutWord word
Some(word, (nextWord, cnt + 1))
| _ ->
let nextWord = genSafeWord word
Some(word, (nextWord, cnt + 1))) ("a", 0)
|> Seq.skip 1
|> Seq.take n
|> Seq.iter(printfn "%s")
tak