投稿

Pythonで与えられた値が3の冪乗かを判定するプログラムの話。(LeetCode)

イメージ
冪乗のお話。 解答 冪乗のお話。 3の冪乗かどうかを判定するプログラムを求められました。 326. Power of Three 整数型の値、 n が引数として与えられた場合、それが3の冪乗かを判定し、冪乗ならば True 、冪乗でなければ False を返してください、っていう問題です。 なお、 n の値には以下の制約が存在します。 -2^31 <= n <= 2^31 - 1 さて、どうしましょう?ってことでメモ。 解答 とりあえず解ける解答。 class Solution : def isPowerOfThree ( self , n : int ) - > bool : if n == 0 : return False if n == 1 : return True for i in range ( 31 ) : if pow ( 3 , i ) == n : return True return False # Runtime: 240 ms, faster than 5.15% of Python3 online submissions for Power of Three. # Memory Usage: 14.4 MB, less than 13.91% of Python3 online submissions for Power of Three. pow関数 を使っています。 pow 関数は引数に (基数、冪乗) を取っています。ここでの使い方は、31乗までを範囲としているため、for文で1~31までの値を回します。 pow(3,1) == n pow(3,2) == n ............. といったように3の1乗から31乗までを調べます。 ただし、31という値を意識しすぎる余り、かなり遅くなっています。 遅い理由としては、正しくない場合、31回も回すことになっているからです。 しかし、解けるだけでいいのであればこれ

Pythonでのビット操作の話(LeetCode)

イメージ
この記事を書く理由 問題 解答 この記事を書く理由 LeetCodeでTop Interview Questions(面接のコーディング試験で聞かれやすい問題を集めたやつ)のEasy問題を解いている時にビット操作を求められたので念のため書いておきます。 問題 Number of 1 Bits 解答は ここ 。 符号なしの整数を引数として受け取り、その整数が持つ「1」ビットの数( ハミングウェイト とも呼ばれる)を返す関数を書いてください、という問題です。 Example 1: Input: n = 00000000000000000000000000001011 Output: 3 Explanation: The input binary string 00000000000000000000000000001011 has a total of three '1' bits. Example 2: Input: n = 00000000000000000000000010000000 Output: 1 Explanation: The input binary string 00000000000000000000000010000000 has a total of one '1' bit. Example 3: Input: n = 11111111111111111111111111111101 Output: 31 Explanation: The input binary string 11111111111111111111111111111101 has a total of thirty one '1' bits. Constraints: - The input must be a binary string of length `32`. 解答 # O(N) Solution class Solution : def hammingWeight ( self , n : int ) - > int : bits = 0 for i in range ( 32 ) :

SQLで連続するレコードの比較をする(LeetCode Database)

イメージ
概要 問題 解法 概要 前回 に引き続きSQLです。 問題 +---------------+---------+ | Column Name | Type | +---------------+---------+ | id | int | | recordDate | date | | temperature | int | +---------------+---------+ 今回用意されているテーブルは以上です。 以下のように、前日よりも気温が気温が高かった日のレコードの id を表示してください、という問題です。 解法 SELECT w1.Id FROM Weather w1, Weather w2 WHERE w1.Temperature > w2.Temperature AND subdate(w1.recordDate, 1) = w2.recordDate テーブルを二つ用意し、 subdate 関数を使うことで時間の差を求めます。 売り上げが前日よりも上の日とか抜き出すのに使えそうなSQLとなりました。 SQLは列の比較には強くても、行の比較は思ったより苦手ということを改めて感じました。

重複している要素をSQLで抜き出す(LeetCode Database)

イメージ
LeetCodeにDatabaseのカテゴリがある話。 問題 例 解法 LeetCodeにDatabaseのカテゴリがある話。 実はSQLの勉強にも使えるんですよね。 暇な時にEasyから潰したりしてます。 で、解くのはいいのですが、一度解いただけで解きっぱなしだとなんだかもったいない! あれ?記事として書いてパターン化しておいたら楽なんじゃない? と感じたので書いておきます。 問題 182. Duplicate Emails Person テーブルのEmail列に重複する文字列が存在するのでそれを抜き出して欲しい、という問題ですね。 例 ±—±--------+ | Id | Email | ±—±--------+ | 1 | a@b.com | | 2 | c@d.com | | 3 | a@b.com | ±—±--------+ 仮に上記のテーブルなら以下の形で返すようにクエリを設計してください。 ±--------+ | Email | ±--------+ | a@b.com | ±--------+ 注意 : Email列は全て小文字です。 解法 # Write your MySQL query statement below SELECT Email FROM Person GROUP BY Email HAVING COUNT(Email) > 1 重複というのはつまり二つ以上存在する、ということなので GROUP BY で分類します。 その後に条件( HAVING 句)として上記の重複の条件を集計関数である COUNT で数え上げを行えば無事完了です。 つまり、重複する要素だけを抜き出したいときは # Write your MySQL query statement below SELECT カラム FROM テーブル GROUP BY カラム HAVING COUNT(カラム) > 1 で一般化できるということですね。 今回はここまで。お疲れ様でした。

