読者です 読者をやめる 読者になる 読者になる

しゃちの備忘録

これからC++を始める人によるC++の備忘録です(今のところ)

Python3での競技プログラミング用標準入力個人的まとめ

githubに書いてた内容を移植しました. ほとんど差はないです.

Python3で競技プログラミングをする時に, テストケースをなんとか簡単に実行したいというのと,標準入力のやり方について気になったのでまとめました. 参考になれば幸いです.

テストコードテンプレ

solve()以下に実際のコードを記述し, テストケースを入れたフォルダへのパスを書いてあげると,そのフォルダ内全てのファイルの内容を標準出力にして、テストを行います. 提出時はsolve()の内容をまるまると,solve()のコメントを解除してあげます **********は対象のフォルダへのpathを書いてください.

# -*- coding: utf-8 -*-
import sys
import os

##### solveの中に記述,提出時はsolve()のコメントアウトを外して
##### ここから
def solve():
    a, b, c = list(map(int, input().split()))
    if a <= c and c <= b :
        print("Yes")
    else:
        print("No")
# solve()
##### ここまで

test_path = 'test_case'
FILES = os.listdir(test_path)
print('test case => %s\n**********' % FILES)
for FILE in FILES:
    fdr = os.open(test_path + '/' + FILE, os.O_RDONLY)
    print("\ncase : %s" % FILE)
    os.dup2(fdr, sys.stdin.fileno())
    solve()

print("\n**********\nfinish")

こんな感じで試しています. f:id:teru0rc4:20170514193019p:plain

標準入力受け取りテンプレ

標準入力には様々なパターンがありますが,これだけ使えれば良さそうというものだけ書いておきます.

入力が1行で1つだけの場合

文字・文字列

input

S

Sは文字列

s = input()
数値(整数または浮動小数点数)

input

N

Nは整数または浮動小数点数.

n = int(input()) # 整数
n = float(input()) # 浮動小数点数
  • raw_input()が削除され, input()に一本化された
    • python2では, 文字列はrow_input()であった
  • 数値をinput()する場合は, それぞれの状態に応じてキャストしてやる必要がある.
    • 小数点数をintでキャストすると値が切れるので注意

入力が1行で複数ある場合

文字・文字列

input

A B C

A,B,Cはいずれも文字列

s = input().split()
a, b, c = input().split()
  • 分割された文字列はinput().split()でOK
    • 異なる変数に代入したい場合はa,b,cのようにすれば, スペース区切りで各変数に入力される.
数値(整数または浮動小数点数)

input

A B C

A,B,Cはいずれも整数または浮動小数点数.

n = list(map(int, input().split())) # 整数
n = list(map(float, input().split())) # 浮動小数点数
n1, n2, n3 = list(map(int, input().split())) # 整数
n1, n2, n3 = list(map(float, input().split())) # 浮動小数点数
  • python2の頃と見た目はそんなに変わらないが実態が異なる

入力が複数行で1つずつ与えられる場合

最初に入力する個数(N)が与えられて, そこからN個の入力が与えられる場合

input

N
a1
a2
...
aN

a1,a2,…,aNはN個の入力.

N = int(input())
a = []
for i in range(N):
  a.append(input())

あるいは

N = int(input())
a = [input() for i in range(N)]
  • まず個数Nを受け取って, そのあとN個の入力を格納する
  • listの内包表記を使うと美しい……
    • intで取り扱いたいならinput()をキャストすること
終了フラグが来るまで入力を格納し続ける場合
a = []
while True:
    n = input()
    if n == -1: # 終了フラグ
        break
    a.append(n)
  • 判定の部分を文字か数字かでわしゃわしゃする必要はある
    • あまりみたことないけど一応
    • EOFの場合はどうすればいいんですかね……

入力が複数行にわたって複数与えられる場合

input

N M
a11 a12 a13 ... a1M
a21 a22 a23 ... a2M
a31 a32 a33 ... a3M
...
aN1 aN2 aN3 ... aNM
N, M = list(map(int, input().split())) # 整数
a = []
for i in range(N):
    a.append(list(map(int, input().split())))

Pythonでwebアプリを作ってみる その1

いろんな事情でwebアプリをちゃんと作りたくなったのでちょっとづつ書きます. 半分日記. 完成したら,ちゃんとまとまった内容の記事かくかもしれないけど,ひとまずつらつらと. しばらく忙しくなるけど,最悪でも週1ペースで書いておきたいです.

最終目標

なんかwebアプリを完成させます.内容はともかくとしてとりあえずなるはやで完成を目指します.

