忍者ブログ

 メモ書

monaca & ncmb

monacaでjQueryとncmbをincludeしておく


PR
READ MORE


var APP_KEY = '';
var CLIENT_KEY = '';

var ncmb = new NCMB(APP_KEY, CLIENT_KEY);
var storageName = 'testData';
var TestStorageClass = ncmb.DataStore(StorageName);

var testStorage = new TestStorageClass();
testStorage.set('key', 'ThisIsValue');
testStorage.save()
.then(function(object){
console.log(object);
})
.catch(function(error){
console.log(error);
});

解説
DataStoreのサブクラスのインスタンスでできること
.set(key, value)
key(String)にvalueをセットする。
valueとして使えるものは以下
文字列、配列、数値、日付、真偽値、緯度情報

.save()
セットしたデータを保存する。
これはthen, catchで拾える。

消し方
.set('消したいkey', null)
.update();
というようにnullを設定してから更新


取得方法
サブクラスから直接いく

.fetchAll()
.then(function(results){
console.log(results);
})
.catch();


絞り込み
.equalTo('key', 'value') // keyがvalueに等しいもののみ集める
.fetchAll()
.then()
.catch();

その他メソッド
notEqualTo(key, value)
greaterThan(key, value)
greaterThanOrEqualTo(key, value)
lessThan(key, value)
lessThanOrEqualTo(key, value)
in(key, array) // keyがarrayの要素のいずれかである
notIn(key, array)
exists(key) // keyに結び付けられたvalueがnullでない

メソッドチェインで条件をつなげるとANDとなる

| COMMENT:0 | HOME |

 おぺんcvメモ


imread(ファイル名, 1)は画像をBGR形式で格納する(それぞれ0~255)
1ピクセルが[b, g, r]というリストであらわされる
それが2次正方行列になっている


img = cv2.imread('sample.png', 1)
print(img)

出力結果
[[[ 39 127 255]
[204 72 63]]

[[127 127 127]
[ 29 230 181]]]

imread(ファイル名, 0)は画像をグレースケールで格納する
0~255の整数が2次正方行列に格納される

img = cv2.imread('sample.png', 0)
print(img)

出力結果
[[173 98]
[127 203]]

BGR形式をグレースケールに変換
※単にimreadの0で読み込んだ時と結果が異なるので注意
img = cv2.imread('sample.png', 1)
grayImg = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
print(grayImg)

出力結果
[[155 84]
[127 192]]

使えるのは
RGB2GRAY, BGR2GRAY,
RGB2HSV, BGR2HSV, HSV2RGB, HSV2BGR
などがある
(HSVは色相, 彩度, 明度)

img = cv2.imread('sample.png', 1)
imgHsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
print(imgHsv)

出力結果
[[[ 12 216 255]
[118 176 204]]

[[ 0 0 127]
[ 37 223 230]]]


ヒストグラムの計算
cv2.calcHist([img], [チャンネル番号], None , [256], [0, 256])

チャンネル番号は例えばimgがBGRであれば
Blueが0, Greenが1, Redが2である
imgがGrayなら0を指定すればよい


ヒストグラムの簡易プロット
from matplotlib import pyplot as plt
hist = cv2.calcHist([img], [0], None , [256], [0, 256])
plt.plot(hist)
plt.xlim([0, 256])
| COMMENT:0 | HOME |

 無題

pythonでopencvをやる備忘録

anaconda (python 3.5)をいんすこ
コマンドプロンプトで以下を入力
conda install -c https://conda.binstar.org/menpo opencv3

おわり


READ MORE


アプリのSpyderを開く (IDE)

opencvとその前提ライブラリnumpyをインポート
import cv2
import numpy as np

あとはご自由に
| COMMENT:0 | HOME |

 BrainF*ck in JavaScript

JavaScriptのあらゆるコードは![]+()の6種類の記号で書ける
READ MORE



1. 関数のコンストラクタを呼び出せばevalに相当する命令が書ける
Function.prototype.constructor('alert(0)')()
はalert(0)を実行する

単純に以下でもよい
Function('alert(0)')


2. FunctionはArrayオブジェクトの関数から呼び出せる
Array.prototype.join.constructor === Function //true
メソッドはjoinでなくても実装されていればなんでもよい。

