-
Python Pandas – CustomBusinessHourオフセットオブジェクトからカスタム営業時間の開始時刻を24時間形式で表示する方法
CustomBusinessHourオフセットオブジェクトからカスタム営業時間の開始時刻を24時間形式で表示するには、Pandasが提供する CustomBusinessHour.start プロパティを使用します。このプロパティを参照することで、オフセットに設定された営業開始時刻を簡単に取得できます。なお、CustomBusinessHourはDateOffsetのサブクラスであり、標準的な営業時間(平日9:00〜17:00など)とは異なる、独自の営業時間帯を定義したい場合に便利です。開始時刻や終了時刻だけでなく、休業日(holiday)や曜日の指定も可能です。実装の手順まず、必要なライブラ
-
Python Pandas:CustomBusinessHourオフセットオブジェクトのendプロパティでカスタム営業時間の終了時刻(24時間形式)を取得する方法
CustomBusinessHourオフセットオブジェクトからカスタム営業時間の終了時刻を24時間形式で表示するには、Pandasの CustomBusinessHour.end プロパティを使用します。この記事では、実際のコード例とともに、その使い方をわかりやすく解説します。必要なライブラリのインポートまず、必要なライブラリをインポートします。import pandas as pdTimestampオブジェクトの作成Pandasでタイムスタンプオブジェクトを設定します。timestamp = pd.Timestamp(2021-11-14 05:20:30)CustomBusinessHou
-
Python Pandas入門:CustomBusinessHourがアンカーされているかどうかを確認する方法
指定されたCustomBusinessHour(カスタム営業時間オフセット)がアンカー(固定)されているかどうかを確認するには、PandasのCustomBusinessHour.is_anchored()メソッドを使用します。このメソッドは、オフセットが特定の時刻に固定されている場合にTrueを返します。必要なライブラリのインポートまず、必要なライブラリをインポートします。import pandas as pdタイムスタンプの作成Pandasでタイムスタンプオブジェクトを設定します。timestamp = pd.Timestamp(2021-11-14 05:20:30)CustomBusi
-
Python Pandas CustomBusinessHour – 指定したタイムスタンプがオフセット上にあるかどうかを確認する方法
指定したタイムスタンプがカスタム営業時間のオフセット上にあるかどうかを確認するには、Pandasの CustomBusinessHour.is_on_offset() メソッドを使用します。確認したいタイムスタンプを引数として渡すだけで、オフセット上にある場合は True、そうでない場合は False が返されます。 CustomBusinessHourとは CustomBusinessHour は、Pandasの日付オフセットクラスである DateOffset のサブクラスです。標準的な営業時間(デフォルトは9:00〜17:00)ではなく、独自に定義した営業時間を扱いたい場合に便利です。st
-
Pythonで木の辺を1本取り除いたときの部分木のノード値合計の差の最小値を求めるプログラム
問題の概要ノードに1からnまでの番号が振られた木があるとします。各ノードには整数値が格納されています。ここで、木からある1本の辺を取り除くと、木は2つの部分木に分割されます。このとき、2つの部分木のノード値の合計の差が最小になるようにしたいと考えます。私たちのタスクは、その最小の差を求めて返すことです。木は辺のリストとして与えられ、各ノードの値も併せて提供されます。例として、n = 6、edge_list = [[1, 2], [1, 3], [2, 4], [3, 5], [3, 6]]、values = [15, 25, 15, 55, 15, 65] が入力された場合、出力は 0 になり
-
Pythonで全都市の市民が市場にアクセスできるようにする最小コストを求めるプログラム
問題の概要n個の都市と、それらを結ぶm本の道路候補があるとします。市民が日用品を購入するには市場へのアクセスが必要ですが、現時点ではどの都市にも市場は存在せず、都市間の道路もまだ建設されていません。2つの都市間に双方向の道路を建設できるのは、次の条件を満たす場合のみです。片方の都市に市場が存在すること市場のある地点から道路を経由してその都市へ到達できること道路を1本建設するコストは x、市場を1つ建設するコストは y として与えられます。求めたいのは、すべての都市の市民が市場にアクセスできるようにするための最小コストです。配列 cities には、どの都市同士を道路で接続できるかという情報が含
-
Pythonで「控えめな行列」の配置パターン数を数えるプログラムの作成方法
問題概要 2つの整数 n と m が与えられたとき、n × m の「控えめな行列(humble matrix)」として成立しうる配置の総数を求めます。ある行列が控えめな行列とみなされるのは、以下の条件を満たす場合です。 1 から n × m までの各要素が、それぞれちょうど1回ずつ含まれていること 任意の2つのインデックスの組 (i1, j1) と (i2, j2) について、(i1 + j1) < (i2 + j2) であるならば、Mat[i1, j1] < Mat[i2, j2] が必ず成り立つこと 答えは非常に大きな値になる可能性があるため、結果は 10^9 + 7 で
-
Pythonで配列除去ゲームの勝者を求めるプログラム
AmalとBimalが、いくつかの数値を含む1つの配列Aを使ってゲームを行うことを考えます。ゲームのルールは以下の通りです。必ずBimalが先手です。各ターンで、プレイヤーは配列内の最大要素を削除し、その要素より右側にあるすべての要素も同時に削除します。2人のプレイヤーは交互に手番を行います。残りの要素をすべて取り除いたプレイヤーが勝者となります。例えば、入力が nums = [5,2,6,3,4] の場合、出力は「Amal」になります。まずBimalが最大要素の6とその右側の要素[3,4]を削除して配列は[5,2]となり、次にAmalが残りの要素をすべて削除するため、勝者はAmalです。解法
-
Pythonでレンガ除去ゲームの最大スコアを求めるプログラム
アマルとビマルがゲームをしているとします。配列 nums は、上に番号が書かれた n 個のレンガを表しています。このゲームでは、プレイヤーは交互に山の上から1個、2個、または3個のレンガを取り除くことができ、取り除いたレンガに書かれた数字がそのプレイヤーのスコアに加算されます。常にアマルが先手であるとき、アマルが確保できる最大のスコアを求める必要があります。例えば、入力が nums = [1,2,3,4,5] の場合、出力は 6 になります。アマルは最初に {1}、{1,2}、{1,2,3} のいずれかを取ることができます。もし最初に2個か3個をまとめて取ると、ビマルが残りをすべて取って最大の
-
【Python】強盗たちは警備員に捕まらずに金庫を奪えるか?判定アルゴリズムの実装方法
問題の概要 N人の強盗がある金庫を襲おうとしているとします。警備員はG時間だけ現場を離れ、その後戻ってきます。各強盗には金庫内で作業するのに必要な時間がそれぞれ決まっており、同時に金庫に入れるのは最大2人までです。 このとき、「強盗たちが警備員に捕まらずに金庫を奪うことは可能か?」を判定するのがこの問題です。判定の際には、次のルールを考慮する必要があります。 ある強盗が時刻tに金庫へ入り、同じ時刻tに別の強盗が出る場合、2人が同時に金庫内にいたことにはなりません。 警備員が時刻Gに金庫に入った瞬間に、強盗がちょうど時刻Gに出たとしても、警備員はその強盗に気づきません。 具体例 入力が N
-
Pythonで全都市を周遊できる出発地点の数を求めるプログラム
問題の概要 0からn-1までの番号が付けられたn個の都市と、n本の一方通行の道路があるとします。都市iからは必ず都市(i + 1) % nへ移動でき、全体としては「0 → 1 → 2 → ... → n-1 → 0」という環状のルートになります。ここで、燃料タンクの容量がcap単位である車を1台所有していると考えます。各都市iには到着時にfuel[i]単位の燃料を補給することができ、都市iから次の都市(i + 1) % nへ移動するにはcosts[i]単位の燃料を消費します。 このとき、「すべての都市を巡り、最終的に出発した都市へ戻ってこられる」ような出発地点となり得る都市がいくつあるかを求め
-
Pythonで厳密に増加するカラフルなキャンドル列の数を求めるプログラム
左から右へ一列に並んだ n 本のキャンドルがあるとします。左から i 番目のキャンドルは高さ h[i] と色 c[i] を持っています。さらに整数 k が与えられ、1 から k までの範囲に色が存在することを表します。ここで、「厳密に増加するカラフルなキャンドルのシーケンス」が何通り存在するかを求めるのが問題です。増加しているかどうかは高さに基づいて判定され、1 から k までのすべての色について、それぞれ少なくとも 1 本のキャンドルが含まれている場合に、そのシーケンスは「カラフル(colorful)」であるとみなされます。答えが非常に大きくなる可能性があるため、結果は 10^9 + 7 で
-
Pythonで解く:ちょうどk回の隣接スワップ後と最大k回のスワップ後に得られる数列の個数
1からnまでの自然数が順に並んだ配列Aがあるとします。このとき、「ちょうどk回の隣接スワップを行った後に得られる数列の数(S1)」と、「最大k回のスワップを行った後に得られる数列の数(S2)」をそれぞれ求めます。ここでいう隣接スワップとは、インデックスiとi+1にある要素を入れ替える操作のことです。 問題の概要と入出力例 例として、n = 3、k = 2 の場合を考えてみましょう。元の配列は [1, 2, 3] で、このときの出力は 3, 6 になります。 ちょうど2回の隣接スワップ後:[1, 2, 3]、[2, 3, 1]、[3, 1, 2] の3通り → S1 = 3 最大2回のスワップ
-
Pythonで最初のn個の自然数の順列からマジックセットの数を求めるプログラム
問題の概要 最初のn個の自然数からなる配列Aと、その一つの順列P{p1, p2, ..., pn}が与えられます。このとき、以下の条件を満たす「マジックセット」と呼ばれる順列が全部でいくつ存在するかを求めます。 谷(局所最小値)の条件:位置a[1], a[2], ..., a[k]にある要素は、両隣の要素よりも小さくなければなりません。すなわち、P[a[i] - 1] > P[a[i]] < P[a[i] + 1] を満たします。 山(局所最大値)の条件:位置b[1], b[2], ..., b[l]にある要素は、両隣の要素よりも大きくなければなりません。すなわち、P[b[i]
-
Pythonで「数を減らすゲーム」の勝者を求めるプログラム
問題の概要AmalとBimalが一つのゲームをプレイしているとします。2人はある整数nを持っており、まずそれが2の累乗であるかどうかを確認します。もし2の累乗であれば、その数を2で割ります。そうでなければ、nより小さい最も近い2の累乗の数だけ値を減らします。そして、数を1にまで減らした方が勝者となります。Amalが必ず先手であるとき、勝者の名前を求めるプログラムを作成しましょう。例として、入力が n = 19 の場合を考えてみます。19は2の累乗ではないため、Amalは16まで減らします。次にBimalが8にし、Amalが4に、Bimalが2にし、最後にAmalが1にして勝利します。したがって
-
Pythonでセット要素除去ゲームの勝者を判定するプログラムを作成する方法
問題概要 1からnまでの自然数の集合 {1, 2, ..., n} があります。Amal(アマル)と Bimal(ビマル)の2人が、この集合を使って以下のルールでゲームを行います。 必ず Amal が先手です。 各ターンで、手番のプレイヤーは集合の中から素数 p を1つ選び、p とその倍数をすべて集合から取り除きます。 手を打てなくなったプレイヤーの負けです。n が与えられたとき、勝者の名前を求めてください。 例えば入力が n = 5 の場合、出力は「Amal」になります。初期状態の集合は {1, 2, 3, 4, 5} です。まず Amal が p = 2 を選ぶと、2 と 4 が取り除
-
Pythonで塔の高さを減らすゲームの勝者を求めるプログラム
問題の概要 高さがそれぞれ異なる n 本の塔があり、その高さが配列 height で与えられているとします。Amal(アマル)と Bimal(ビマル)の2人が、次のルールに従ってゲームを行います。 Amal が必ず先手です。 各ターンで、手番のプレイヤーは高さ X の塔を1本選び、その高さを Y に変更します。ただし 1 <= Y < X であり、Y は X を割り切る必要があります。 最初に手を打てなくなったプレイヤーが負けとなります。 このゲームの勝者の名前を求めるのが目的です。 たとえば入力が height = [3,1,2] の場合、出力は Bimal になります。初期
-
Pythonで塔壊しゲームの勝者を見つけるプログラム
高さを表す配列 height が与えられているとします。ここには高さの異なる n 本の塔があり、Amal(アマル)と Bimal(ビマル)の2人が次のルールでゲームを行います。必ず Amal が先手です。各手番で、現在のプレイヤーは高さ X の塔を1本選び、それを高さ Z の塔 Y 本に分解します(ただし Y × Z = X、かつ X と Y はどちらも 1 より大きい整数)。自分の手番で動かせる塔がなくなったプレイヤーの負けとなります。このゲームの勝者の名前を求めるのが課題です。例えば入力が height = [3,1,2] の場合、答えは Bimal になります。初期状態は {3, 1,
-
Pythonで先手が必ず勝てる初手の選び方の数を求めるプログラム
問題の概要アマルとビマルがゲームをしているとしましょう。2人のもとには n 個の容器があり、それぞれに1個以上のチョコレートが入っています。容器には 1 から N までの番号が付けられており、i 番目の容器には count[i] 個のチョコレートが入っています。ゲームの進行は以下の通りです。先手のプレイヤーが1つの容器を選び、そこから1個以上のチョコレートを取り除きます。次に後手のプレイヤーが空でない容器を選び、そこから1個以上のチョコレートを取り除きます。これを交互に繰り返し、チョコレートを1個も取れなくなったプレイヤーが負けとなります。アマルが先手であるとき、その後必ず勝てるような初手の選
-
Pythonで2点間の直線上に存在する整数座標(格子点)の数を求めるプログラム
2つの点 (p1, q1) と (p2, q2) が与えられたとします。この2点を結ぶ直線上に存在する整数座標(x座標・y座標がともに整数である点、いわゆる格子点)の数を求めるのが課題です。 例として、p1 = 3、q1 = 3、p2 = 6、q2 = 6 が入力された場合、出力は 2 になります。実際に直線を描いてみると、(5, 5) と (6, 6) の2点が直線上に位置していることが確認できます。 解法のアプローチ:最大公約数(GCD)を活用する この問題は、最大公約数(GCD: Greatest Common Divisor)を使うことで効率的に解けます。2点間の内部に存在する格子点の