今日の進捗

今後どうするかについて精査しました. 多分次回更新は数日後, SimpleHTTPServerをつかったあれこれについてだとおもいます.

  • 手持ちの知識でできることは,html/css/javascriptを書くこと, pythonを書くこと.
  • やったことないことは,pythonでサーバサイドを構築すること.
  • サーバサイドで,Pythonの場合DjangoやFlaskといったwebフレームワークが使われることが多いらしい
    • 聞いたことはある,触ったことはない
  • どこかのサイトか本を参考にとりあえず一つやり切ってみる
  • どうやら標準モジュールだけでもそれっぽいことはできるらしい?
    • SimpleHTTPServer
    • ひとまずそっちやってみる

Macのスクリーンショットの保存場所を変える方法

個人的に気になったのでメモ.

Macスクリーンショットはデフォルトでは, “デスクトップ"に"png"形式で保存されます. これを, どこか別のフォルダに任意の形式で保存したいと思います.

そのためにはターミナルから設定を変更してあげなければいけないらしくそれの備忘録を書いておきます.

保存形式の変更

画像の保存形式変更には以降のコマンドのいずれかを,ターミナルから入力する必要があります.

$ defaults write com.apple.screencapture type bmp
$ defaults write com.apple.screencapture type gif
$ defaults write com.apple.screencapture type jpg
$ defaults write com.apple.screencapture type pdf
$ defaults write com.apple.screencapture type png
$ defaults write com.apple.screencapture type tiff

デフォルトではpngになっているので変えたい場合は,それぞれの形式に合わせて末尾を変えれば良いらしいです.

また上のコマンドの後に,システムの再起動が必要らしく以下のコマンドを入力してあげます.

$ killall SystemUIServer

保存場所の変更

こちらもコマンドで指定します. ~/screenshotに保存するケースのコマンドなので読み替えてください

$ defaults write com.apple.screencapture location ~/screenshot

この場合システムの再起動が必要なようです.

$ killall SystemUIServer

元の状態に戻すなら以下のようです.

$ defaults delete com.apple.screencapture location
$ killall SystemUIServer

MacでSourceTreeを使いGithubに接続するまで

タイトルの通り, MacでSourceTreeを使いGithubに接続するまでを備忘録的にまとめておきます. Githubの準備とかは省略します.

それ以外の手順は以下の通り.

  1. SourceTreeを準備する(アカウントを作る&クライアントをインストール)
  2. SSHの準備をする
  3. SourceTreeとGithubSSH接続で接続する

SourceTreeを準備する

SourceTreeとはAtlassianが提供しているGitクライアントソフトです. 一番のメリットはGitでのコマンドをGUIでの操作できる点だと思います.(もちろんコマンドを知っていることでより高度な操作ができたりするので知らなくていいというわけではない)

肝心のSourceTreeですが, 下のサイトからダウンロードできます. ja.atlassian.com

ダウンロードされるzipを展開し, appファイルを起動してあげます. f:id:teru0rc4:20170322180928p:plain ここからAtlassianアカウントを作成したり, 既に持っている場合は登録したりしてあげます. それほど面倒じゃないのでサクサク設定してあげましょう.

アカウントの認証が終わると, BitBucketやGitHubなどのリモートリポジトリとの連携について聞かれます. ここで設定することも、セットアップ完了後に後から設定することも可能になってます. 今回はとりあえず「後から設定」を選んでおきます.(あまり意味はないです…)

SSHの準備をする

上でSourceTreeの準備ができたので, GithubとSourceTreeを繋ぐためのSSHキーを生成します.

Windowsの場合, 標準でSSHを使用することができない関係で, SourceTreeにSSHに関するものがまとめて付属しているのですが, Macではついていません.(SSH接続の際OS側のOpenSShを使用するため) ので, ターミナルを操作してSSHキー生成を行なっていきます.

MacSSH公開鍵認証のキーは, 隠しディレクトリの.sshに格納されます. もし .sshディレクトリが存在しない場, 以降の操作の中で作成されるので特に気にする必要はないようです.

ではsshのキーを生成します. ここで使用するコマンドはssh-keygenになります. これを使用することで, キーの生成や, 管理等々を行うことができます. いろいろ聞かれるので, 元々のメッセージにコメントの形で解説を添えておきました.

