どんなセカンドライフがいい?

セカンドライフへのウォーミングアップ

今日の単語 - decline

decline

カタカナ発音

「ディクライン」

コアイメージ

語源は、"de"が「~から」「下」、"cline"が「傾ける」であり、「 下へ傾く 」がコアイメージになります。

意味

下に傾くというコアイメージからネガティブな意味を持ちます。 何かが下へ傾いていくことを表したり、申し出や要求などを下へ傾けることを表します。

  • 減少する、衰退する、低下する
  • 辞退する、断る

declineで画像検索

例文

  • The population of this city has declined by 10% in the last decade. (この都市の人口は過去10年間で10%減少した。)
  • The hill has a gentle decline towards the river. (丘は川に向かってなだらかに傾斜している)
  • He declined to comment on the rumor.(彼は噂についてコメントするのを断った)

競技プログラミング初心者のためのatCoder参加記録(Beginner Contest 337)

問題文

2024年1月20日(土)21時に行われた ABC337 の C問題について解説します。

問題解説

問題文の入力例1を例にとって確認します。

入力値Nが6なので、1列に6人並んでいます。先頭から人1, 人2, 人3, 人4, 人5, 人6と呼びます。

図1 人1~6

次の入力値A1~A6(4 1 -1 5 3 2)は、人nがどの人の後ろに並んでいるのかを示しています。-1 は先頭です。図で表すと以下のようになります。この値が後ろの人が誰なのかを示すポインターとして使用できます。

図2 A1~6

そのポインターをキーとして順番に並び替えた図が以下になります。

図3 並び替え

そして、先頭から順にその人の番号を出力すればOKですね。

解答例

図2を参考に入力値は、以下のような体系で取り込みます。

入力値をどう扱うかを考えます。制約条件で人の数は最大 3x105 なので、ポインターをキーとしてForループで後ろの人を探していたら TLEに引っかかりそうです。ですので、ポインターをキー値としてもつ辞書型を使用してこの問題をクリアします。

図4 入力値を辞書型で取り込む

これをコーディングしたものが以下です。enumerate関数を使用して取得したインデックスは、後ろの人が誰なのかを示すvalue値として使用します。

N=int(input())
#> N:6

#入力値Aを取り込みます。
A=list(map(int, input().split()))
#> A:[4, 1, -1, 5, 3, 2]

#入力値を辞書型で扱えるようにする。
dicA={}
for i, a in enumerate(A):
    dicA[a]=i+1
#> dicA:{4: 1, 1: 2, -1: 3, 5: 4, 3: 5, 2: 6}

「#入力値を辞書型で扱えるようにする。」部分は以下のように1行にすることが可能です。

dicA={a:i+1 for i, a in enumerate(A)}

そして、次に先頭から順に後ろの人を探していく部分をコーディングします。処理を図で示すと以下のようになります。

図5 後ろの人を探していく処理

コーディングすると以下のようになります。

ans=[]  #答えを格納するリストを初期化
key=-1  #キー値を格納する変数を-1:先頭にしておく。
#人数分ループ
for _ in range(N):
    #キー値を元にうしろの人のキー値(value)を取得する。
    key=dicA[key]
    #答えリストにうしろの人のキー値を追加
    ans.append(key)
#> ans:[3, 5, 4, 1, 2, 6]

#答えリストを出力
print(*ans)
#> 3 5 4 1 2 6

最後に

辞書型を使用することで、見た目もスッキリして TLEもクリアできるプログラムが作成できました。

今日の単語 - depend

depend

カタカナ発音

「ディィペェンドゥ」

コアイメージ

語源は、"de"が「~から」「下」、"pend"が「ぶら下がる」であり、「 下にぶらさがる 」がコアイメージになります。

意味

人にぶら下がっているというイメージから以下のような意味を持っています。rely on も同様の意味を持ちますが、rely方が一般的に良く使われています。dependは少しネガティブなニュアンスが含まれます。

  • ~に頼る
  • ~に依存する
  • ~次第である

豆知識

「depend」は、形容詞としても使われます。例えば、「dependent」は「依存している」「従属している」という意味です。また、「independent」は「独立している」「自立している」という意味です。このように、「depend」は、自分の力で生きているか、他人や物事に頼っているかという関係性を表すときに使われます。

dependで画像検索

