AtCoder Beginner Contest 163の振り返り

今回で5回目のコンテスト参加となりました。今回は「Unrated」になってしまいました。 コロナウイルスの影響で参加者がめちゃくちゃいて、サーバ処理が追いつかなかったんですかね。。コンテストが始まると一気にサーバ負荷がかかるという特殊な状況ですが、運営側には頑張っていただきたいです。 今回はC問題まで解いたので、そこまでの解説をします。 A - Circle Pond 問題文 半径Rの円の周長を出力してください。 制約 1 ≤ R ≤ 100 入力は全て整数である。 解説 Pythonはmath.piで円周率を使えます。 回答 import math R = int(input()) print(2*R*math.pi) B - Homework 問題文 高橋君の夏休みはN日間です。 夏休みの宿題がM個出されており、i番目の宿題をやるにはAi日間かかります。 複数の宿題を同じ日にやることはできず、また、宿題をやる日には遊ぶことができません。 夏休み中に全ての宿題を終わらせるとき、最大何日間遊ぶことができますか? ただし、夏休み中に全ての宿題を終わらせることができないときは、かわりに’-1‘を出力してください。 制約 1 ≤ N ≤ 10^6 1 ≤ M ≤ 10^4 1 ≤ Ai ≤ 10^4 解説 この問題は高橋君の夏休み日数から宿題にかかる全日数を引くだけです。 回答 N, M = [int(_) for _ in input().split()] A = [int(_) for _ in input().split()] ans = N for i in range(M): ans -= A[i] if(ans < 0): print("-1") else: print(ans) C - management 問題文 N人の社員からなる会社があり、各社員には1,…,Nの社員番号が割り当てられています。...

April 19, 2020 · 1 min · 143 words · Yu

AtCoder Beginner Contest 162の振り返り

今回で4回目のコンテスト参加となりました。結果として、C問題まではなんとか解くことができました。ですが、B問題を1回凡ミスしたことに気づかず20分後に再提出したこととC問題はPythonでは時間制限を突破できなくて、PyPyで提出をしてなんとか正解だったのであまり良くない内容でした。 まだまだ余裕でD問題に到達することができていないです。。 基礎力を強化するためにも、今回も振り返りをしていきます。(回答に記載しているコードは提出してACしたコードです。) A - Lucky 7 問題文 3桁の整数Nが与えられます。Nのいずれかの桁に数字の7は含まれますか? 含まれるなら Yes を、含まれないなら No を出力してください。 制約 100 ≤ X ≤ 999 解説 この問題は入力された3桁の文字数それぞれに「7」が含まれているかを確認すればOKです。 回答 N = input() if(N[0] == '7' or N[1] == '7' or N[2] == '7'): print("Yes") else: print("No") B - FizzBuzz Sum 問題文 FizzBuzz列a1,a2,…を次のように定めます。 iが3でも5でも割り切れるなら、ai = FizzBuzz そうではなくiが3で割り切れるなら、ai = Fizz そうではなくiが5で割り切れるなら、ai = Buzz そうではないなら、ai = i FizzBuzz列のN項目までに含まれる数の和を求めてください。 制約 1 ≤ X ≤ 10^6 解説 入力されたN項目までのそれぞれの数字をFizzBuzzで判別して、該当しない数字を足せばOKです。 回答 N = int(input()) ans = [] ans_num = 0 for i in range(N): s = i+1 if(s%3 == 0 and s%5 == 0): ans....

April 12, 2020 · 2 min · 294 words · Yu

PythonでPoetryを使ってみた

先日、僕が入会しているオンラインサロンのメンバーの方に、「PipenvよりもPoetryの方がいい!」といったことをお聞きして、Poetryを知らなかったので調べて使ってみました。日本語に翻訳してくれている公式ドキュメントにそって進めていきます。 Poetryとは PEP 518で提案されたpyproject.tomlによるパッケージ管理を導入したツールです。 pyproject.tomlでrequirements.txt、setup.py、setup.cfg、MANIFEST.inを置き換えることができます。Pipenvはrequirements.txtの置き換えしかできないので、いろんなファイルを置き換えることができて良いですね。また、Pipenvで使用するPipfileは独自規格で今後継続的に採用されるか不明なので、PipenvよりPoetryを使う方が良さそうです。 Poetryインストール MacやLinuxでは以下コマンドでインストールします。 curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python $HOME/.poetry/binにインストールされます。 Poetryを更新したいときは、以下コマンドを実行します。 poetry self update Bash, Fish, Zshでの補完の有効化 僕はシェルにFishを使っていて、補完をサポートしてくるのでありがたいです。 公式ドキュメントには自分のシェルに合った次のコマンドどれかを使えばいいそうです。 # Bash poetry completions bash > /etc/bash_completion.d/poetry.bash-completion # Bash (macOS/Homebrew) poetry completions bash > $(brew --prefix)/etc/bash_completion.d/poetry.bash-completion # Fish poetry completions fish > ~/.config/fish/completions/poetry.fish # Zsh poetry completions zsh > ~/.zfunc/_poetry # Oh-My-Zsh mkdir $ZSH/plugins/poetry poetry completions zsh > $ZSH/plugins/poetry/_poetry 変更を効かせるために、シェルの再起動をしましょう。 プロジェクトのセットアップ Poetryを試すためのプロジェクトを作成します。 次のコマンドで作成できます。poetry-demoと名付けています。 poetry new poetry-demo するとpoetry-demoディレクトリが作成されます。...

