パーソナルブログメモリ

a = [1, 1]
for _ in "*" * 999: a += [sum(a[-2:])]
print(a)

折りたたむ力

2018-07-27 | プログラムをマスター計画2020
最初に数を与えられ
次にその数だけ、3つずつ数字の並んだ行が与えられる。
その各行に並んだ数字をソートして真ん中の数字を答えていく問題

勝負はこの数字の並びと解答から問題を考え、いかに速く解くか。
実際は数字の並びと解答は複数あって判断材料はもう少し多い。



長くやっていると同じ問題が出てくるときがあるが、この時はたぶん初見。



残念ながらトップには1秒及ばなかった。
ちなみに国籍は上から
ロシア
日本
ポーランド
フランス
ウクライナ(実際は運営の作成したボット)
ロシア

このソースをみていて、これはもっと折りたためそうな気がするので、折りたたんでみる。

折りたたむという表現は適切ではないかもしれないけど意味としては、
無駄な代入などを減らしてダイレクトに解答する。

[ ].sort()はできないようだけど、sorted([ ])はできる。


xは不要に。


nも一箇所しかないので、不要、1行になる。



forを一つmapに変更。


現在一番いい時でworld42位、トップクラスの人はこれをダイレクトにコーディングできて
さらにもう一つぐらい技を入れている。知識量が多く、適切に言語も切り替える。

折りたたんでみての課題は、多重化する()の把握

こんな感じで少しでもわかりやすくしてみる。

読む順番が→ではないので読みづらい。
道具は手元にまとまっているのでエラーは起きにくい

最初のコードは基本↓なので、理解しやすい。
変数の受け渡しが多いので伝言ゲームのようなミスが起きやすい

-----------------------------------------
以下完全に蛇足

最後に→に変換して、新しい言語を模索してみる。
for i in range( int(input()) ):print( sorted( map(int,input().split()) )[1] )

input().int.range.for(i): input().split().int.sort().num(1).print

input.int.range._.for: input.split().int.sort.num(1).print
(翻訳)
入力を数値にその値の幅を添字なしでループ:
 入力をスペースで分断して数値化してソートその2番目(0があるため)を表示

あれ...これは.net

結局、何をするの?が最後になるので、情報の取捨選択の時間が多くなる。

最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。