AtCoder Beginner Contest 160の振り返り

今回で3回目のコンテスト参加となりました。前回が2月22日(土)だったので1ヶ月ぶりでした。この1ヶ月、AtCoderの問題に取り組んでいなかったので、散々な結果となりました。。(日頃からコツコツとやらないとダメですね。) 今回の結果はC問題が解けずに終わってしまい、悔しかったです。今後、類似問題が出てきても解けるように振り返りをします。 今回の僕の結果はこちらから。(弱弱なので、お恥ずかしい。笑) A - Coffee 問題文 ある長さ6の英小文字からなる文字列がcoffeeに似ているとは、3文字目と4文字目が等しく、5文字目と6文字目も等しいことを言います。与えられる文字列Sがcoffeeに似ているか判定してください。 制約 Sは長さ6の英小文字からなる文字列である。 解説 この問題は長さ6の文字列が3文字目 = 4文字目、5文字目 = 6文字目の時にYes、違う時にNoを表示すればOKです。 回答 N = input() if(N[2] == N[3] and N[4] == N[5]): print("Yes") else: print("No") B - Golden Coins 問題文 高橋君は金色の硬貨が好きです。自分が持っている500円硬貨1枚につき1000、5円硬貨1枚につき5の嬉しさを得ます。高橋君はX円を持っています。これを高橋君の嬉しさが最大になるように両替したとき、高橋君の嬉しさはいくらになりますか? (なお、利用できる硬貨は500円玉、100円玉、50円玉、10円玉、5円玉、1円玉の6種類とします。) 制約 0≤X≤10^9 Xは整数 解説 高橋君が持っているX円が500円何枚分(Y枚)あるのかを求めてから、X=X-500*Y円をして、同様にX円が5円何枚分(Z枚)あるか求めます。 その後、Y*1000+Z*5を表示すればOKです。 回答 math.floorを使うことで小数点以下を切り捨てしています。 import math X = int(input()) total_500 = 0 total_5 = 0 total_count = 0 if(X >= 500): total_500 = math.floor(X/500) total_count += total_500 * 1000 X -= total_500 * 500 if(X >= 5): total_5 = math....

March 29, 2020 · 1 min · 145 words · Yu

Nginx + uWSGI + Python(Django)の環境をdockerで作成する

はじめに Nginx + uWSGI + Python(Django)のアプリ環境をDockerで作成する方法を本記事にまとめました。 Docker for Windowsのインストール コントロールパネルを開いて、「プログラムと機能」→「Windowsの機能を有効化または無効化」→「Hyper-V」にチェックが入っているか確認します。 チェックが入っていなかった場合は、チェックを入れてPCを再起動させて有効化させます。 次に「Docker Desktop for Windows」のインストールをします。 インストールはここからできます。 Djangoを動かす環境構築 ディレクトリ構成 以下、構成でDjangoアプリを動かします。 Infrastrcuture作成 Alpineにpython + uWSGI、Nginxをインストールします。 docker-compose.yml作成 Nginxとpython + uWSGIのコンテナを作成します。 今回はログをdjango-sample配下に出力するようにしていますが、お好きなところにログを吐き出すように設定してください。 django-sample/docker-compose.yml version: '2' services: nginx: build: "./Infrastructure/nginx/" volumes: - ./logs/nginx:/var/log/nginx ports: - "80:80" networks: django-sample-network: ipv4_address: 172.23.0.4 python: build: "./Infrastructure/python/" volumes: - ./Application/django-sample:/home/work/django-sample - ./logs/django:/home/work/django - ./logs/uwsgi:/home/work/uwsgi ports: - "8000:8000" networks: django-sample-network: ipv4_address: 172.23.0.5 networks: django-sample-network: driver: bridge ipam: driver: default config: - subnet: 172....

March 23, 2020 · 4 min · 830 words · Yu

AtCoder用にPythonの環境構築