$ ssh-keygen -t rsa
Generating public/private rsa key pair.          # -t rsaを指定したので, rsaを作りますよ的なメッセ
Enter file in which to save the key (/Users/teru0rc4/.ssh/id_rsa):          # この名前で鍵をつくるよ的メッセ, enterするとid_rsaという名前が自動的につきます. 何かつける名前がある場合はここで入力してあげてください.
Created directory '/Users/teru0rc4/.ssh'.          # .sshディレクトリがないので作りましたよ, すでにあるなら言われないようです
Enter passphrase (empty for no passphrase):          # パスフレーズ入力
Enter same passphrase again:          # もう一回パスフレーズ

ssh-keygen -t rsaとすることでrsa暗号の鍵を作成することができます. 生成の時のコマンドをssh-keygen -t rsa -C hogeとすることで鍵にコメントをつけることができます.(こんかいはhogeというコメントがつきます, メールアドレスとか用途とかをシンプルにコメントでつけることがあるみたいですね)

ほかにも, 鍵につけたパスフレーズの変更をするオプション(-p)や, 鍵ファイルを変換するオプション(-f)などがあるようですが, ここでの説明は控えておきます.

ともかくこれで, .ssh以下に公開鍵id_rsa.pub秘密鍵id_rsaが生成されていると思います.

最後に, この鍵をsshエージェントに保存します. ssh-addを使うことで, 先ほど作った鍵を登録してあげます.

$ ssh-add ~/.ssh/id_rsa

パスフレーズを入力してIdentity added:~~~のようなことが出ればOKです.(ssh-add -lで確認もできます.)

SourceTreeとGithubSSH接続で接続する

それでは最後に, SourceTreeとGithubとを接続します.

まずは先ほど, 生成した鍵の内容をコピーします.(鍵の名前を変更している場合読み替えてください)

pbcopy < ~/.ssh/id_rsa.pub

これでクリップボードに, 鍵の内容がコピーされたはずです.

次はGithubの設定をします. Githubの自分のページに行きSettingをひらきその中の, SSH and GPG keysを選択, New SSH Keyをクリックし鍵を追加します. Titleはなんでも良いのですが, どのパソコンで使っている鍵かどうかなど自分で区別できる名前を使ってあげましょう. Keyの部分でクリップボードの内容を全てコピーしてやり, Add SSH keyで登録完了です. f:id:teru0rc4:20170324211150p:plain

最後に, SourceTreeで自分のGithubリポジトリを操作できるように登録してあげます. Github上でCloneしたいリポジトリを開き, Clone or downloadをクリックします. 展開されたウィンドウのクリップボード?のようなアイコンをクリックすると, クリップボードに内容がコピーされます. Github側の準備はこれで終わりです. f:id:teru0rc4:20170324213608p:plain

SourceTree側の設定を行います. +新規リポジトリ->URLからクローンを選択します. f:id:teru0rc4:20170324213637p:plain

ソースURL部分に先ほどコピーしたGithubのURLをコピーし, パスの部分に自分のPCの保存したいディレクトリパスを入力してクローンを押します.

そうするとクローンが完了し, SourceTree上からGithubを操作できるようになります. お疲れ様でした. f:id:teru0rc4:20170325001644p:plain

macでのlatexmkを使ったTeX環境構築

MacTeX環境を構築したので, それの備忘録をまとめておきます. 最終的な目標は, latexmkで常にtexファイルを監視して常に最新の状態のpdfを見られる状態にすることです.

今回の設定のメリット

tex環境は好みとかいろいろあると思いますが, 個人的に以下のメリットがあると思います.

  • 好きなエディタを使える
  • 環境設定が楽
  • TeXのタイプセットがきわめて楽

TeXのめんどくささの一つに, タイプセットがあると思います. 数式番号をつけたり, bibtexを入れて文献をつけたり…. また, そのたびにコンパイルの手順が変わるので, 必要なコンパイルをし忘れたり, 逆に余計な部分のコンパイルをしてしまったりと, 非常に使い勝手が悪かったです.

そこでlatexmkを導入すると, そういう手順をすべてlatexmkに任せて, しかもtexファイルだけでなく, 参照しているファイルが書き換わったタイミングで必要なタイプセットを必要な分だけ全部自動でやってくれるようになります. また, makefileなども書く必要がないのでノンストレスです.

手順

  1. ターミナルの準備をする(homebrew, homebrew cask)
  2. MacTeXを入れる
  3. pdf出力できるようにする(imagemagick, ghostscript)
  4. pdfビューワーを入れる
  5. latexmkを設定する

ターミナルの準備をする

今回はmacに標準で入っているターミナルからいろいろ導入するため, パッケージ管理システムhomebrewとその拡張版のhomebrew caskの準備をします.