Array.prototype.join.constructor('alert(0)')()
はalert(0)を実行する


3. Array.prototypeは[]で代用できる
[].join.constructor('alert(0)')()

4.プロパティは文字列に置き換えられる
[]['join']['constructor']('alert(0)')()

というわけで何らかのArrayのメソッド名1つと
'constructor'という文字列が![]+()の6種で出力できれば
使える文字列の範囲で任意のコードを打てるということになります

[][ARRAY_METHOD_NAME]['constructor'](CODE_STRING)()

あとは使える文字の範囲で打てるコードを使って、
さらに使える文字を拡張していく…の繰り返しで
すべての文字を使えるようにします。

というわけで文字列の出力を考えていきます

まず基本としてArray → Stringの暗黙の型変換について
Array.prototype.toStringは自身をjoinした文字列を返すようです。
ArrayがStringとして呼び出されるとjoinされた文字列が返されます。
例を挙げると
String([]) // ''
String([0]) // '0'
String([1]) // '1'
String(['a']) // 'a'
String('[0,1]') // '0,1'

Arrayを+演算子で呼び出すと文字列に型変換してから処理されます
[]+[] // ''
[1]+[] // '1'
'b'+[2] // 'b2'
ただし、[undefined]はこのようには機能しないので注意です。
0+[undefined] // '0'

Objectだったら大体String型として処理されるようです。

変数aのString型への型変換は
String(a)を使わずとも以下で書けます
a+[]

ではほかのStringへの型変換を見ていきます
String(true) // 'true'
String(false) // 'false'
String(undefined) // 'undefined'
String(NaN) // 'NaN'
String(Infinity) // 'Infinity'
こいつらはString型に型変換すると期待通りの文字列になります。

では簡単なundefinedを作ってみます
まず配列を作ります
a=[];

配列はオブジェクトなので実は数以外のキーも持てます
したがって値を持ってこようとしてもErrorにはなりません
a[''] // undefined

aを書き直すとこうなります
[]['']

配列のキーの部分にString以外を置くと
暗黙の型変換でStringに置き換わります
つまり
[][[]] // undefined
これでundefinedの完成です

次に文字列としての'undefined'を作ります
undefined+[]
でString(undefined)と同義の命令になります

よって書き下すと
[][[]]+[] // 'undefined'


次にtrueとfalseを作ってみます。
!aはaの否定を返しますが、その際にaをBoolean型に型変換します。
つまりBoolean(a)は!!aで代用できます。

さらに、ObjectからBooleanへの型変換はtrueとなるので
Objectの一種である[]を使って
!![]はtrueとなります
![]がfalseです

文字列としての'true', 'false'も簡単に作れます
[!![]]+[] // 'true'
[![]]+[] // 'false'


文字列は配列のように1文字ずつ取り出すことができます。
'undefined'.split('')という配列を扱うように文字を取り出せます。
例えば
'undefined'[0] // 'u'
'undefined'[1] // 'n'

よって0と1を作ることができれば任意の番地にアクセスできるので
'u', 'n', 'd', 'e', 'f', 'i'を得ることができます。

というわけで0と1を作ります
String型からNumber型への型変換のとき、
Stringの長さ(length)が0の場合はNumberとして、0に変換されます
つまり+''は0となります。
よって
+[] // 0
と書けます

Boolean(0)はfalseなので
!+[] // true
となります。

さらに、Numberへの型変換として、
Number(a)は+(a)とも書けるので、
これを用いると1は以下のように書けます
+!+[] // 1

trueは!![]でも書けるので
+!![]でも1を表現できます。(お好みで)
読みづらさ的には+!+[]のほうが高い気がします。

0と1ができたので早速英小文字を取り出しましょう

'undefined'[0]で'u'を得られるので書き下してみます。
(undefined+[])[0]
([][[]]+[])[+[]] // 'u'

'undefined'[1]で'n'が得られます
(undefined+[])[1]
([][[]]+[])[+!+[]] // 'n'

'undefined'[2]で'd'が得られます
(undefined+[])[1]
([][[]]+[])[!+[]+!+[]] // 'd'

2を作る上での注意は
2 = true + trueというところです
1を作るときは
1 = Number(true)
という感じで意識的に型変換をしなければなかったのが不要ということです
これにより文字数が少し減ります