本記事は以前Qiitaに投稿した内容を本ブログに持ってきています。 はじめに 最近、AtCoderを始めました。 AtCoderは競技プログラミングサイトで、毎週リアルタイムのコンテストが開催されていて、AtCoderで評価されたレーティングを利用して、転職活動ができるAtCoderJobsというサービスが話題になっているそうです。 最初、シェルがfishでHomebrewなどが入っている状態で色々試していましたが、うまくいかなかったので、Mac環境をきれいにして環境構築をしました。 環境 macOS Catalina 10.15.2 Homebrew 2.1.15 bash 3.2.57 シェルをbashに戻す ターミナルで以下コマンドを叩いて、ターミナルの再起動をするとシェルがbashに戻ります。 $ chsh -s /bin/bash Homebrewをアンインストールする 以下コマンドを叩いてパスワードを入力すると、Homebrewをアンインストールできます。 $ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)" Homebrewの公式サイトに記載されています。 Homebrewインストールする 以下コマンドを叩く。 $ usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" インストールできたか確認するために、以下コマンドを叩きます。 $ brew doctor すると、Warningが大量に出たので、brew doctorでWarningが出たので解決方法まとめました。(for Mac)を参考に解決しました。 Warning: Unbrewed dylibs were found in /usr/local/include. のログに関しては残すことを忘れてしまっていたので、上記記事を引用しています。 Please note that these warnings are just used to help the Homebrew maintainers with debugging if you file an issue....

March 16, 2020 · 6 min · 1133 words · Yu

PythonでOpenPyXLを用いたExcel操作まとめ

本記事は以前Qiitaに投稿した内容を本ブログに持ってきています。 概要 業務でPythonを使ってExcelを作成することがあったので、備忘録としてこの記事を作成しました。 実行環境はPython 3.7で、OpenPyXLを利用してExcelを作成します。 作成・保存・読み込み 新規にExcel作成 from openpyxl import Workbook wb = Workbook() Excel保存 wb.save('test.xlsx') save()にはエクセルを保存したいpath(ディレクトリとファイル名)を指定してください。 アクティブなシート取得 ws = wb.active シート作成 ws2 = wb.create_sheet("Sheet2") ws3 = wb.create_sheet("sheet3", 0) # 最初のシートに設定 ws4 = wb.create_sheet("sheet4", -1) # 最後から2番目にシートに設定 Excel読み込み from openpyxl import load_workbook load_workbook('test.xlsx') シート編集 シートのタイトル命名 ws.title = "test-sheet" セルに文字入力 ws['A1'] = "hogehoge" ['A1']の部分に指定したいセルを入力 数式を使う ws['A1'] = "=SUM(1, 1)" セルの結合 ws.merge_cells('A2:D2') セルの結合解除 ws.unmerge_cells('A2:D2') セルの色付け from openpyxl.styles import PatternFill fill = PatternFill(patternType='solid', fgColor='4d4d4d') ws['A1']....

March 16, 2020 · 1 min · 179 words · Yu

PythonでExcelを添付してメールを送信する

本記事は以前Qiitaに投稿した内容を本ブログに持ってきています。 概要 先日、業務で「PythonでExcelを添付してメールを送信する」機能を試行錯誤して実装しました。 Djangoのメール送信機能を使ったら、わりかし簡単に実装できたので、自分と同じに状況になるかもしれない人のために記事を作成しました! 環境 Python 3.7 Django 2.2 ※ Djangoを利用していないと本記事の実装はできません。 事前準備 openpyxlをインストールします。 $ pip install openpyxl メールサーバの設定 プロジェクトのsettings.pyに送信先の情報を追加します。 送信するメールサーバの情報を記載してください。 settings.py EMAIL_HOST = '00.00.00.00' # 送信メールサーバ EMAIL_PORT = '000' # 送信メールポート メールに添付するExcelを整える 添付したいExcelをbytesオブジェクトに変換します。 これをしないとメール送信ができません。 from openpyxl import load_workbook from io import BytesIO wb = load_workbook('test.xlsx') # 添付したいExcelを読み込む excelfile = BytesIO() wb.save(excelfile) # Excelをbytesオブジェクトに変換する メールをExcelを添付して送信する 以下、コードでメール送信ができます!! from django.core.mail import EmailMessage subject = "件名" body = "本文です。" send_from = "hogehoge1@gmail.com" # 送信者 send_to = ["hogehoge2@gmail....

March 12, 2020 · 1 min · 94 words · Yu