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の社員番号が割り当てられています。 社員番号1の社員以外の全ての社員には、自分より社員番号が小さい直属の上司がちょうど1人います。 XさんがYさんの直属の上司であるとき、YさんはXさんの直属の部下であるといいます。 社員番号iの社員の直属の上司の社員番号がAiであることが与えられます。各社員について直属の部下が何人いるか求めてください。 ...

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.append("FizzBuzz") elif(s%3 == 0): ans.append("Buzz") elif(s%5 == 0): ans.append("Buzz") else: ans.append(s) ans_num += s print(ans_num) C - Sum of gcd of Tuples (Easy) 問題文 $$ \sum_{a=1}^{K} \sum_{b=1}^{K} \sum_{c=1}^{K} gcd(a, b, c) $$ を求めてください。 ただし、gcd(a, b, c)はa,b,cの最大公約数を表します。 ...

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

React + Go + MongoDBの環境をDocker Composeで作成した

現在、勉強がてら個人開発をしていて、せっかくの個人開発なので、今までさわったことがないReact, Go, MongoDBでwebアプリを作ります。 その最初の段階として、Docker Composeを使って環境構築を進めます。 Reactの環境構築 今回の開発では、プロジェクト配下をこんな感じにしています。 プロジェクト ├── backend ├── frontend Reactはfrontend配下に構築します。 Dockerfileの作成 DockerfileにDocker上で起動させるコンテナの構成情報を書きます。 frontend配下に以下内容で作成します。 FROM node:13.12.0-alpine3.10 WORKDIR /usr/src/app 1行目にはコンテナのDockerイメージ、2行目にはコンテナ内の作業ディレクトリを記載しています。 alpineはAlpine Linuxのことで、必要最低限の構成がされているおかげで、Dockerイメージの軽量化を図ることができます。 docker-compose.ymlの作成 docker-compose.ymlで複数のコンテナをまとめて起動することができます。拡張子は「.yml」「.yaml」どちらでも動きます。 どっちかに統一してくれればいいのに。 プロジェクト配下に以下内容で作成します。 version: '3' services: node: build: context: ./frontend dockerfile: Dockerfile volumes: - ./frontend:/usr/src/app command: sh -c "yarn start" ports: - "3000:3000" volumesではコンテナ内のusr/src/appをfrontendに永続化させます。 portsでは外部の3000ポートとコンテナ内の3000ポートをつなげています。ローカル環境ではlocalhost:3000でアクセスができるようになります。 Dockerイメージのビルド docker-compose.ymlのある階層で以下コマンドを叩きます。 docker-compose build Building node Step 1/2 : FROM node:13.12.0-alpine3.10 ---> b529a862f234 Step 2/2 : WORKDIR /usr/src/app ---> Using cache ---> b753b92fbf97 Successfully built b753b92fbf97 Successfully tagged プロジェクト名_node:latest 上記のような表示がされ、ビルドすることができます。 ...

April 11, 2020 · 3 min · 522 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ディレクトリが作成されます。 poetry-demo ├── pyproject.toml ├── README.rst ├── poetry_demo │ └── __init__.py └── tests ├── __init__.py └── test_poetry_demo.py pyproject.tomlがプロジェクトの依存関係をまとめてくれています。中身はこのようになっています。 ...

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/ユーザーネーム/.local/share/virtualenvs/pipenv-test-x1ZFqoq_ Creating a Pipfile for this project… Installing flake8… Adding flake8 to Pipfile's [packages]… ✔ Installation Succeeded Pipfile.lock not found, creating… Locking [dev-packages] dependencies… Locking [packages] dependencies… ✔ Success! Updated Pipfile.lock (e8e061)! Installing dependencies from Pipfile.lock (e8e061)… 🐍 ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 5/5 — 00:00:01 To activate this project's virtualenv, run pipenv shell. Alternatively, run a command inside the virtualenv with pipenv run. Pipfileでインストールしたパッケージなどを管理していて、プロジェクトを他の人に共有するときに依存関係が分かります。 Pipfileの中身はこんな感じになります。 ...

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