ゴールデンウィークにTwitchでゲーム配信を始めた話|古いMacBook Pro・PS4・OBSで配信環境を作ってみた

Image
古いMacBook ProでもTwitch配信はできる?PS4・Switch2用にOBS配信環境を作ってみた ゴールデンウィークで時間があったので、以前から少し興味があったTwitchでのゲーム配信を始めてみました。 アカウントは うえはら000 。 主にストリートファイター6や、趣味で遊んでいるゲームを配信しながら、だらだら話すようなスタイルで配信しています。 この記事では、実際にTwitch配信を始めるまでに用意した機材、古いMacBook Proで配信してみた感想、配信を始めて分かったことをまとめます。 これから「家庭用ゲーム機で配信を始めてみたい」「古いMacでも配信できるのか知りたい」という人の参考になれば嬉しいです。 配信を始めたきっかけ もともと格闘ゲームは好きで、ストリートファイター4シリーズをそれなりに遊んでいました。 スーパーストリートファイターIV AE Ver.2012の頃は、家庭用でやり込みつつ、休みの日に新宿のタイトーステーションにも遊びに行っていました。 当時は、AE時代と比べて大幅に弱体化された後のユンを使っていて、一瞬だけグランドマスターに到達したことがあります。 とはいえ、グランドマスターだった期間は本当に一瞬で、実際にはマスター上位からグランドマスターに届くか届かないかくらいの位置にいることが多かったです。 ちなみに、強かった頃のユンはほとんど触っていません。スパ4AEの頃はまだライトゲーマーで、フェイロンを使っていました。 その後、Ver.2012でユン・ヤンが大きく弱体化されたのですが、対戦しているうちに「弱くなったとはいえ、まだかなり強くないか?」と思うようになり、試しに使い始めました。 使ってみると思った以上に自分に合っていたので、そのまま使い続けて、最終的にグランドマスターに届くところまでやり込みました。 その後、ウルトラストリートファイターIVが発表され、ユンに有利なシステム(赤セビ)やキャラ自体の強化も追加されました。ユンは再び強キャラの一角に戻ったのですが、当時は大学受験の時期と重なってしまい、ほとんどプレイできませんでした。 受験が終わった後も、大学生活や社会人生活がそれなりに忙しく、気づけばストリートファイターからはかなり離れていました。 他のゲームはちょくちょく遊んでいたものの、ストリートファイターを本格的...

ゼロから始めるLeetCode Day108「300. Longest Increasing Subsequence」

概要

海外ではエンジニアの面接においてコーディングテストというものが行われるらしく、多くの場合、特定の関数やクラスをお題に沿って実装するという物がメインである。

どうやら多くのエンジニアはその対策としてLeetCodeなるサイトで対策を行うようだ。

早い話が本場でも行われているようなコーディングテストに耐えうるようなアルゴリズム力を鍛えるサイトであり、海外のテックカンパニーでのキャリアを積みたい方にとっては避けては通れない道である。

と、仰々しく書いてみましたが、私は今のところそういった面接を受ける予定はありません。

ただ、ITエンジニアとして人並みのアルゴリズム力くらいは持っておいた方がいいだろうということで不定期に問題を解いてその時に考えたやり方をメモ的に書いていこうかと思います。

Leetcode

Python3で解いています。

ゼロから始めるLeetCode 目次

前回
ゼロから始めるLeetCode Day107「98. Validate Binary Search Tree」

次回
ゼロから始めるLeetCode Day109「213. House Robber II」

Twitterやってます。

問題

300. Longest Increasing Subsequence
難易度はMedium。
コーディング面接対策のために解きたいLeetCode 60問からの抜粋です。

問題としては、整列されていない整数の配列が与えられたとき、最も長く増加する部分列の長さを求めなさい、というものです。

Example:

Input: [10,9,2,5,3,7,101,18] Output: 4
Explanation: The longest increasing subsequence is [2,3,7,101], therefore the length is 4.

解法

class Solution:
    def lengthOfLIS(self, nums: List[int]) -> int:
        if not nums:
            return 0
        dp = [1]*len(nums)
        dp[-1] = 1
        for i in reversed(range(len(nums))):
            for j in range(i+1,len(nums)):
                if nums[i] < nums[j]:
                    dp[i] = max(dp[i],dp[j]+1)  
        return max(dp)
# Runtime: 1220 ms, faster than  44.36%  of  Python3  online submissions for  Longest Increasing Subsequence.
# Memory Usage: 14.1 MB, less than  28.52%  of  Python3  online submissions for  Longest Increasing Subsequence.

動的計画法で解きました。
二重にfor文を回しているので計算量はO(N^2)ですね。

それぞれの考え方としては、

[10,9,2,5,3,7,101,18]

一つ目のfor文でreversedで要素を逆順に取り出すのをfor文で回し、二つ目のfor文でi+1からnumsの範囲で回します。

この処理をテストケースの中で見てみると以下のようになります。

# nums[i]
101  
7  
7  
3  
3  
3  
5  
5  
5  
5  
2  
2  
2  
2  
2  
9  
9  
9  
9  
9  
9  
10  
10  
10  
10  
10  
10  
10
# nums[j]
18  
101  
18  
7  
101  
18  
3  
7  
101  
18  
5  
3  
7  
101  
18  
2  
5  
3  
7  
101  
18  
9  
2  
5  
3  
7  
101  
18

これらの大小を比較し仮にnums[j]nums[i]よりも大きい場合、すなわち増加している場合は、用意したdpに代入し続けるときちんとそれぞれの増加する部分列の長さが入っていることが分かります。

# dp
[2, 2, 4, 3, 3, 2, 1, 1]

そして最終的にmax関数で最大値を抽出して返せば通ります。

YouTubeとか見てみると解説動画が多いのでいろんな動画を見てみましたが、やはりDPで解いている人が多い印象ですし、中にはDPの練習として非常に良い問題だと言っていたのでDPの練習をしたい人には良い問題かもしれません。

では今回はここまで。お疲れ様でした。

Comments

Popular posts from this blog

【OSLog】How to log a Swift project

Principles of UX/UI Designでこんなことを学んでいるよ 第一週 User-centerd design①

Swiftで使うQueueのテンプレート