例文

  • I depend on my mother to wake me up every day. (私は毎日、母に起こしてもらっています。)
  • This plan depends on everyone’s cooperation. (この計画は、みんなの協力にかかっている。)

では、良い一日を!

今日の単語 - encourage

encourage

カタカナ発音

「インカァーリィヂュ」

コアイメージ

"courage"が「勇気」、"en"が「~する」がコアなので、「 勇気づける 」がコアイメージになります。

意味

  • 奨励する
  • 励ます
  • 促進する

encourageで画像検索

ほとんどの画像が「奨励する、はげます」という意味を表すものになっています。

例文

  • He encouraged me to try again. (彼は再挑戦するように私を励ました。)
  • Use your experiences to encourage others. (あなたの経験を他人を励ますために使いなさい。)

今日の単語 - regularly

regularly

カタカナ発音

「レェグュゥラァ(ル)リィ」

コアイメージ

「特定の規則やパターンに従って行なわれること、または通常の状態や標準的な状態を示すこと」

意味

  • 定期的に、いつものように
  • すっかり、徹底的に

regularlyで画像検索

ほとんどの画像が「定期的に」という意味を表すものになっています。

例文

  • I exercise regularly to stay healthy. (私は健康のために定期的に運動する。)
  • He was regularly beaten by his opponent. (彼は相手にすっかりやられた。)
  • The advantages of seeing a Doctor regularly.(定期的に医者にかかることのメリット)

競技プログラミング初心者のためのatCoder参加記録(Beginner Contest 336)

ABC336は、いつもの土曜日ではなく日曜日の21時に開催されました。私は翌日の仕事に差し支えるのでやむなく不参加でした;;

問題文

2024年1月14日(日)21時に行われた ABC336 の C問題について解説します。

問題解説

良い整数:0, 2, 4, 6, 8 で構成された数値を昇順に並べ、小さい方から N番目の整数を返す問題です。

表にすると以下のようになります。例えば、N:12が入力された場合、12番目の値:42 が答えになります。

解答例

Nの制約が 1012 なのでループで単純に処理すると 実行時間制限(LTE)に引っかかってしまいます。ですので、入力値 N と 出力値との間に何らかの関係性を見出す必要があります。

  • 作成した表を眺めると、2ずつ増えて10で2つ桁上がりしています。

  • ここで閃くかどうかが分かれ道になるのですが、「良い整数」を2で割ってみます。 すると値が 5進数になっていることが解ります。

  • 「良い整数」が0からスタートしているので、便宜上 Nもそれに合わせ N-1 にします。

  • N-1は、10進数で 「良い整数/2」が 5進数の関係になっているので、10進数から 5進数へ変換すればOKなのです。

  • 後は変換結果を 2倍にして元に戻し出力するだけです。

numpyを使用したプログラムの解説

numpyのbase_reprという 10進数から N進数へ変換するサブルーチンを使用した場合、コメント除けば4行でコーディングできます。

numpyモジュールについては、次のドキュメントを確認ください。 numpy base_reprサブ

#numpyモジュールインポート
import numpy as np

#入力値を取得
N=int(input())-1

#numpyのbase_reprサブを使用して10進数->5進数変換
n5=int(np.base_repr(N, 5))

#変換結果を2倍にして出力
print(n5*2)

変換処理を自作する場合のプログラムの解説

N=int(input())-1

#10進数->base進数へ変換するサブ
def base10int(value, base):
    if (int(value / base)):
        return base10int(int(value / base), base) + str(value % base)
    return str(value % base)

n5 = int(base10int(N, 5))
print(n5*2)

最後に

入力値と出力値の関係性が導き出せるか否かが運命の分かれ目になる問題でした。 次回は土曜日開催ですので、眠たい目を擦りながらも参加したいと思います。

今日の単語 - tend

tend

カタカナ発音

「テェンドゥ」

コアイメージ

「ある対象に向かって伸びている」

意味

コアイメージの通り、ある方向に向かいがちであったり、ある対象に手が伸びて世話や管理をするといった意味があります。

  • 傾向がある。しがちである。
  • 世話をする。
  • 管理する。運営する。

tendで画像検索

例文

  • I tend to drink coffee a lot while working.(私は仕事中にコーヒーを飲みがちだ。)
  • My wife tends to the children.(妻は子供たちの世話をする。)
  • She tends to a coffee shop.(彼女はコーヒーショップを経営している。)