homebrew

詳しい話は過去に書いたので, そちらで… teru0rc4.hatenablog.com

xcode-select --install
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

homebrew cask

homebrewの拡張版で, dmgファイルなどを使ってインストールするものをコマンドでインストールできるぞ!ってものらしいです. 今回は, これも使ってなるべく簡単に環境を構築することを目指したいと思います.

homebrewがインストール済みの環境で,

brew install caskroom/cask/brew-cask

と入力してやるだけです.

MacTeXを入れる

続いてMacTeXを入れます. mactexは, macOS用のTeXディストリビューションです. これを使うことで, TeX/LaTeXの環境を簡単に導入できます.

最小限の環境ならBasicTeXと呼ばれるものがありますが, 個人的には様々なパッケージを最初の段階で網羅してくれているMacTeXのほうがよいかな…と感じました.

先ほど準備したhomebrew caskを使ってインストールしてやります.

brew cask install mactex

pdf出力できるようにする

次にTeXで書いた内容をpdf出力できるようにするため, imagemagickghostscriptをインストールします. imagemagickは画像を取り扱うため, ghostscriptはpdfを作成するためにそれぞれ使うようです.

コマンドは以下の通りです.

brew install ghostscript
brew install imagemagick

pdfビューワーを入れる

今回はskimというソフトを選びました. これである必要はないのですが, 今回の目標が, latexmkで常にtexファイルを監視して常に最新の状態のpdfを見れる状態にすることなので, pdfファイルが変更されたときにそれを自動で更新してくれるようなソフトを選んであげる必要があります. ちなみに, AdobeAcrobatだと, ファイルが変更されても更新されないのでだめです.

brew cask install skim

latexmkを設定する

latexmkの設定です. といっても, MacTeXにくっついているのでインストール自体は不要です.

ただし, 以下の設定ファイルを書いてやる必要があります. ~/.latexmkrcに以下の内容を記述して, 保存してあげてください.(最後の行pdf_previewerの部分は, skimを用いる場合です. その他のビューワーの場合は, そのpathを記述してください.)

#!/usr/bin/env perl
$latex            = 'platex -synctex=1 -halt-on-error';
$latex_silent     = 'platex -synctex=1 -halt-on-error -interaction=batchmode';
$bibtex           = 'pbibtex';
$biber            = 'biber --bblencoding=utf8 -u -U --output_safechars';
$dvipdf           = 'dvipdfmx %O -o %D %S';
$makeindex        = 'mendex %O -o %D %S';
$max_repeat       = 5;
$pdf_mode         = 3;
$pvc_view_file_via_temporary = 0;
$pdf_previewer    = "open -ga /Applications/Skim.app";

書いてる内容は, 近日中に追記します. だたこれを書くと, synctexが使えたり, コンパイル失敗時に必要以上にエラーメッセージが出ないようになったり, うれしいです(雑).

最低限の設定はこれで以上です. では使ってみましょう.

使ってみる

編集したいtexファイルがあるディレクトリに行って

latexmk -pvc *****.tex

と入力します.(*****は各自対象とするファイル名に置き換えてください)

-pvcオプションをつけることで, ソースや関連ファイルが更新されるたびにコンパイルを実行し, ~/.latexmkrcで記述したpdfビューワーにpdfを出力してくれます. その他のオプションは以下の通りです. -cはよく使うので覚えておくといいと思います.

  • -pv … pvcの自動更新なし版
  • -c … 変換の途中でできたファイルを消してくれます(logファイルとか)
  • -C … 出来たファイル全部消します(dviファイル, pdfファイルとか)

ためしに, 文章を変更するとターミナルががりがり動いて, 逐一pdfを更新してくれるはずです.便利.

伝わりにくいですがこんな感じに使えるはずです.(ターミナルと, エディタと, pdfビューワーの3つで動いてます.) f:id:teru0rc4:20170128003020p:plain

おわりに

アウトプット癖をつけるために, とりあえず書いてみました. 間違い等ありましたら指摘していただけると幸いです.

ここまでお付き合いくださり,どうもありがとうございました.

XcodeとHomebrewについて

macでプログラミング環境を構築しようとした時に必ずと言っていいほど出てくる(出てきた), XcodeとHomebrewについて, 調べたのでまとめました.

Xcode

Xcodeとは