April 5, 2020 · 2 min · 409 words · Yu

PythonでPipenvを使ってみた

Pipenvを使うと、個人開発の時だけではなく、複数人で開発する際にもパッケージ管理が楽になります。Pythonで作業環境を整えるのが非常に簡単になります。 公式によると Pipenvは、手動でパッケージのインストールおよびアンインストールを行うのと同じように Pipfile に対してパッケージの追加および削除を行うのに加え、自動でプロジェクト用の仮想環境を作成し管理します。 またPipenvは、いかなるときも重要な Pipfile.lock を生成し、これを利用しビルドが常に同じ結果になるようにします。 Pipenvは主にアプリケーションのユーザーと開発者に、簡単に作業環境を作れる方法を提供するためのツールです。 とのことです。 Pipenvインストール 僕はMacを使っているので、Homebrewでインストールします。 brew install pipenv プロジェクト作成&パッケージのインストール Pipenvを試すためのプロジェクトを作成します。 今回はpipenv-testディレクトリをホームディレクトリに作成して、その配下にPythonの静的解析ができるflake8をインストールをします。 mkdir pipenv-test cd pipenv-test pipenv install flake8 インストールをするとターミナルに以下のような表示がされます。 Creating a virtualenv for this project… Pipfile: /Users/ユーザーネーム/pipenv-test/Pipfile Using /usr/local/Cellar/pipenv/2018.11.26_4/libexec/bin/python3.8 (3.8.2) to create virtualenv… ⠋ Creating virtual environment...created virtual environment CPython3.8.2.final.0-64 in 719ms creator CPython3Posix(dest=/Users/ユーザーネーム/.local/share/virtualenvs/pipenv-test-x1ZFqoq_, clear=False, global=False) seeder FromAppData(download=False, pip=latest, setuptools=latest, wheel=latest, via=copy, app_data_dir=/Users/ユーザーネーム/Library/Application Support/virtualenv/seed-app-data/v1) activators BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator ✔ Successfully created virtual environment! Virtualenv location: /Users/ユーザーネーム/....

April 3, 2020 · 2 min · 315 words · Yu

Pythonコードを静的解析した

今回はflake8, autopep8を使って、Pythonコードを静的解析します。 静的解析とは コードを実行せずに行う解析です。コーディングルールチェックや、制御フローの解析、コードの複雑度の分析をすることでソースコードにある問題点を発見してくれます。 flake8とは pep8のチェック、pyflakesのチェック、及び循環的複雑度をチェックできるラッパーのことです。導入をすることで普段から綺麗なコーディングができます。 autopep8とは pep8のスタイルガイドに適用するように、自動的にPythonコードをフォーマットしてくれます。 flake8, autopep8インストール さっそくインストールしていきましょう。 以下コマンドでflake8をインストールできます。 pip install flake8 次にautopep8をインストールします。 pip install autopep8 とても簡単ですね。 使い方 flake8 flake8 <対象ファイルへのパス> このコマンドで対象ファイルを静的解析することができ、結果をターミナルに表示してくれます。 autopep8 autopep8 --in-place --aggressive --aggressive <filename> 公式ドキュメントにはこのように実行することを推奨しています。 --in--placeをつけることでファイルを更新してくれます。これがないとコードを自動的にフォーマットして、更新してくれません。 --aggressiveをつけることでコード整形のレベルを指定でき、2つつけることでレベル2になり修正対象のエラーが増えるそうです。 このコマンドで対象ファイルを静的解析することができ、結果をターミナルに表示してくれます。 試してみる test.pyを任意のディレクトリに作成します。 内容はこんな感じにしてみました。 def example(num_a,num_b,num_c,num_d,num_e,num_f,num_g,num_h): print(num_a+num_b+num_c+num_d+num_e+num_f+num_g+num_h) num_a,num_b,num_c,num_d,num_e,num_f,num_g,num_h = 1, 2, 3, 4, 5, 6, 7, 8 example( num_a, num_b, num_c, num_d,num_e, num_f, num_g, num_h ) 適切な改行や空白をいれることができていないし、文字列がとても長くなってしまっています。まずはflake8で静的解析をします。 test.py:1:18: E231 missing whitespace after ',' test.py:1:24: E231 missing whitespace after ',' test....

April 1, 2020 · 2 min · 246 words · Yu