投稿

ラベル(Introduction)が付いた投稿を表示しています

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のインストールとか入るのかな。

「問題解決力を鍛える!アルゴリズムとデータ構造」とLeetCodeで学ぶ再帰と動的計画法(メモ化)

イメージ
再帰とメモ化 問題 再帰とメモ化 問題解決力を鍛える!アルゴリズムとデータ構造 というアルゴリズムとデータ構造を学ぶのに良い本があります。 LeetCodeの問題を解いていた時に、この本の中で解説されていた例とすごく被っている内容があったので、記事にしてみようと思いました。 問題 1137. N-th Tribonacci Number 難易度はEasy。 再帰の入門にうってつけです。 問題解決力を鍛える!アルゴリズムとデータ構造 の4章の解説にもある通り、再帰関数のテンプレートは (戻り値の型) func(引数){ if(ベースケース){ return ベースケースに対する値; } func(次の引数) return 答え } 問題解決力を鍛える!アルゴリズムとデータ構造 第4章 設計技法(2):再帰と分割統治法より引用 といったものです。 今回解く問題は、 トリボナッチ数列Tnは次のように定義される。 T0 = 0, T1 = 1, T2 = 1, そして n >= 0 で Tn+3 = Tn + Tn+1 + Tn+2 となる。 nが与えられたとき、Tnの値を返す。 という内容です。 では、こちらをPythonでかつ再帰で解いてみましょう。 class Solution: def tribonacci(self, n: int) -> int: if n == 0: return 0 elif n == 1 or n == 2: return 1 return self.tribonacci(n-1) + self.tribonacci(n-2) + self.tribonacci(n-3) # Time Limit Exceeded しかし、これだとnが 30の時に時間切れとなり、正解とは認められません。 これは再帰で同じ処理が重複し、関数の呼び出し回数がとてつもない回数になっているためです。 ではこれを解決してみましょう。 class Solution: def tribonacci(self, n: int) -> int: memo =

Pythonでリストの中から被っている値を見つけよう!!LeetCodeの解法例あり

イメージ
リストの中から被っている値を見つけよう!! 基本 問題 解法 改良前 改良後 リストの中から被っている値を見つけよう!! という話。 見つけてその値を削除するなり、被っている値の数を数えるなり、被っている値は何なのかを返すなりは別にいいとして、個人的な方法をメモ代わりに取っておく。 基本 今回は考えやすいようにLeetCodeの問題を例に考えてみます。 問題 例えばこちら。 287. Find the Duplicate Number 難易度はMediumです。 問題としては与えられた数字のみのリストの中に1つだけ2つ存在する値があるのでそちらを探して欲しいという問題です。 例としては以下のような感じ。 Example 1: Input: nums = [1,3,4,2,2] Output: 2 Example 2: Input: nums = [3,1,3,4,2] Output: 3 Example 3: Input: nums = [1,1] Output: 1 Example 4: Input: nums = [1,1,2] Output: 1 解法 改良前 これの解放としてパッと思い浮かぶものとしては、二つのfor文で二つの値を比較しながら被っている値があれば行いたい処理を行う、というもの。 ただ、与えられたリストがソートされていないのでまずソートしないとその比較はできなくなります。 試しにPython3で書いてみました。 class Solution : def findDuplicate ( self , nums : List [ int ] ) - > int : ans = 0 nums = sorted ( nums ) for i in range ( len ( nums ) ) : for j in range ( i + 1 , len ( nums ) ) : if nums [ i ] == nums [ j ] : ans =

My first Engllish post.

 Welcome to Kuehar's blog!! Hi,I'm Kuehar. I'm working in Japanese tech company as an IT Engineer. In the near future,I'd like to work in IT Company based on Silicon Valley, but I have not take CS course when I was a student .I majored Economics. To pass IT Company interview,I have to study CS field(for example, Algorithms,Data Structure,Hardware,etc...) and explain it clearly. So,I am trying to take Online English course, Coursera and Online English Lessons now. Also,I read a lot of IT Books that I'm interested in. I am high motivated person and can take action,If you have a question,Please feel free to contact @KueharX on Twitter.  Thanks for reading!!