Xcodeは, アップルが提供している統合開発環境です. 今回はどっちかっていうと, IDEとしての使い道ではなく, コマンドラインツールとしての使い方がメインとなります. コマンドラインツールとはテキストや, コマンドを用いて様々な操作を行うCUIアプリケーションのことをさします. これを入れることで, コンパイラやGitなどのコマンド群を使用することができます. Homebrewを動かしたりするのに使うのでインストールしていきます.

インストール

Webや, AppStore, ターミナルからインストールできます. 普通にインストールしてしまうとXcodeの全てをインストールしてしまい, ものすごい時間がかかってしまいます. 上でも触れたように今回はコマンドラインツールとしての使い方がメインなので, それだけをインストールする方法を書いていきます.

コマンドラインツールをインストールするに, ターミナルを開いて以下のように入力します.

xcode-select --install

すると下のようなウィンドウが立ち上がるので, 指示に従ってインストール. f:id:teru0rc4:20170108202049p:plain

Homebrew

Homebrewとは

Homebrewは, パッケージ管理システムです. これを使うことで, ソースコードの状態で配布されているプログラムを取得しビルドすることで, 自分自信のmac環境で最適化された状態で使用することができます.

ちなみに読み方は「ホームブルー」らしいです(ホームブリューだと思ってました).

インストール

親切なことに公式サイトに丁寧に書いてあります. brew.sh

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

これを実行してやることで, インストールが開始されます. 途中でパスワードが要求されたりしますので, 入力してあげてください.

確認用のコマンドとして, バージョンチェックもあるので合わせてどうぞ.

$ brew -v
Homebrew 1.1.6
Homebrew/homebrew-core (git revision 9bc1; last commit 2017-01-08)

おわりに

これで色々プログラミングをする準備が整いました. コマンドだけならたった2行ですが, 色々調べて回ってるうちに3週間くらい経ってました…. これから頑張ります.

MacBook Proことはじめ

MacBook Proをかいました. f:id:teru0rc4:20161224185641j:plain 初のMacOSだったので, MBPのセットアップやあれこれについて備忘録的にまとめます(逐一更新予定)

各種ショートカットキー

windowsでもよく使っていたもの.

おおよそwindoesで使っていたショートカットキーと同じでしたが, いくつか使えなかったのでそこは注意(Alt+F4とか)(気が付いたら更新予定). (windowsのCtrlとAltが, commmandとoptionに結構ごっちゃに置き換えられてるように感じて混乱してます)

キー 機能
⌘ command+w ウィンドウを閉じる
⌘ command+q アプリを閉じる
⌘ command+h ウィンドウを隠す
⌘ command+q アプリの終了
⌘ command+c コピー
⌘ command+x 切り取り
⌘ command+v 貼り付け
⌘ command+s 保存
⌘ command+z undo
⌘ command+tab アプリ切り替え
⌘ command+Shift+g ディレクトリを開く

mac特有(?)のもの

macを使う上で知っておきたい・便利だと思ったショートカットキーたち. あまり自信がないので「特有(?)」としました.

キー 機能
⌘ command+shift+3 全範囲でのスクショ撮影
⌘ command+shift+4 範囲を指定してのスクショ撮影

押さえておきたい機能

ショートカットキーは「知っておくと便利程度」でまとめましたが, こっちは「macを使いこなすらなら是非押さえておきたい!」くらいの気持ちの機能についてまとめます.

トラックパッド操作

まだ

インストールしたもの

普段使い関連

  • Firefox
    • 普段使ってるアドオンも一緒に入れました
    • なんか表示がおかしいのでSafariに乗り換えた
  • Safari

  • VLC media Player

    • iTune使え
  • Tweetdeck

    • windowsではブラウザ版しかなかったが, macではクライアントがあるらしいのでそっちを利用してみる
    • App Storeからダウンロードするらしい
  • 各種コミュニケーションツール

    • Slack
    • LINE
  • Office

    • (予定)

プログラミング関連

趣味関連

  • ドット絵環境
    • edgeに代わるものを探さなければいけない…
    • Wineでedgeが動かせるので問題なくなった

その他(?)

  • ShiftIt
    • ウィンドウの画面寄せをするためのソフト
    • macにはデフォルトでないらしいのでこっちで追加
    • ここからzipをダウンロードして展開
    • システム環境設定>セキュリティとプライバシー>プライバシー>アクセシビリティから, ShiftIt.appに権限を与えてください
  • Xcode

  • Homebrew

    • パッケージマネージャ
    • Xcodeとあわせて使う
  • Wine

    • 主にドット絵を使うために
    • Winのソフトを動かすことができる
    • Xcodeを合わせて使う