Brave×電通のレポートから読み解くBraveブラウザの将来性

イメージ
お堅いタイトルにしましたが・・・ お堅いタイトルにしましたが・・・ Executive Summery 翻訳 所感 Brave ‘Ad Choosers’ 翻訳 所感 Lack of Clutter Means Results 翻訳 所感 おわりに この記事の中身は Brave and dentsu international Show that Advertisers’ Messages Resonate with Ad Choosers のより詳細なWhite paper,いわゆる「白書」ですね。こちらの翻訳と個人的な所感を書いたものになっています。 ちなみに白書のタイトルは Engaging with the New ‘Ad Choosers’ です。 まずは書いてあることを訳し、その後に個人的な感想などを書く、という感じになっています。 Executive Summery 翻訳 消費者(ここではブラウザの利用者)はますます自身のネット上でのプライバシーの保護やメディアプラットフォーム上での過剰な広告への対応に関心を集めている。 同時に、サードパーティークッキーは2022年には廃止されることになっている。 広告主(=広告を打つ人)はいわゆる"監視型のメディア製品"を使わずにメディアの成果を促進する方法を求められている。 Braveブラウザは月間約2500万人のアクティブユーザーを持つ、ユーザーのプライバシーを保護することを目的として構築された初めてのプライバシーベースの広告プラットフォームである。 電通インターナショナルはBrave上での広告が他のデジタルキャンペーンに比べて広告主のブランディング指標にどのような影響を与えるかを調査した。 その結果、従来の広告モデルを用いたパブリッシャーと比べて、Braveの広告は他の類似したデジタルキャンペーンよりも優れている、ということが判明した。 デジタル広告のエコシステムからサードパーティクッキーが削除されていく中で、広告主が成功するには「Ad Choosers」を尊重して広告を結び付けていくことが重要である。 所感 サードパーティークッキーの廃止に関しては Choroniumのブログ でリリースされていましたね

Groovyで初めてコードを書いたのでわからないことメモ

イメージ
書いてみた。 Groovyの環境構築をした話。 にある通り、環境構築をした。 それだけだとなんだか味気ないのでコードを写経した。 そこで初めて対面したGroovyについてのメモ。 コードは ここ 。 写経元は 実践プログラミングDSL ドメイン特化言語の設計と実装のノウハウ 。 class Order { def security def quantity def limitPrice def allOrNone def value def bs def buy ( su , closure ) { bs = 'Sold' buy_sell ( su , closure ) } def sell ( su , closure ) { bs = 'Sold' buy_sell ( su , closure ) } private buy_sell ( su , closure ) { security = su [ 0 ] quantity = su [ 1 ] closure ( ) def getTo ( ) { this } // 1.Hook to intercept calling unvalid method. def methodMissing ( String name , args ) { order . metaClass . getMetaProperty ( name ) . setProperty ( order , args ) } def getNewOrder ( ) ) { order = new Order ( ) } // 2.Clojure to express designated method of calculating price. def valueAs (

Groovyの環境構築をした話。

イメージ
Groovyやろう Groovyやろう インストール そうしよう。 実践プログラミングDSL ドメイン特化言語の設計と実装のノウハウ でDSLという領域に興味が湧いたので本を読んでいくと、最初はJavaでプログラムを書いていたが、途中からGroovyがより表現力豊かで適しているという記述が。 ひとまず試してみるかぁということでLet’sインストール。 インストール macOSなのでHomebrewを使います。 $ brew install groovy インストール完了後にバージョンチェック。 $ groovy -version Groovy Version: 3.0.7 JVM: 15.0.2 Vendor: Oracle Corporation OS: Mac OS X $ export GROOVY_HOME=/usr/local/opt/groovy/libexec ついでにパスを通しておきます。 そんでもって起動。 $ groovyConsole & すると無事起動。 試しにHello World print "Hello World" するとHello World。 これだけだった。 Javaの環境構築してないとJVMのインストールとか入るのかな。