'e'はundefinedから持ってくるよりもtrueから持ってきたほうが早いです
'true'[3]として'e'を持ってきましょう
(true+[])[1+1+1]
(!+[]+[])[!+[]+!+[]+!+[]] // 'e'

'f'もundefinedから持ってくるよりfalseから持ってきたほうが早いです
'false'[0]
(false+[])[0]
(![]+[])[+[]] // 'f'

'i'はundefinedから持ってきましょう。
'undefined'[5]
としたいところですが、5を作るために結構文字数がかかります。
1+1+1+1+1
!+[]+!+[]+!+[]+!+[]+!+[] // 5

ここでちょっとしたテクニックを使います。
何か適当に'undefined'の前に文字列を追加し、iを10番目や11番目に持ってきます。
('abcde' + 'undefined')['10'] // 'i'
keyの文字列は数値に型変換されるので無事に取り出せます。
'10'は'1'+'0'なので短く作ることができます。
1+[0]
(+!0)+[+""]
(+!+[])+[+[]]
+!+[]+[+[]] // '10'

'abcde'の部分は5文字であればなんでもいいので'false'にしましょう。
つまり
('false' + 'undefined')['10'] // 'i'
を書き下せばよいということになります。
([false]+undefined)['10']
([![]]+[][[]])[+!+[]+[+[]]] // 'i'

簡単ですね。
これで'u', 'n', 'd', 'e', 'f', 'i'の取得に成功しました。

次に'false'を分解しましょう。

'a'を取得します。
'false'[1]
(false+[])[+!0]
(![]+[])[+!+[]] // 'a'

'l'を取得します。
'false'[2]
(false+[])[2]
(![]+[])[!+[]+!+[]] // 'l'

's'を取得します。
'false'[3]
(false+[])[3]
(![]+[])[!+[]+!+[]+!+[]] // 's'

次に'true'を分解します。
't'を取得します。
'true'[0]
(true+[])[0]
(!+[]+[])[+[]] // 't'

'r'を取得します。
'true'[1]
(true+[])[1]
(!+[]+[])[+!+[]]

ついでにNaNを作っておきます。
NaNはStringをNumberに型変換するときに、
上手くいかないと返される値です。

'123'のように数に変換できる文字列であれば、
Numberとして123が返されます。
'abc'のような文字列をNumberに型変換すればよいわけです。
お手軽に作れる文字列は'false'ですね。
つまりNumber('false')を考えます。
+('false')
+([false])
+[![]] // NaN


以上で取得できた1文字の英小文字は以下のようになります。
'u', 'n', 'd', 'e', 'f', 'i', 'a', 'l', 's', 't', 'r'

この時点で'constructor'がほぼほぼ作れることが分かります。
あと必要なのは'c', 'o'ですね。
これをどう作るかを考えます。

関数のStringへの型変換を考えます。
String([].join)


chrome: "function join() { [native code] }"
firefox: "function join() {
[native code]
}"
opera: "function join() { [native code] }"
IE: "function join() { [native code] }"

