錆びついた電波塔
電波でデータ通信するプログラムが壊れてしまっており、あなたはそれを直そうとしています。
n回の通信をしたとき、受信した各データ各電波強度 d_i が与えられます。各電波強度 d_i は 1 から 9 の整数で表され、 5 以下では通信に失敗します。
n 回の通信のうち通信に成功した回数を出力してください。
入力される値
d_1 d_2 … d_n
・1 行目に通信回数 n が与えられます。
・2 行目に半角スペース区切りで各電波強度 d_i が与えられます。
・入力は 2 行となり、末尾に改行が 1 つ入ります。
条件
・1 ≦ n ≦ 100
・1 ≦ d_i ≦ 9
・n, d_i はそれぞれ整数
期待する出力
各電波強度 d_i は 1 から 9 の整数で表され、 5 以下では通信に失敗します。 n 回の通信うち通信に成功した回数を出力して下さい。
F#
open System Console.ReadLine() |> ignore Console.ReadLine().Split(' ') |> Array.filter (fun x -> Convert.ToInt32 x > 5) |> Array.length |> Console.WriteLine
荒れ果てたショップ
あなたは今ファイルの管理をしようとしています。
各ファイルは番号で管理されていますが、一目でどの番号かわかるように、番号の左に適当な数の 0 を埋め込んで、番号の長さを固定することにしました。
例えば、番号の長さを 3 で固定したい場合、0 は 000, 4 は 004, 13 は 013, 144 は 144 というようにファイル番号をつけます。
3 つの整数 N, A, B が与えられます。
A 以上 B 以下の数それぞれについて、番号の長さが N にするようなゼロ埋めをするとファイル番号はどのように表示されるかを出力してください。
例えば、入力例 1 を説明する図は以下のようになります。
この例では、9, 10, 11 の 3 つの数を、すべて長さ 3 の番号にするために左に 0 を埋めることを考えます。
・9 は 1 桁の数なので、長さ 3 の番号にするには、2 つの 0 を左から埋める必要があります。
・10, 11 は 2 桁の数なので、長さ 3 の番号にするには、1 つの 0 を左から埋める必要があります。
入力される値
・番号の長さを表す整数 N、表示したい番号の区間を表す整数 A, B がこの順に半角スペース区切りで与えられます。
・入力は 1 行となり、末尾に改行が 1 つ入ります。
条件
・1 ≦ N ≦ 9
・0 ≦ A ≦ B ≦ 5000
・(B の桁数) ≦ N
期待する出力
A 以上 B 以下の各整数 i について、番号の長さが N になるように左側に 0 を埋め込んだものを出力してください。
出力の最後に改行を入れ、余計な文字、空行を含んではいけません。
F#
open System [<EntryPoint>] let main _ = let input = Console.ReadLine().Split(' ') |> Array.map Convert.ToInt32 [input.[1] .. input.[2]] |> List.iter (fun x -> x.ToString().PadLeft(input.[0], '0') |> Console.WriteLine) 0
お金が引き出せない銀行
あなたは残高からお金を引き出すプログラムを作成しています。
残高 n と引き出したい額 w が与えられます。
この時、引き出し額が残高を上回ってマイナスになる場合は “error” と出力し、引き出せる場合は残高を出力するプログラムを作成してください。
入力される値
w
・1 行目に残高 n が与えられます。
・2 行目に引き出したい額 w が与えられます。
・入力は 2 行となり、末尾に改行が 1 つ入ります。
条件
・0 ≦ n ≦ 100,000
・0 ≦ w ≦ 100,000
・n, w は0を含む正の整数
期待する出力
引き出し額が残高を上回ってマイナスになる場合は “error” と出力し、引き出せる場合は残高を出力するプログラムを作成してください。
F#
open System [<EntryPoint>] let main _ = let input _ = Console.ReadLine() |> Convert.ToInt32 match input() - input() with | x when x >= 0 -> x.ToString() | _ -> "error" |>Console.WriteLine 0
アンドロイドの生産工場
ある暗号化された文字列 S が与えられます。
文字列 S のうち奇数文字目を取り出せば解読できることがわかりました。
文字列 S が与えられるので奇数文字目の文字を取り出して解読した文字列を出力してください。
入力される値
・1 行目に暗号化された文字列 S が与えられます。
・入力は 1 行となり、末尾に改行が 1 つ入ります。
条件
・1 ≦ 文字列 S の長さ ≦ 100
・S は半角アルファベットで構成された文字列
期待する出力
文字列 S が与えられるので奇数文字目の文字を取り出して解読した文字列を出力してください。
F#
open System [<EntryPoint>] let main _ = Console.ReadLine().ToCharArray() |> Array.mapi (fun i x -> match i % 2 with | 0 -> x.ToString() | _ -> "") |> Array.reduce (+) |> Console.WriteLine 0
荒れ果てたオフィス
あなたは書類の整理をしています。
書類には 1 から 3 までの重要度 e が設定されています。数字が大きいほど重要な書類とされています。
書類のタイトル文字列 S_i と重要度 e_i が n 件与えられます。
重要度が 3 の書類のタイトルのみを入力された順に出力してください。
入力される値
S_1 e_1
…
S_n e_n
・1 行目は与えられる書類の件数 n が与えられます。
・2 行目から 2 + n 行目に書類のタイトル文字列 S_i と重要度 e_i が与えられます。
・入力は 2 + n 行となり、末尾に改行が 1 つ入ります。
条件
・1 ≦ n ≦ 100
・1 ≦ 文字列 S_i の長さ ≦ 100
・S_i は半角アルファベットで構成された文字列
・e_i は 1, 2, 3 のいずれかの整数
・必ず e_i が 3 の書類は 1 件以上存在する
期待する出力
重要度が 3 の書類のタイトルのみを入力された順に出力してください。
F#
open System [<EntryPoint>] let main _ = let line = Console.ReadLine() |> Convert.ToInt32 let rec input i = match i with i when i > 0 -> match Console.ReadLine().Split(' ') |> List.ofArray with | s::e::_ when e = "3" -> s::input (i - 1) | _ -> input (i - 1) | _ -> [] input line |> List.iter Console.WriteLine 0
荒れ果てた警察署
あなたは 0 から 9 の数字を 3 つ入力すると開く扉を開こうとしています。
鍵の番号は左から 2 つまで判明しています。 3 つ目に関しては以下の法則で決まることがわかりました。
・2 つ目までをすべて足す
・足したものを 10 で割ったときの余り
2 つ目までの数字が与えられるので 3 つ目を計算し出力してください。
入力される値
・1 行目で 2 桁目までの数字がスペース区切りで入力されます。
・入力は 1 行となり、末尾に改行が 1 つ入ります。
条件
・0 ≦ n_1 ≦ 9
・0 ≦ n_2 ≦ 9
期待する出力
3 つある鍵の数字の 3 つ目を以下の法則にしたがって計算し出力してください。
・2 つ目までをすべて足す
・足したものを 10 で割ったときの余り
出力の最後に改行を 1 つ入れ、余計な文字、空行を含んではいけません。
F#
open System [<EntryPoint>] let main _ = Console.ReadLine().Split(' ') |> Array.sumBy Convert.ToInt32 |> (fun x -> x % 10) |> Console.WriteLine 0
学べない学校
学校の子どもたちがじゃんけんをしています。特にA くんと B くんはじゃんけんが大好きで毎日しており、それぞれ「自分のほうが強い」と言い合っています。
そこであなたは二人のじゃんけんの結果を記録し、どちらが強いのか判定するプログラムを作ってあげることにしました。
これからAくんとBくんは N 回じゃんけんをします。
A くんと B くんの出した手が N 回分与えられるので、A くんが勝った回数と B くんが勝った回数を数えるプログラムを作成してください。
じゃんけんの手はグー、チョキ、パーのいずれかで、
グーはチョキに勝ち、チョキはパーに勝ち、パーはグーに勝ちます。
入力では
・グーは “g”
・チョキは “c”
・パーは “p”
で表現されます。
入力例 1 を図示すると以下のようになります。
入力される値
a_1 b_1
a_2 b_2
…
a_N b_N
・1 行目にじゃんけんする回数を示す整数 N が入力されます。
・続く N 行に A くんが出した手を示す文字 a_i (1 ≦ i ≦ N) と B さんが出した手を示す文字 b_i (1 ≦ i ≦ N) が半角スペース区切りで入力されます。
・入力は合計で N + 1 行となり、入力値最終行の末尾に改行が 1 つ入ります。
条件
・1 ≦ N ≦ 1000
・a_i, b_i (1 ≦ i ≦ N) は “g”, “c”, “p” のいずれか
期待する出力
A くんの勝った数、B くんの勝った数を以下のフォーマットで出力してください。
w_b
・期待する出力は 2 行からなります。
・1 行目には A くんが勝った数 w_a を出力してください。
・2 行目には B くんが勝った数 w_b を出力してください。
・最後は改行し、余計な文字、空行を含んではいけません。
F#
open System [<EntryPoint>] let main _ = let rec cal A B = function [] -> [A;B] | a::b::tail when a = b -> cal A B tail | "c"::"p"::tail | "p"::"g"::tail | "g"::"c"::tail -> cal (A + 1) B tail | _::_::tail -> cal A (B + 1) tail | _ -> failwith "fq" [for i in [1 .. Console.ReadLine() |> Convert.ToInt32] do yield! Console.ReadLine().Trim().Split(' ') |> List.ofArray] |> cal 0 0 |> List.iter Console.WriteLine 0
機械の総合病院
PAIZA病院のシステムを解析します。
不正アクセスを試みるクラッカーからユーザーを守るために、ユーザーが設定するパスワードが十分に複雑であるようにしなくてはなりません。
PAIZA病院は、パスワードの複雑さの条件として以下の 3 つを定めました。
・長さが 6 以上
・英字と数字の両方を含む必要がある
・同じ文字を 3 つ以上連続で使用することはできない
なお、英字の大文字と小文字は区別する必要はありません。
パスワードの候補が入力として与えられるので、複雑さの条件をすべて満たす場合は “Valid”、そうでない場合は “Invalid” と出力してください。
例えば、入力例 1 で与えられる 7Caaad9 は 1 つ目の条件と 2 つ目の条件を満たしますが、aaa と 3 つ以上同じ文字が連続で使用されているため、複雑さの条件をすべて満たしません。
入力される値
・パスワードの候補となる文字列 t が与えられます。
・入力は 1 行となり、末尾に改行が 1 つ入ります。
条件
・1 ≦ (t の長さ) ≦ 30
・文字列 t は半角英字あるいは半角数字で構成された文字列
期待する出力
パスワードが複雑さの要件をすべて満たす場合は “Valid”、そうでない場合は “Invalid” と出力してください。
F#
open System open System.Text.RegularExpressions [<EntryPoint>] let main _ = match Console.ReadLine() with | s when s.Length >= 6 && Regex.IsMatch(s,"[A-Za-z]") && Regex.IsMatch(s,"[0-9]") && not <| Regex.IsMatch(s,"(.)\\1{2,}") -> "Valid" | _ -> "Invalid" |> Console.WriteLine 0
隔離された街のゲート
あなたは作りかけのゲームプログラムを発見しましたが、キャラクターの動きの制限する方法が未実装でした。
制作中のゲームは、縦方向に H マスと横方向に W マスだけ広がる格子上のマップを用います。
左下のマスが原点であり、その座標を (0, 0) とします。
原点から横方向に x マス、縦方向に y マス進んだ座標を (x, y) と表記します。
現在の開発段階では障害物などはなく、キャラクターの初期座標が必ず (0, 0) です。
この状態から合計で N 回の上下左右への移動操作が行われます。
各移動操作はキャラクターの座標 (x, y) を以下のように変更します。
・上への移動 : キャラクターの座標を (x, y) から (x, y + 1) へ変更する。
・下への移動 : キャラクターの座標を (x, y) から (x, y – 1) へ変更する。
・左への移動 : キャラクターの座標を (x, y) から (x – 1, y) へ変更する。
・右への移動 : キャラクターの座標を (x, y) から (x + 1, y) へ変更する。
開発依頼書には、N 回の操作中にキャラクターが不正な座標にいることがないか判定するプログラムの作成が指示されています。
ここで不正な座標とは、マップ外の座標、すなわち格子上に存在しない座標すべてのことを指します。
例えば、入力例 1 および入力例 2 は以下のように考えることができます。
入力される値
d_1
…
d_N
・1 行目には、 マップの縦方向のマス数を表す整数 H と、横方向のマス数を表す整数 W および移動操作の回数を表す整数 N がこの順で半角スペース区切りで与えられます。
・続く N 行の i 行目 (1 ≦ i ≦ N) には、 i 回目の移動の方向を表す文字 d_i が与えられます。”U”であれば上、”D”であれば下、”L”であれば左、”R”であれば右への移動に対応します。
・入力は合計で N + 1 行となり、 N + 1 行目の末尾に改行が 1 つ入ります。
条件
・1 ≦ H, W ≦ 50
・1 ≦ N ≦ 500
・各 i (1 ≦ i ≦ N) について d_i は英大文字”U”、”D”、”L”、”R”のいずれか。
期待する出力
N 回の移動操作の中で、キャラクターが不正な座標にいることがある場合は”invalid”を、そうでない場合は”valid”を 1 行に出力してください。
F#
open System [<EntryPoint>] let main _ = let Y::X::n::_ = Console.ReadLine().Trim().Split(' ') |> List.ofArray |> List.map Convert.ToInt32 let rec cal x y = function [] -> "valid" | "U"::tail when y + 1 <= Y -> cal x (y + 1) tail | "R"::tail when x + 1 <= X -> cal (x + 1) y tail | "D"::tail when y - 1 >= 1 -> cal x (y - 1) tail | "L"::tail when x - 1 >= 1 -> cal (x - 1) y tail | _ -> "invalid" [for i in [1 .. n] -> Console.ReadLine().Trim()] |> cal 1 1 |> Console.WriteLine 0
砂漠の公園
昔この公園ではある競技の大会がよく開催されていました。各試合結果の記録が見つかりましたが、どのチームが優勝したかの記録は欠損しています。
そこであなたは各試合結果から優勝チームを調べるプログラムを作成することにしました。
大会は勝ち点方式の総当り戦で行います。勝つと2点、引き分けで1点、負けると0点勝ち点が増えます。
すべての試合が終わったあと、勝ち点が一番多いチームが優勝です。
大会の参加人数と、試合結果が入力されたときに、何番目のチームが勝ち点いくつの何勝何敗何引き分けで優勝したか出力するプログラムを書いてください。
入力例1を図にすると、以下のようになります。
入力される値
c_{1,1}c_{1,2}…c_{1,N}
c_{2,1}c_{2,2}…c_{2,N}
…
c_{N,1}c_{N,2}…c_{N,N}
・1行目に大会参加人数を表す整数 N、
・続く N 行の i (1 ≦ i ≦ N) 行目には、i 番目のチームと j (1 ≦ j ≦ N) 番目のチームの試合結果を表す文字 c_{ i, j } が入力されます。
c_{ i, j } は
・ i 番目のチームが j 番目のチームに勝ったときには “W”
・ i 番目のチームが j 番目のチームと引き分けたときには “D”
・ i 番目のチームが j 番目のチームに負けたときには “L”
・ i = j のときには “-” になります。
・入力は合計で N + 1 行となり、入力値最終行の末尾に改行が1つ入ります。
条件
・2 ≦ N ≦ 100
・1 ≦ i ≦ N
・1 ≦ j ≦ N
・c_{ i, j } は “W”, “D”, “L”, “-” のいずれか
・c_{ i, j } が “W” のとき、c_{ j, i } は “L”
・c_{ i, j } が “D” のとき、c_{ j, i } は “D”
・i = j のとき、c_{ i, i } は “-”
・優勝者は1人(勝ち点の最大値を持つチームは1つだけ)
期待する出力
何番目のチームが優勝したかを表す数字 s、優勝したチームの勝ち点 t、勝った回数 W、引き分けた回数 D、敗けた回数 L をスペース区切りで出力してください。
・期待する出力は 1 行からなります。
・最後は改行し、余計な文字、空行を含んではいけません。
F#
open System [<EntryPoint>] let main _ = let rec cal1 s t w d l = function [] -> [s; t; w; d; l] | 'W'::tail -> cal1 s (t + 2) (w + 1) d l tail | 'D'::tail -> cal1 s (t + 1) w (d + 1) l tail | 'L'::tail -> cal1 s t w d (l + 1) tail | _::tail -> cal1 s t w d l tail let rec cal2 s = function [] -> [] | head::tail -> (cal1 s 0 0 0 0 head)::cal2 (s + 1) tail [for _ in [1 .. Console.ReadLine() |> Convert.ToInt32] -> Console.ReadLine().Trim().ToCharArray() |> List.ofArray] |> cal2 1 |> List.maxBy (fun lst -> lst.[1]) |> List.map Convert.ToString |> String.concat " " |> Console.WriteLine 0
高層タワー
単語を組み合わせて新単語を作ります。
新単語は N 個の文字列を、前から順に結合して作ります。
この時、冗長さをなくすため、 前から結合した単語の末尾 と 後ろの単語の先端 が一番長く一致するように結合します。
例えば、 入力例 1 の “paiza”, “apple”, “letter” の場合、
先頭から “paiza”, “apple” を条件どおり重ねると “paizapple” となります。
この単語を更に次の単語と重ねると “paizappletter” となります。
なお、必ず前から順番に重ねるため、 入力例 2 の “poh”, “p”, “oh” を結合する場合は、
“poh” と “p” を重ねた後の単語 “pohp” と “oh” を重ね “pohpoh” となります。
N 個の単語が与えられるので、前から順番に単語を結合した場合の新単語を出力してください。
入力される値
w_1
w_2
…
w_N
・1 行目に、結合する単語の数を表す整数 N が与えられます。
・続く N 行のうちの i 行目 (1 ≦ i ≦ N) には、 i 番目に結合する単語を表す文字列 w_i が与えられます。
・入力は合計 N + 1 行であり、最終行の末尾に改行が 1 つ入ります。
条件
・2 ≦ N ≦ 100
・各 i (1 ≦ i ≦ N) に対して以下を満たす。
・1 ≦ (w_i の長さ) ≦ 100
・w_i は半角英小文字のみで構成されている。
期待する出力
N 個の単語を前から順番に、条件どおりに結合した際の新単語を出力してください。
open System [<EntryPoint>] let main _ = let rec cal (a : string) (b : string) = match a with | x when b.StartsWith x -> b.Substring x.Length | _ -> cal (a.Substring 1) b [for i in [1 .. Console.ReadLine().Trim() |> Convert.ToInt32] -> Console.ReadLine().Trim()] |> List.reduce (fun x y -> x + cal x y) |> Console.WriteLine 0
有名なプールサイド
あなたは今度新しくできる町のデザインを任されました。
町は南北に H、東西に W の広さで、計 H × W 個の区画からなっています。
また、それぞれの区画には、次の図のように座標が割り当てられているものとします。
町に建設したい建物のリストが与えられます。
どの建物も長方形の形をしており、ただ一つの扉を持っています。
リストにはたくさんの建物が含まれているため、リストに載っている全ての建物を建設することができるとは限りません。
そこで、町のどこにどの建物を建設するかを決めるのがあなたの仕事です。
建物を建設する場所を決める際には、次の 3 つのルールを守らなくてはいけません。
1. どの 2 つの建物も重なってはいけない。
2. 建設する建物の向きはリストに与えられたとおりでないといけない (建物を回転して配置してはいけない)。
3. どの 2 つの建物についても、それらの扉の間を「建物がない区画」を通って移動できる。
ルール 3 を正確に述べると、次のようになります:
すべての建設する建物の組に対して、それらの扉の座標を P, Q とするとき、
以下の条件 (i)-(iii) を満たすような座標の列 (r_1, c_1), (r_2, c_2), …, (r_m, c_m) が存在する (m は 0 以上の整数)。
(i) 1 ≦ r_i ≦ H, 1 ≦ c_i ≦ W が成り立つ (1 ≦ i ≦ m)。
(ii) 座標 (r_i, c_i) にはどの建物も建設されていない (1 ≦ i ≦ m)。
(iii) 座標 (r_i, c_i) と (r_{i+1}, c_{i+1}) は上下左右のいずれかで隣接している (0 ≦ i ≦ m)。ただし、P = (r_0, c_0), Q = (r_{m+1}, c_{m+1}) とする。
次の図は条件 (i)-(iii) が守られている建物の配置と守られていない配置の例を表しています。
灰色の建物と緑の建物については、それらの扉の間を「建物がない区画」を通って移動することができます。
一方、灰色の建物と青の建物については、そのような移動方法は存在しません。
町の区画 X 個分の大きさの建物は、X 万円の利益を生み出します。
建物が生み出す利益の合計ができるだけ多くなるような、建物の配置を求めるプログラムを書いてください。
最低1個以上の利益を生み出す建物を配置することで正解となり、建物の面積がスコアとして計算されます。
入力される値
h_1 w_1 r_1 c_1
h_2 w_2 r_2 c_2
…
h_N w_N r_N c_N
・1 行目には、町の広さを表す整数 H, W およびリストに含まれる建物の個数 N がこの順で半角スペース区切りで与えられます。
・続く N 行のうちの i 行目 (1 ≦ i ≦ N) には、リストの i 番目の建物の情報を表す 4 つの整数 h_i, w_i, r_i, c_i がこの順で半角スペース区切りで与えられます。
・h_i, w_i はそれぞれ i 番目の建物の南北方向、東西方向の幅を表します。
・r_i, c_i は i 番目の建物の扉の位置を示しています。次の図のように建物内の座標を表すとき、扉の位置は座標 (r_i, c_i) で表されます。なお、扉は建物の外周に面しており、建物の四隅にはないことが保証されています。
・入力は合計で N + 1 行となり、入力値最終行の末尾に改行が 1 つ入ります。
条件
・2 ≦ H, W ≦ 100
・1 ≦ N ≦ 100
・各 1 ≦ i ≦ N に対して
・2 ≦ h_i ≦ H
・2 ≦ w_i ≦ W
・1 ≦ r_i ≦ h_i
・1 ≦ c_i ≦ w_i
・座標 (r_i, c_i) は建物の外周に面している (すなわち、r_i = 1 または r_i = h_i または c_i = 1 または c_i = w_i の少なくとも 1 つが成り立つ)
・座標 (r_i, c_i) は建物の四隅にはない (すなわち、(r_i, c_i) は (1, 1), (1, w_i), (h_i, 1), (h_i, w_i) のいずれでもない)
・建物は最低 1 個以上は配置することが可能であることが保証されています。
期待する出力
建物の配置を以下の形式で出力してください。
a_{2,1} a_{2,2} … a_{2,W}
…
a_{H,1} a_{H,2} … a_{H,W}
・期待する出力は H 行からなります。
・i 行目 (1 ≦ i ≦ H) には、W 個の整数 a_{i,1}, a_{i,2}, …, a_{i,W} を半角スペース区切りで出力してください。
・a_{i,j} は、区画 (i, j) に建物を建設するときはその建物の番号、建設しないときは 0 としてください。ここで、建物には入力で与えられた順に 1 から N までの番号が割り当てられているものとします。
・出力最終行の末尾に改行を入れ、余計な文字、空行を含んではいけません。
F#
open System let Judge X Y x y (a2d : int[,]) = let mutable res = true try for i in [X .. x] do for j in [Y .. y] do if a2d.[i,j] <> 0 then res <- false with | _ -> res <- false res let Draw X Y x y id (a2d : int[,]) = for i in [X .. x] do for j in [Y .. y] do a2d.[i,j] <- id [<EntryPoint>] let main _ = let H::W::N::_ = Console.ReadLine().Trim().Split(' ') |> Array.map Convert.ToInt32 |> List.ofArray let mutable home = Array2D.init H W (fun _ _ -> 0) let input = [for i in [1 .. N] -> i::(Console.ReadLine().Trim().Split(' ') |> Array.map Convert.ToInt32 |> List.ofArray)] let id::h::w::x::y::_ = input |> List.maxBy (fun x -> x.[0] * x.[1]) if x = 1 then home <- Array2D.mapi (fun x _ i -> if x = 0 then -1 else i) home if x = H then home <- Array2D.mapi (fun x _ i -> if x = H - 1 then -1 else i) home if y = 1 then home <- Array2D.mapi (fun _ y i -> if y = 0 then -1 else i) home if y = W then home <- Array2D.mapi (fun _ y i -> if y = W - 1 then -1 else i) home for i in [0 .. Array2D.length1 home - 1] do for j in [0 .. Array2D.length2 home - 1] do if Judge i j (h + i - 1) (w + j - 1) home then Draw i j (h + i - 1) (w + j - 1) id home home <- Array2D.map (fun i -> if i = -1 then 0 else i) home for line in home |> Seq.cast<int> |> Seq.chunkBySize W do line |> Array.map Convert.ToString |> Array.reduce (fun a b -> a + " " + b) |> Console.WriteLine exit 0 0
135位 | iriszero | 956 | 2019/02/02 03:37 | F#(Beta) |