ためすう

Hash をマージする (Ruby)

2019-10-02

やったこと

Hash でマージするときの下記メソッドを使ってみました。

  • merge
  • update

確認環境

$ ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]

調査

ruby-hash.rb

h1 = { a: 100, b: 200, c: 300 }
h2 = { a: 10, d: 500 }

p h1.merge(h2) { |index, old, new| old + new }
p h1

p '---'

p h1.update(h2)
p h1

出力結果

$ ruby ruby-hash.rb
{:a=>110, :b=>200, :c=>300, :d=>500}
{:a=>100, :b=>200, :c=>300}
"---"
{:a=>10, :b=>200, :c=>300, :d=>500}
{:a=>10, :b=>200, :c=>300, :d=>500}

参考

fill を使ってみる (C++)

2019-10-02

やったこと

fill を使ってみます。

確認環境

$ g++ --version
g++ (Homebrew GCC 9.2.0) 9.2.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

調査

test.cpp

#include <bits/stdc++.h>
using namespace std;

int main() {
    int aaa[10];

    fill(aaa, aaa + 10, 3);

    for (int i = 0; i < 10; i++) {
        printf("i: %d value: %d\n", i, aaa[i]);
    }
}

出力結果

i: 0 value: 3
i: 1 value: 3
i: 2 value: 3
i: 3 value: 3
i: 4 value: 3
i: 5 value: 3
i: 6 value: 3
i: 7 value: 3
i: 8 value: 3
i: 9 value: 3
i: 10 value: 3

参考

make_pair を使ってみる (C++)

2019-10-02

やったこと

make_pair を使ってみます。

確認環境

$ g++ --version
g++ (Homebrew GCC 9.2.0) 9.2.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

調査

test.cpp

#include <bits/stdc++.h>
using namespace std;

int main() {
    pair<int, int> p[10];
    p[0] = make_pair(1, 100);
    p[1] = make_pair(2, 333);

    for (int i = 0; i < 2; i++) {
        printf("first: %d second: %d\n", p[i].first, p[i].second);
    }
}

出力結果

first: 1 second: 100
first: 2 second: 333

参考

ビット演算してみる (C++)

2019-10-01

やったこと

ビット演算してみます。

確認環境

$ g++ --version
g++ (Homebrew GCC 9.2.0) 9.2.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

調査

test.cpp

#include <bits/stdc++.h>
using namespace std;

int main() {
    int a = 1;
    cout << a << "\n";
    cout << std::bitset<8>(a) << "\n";

    int a2 = a << 2;
    cout << a2 << "\n";
    cout << std::bitset<8>(a2) << "\n";

    int a3 = a2 >> 1;
    cout << a3 << "\n";
    cout << std::bitset<8>(a3) << "\n";
}

出力結果

1
00000001
4
00000100
2
00000010

参考

pow を使ってみる (C++)

2019-10-01

やったこと

pow を使ってみます。

確認環境

$ g++ --version
g++ (Homebrew GCC 9.2.0) 9.2.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

調査

test.cpp

#include <bits/stdc++.h>
using namespace std;

int main() {
    std::cout << "pow(3.0, 2.0)  = " << std::pow(3.0, 2.0) << std::endl;
    std::cout << "pow(5.0, 3.0)  = " << std::pow(5.0, 3.0) << std::endl;
}

出力結果

pow(3.0, 2.0)  = 9
pow(5.0, 3.0)  = 125

参考

^ 演算子を使ってみる (C++)

2019-09-30

やったこと

^ 演算子 (排他的論理和) を使ってみます。

確認環境

$ g++ --version
g++ (Homebrew GCC 9.2.0) 9.2.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

調査

xor.cpp

#include <bits/stdc++.h>
using namespace std;

int main() {
    // 0b -> 2進数を表す
    int a =  0b11010110;
    int b =  0b01110101;

    cout << std::bitset<8>(a ^ b) << "\n";
}

出力結果

10100011

参考

upper_bound と lower_bound を使ってみる (C++)

2019-09-30

やったこと

下記メソッドを使ってみます。

  • upper_bound
  • lower_bound

確認環境

$ g++ --version
g++ (Homebrew GCC 9.2.0) 9.2.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

調査

upper_bound

指定された要素より大きい値が現れる最初の位置のイテレータを取得する

lower_bound

指定された要素以上の値が現れる最初の位置のイテレータを取得する。

lower_upper.cpp

#include <bits/stdc++.h>
using namespace std;

int A[10] = {1, 3, 3, 5, 7};

int main() {

    printf("%d\n", *upper_bound(A, A + 5, 3));
    printf("%d\n", *lower_bound(A, A + 5, 3));

    printf("%d\n", upper_bound(A, A + 5, 3));
    printf("%d\n", lower_bound(A, A + 5, 3));

    printf("%d\n", upper_bound(A, A + 5, 3) - lower_bound(A, A + 5, 3));
}

出力結果

5
3
117379276
117379268
2

参考

cv2.threshold を使ってみる

2019-09-29

やったこと

OpenCV の cv2.threshold を使ってみます。

確認環境

Google Colaboratory で試しました。

import cv2
print(cv2.__version__)
3.4.3

調査

import matplotlib.pyplot as plt
import cv2

fig = plt.figure(figsize=(10, 5))

img_bgr = cv2.imread('hoge.jpg')
img_rgb = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB)

fig.add_subplot(1, 3, 1)
ret_val, result_img = cv2.threshold(img_rgb, 95, 128, cv2.THRESH_TOZERO)
plt.imshow(result_img)

fig.add_subplot(1, 3, 2)
ret_val, result_img = cv2.threshold(img_rgb, 100, 255, cv2.THRESH_BINARY)
plt.imshow(result_img)

fig.add_subplot(1, 3, 3)
plt.imshow(img_rgb)

plt.show()

参考

cv2.erode を使ってみる

2019-09-28

やったこと

OpenCV の cv2.erode を使ってみます。

確認環境

Google Colaboratory で試しました。

import cv2
print(cv2.__version__)
3.4.3

調査

import matplotlib.pyplot as plt
import numpy as np
import cv2

img_bgr = cv2.imread('hoge.jpg')
img_rgb = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB)
fig = plt.figure(figsize=(10, 5))


filter_one = np.ones((3, 3))
my_filter = np.array([[1, 0, 0], [1, 0, 0], [1, 0, 0]], np.uint8)

fig.add_subplot(1, 3, 1)
result_img = cv2.erode(img_rgb, filter_one)
plt.imshow(result_img)

fig.add_subplot(1, 3, 2)
result_img = cv2.erode(img_rgb, my_filter)
plt.imshow(result_img)

plt.show()

参考

cv2.flip で画像を反転する

2019-09-28

やったこと

OpenCVの cv2.flip を使い、画像を反転します。

確認環境

Google Colaboratory で試しました。

import cv2
print(cv2.__version__)
3.4.3

調査

import matplotlib.pyplot as plt
import cv2

fig = plt.figure(figsize=(10, 5))
img_bgr = cv2.imread('hoge.jpg')
img_rgb = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB)

fig.add_subplot(1, 3, 1)
# 上下反転
result_img = cv2.flip(img_rgb, 0)
plt.imshow(result_img)

fig.add_subplot(1, 3, 2)
# 左右反転
result_img = cv2.flip(img_rgb, 1)
plt.imshow(result_img)

fig.add_subplot(1, 3, 3)
# 上下左右反転
result_img = cv2.flip(img_rgb, -1)
plt.imshow(result_img)

plt.show()

参考