ブラウザにもよりますが、
'function 'の9文字(半角スペース含む)の後に関数名() {が来る
というルールは変わらないようです。
(firefoxの場合そのあとの半角スペースが多いです。)

というわけなので'function 'の文字列は得ることができそうです。
問題はArrayで使えそうなメソッドがあるかということです。
'u', 'n', 'd', 'e', 'f', 'i', 'a', 'l', 's', 't', 'r'の文字のみで構成されたArrayのメソッドを探しましょう。

filterメソッドかfillメソッドがよさそうですね。
filterメソッドはchrome, firefox, IE(9以上), opera, safariで実装されているようです。
fillメソッドは名前が短い代わりにchrome, firefox, safariでしか実装されていないようです。

String([]['filter'])あるいはString([]['fill'])とすれば
先頭の9文字が'function 'である文字列を得ることができます。
少し書き下せば
([]['filter']+[])あるいは([]['filter']+[])ということです。

あとは文字列を+で足せばよいので
'filter'であれば
'f'+'i'+'l'+'t'+'e'+'r'
(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]] // 'filter'
'fill'であれば
'f'+'i'+'l'+'l'
(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(![]+[])[!+[]+!+[]] // 'fill'
というように6種記号で表すことができます。

以下では[]['filter']と[]['fill']をまとめて
Function.prototypeと表すことにします。
'filter', 'fill'のどれに選んだかは本質ではなく、
あくまでFunction.prototypeにあるからです。
そして、'filter'を使うか'fill'を使うかを決めれば
![]+()の6種類だけで表現できますね。

というわけで'function 'から得られる1文字英小文字を取得していきましょう。
'c'の取得
String(Function.prototype)[3]
(Function.prototype+[])[!+[]+!+[]+!+[]] // 'c'

'o'の取得
String(Function.prototype)[6]
としたいところですが、やはり10に合わせたほうが短くなります。
前に4文字足しましょう。
('true'+Function.prototype)[10]
(true+Function.prototype)[10]
(!+[]+Function.prototype)[+!+[]+[+[]]]

' 'の取得(半角スペース)
String(Function.prototype)[8]
としたいところですがやはりずらします。
2文字で手ごろなものがないので3文字ずらして11番を取得します。
NaNですね。
('NaN'+String(Function.prototype))[11]
(NaN+Function.prototype)[11]
(+[![]]+Function.prototype)[+!+[]+[+!+[]]]

ということなので使える英小文字で表せる関数を
自由に呼び出せるようになりました。
[]['filter']['constructor'](CODE_STR)()
[]['fill']['constructor'](CODE_STR)()
ということですね。

これらをFunction.prototype['constructor']とまとめて書くことにします。
文字列としての'alert()'はもう作ることができるので
Function.prototype['constructor']('alert()')()
とすれば6種だけでアラートを呼び出すことができます。

次に考えるべきことはすべての文字を作ることです。
すべての文字を作ることができれば、
すべての標準関数やオブジェクトを扱うことができます。
つまり![]+()の6種でjavascriptが制限なく書けるということです。

まずはすべての英小文字を作成しましょう。
そのために必要なのがNumber.prototype.toString()です。

Number.prototype.toString(radix)はradixに基数を指定すると
それを文字列として返します。
10進数でいうところの15は
16進数でいうところのfにあたるので
(15).toString(16) // 'f'
がとなります。

'(', ')', 'to'とすべての数字はもう作ることができたので、
文字列として'String'が得られれば
(15)['to' + 'String'](16)
と呼び出すことができます。

次に考えるべきことは'String'の取得です。
これはString.nameで得られます。
String.name // 'String'

String.prototype.constructor === String // true
であることを利用すれば'String'が得られそうですね。
''.constructor.name // 'String'
すなわち
([]+[])['constructor']['name'] // 'String'

さああと一息です。
'constructor', 'nae'は作成可能なので、'm'を作ります。

ここで使えるのがNumberです。
String(Number) // 'function Number() { ...'
String(Number)[11] // 'm'
(Number+[])[11]
((0).constructor+[])[11]
((+[])['constructor']+[])[11]
((+[])['constructor']+[])[[+!+[]]+[+!+[]]] // 'm'

これでやっと'name'が使えるようになったので
aからzのすべての英小文字が使えるようになりました。
(15)['to'+([]+[])['constructor']['name']](16) // 'f'
(31)['to'+([]+[])['constructor']['name']](36) // 'v'
(35)['to'+([]+[])['constructor']['name']](36) // 'z'

なお'String'の取得法につかったnameプロパティは非標準です。
nameプロパティを避けるとString(''.constructor)から'S'と'g'を取得
という流れになると思います。
'S'の取得
(0+''.constructor)[10] // 'S'
'g'の取得
(0+[false]+''.constructor)[20] // 'g'


toStringする際の基数などを工夫することによって
かかる字数を少なくすることができます。
(+('11'))['toString']('20') // 'b'
(+('101'))['toString']('21')[1] // 'h'
(+('40'))['toString']('21')[1] // 'j'
(+('20'))['toString']('21') // 'k'
+('211'))['toString']('31')[1] // 'p'
(+('212'))['toString']('31')[1] // 'q'
(+('31'))['toString']('32') // 'v'
(+('32'))['toString']('33') // 'w'
(+('101'))['toString']('34')[1] // 'x'
(+('35'))['toString']('36') // 'z'

