- 1. 【Python3】【殿堂入りキャンペーン】お菓子の詰め合わせ (paizaランク A 相当)をやってみた
- 2. 【Python3】じゃんけんの手の出し方 (paizaランク A 相当)をやってみた
- 3. 【Python3】山折り谷折り (paizaランク A 相当)をやってみた
- 4. 【Python3】本の整理 (paizaランク A 相当)をやってみた
- 5. 【Python3】長テーブルのうなぎ屋 (paizaランク B 相当)をやってみた
- 6. Attention機構を図解しながらわかりやすく説明する
- 7. EasyOCRインストール時の注意点(2024/6以降)
- 8. 【Python3】みんなでしりとり (paizaランク B 相当)をやってみた
- 9. 【Python3】神経衰弱 (paizaランク B 相当)をやってみた
- 10. Pythonマルチスレッド検証
- 11. Python、SQLite3でのマルチプロセステーブル生成
- 12. 【Python】基本!PEP8を意識して書いてみた!
- 13. sys.argvの個人的まとめ
- 14. Pythonの標準入力sys.stdinの個人的まとめ
- 15. 【Python3】【殿堂入りキャンペーン】残り物の量 (paizaランク C 相当)をやってみた
- 16. 【Python3】みかんの仕分け (paizaランク C 相当)をやってみた
- 17. Python 2次元配列の複数キーによるソートについて
- 18. 【Python3】野球の審判 (paizaランク C 相当)をやってみた
- 19. 【Python3】宝くじ (paizaランク C 相当)をやってみた
- 20. 【Python3】Fizz Buzz (paizaランク C 相当)をやってみた
【Python3】【殿堂入りキャンペーン】お菓子の詰め合わせ (paizaランク A 相当)をやってみた
https://paiza.jp/works/mondai/a_rank_skillcheck_archive/school_hiking
“`python
# utf-8
def combinations(iterable, r):
# combinations()関数は、与えられたiterableからr個の要素を持つすべての組み合わせを生成するジェネレータです。
pool = tuple(iterable) # 入力のiterableをタプルに変換してpoolに格納します。
n = len(pool) # poolの長さ(要素の数)を取得します。
if r > n: # rがnより大きければ、組み合わせは存在しないので終了します。
return
indices = list(range(r)) # 組み合わせを表すインデックスのリストを作成します。
yield tuple(pool[i] for i in indices) # 最初の組み合わせを生成して返します。
while True:
【Python3】じゃんけんの手の出し方 (paizaランク A 相当)をやってみた
以下に、Pythonプログラムを解説します。
“`python
# じゃんけんの手の出し方
n, m = map(int, input().split()) # じゃんけんの回数 n と出す指の本数の合計 m を入力
s = input() # 相手のじゃんけんの手を表す文字列 s を入力# じゃんけんの手のカウントを初期化
enemy_g, enemy_c, enemy_p = 0, 0, 0
for v in s:
if v == “G”:
enemy_g += 1 # 相手がグーを出す回数をカウント
elif v == “C”:
enemy_c += 1 # 相手がチョキを出す回数をカウント
else:
enemy_p += 1 # 相手がパーを出す回数をカウントans = 0 # 勝つ回数の最大値を格納する変数
# 0 ≦ p ≦ m//5 の範囲で p(パーの回数)を全探索
for p in range(m // 5 + 1):
c = (m – p * 5) // 2
【Python3】山折り谷折り (paizaランク A 相当)をやってみた
https://paiza.jp/works/mondai/real_event/origami
“`python
# 山折り谷折り A
# utf-8”’
N 回折ったときの折り目は N-1 回折ったときの折り目から簡単に求めることができます。
1 回折ったときの折り目は “0”、2 回折ったときの折り目は “0” + “0” + “1” = “001”、3 回折ったときの折り目は “001” + “0” + “011” = “0010011” です。
N-1 回折ったときの折り目の文字列を S、S を逆順にし、0 と 1 を反転させた文字列を S’ とすると、N 回折ったときの折り目の文字列は S + “0” + S’ となります。N 回折ったときの折り目の数 2N-1 個の要素を持つ配列を用意します。
方針の通りに 1 回折ったときの折り目から順に N 回折ったときの折り目までを順に求めます。
”’# 入力値を取得
N = int(input())# 折り目の数 2^N – 1 を計算して配列のサイズを決定
size = 2 ** N – 1# 折り目
【Python3】本の整理 (paizaランク A 相当)をやってみた
このコードでは、本の位置情報を記録する配列を用いて、効率的に交換回数を計算しています。
“`python
# 入力を読み込む
N = int(input())
shelf = [int(x) – 1 for x in input().split()]# 各本の位置を記録する配列を用意
pos = [-1] * N
for i in range(N):
pos[shelf[i]] = i# 交換回数を記録する変数
ans = 0# 本棚の本を並び替える処理
for i in range(N):
# 既に正しい位置にある本はスキップ
if shelf[i] == i:
continue# 交換回数を増やす
ans += 1# i番目の本と現在の正しい位置にある本を交換
shelf[pos[i]] = shelf[i]
pos[shelf[i]] = pos[i]# 交換回数を出力
print(ans)
“`### プログラムの説明
1. **入力の読み込み**
【Python3】長テーブルのうなぎ屋 (paizaランク B 相当)をやってみた
https://paiza.jp/works/mondai/b_rank_skillcheck_sample/long-table
以下は、うなぎ屋の座席配置をシミュレーションするPythonプログラムです。
“`python
# 入力を標準入力から読み取る
import sys
input = sys.stdin.read# メイン処理関数
def main():
# 入力データを読み取り、行ごとに分割する
data = input().strip().split(‘\n’)# 最初の行から座席数(n)とグループ数(m)を取得
n, m = map(int, data[0].split())# 座席の使用状況を管理するリスト(Falseは空いている、Trueは埋まっている)
seats = [False] * n# 座れた人数のカウンター
seated_count = 0# 各グループの処理
for i in range(1, m + 1):
a_i, b_i =
Attention機構を図解しながらわかりやすく説明する
# はじめに
[ゼロつく2](https://amzn.to/3zMUT0C)で解説されているAttention機構について、私の理解を含めて解説したいと思います。
また、ゼロつく2以外にも情報収集し、いくつか参考になった情報を加えてAttentionについて理解が深まるように記事を書きたいと思います。# Attentionとは
* 入力データの中から重要な部分に焦点を当てる仕組み
* 自然言語を中心に発展した深層学習の技術の1つで、機械翻訳や文章生成の性能向上に寄与## Attentionの利点
* 長い依存関係の処理
* 従来のRNNでは入力文章が長くなると、情報が保持しにくいという点がありましたが、重要な部分に焦点を当てることで効果的に処理できるようになりました
* 説明可能性の向上
* どこに焦点を当てているかを可視化することでモデルがどのように予測しているかを理解することができます
* 並列処理性能の向上
* TransformerのようなAttentionベースのモデルは並列処理に適しており、GPUを効率的に使用できます。従来のRNNでは、各
EasyOCRインストール時の注意点(2024/6以降)
# はじめに
先日(2024/7)新しく構築した環境でEasyOCRを使ったプログラムがなぜか動かなかった。調べたところ、EasyOCRが依存パッケージのバージョンアップについていけていないようなのでまとめた。
# 環境
+ EasyOCR 1.7.1
+ Python 3.9.13 / Python 3.12.4 (両方ともMicrosoft Store版)
+ Windows 10 Pro (64bit) 22H2# 原因
EasyOCRが依存パッケージのバージョンアップに対応できていない
+ numpy 2.0.0(2024/6/16リリース)
+ python-bidi 0.5.0 (2024/7/21リリース)::: note info
numpy, python-bidiモジュールのバージョンを確認するコマンド
“`
python3 -m pip show numpy python-bidi
“`
:::動作を確認できたのは次のバージョン
+ numpy 1.26.4
+ python-bidi 0.4.2# 解決方法
EasyOCRインス
【Python3】みんなでしりとり (paizaランク B 相当)をやってみた
https://paiza.jp/works/mondai/b_rank_skillcheck_archive/word_chain
“`python
# coding: utf-8# 入力を受け取る
N, K, M = [int(i) for i in input().split()] # しりとりをする人数、単語リストの数、しりとりの発言数を取得
d_dict = {input() for i in range(K)} # 単語リストをセットに格納
m_list = [input() for i in range(M)] # しりとりの発言ログをリストに格納
n_list = [i + 1 for i in range(N)] # プレイヤーの番号リストを作成n = 0 # 現在のプレイヤーのインデックス
flg = 0 # 直前のプレイヤーがルールを破ったかどうかを示すフラグ# しりとりの発言を順番に処理する
for i in range(len(m_list)):
z = “” # ルールを破ったプレイヤーの番号を格納する変数
if
【Python3】神経衰弱 (paizaランク B 相当)をやってみた
https://paiza.jp/works/mondai/b_rank_skillcheck_archive/concentration
**問題**:
神経衰弱と呼ばれるトランプゲームのシミュレーションを行います。数字が書かれたトランプを縦 H 枚、横 W 枚の長方形の形に並べた状態でスタートします。トランプには1〜13の数字のうちどれかが書かれており、同じ数字のトランプが複数存在します。プレイヤーが N 人おり、各プレイヤーがトランプをめくっていき、めくった2枚のトランプに同じ数字が書かれていればそのトランプを取り除きます。ゲームの初期状態とトランプの記録が与えられるので、各プレイヤーが取り除いたトランプの枚数を求めます。**入力値**:
“`
H W N
t_{1,1} t_{1,2} … t_{1,W}
t_{2,1} t_{2,2} … t_{2,W}
…
t_{H,1} t_{H,W}
L
a_1 b_1 A_1 B_1
a_2 b_2 A_2 B_2
…
a_L b_L A_L B_L
“`**期待される出力値**:
“`
各プレイヤーが
Pythonマルチスレッド検証
## PythonのマルチスレッドでSQLite3からデータを取得する検証
### マルチスレッドでSQLite3からデータを取得する
#### 1.参照するテーブルのレイアウト
+ test_db.sqlite3.large_data| 列名 | データ・タイプ |
|:-:|:-:|
| id | INT |
| col1 | INT |
| col2 | TEXT |
| 〜 | |
| col15 | TEXT |#### 2.検証用コード
+ あらかじめ dataset をインストールしておくこと
“`
pip install dataset
“`
“`sqlite3_multi_thread.py
import concurrent.futures
import datetime
import traceback
import dataset# 取得条件
CONDITIONS = [
{‘db’: ‘1’, ‘min’: ‘1’, ‘max’: ‘1000000’},
{‘db’: ‘2’, ‘min’: ‘1000001’, ‘max’
Python、SQLite3でのマルチプロセステーブル生成
## Python、SQLite3でのマルチプロセステーブル生成検証
#### 1.検証内容
+ 1つのDBのテーブルを参照する。参照結果をもとに複数のDBに各々テーブルを作成する
+ sqlite-utilsモジュールを使用して、1SQLクエリで複数のDBのテーブルを使用する
+ マルチプロセスでテーブルを参照、作成する#### 2.参照するテーブルのレイアウト
+ test_db.sqlite3.large_data
+ test_db.sqlite3.large_data2
+ test_db.sqlite3.large_data3| 列名 | データ・タイプ |
|:-:|:-:|
| id | INT |
| col1 | INT |
| col2 | TEXT |
| 〜 | |
| col15 | TEXT |#### 3.作成するテーブルのレイアウト
+ db_1.sqlite3.table_1
+ db_2.sqlite3.table_2
+ db_3.sqlite3.table_3
+ db_4.sqlite3.table_4
+ db_5.sqli
【Python】基本!PEP8を意識して書いてみた!
# 本日の内容
今日の記事はPythonを使用する上で基礎的な情報を記載していきます。
実際に勉強会でも使用する内容になります。
下記に記載しているコードはコードスタイル「PEP8」を意識して記載しています。
PEP8については以下のサイトをご覧ください。https://peps.python.org/pep-0008/
## 変数と四則演算
コードは以下になります。
“`python
# 変数
num = 1
print(type(num)) #moji = “こんにちは”
print(type(moji)) #num_1 = 1.1
print(type(num_1)) #flg = True
print(type(flg)) #
num_lst = [1, 2, 3, 4, 5]
print(type(num_lst)) #num_tuple = (1, 2, 3, 4)
print(type(num
sys.argvの個人的まとめ
# 0.sys.argvとは
sys.argv は、Python でコマンドライン引数を処理するために使用されるリストです。プログラムがコマンドラインから実行されたとき、その引数が sys.argv に格納されます。# 1.sys.stdinとの比較
sys.argv はコマンドライン引数を取得するために使用され、プログラムの起動時に与えられる入力に対応します。
sys.stdin は標準入力からデータを読み取るために使用され、プログラムの実行中に提供される入力に対応します。# 2.sys.argvのコードの例
“`python:
import sys# コマンドライン引数のリストを表示
print(“コマンドライン引数:”, sys.argv)# コマンドライン引数が2つ以上ある場合、それらを表示
if len(sys.argv) > 1:
print(“引数のリスト:”)
for i, arg in enumerate(sys.argv[1:], start=1):
print(f” 引数 {i}: {arg}”)
else:
Pythonの標準入力sys.stdinの個人的まとめ
# 0.はじめに
Pythonのユーザー入力というとinput()とsys.stdinの2つがありますが、ここではsys.stdinについて記載したいと思います。
# 1.sys.stdinとは
sys.stdinはファイルオブジェクトの一種で、標準入力(通常はキーボード)から直接データを読み取ることができます。主にスクリプトやプログラムで標準入力から一括してデータを読み取るのに使われます。# 2.input()との比較
## 2.1.対話型入力と一括入力
input(): 対話型で一行ずつ入力を受け取るのに適しています。
sys.stdin: ファイルやパイプからの一括入力や複数行の入力を処理するのに適しています。## 2.2.プロンプト表示
input(): プロンプトメッセージを表示してユーザーに入力を促します。
sys.stdin: プロンプトは表示されません。直接入力を受け取ります。## 2.3.用途
input(): 主にスクリプトの対話型入力に使用されます。
sys.stdin: 標準入力からのデータ読み込みが必要なスクリプトや、リダイレクトされ
【Python3】【殿堂入りキャンペーン】残り物の量 (paizaランク C 相当)をやってみた
https://paiza.jp/works/mondai/c_rank_skillcheck_archive/leftover
**問題: スーパーマーケットの生鮮食品の売れ残り計算**
**入力**:
1. 生鮮食品の初期重量 `m` (kg)
2. 生のまま販売した時の売上割合 `p` (%)
3. 売れ残りをお惣菜にした時の売上割合 `q` (%)**出力**:
– 最終的な売れ残りの重量 (kg)**アプローチ**:
1. 初期重量 `m` から `p%` を売り上げる
2. 残りの `m` から `q%` をお惣菜として売り上げる
3. 最終的な売れ残りを計算して出力**コード**:
“`python
def solve(m, p, q):
# 最初に売れた量を計算 (生のまま)
sold_initially = m * p / 100.0
# 最初に売れた後の残りの量
remaining_after_first_sale = m – sold_initially
# 残りをお惣菜にして売れた量を計算
s
【Python3】みかんの仕分け (paizaランク C 相当)をやってみた
https://paiza.jp/works/mondai/c_rank_skillcheck_archive/mikan
**問題: みかんを重さごとに仕分ける**
**入力**:
1. 仕分ける重さの区切りを表す整数 `N`
2. みかんの個数を表す整数 `M`
3. 各みかんの重さ `w_1` から `w_M`**出力**:
– 各みかんを最も近い重さに仕分け、その重さを出力**アプローチ**:
1. 標準入力から `N`, `M` と各みかんの重さを読み込む
2. 各みかんの重さについて、仕分け先の重さを計算
3. 仕分け先の重さを出力**コード**:
“`python
def classify_oranges(weight, num_oranges, oranges):
# 各みかんの重さに対して仕分け先の重さを計算して出力
for orange in oranges:
# もし、みかんの重さがweight以下ならweightの箱に仕分け
if orange <= weight: pri
Python 2次元配列の複数キーによるソートについて
# はじめに
2次元配列の複数キー(優先順位付き)によるソートについて、Lambda関数を使用した要領について、備忘録を兼ねてまとめました。# 特定の列を基準としたソート
身長(昇順)、体重(降順)、名前(昇順:辞書順)にする場合は次の通り、優先するキーから順に記載します。
“` Python:Python
import pprintclass_data = [
[taro,178,60],
[jiro,180,82],
[saburo,178,65]
]class_data.sort(key=lambda x:(x[1],-x[2],x[0]))
pprint.pprint(class_data)#[[saburo,178,65],
# [taro,178,60],
# [jiro,180,82]]“`
:::note info
各キーの前に「-」を付けることで、昇順を降順に切り替えることができます。
:::参考にしたサイトを見失ったので、見つけられたら貼り付けます。
【Python3】野球の審判 (paizaランク C 相当)をやってみた
https://paiza.jp/works/mondai/c_rank_skillcheck_archive/umpire
**問題: 野球のストライクとボールのコール**
**入力**: 投球数 `N` と各投球の結果 `s_1` から `s_n` (`strike` または `ball`)
**出力**:
– ストライクが 1 〜 2 つたまったとき → `”strike!”`
– ストライクが 3 つたまったとき → `”out!”`
– ボールが 1 〜 3 つたまったとき → `”ball!”`
– ボールが 4 つたまったとき → `”fourball!”`**アプローチ**:
1. 標準入力から投球数 `N` と各投球の結果を読み込む
2. ストライクとボールのカウントを初期化
3. 各投球結果を基にカウントを更新し、適切なコールを出力**コード**:
“`python
# 標準入力からデータを読み込む
import sys
input = sys.stdin.read().strip().split()
N = int(input[0]) # 投球数
【Python3】宝くじ (paizaランク C 相当)をやってみた
https://paiza.jp/works/mondai/c_rank_skillcheck_archive/lottery
**問題: 宝くじの当選結果を判定**
**入力**: 当選番号 `b`、購入した宝くじの数 `n`、および購入した各宝くじの番号 `a_1` から `a_n`
**出力**: 各宝くじが何等に当選したかを出力**アプローチ**:
1. 当選番号 `b`、購入した宝くじの数 `n`、および購入した各宝くじの番号 `a_1` から `a_n` を標準入力から読み込む
2. 各宝くじの番号を当選番号と比較して何等に当選したか判定
3. 結果を出力**コード**:
“`python
# 標準入力からデータを読み込む
import sys
input = sys.stdin.read().strip().split()
b = int(input[0]) # 当選番号
n = int(input[1]) # 購入した宝くじの数
tickets = [int(input[i+2]) for i in range(n)] # 購入した宝くじの番号リスト
【Python3】Fizz Buzz (paizaランク C 相当)をやってみた
https://paiza.jp/works/mondai/c_rank_skillcheck_sample/fizz-buzz
**問題: 1からNまでの整数を表示するが、特定の条件で文字列を代わりに表示**
**入力**: 整数 `N`
**出力**:
– 3の倍数かつ5の倍数のときには、”Fizz Buzz”
– 3の倍数のときには、”Fizz”
– 5の倍数のときには、”Buzz”
– それ以外の数値はそのまま表示**アプローチ**:
1. 標準入力から整数 `N` を読み込む
2. 1からNまでの整数について条件を確認し、適切な文字列を生成
3. 結果を出力**コード**:
“`python
# 標準入力から整数Nを読み込む
N = int(input().strip())# 1からNまでの整数を順に処理
for i in range(1, N + 1):
# 3の倍数かつ5の倍数のとき
if i % 3 == 0 and i % 5 == 0:
print(“Fizz Buzz”)
# 3の倍数のとき
eli