'y'だけは特殊な作り方で短くできます。
Infinityを作ります。
とにかくでかい数字文字列を作って数に型変換します。
具体的には10の1000乗でInfinityになります。
+('1e1000') // Infinity
+([+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+[+!+[]]+[+[]]+[+[]]+[+[]]) // Infinity

'Infinity'[7] // 'y'
(NaN+[Infinity])[10] // 'y'
(+[![]]+[+(+!+[]+(!+[]+[])[!+[]+!+[]+!+[]]+[+!+[]]+[+[]]+[+[]]+[+[]])])[+!+[]+[+[]]] // 'y'

さて、すべての英小文字を取得することができました。
次に考えるべきことはString.fromCharCodeの使用です。
すなわち''['constructor']['fromCharCode']です。
英小文字はすべて使えるわけですから、問題なのは'C'だけです。
'C'を作成できればすべての英大文字が使用できます。
すなわち、すべての標準オブジェクトや関数を使用できます。
また、日本語なども使えるようになります。
''['constructor']['fromCharCode'](12354) // 'あ'

では'C'を取得しましょう。
String.toUpperCaseメソッドで大文字にできるのですが、
このメソッドを使うために'C'が必要で循環してしまいます。
よってもっと別のアプローチを考えなければなりません。

ここで使えるのがescape関数あるいはencodeURI関数です。
escape('<') // '%3C'
encodeURI('<') // '%3C'
気を付けたいのは、escapeは非推奨関数であるというところです。
escapeのほうが短くて済むのですが、非推奨関数を避けたい場合は
encodeURIのほうに軍配が上がります。

とは言っても、'I'は取得できますが、'R', 'U'の取得が困難です。
'I'はInfinityを利用して
(Infinity+[])[+[]]
(+(+!+[]+(!+[]+[])[!+[]+!+[]+!+[]]+[+!+[]]+[+[]]+[+[]]+[+[]])+[])[+[]] // 'I'
として取得すればよいでしょう。

'U'に関しては、
Function.prototype['constructor']('return{}')()['toString']['call']() // '[object Undefined]'
として取得する方法があります。
(NaN+Function.prototype['constructor']('return{}')()['toString']['call']())[11] // 'U'

'R'に関してはRegExpを利用します。
Function.prototype['constructor']('return/'+false+'/')() // /false/
とすればRegExpオブジェクト/false/が得られます。
これのconstructorがRegExpになるので、
Function.prototype['constructor']('return/'+false+'/')()['constructor'] // function RegExp() {...
(+[]+Function.prototype['constructor']('return/'+false+'/')()['constructor'])[10] // 'R'
となって無事に'R'を取得できます。

どちらを使うにせよ、
Function.prototype['constructor']('return escape')()('<')[2]
Function.prototype['constructor']('return encodeURI')()('<')[2]
とすれば'C'が取得できます。
最後に'<'を取得しましょう。

'<'の取得にはString.prototype.italicsメソッドまたは
String.prototype.linkメソッドを使います。
前者のほうが短くて済みますが非推奨です。
('k'をtoStringに頼らないといけないので長くなる)
('')['italics']()[0] // '<'
('')['link']()[0] // '<'

これですべての文字を使うことができます。
さらに、
Function.prototype['construction'](CODE_STR)()
を使えば任意のコードを実行できます。

では最後にHello, world!をやって終わりましょう。
[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]+(![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]+([]+[])[(![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(!![]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]()[+!+[]+[!+[]+!+[]]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((!![]+[])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+([][[]]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+!+[]]+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+!+[]]]+([][[]]+[])[+[]]+([][[]]+[])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(![]+[])[+!+[]]+(+(!+[]+!+[]+[+!+[]]+[+!+[]]))[(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(+![]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(+![]+[![]]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]](!+[]+!+[]+!+[]+[+!+[]])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]])()([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((!![]+[])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+([][[]]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+!+[]]+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+!+[]]]+(!![]+[])[!+[]+!+[]+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(![]+[])[+!+[]]+(+(!+[]+!+[]+[+!+[]]+[+!+[]]))[(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(+![]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(+![]+[![]]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]](!+[]+!+[]+!+[]+[+!+[]])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]])()(([]+[])[([![]]+[][[]])[+!+[]+[+[]]]+(!![]+[])[+[]]+(![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(![]+[])[!+[]+!+[]+!+[]]]()[+[]])[+[]]+(!+[]+!+[]+!+[]+!+[]+[!+[]+!+[]+!+[]+!+[]+!+[]+!+[]+!+[]+!+[]])+[])+(!![]+[])[!+[]+!+[]+!+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+[[]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]([[]])+[]+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+!+[]]]+(+(!+[]+!+[]+!+[]+[!+[]+!+[]]))[(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(+![]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(+![]+[![]]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]](!+[]+!+[]+!+[]+[!+[]+!+[]+!+[]])+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+([][[]]+[])[!+[]+!+[]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((!![]+[])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+([][[]]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+!+[]]+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+!+[]]]+([][[]]+[])[+[]]+([][[]]+[])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(![]+[])[+!+[]]+(+(!+[]+!+[]+[+!+[]]+[+!+[]]))[(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(+![]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(+![]+[![]]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]](!+[]+!+[]+!+[]+[+!+[]])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]])()([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((!![]+[])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+([][[]]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+!+[]]+(+[![]]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+!+[]]]+(!![]+[])[!+[]+!+[]+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(![]+[])[+!+[]]+(+(!+[]+!+[]+[+!+[]]+[+!+[]]))[(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(+![]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(+![]+[![]]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]](!+[]+!+[]+!+[]+[+!+[]])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]])()(([]+[])[([![]]+[][[]])[+!+[]+[+[]]]+(!![]+[])[+[]]+(![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(![]+[])[!+[]+!+[]+!+[]]]()[+[]])[+[]]+(!+[]+!+[]+[+!+[]])+[])+([]+[])[(![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(!![]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]()[+!+[]+[!+[]+!+[]]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]])()

| COMMENT:0 | HOME |

 opencvでテンプレートマッチング

必要なもの
python
numpy
opencv
PIL
READ MORE


画像ファイルの読み込み
import numpy
import cv2
import os.path
def readImg(fileName):
 if not os.path.isfile(fileName)
  raise FileNotFoundError(fileName)
 return cv2.imread(fileName, 1)

スクリーンキャプチャ
import numpy
import cv2
from PIL import ImageGrab
def captureScreen(x, y, w, h):
 image = ImageGrab.grab((x, y, w, h)) #引数はタプル 省略すると全体
 image = numpy.asarray(image) #cv2用に変換
 return cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

画像の表示
templeteImage = readImg('test.png')
cv2.imshow('desktop', templeteImage)
cv2.waitKey(0) #0はanykey
cv2.destroyAllWindows()

screen = captureScreen(0, 0, 600 , 400)
cv2.imshow('desktop', screen)
cv2.waitKey(0) #0はanykey
cv2.destroyAllWindows()


テンプレートマッチング
result = cv2.matchTemplete(screen, templeteImage, cv2.TM_CCOEFF_NORMED)
(minval, maxval, minloc, maxloc) = cv2.minMaxLoc(result)
(h, w, d) = templeteImage.shape

この時点で以下の情報がわかる
maxloc[0]: screen上のtempleteImageのx座標
maxloc[1]: screen上のtempleteImageのx座標
maxval: 類似度
w: templeteImageのwidth
h: templeteImageのheight
この情報を使って四角を書く

(続けて)
topLeft = (maxloc[0], maxloc[1])
bottomRight = (maxloc[0] + w, maxloc[1] + h)
outputImage = screen.copy() #ディープコピー
cv2.rectangle(outputImage, topLeft, bottomRight, 0x00ff00)
cv2.imwrite("output.png", outputImage)
| COMMENT:0 | HOME |
| HOME |NEXT

リンク

カレンダー

11 2016/12 01
S M T W T F S
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

カテゴリー

最新CM

[04/21 HermanOn]
[04/21 RonniehamE]
[04/21 StevenBaR]
[04/21 Haroldpr]
[04/21 StephenHozy]
[04/20 Nicolassr]
[04/20 Josephpi]
[04/20 JosephSoth]
[04/20 Douglasot]
[03/13 asa]

最新記事

(11/13)
(10/15)
(10/15)
(09/08)
(09/05)

ブログ内検索

プロフィール

HN:
飛び亀
HP:
性別:
非公開