paiza オンラインハッカソン vol.6 をやってみた

これも挑戦。使用言語は Ruby。どれも超簡単なので簡潔に。
 

六村リオ

問題。結果

コード。

operations = []
gets.to_i.times {operations << gets.split.map(&:to_i)}

water = coffee = 0.0

operations.each do |op, q|
  case op
  when 1 then water  += q
  when 2 then coffee += q
  when 3
    r = 1 - q / (water + coffee)
    water  *= r
    coffee *= r
  end
end

puts (coffee * 100 / (water + coffee)).to_i

 

霧島京子

問題。結果

コード。

n = gets.to_i
masu = gets.split.map(&:to_i)
deme = []
gets.to_i.times {deme << gets.to_i}

deme.each do |pos|
  memo = []
  loop do
    if pos == n - 1
      puts "Yes"
      break
    elsif memo.include?(pos) or pos < 0 or pos >= n or masu[pos].zero?
      puts "No"
      break
    else
      memo << pos
      pos += masu[pos]
    end
  end
end

 

緑川つばめ

問題。結果

コード。

n = gets.to_i

puts n + n / 10 + n % 10

 

全体的に何だかどんどん簡単になっているような…。プログラミングを始めたばかりくらいの人向けかな?


paiza オンラインハッカソン vol.5 をやってみた

使用言語は Ruby です。画像クリックで詳細が出ます。
 

手紙の暗号を解読

20171026164239
簡単。

コード。

st = gets

result = ""
0.step(st.length - 1, 2) {|i| result += st[i]}
puts result

 

会社の入社試験

20171026164741
超簡単。こんな入社試験、ある筈がないですね。

コード。

num = gets.to_i
data = []
num.times {data << gets.to_i}

7.times do |day|
  sum = 0
  (num / 7).times {|i| sum += data[i * 7 + day]}
  puts sum
end

 
ここでレナちゃんか、ミナミちゃんのいずれかを選ばないといけない!

 

ミナミを選んでみる

問題はこれ
20171026165151
これもやさしい。

コード。

x, y = gets.split.map(&:to_i)
field = []
y.times {field << gets.split.map(&:to_i)}

result = []
field.transpose.each do |line|
  ar = Array.new(y, 0)
  result << ar.fill(1, 0, line.count(1))
end
result.transpose.reverse_each {|x| puts x.join(' ')}

transpose, fill, count, reverse_each など、僕が普段あまり使わない Array の便利な組み込みメソッドを使って解きました。Ruby の表現力の高さが出ているのではないか知らん。
 

レナを選んでみる

問題はこれ
20171026165937
うーん、大して工夫していないのに…。判定は条件分岐(if文など)を使わず、ビット演算でやったのが工夫したくらい。

コード。

x, y, num = gets.split.map(&:to_i)
table, area = [], []
y  .times {table << gets.split.map(&:to_i)}
num.times {area  << gets.split.map(&:to_i)}

MaskValue = 2 ** 10 - 1
@mask = Array.new(y) {Array.new(x, 0)}

def make_mask(x1, y1, x2, y2)
  y1.upto(y2) do |y|
    x1.upto(x2) {|x| @mask[y][x] |= MaskValue}
  end
end

area.each do |ar|
  make_mask(ar[0] - 1, ar[1] - 1, ar[2] - 1, ar[3] - 1)
end

y.times do |y1|
  x.times {|x1| table[y1][x1] &= @mask[y1][x1]}
end

puts table.flatten.inject(&:+)

 
今回も特にむずかしいことはなし。



paiza オンラインハッカソン vol.4 をやってみた

またまた挑戦してみました(ヒマ人^^;)。使用言語は Ruby です。画像クリックで詳細が出ます。
 

ミッション1

20171026103404
こりゃ簡単すぎるだろう。

コード。

data = []
gets.to_i.times {data << gets.to_i}

puts data.inject(&:+)

 

ミッション2

20171026103849
これも超簡単。

コード。

data = []
gets.to_i.times {data << gets.split.map(&:to_i)}

result = 0
data.each do |d|
  a = d[0] - d[1]
  result += a * d[2] if a > 0
end
puts result

 

ミッション3

20171026104200
簡単なのだけれど、たぶんもっといいアルゴリズムがあるでしょう。自分のコードに不満。

コード。

len, koma_size = gets.split.map(&:to_i)
koma = []
koma_size.times {koma << gets.to_i}

max = point = koma[0, len].inject(&:+)
(koma_size - len).times do |i|
  point = point - koma[i] + koma[i + len]
  max = point if point > max
end
puts max

コメントで60点とか言っている人は、ループを二重にしているのだと思う。
 
全体的にこれまでの paiza オンラインハッカソンに比べて極端に簡単。これでは差がつかないのではないか。



paiza オンラインハッカソン vol.2 をやってみた

またまた Ruby でやってみました。
 

とりあえず何の工夫もないもの

誰でもすぐに考えそうな方法でやってみました。つまりは総当り。

全然ダメですね。詳しい結果はこちら

コード。

height, width = gets.split.map(&:to_i)
@window = []
height.times {@window << gets.chomp.chars.map(&:to_i)}
num = gets.to_i
wgt_size = []
num.times {wgt_size << gets.split.map(&:to_i)}

def check(wgth, wgtw, h, w)
  wgth.times do |wh|
    wgtw.times {|ww| return false unless @window[wh + h][ww + w].zero?}
  end
  true
end

num.times do |i|
  h, w = wgt_size[i]
  co = 0
  (height - h + 1).times do |h1|
    (width - w + 1).times {|w1| co += 1 if check(h, w, h1, w1)}
  end
  puts co
end

ループが 5重になっています。これではデータの量が増えるとどうしようもないですね。
 

工夫する

それぞれのマスは空いているかいないかなので、ビット演算で判定することにします。ただし、与えられたデータは空いている場所が 0 なので、ビットを反転させて処理します。

いや、まだまだ木野ちゃん喜んでくれないですね。詳しい結果はこちら

コード。

height, width = gets.split.map(&:to_i)
wd = []
height.times {wd << (~ gets.chomp.to_i(2) & ("1" * width).to_i(2))}
num = gets.to_i
wgt_size = []
num.times {wgt_size << gets.split.map(&:to_i)}

window = wd.inject {|r, i| r * 2 ** width + i}

num.times do
  h, w = wgt_size.shift
  if h > height or w > width
    puts 0
  else
    co = 0
    widget = 0
    h.times {widget = widget * 2 ** width + ("1" * w).to_i(2)}
    (height - h + 1).times do
      wgt = widget
      (width - w + 1).times do
        co += 1 if window & widget == widget
        widget = widget << 1    #ビットシフト
      end
      widget = wgt << width     #ビットシフト
    end
    puts co
  end
end

ループは 3重です。
 

最終形

もう少し工夫します。配置可能位置がいちばんせまいところだけ考えればいいので、最初からウィジェットの高さに応じてテーブルを作っておきます。さらにメモ化して高速化。

何とか木野ちゃん、よろこんでくれました。自分にはこれ以上考えつかないですね。詳しい結果はこちら。なお、メモ化する前の結果はこちら。いちおうすべて通っていますが、木野ちゃんのよろこび方がちがいますね。

コード。

height, width = gets.split.map(&:to_i)
wnd = []
height.times {wnd << (~ gets.chomp.to_i(2) & ("1" * width).to_i(2))}
num = gets.to_i
wgt_size = []
num.times {wgt_size << gets.split.map(&:to_i)}

table = []
height.times do |i|
  ar = []
  (height - i).times {|j| ar << wnd[j, i + 1].inject(&:&)}
  ar.delete(0)
  table << ar
end

num.times do
  memo = {}
  count = 0
  h, w = wgt_size.shift
  if h <= height and w <= width
    wid = widget = ("1" * w).to_i(2)
    table[h - 1].each do |wd|
      if memo[wd]
        co = memo[wd]
      else
        co = 0
        (width - w + 1).times do
          co += 1 if wd & widget == widget
          widget = widget << 1    #ビットシフト
        end
        memo[wd] = co
        widget = wid
      end
      count += co
    end
  end
  puts count
end

これもループは 3重ですが、要素の数が一気に減っています。さらにメモ化でメモされた場合はループは 2重です。
(追記:少し冗長なところを直したらさらに高速化しました。結果。)
 

解説ページのアルゴリズム

ここにアルゴリズムの公式解説があります。その「O(H^2 W^2 ) の解法」という解説をそのまま Ruby に落としてみたのがこれです。しかしこれ、満点がでないのですけれど(結果はこんな具合です)。ダメじゃないですか。


 

絵文字フィボナッチ

どんな言語かわからないですよね。

🐱 = []
🍇, 🍉 = 0, 1
while 🍉 < 1000
  🍇, 🍉 = 🍉, 🍇 + 🍉
  🐱 << 🍇
end
p 🐱
#=>[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987]

Ruby です😄 おわかりでしょうがフィボナッチ😆

Unicode の全絵文字

# * 0 1 2 3 4 5 6 7 8 9 © ® ‼ ⁉ ™ ℹ ↔ ↕ ↖ ↗ ↘ ↙ ↩ ↪ ⌚ ⌛ ⌨ ⏏ ⏩ ⏪ ⏫ ⏬ ⏭ ⏮ ⏯ ⏰ ⏱ ⏲ ⏳ ⏸ ⏹ ⏺ Ⓜ ▪ ▫ ▶ ◀ ◻ ◼ ◽ ◾ ☀ ☁ ☂ ☃ ☄ ☎ ☑ ☔ ☕ ☘ ☝ ☠ ☢ ☣ ☦ ☪ ☮ ☯ ☸ ☹ ☺ ♀ ♂ ♈ ♉ ♊ ♋ ♌ ♍ ♎ ♏ ♐ ♑ ♒ ♓ ♟ ♠ ♣ ♥ ♦ ♨ ♻ ♾ ♿ ⚒ ⚓ ⚔ ⚕ ⚖ ⚗ ⚙ ⚛ ⚜ ⚠ ⚡ ⚪ ⚫ ⚰ ⚱ ⚽ ⚾ ⛄ ⛅ ⛈ ⛎ ⛏ ⛑ ⛓ ⛔ ⛩ ⛪ ⛰ ⛱ ⛲ ⛳ ⛴ ⛵ ⛷ ⛸ ⛹ ⛺ ⛽ ✂ ✅ ✈ ✉ ✊ ✋ ✌ ✍ ✏ ✒ ✔ ✖ ✝ ✡ ✨ ✳ ✴ ❄ ❇ ❌ ❎ ❓ ❔ ❕ ❗ ❣ ❤ ➕ ➖ ➗ ➡ ➰ ➿ ⤴ ⤵ ⬅ ⬆ ⬇ ⬛ ⬜ ⭐ ⭕ 〰 〽 ㊗ ㊙ 🀄 🃏 🅰 🅱 🅾 🅿 🆎 🆑 🆒 🆓 🆔 🆕 🆖 🆗 🆘 🆙 🆚 🇦 🇧 🇨 🇩 🇪 🇫 🇬 🇭 🇮 🇯 🇰 🇱 🇲 🇳 🇴 🇵 🇶 🇷 🇸 🇹 🇺 🇻 🇼 🇽 🇾 🇿 🈁 🈂 🈚 🈯 🈲 🈳 🈴 🈵 🈶 🈷 🈸 🈹 🈺 🉐 🉑 🌀 🌁 🌂 🌃 🌄 🌅 🌆 🌇 🌈 🌉 🌊 🌋 🌌 🌍 🌎 🌏 🌐 🌑 🌒 🌓 🌔 🌕 🌖 🌗 🌘 🌙 🌚 🌛 🌜 🌝 🌞 🌟 🌠 🌡 🌤 🌥 🌦 🌧 🌨 🌩 🌪 🌫 🌬 🌭 🌮 🌯 🌰 🌱 🌲 🌳 🌴 🌵 🌶 🌷 🌸 🌹 🌺 🌻 🌼 🌽 🌾 🌿 🍀 🍁 🍂 🍃 🍄 🍅 🍆 🍇 🍈 🍉 🍊 🍋 🍌 🍍 🍎 🍏 🍐 🍑 🍒 🍓 🍔 🍕 🍖 🍗 🍘 🍙 🍚 🍛 🍜 🍝 🍞 🍟 🍠 🍡 🍢 🍣 🍤 🍥 🍦 🍧 🍨 🍩 🍪 🍫 🍬 🍭 🍮 🍯 🍰 🍱 🍲 🍳 🍴 🍵 🍶 🍷 🍸 🍹 🍺 🍻 🍼 🍽 🍾 🍿 🎀 🎁 🎂 🎃 🎄 🎅 🎆 🎇 🎈 🎉 🎊 🎋 🎌 🎍 🎎 🎏 🎐 🎑 🎒 🎓 🎖 🎗 🎙 🎚 🎛 🎞 🎟 🎠 🎡 🎢 🎣 🎤 🎥 🎦 🎧 🎨 🎩 🎪 🎫 🎬 🎭 🎮 🎯 🎰 🎱 🎲 🎳 🎴 🎵 🎶 🎷 🎸 🎹 🎺 🎻 🎼 🎽 🎾 🎿 🏀 🏁 🏂 🏃 🏄 🏅 🏆 🏇 🏈 🏉 🏊 🏋 🏌 🏍 🏎 🏏 🏐 🏑 🏒 🏓 🏔 🏕 🏖 🏗 🏘 🏙 🏚 🏛 🏜 🏝 🏞 🏟 🏠 🏡 🏢 🏣 🏤 🏥 🏦 🏧 🏨 🏩 🏪 🏫 🏬 🏭 🏮 🏯 🏰 🏳 🏴 🏵 🏷 🏸 🏹 🏺 🏻 🏼 🏽 🏾 🏿 🐀 🐁 🐂 🐃 🐄 🐅 🐆 🐇 🐈 🐉 🐊 🐋 🐌 🐍 🐎 🐏 🐐 🐑 🐒 🐓 🐔 🐕 🐖 🐗 🐘 🐙 🐚 🐛 🐜 🐝 🐞 🐟 🐠 🐡 🐢 🐣 🐤 🐥 🐦 🐧 🐨 🐩 🐪 🐫 🐬 🐭 🐮 🐯 🐰 🐱 🐲 🐳 🐴 🐵 🐶 🐷 🐸 🐹 🐺 🐻 🐼 🐽 🐾 🐿 👀 👁 👂 👃 👄 👅 👆 👇 👈 👉 👊 👋 👌 👍 👎 👏 👐 👑 👒 👓 👔 👕 👖 👗 👘 👙 👚 👛 👜 👝 👞 👟 👠 👡 👢 👣 👤 👥 👦 👧 👨 👩 👪 👫 👬 👭 👮 👯 👰 👱 👲 👳 👴 👵 👶 👷 👸 👹 👺 👻 👼 👽 👾 👿 💀 💁 💂 💃 💄 💅 💆 💇 💈 💉 💊 💋 💌 💍 💎 💏 💐 💑 💒 💓 💔 💕 💖 💗 💘 💙 💚 💛 💜 💝 💞 💟 💠 💡 💢 💣 💤 💥 💦 💧 💨 💩 💪 💫 💬 💭 💮 💯 💰 💱 💲 💳 💴 💵 💶 💷 💸 💹 💺 💻 💼 💽 💾 💿 📀 📁 📂 📃 📄 📅 📆 📇 📈 📉 📊 📋 📌 📍 📎 📏 📐 📑 📒 📓 📔 📕 📖 📗 📘 📙 📚 📛 📜 📝 📞 📟 📠 📡 📢 📣 📤 📥 📦 📧 📨 📩 📪 📫 📬 📭 📮 📯 📰 📱 📲 📳 📴 📵 📶 📷 📸 📹 📺 📻 📼 📽 📿 🔀 🔁 🔂 🔃 🔄 🔅 🔆 🔇 🔈 🔉 🔊 🔋 🔌 🔍 🔎 🔏 🔐 🔑 🔒 🔓 🔔 🔕 🔖 🔗 🔘 🔙 🔚 🔛 🔜 🔝 🔞 🔟 🔠 🔡 🔢 🔣 🔤 🔥 🔦 🔧 🔨 🔩 🔪 🔫 🔬 🔭 🔮 🔯 🔰 🔱 🔲 🔳 🔴 🔵 🔶 🔷 🔸 🔹 🔺 🔻 🔼 🔽 🕉 🕊 🕋 🕌 🕍 🕎 🕐 🕑 🕒 🕓 🕔 🕕 🕖 🕗 🕘 🕙 🕚 🕛 🕜 🕝 🕞 🕟 🕠 🕡 🕢 🕣 🕤 🕥 🕦 🕧 🕯 🕰 🕳 🕴 🕵 🕶 🕷 🕸 🕹 🕺 🖇 🖊 🖋 🖌 🖍 🖐 🖕 🖖 🖤 🖥 🖨 🖱 🖲 🖼 🗂 🗃 🗄 🗑 🗒 🗓 🗜 🗝 🗞 🗡 🗣 🗨 🗯 🗳 🗺 🗻 🗼 🗽 🗾 🗿 😀 😁 😂 😃 😄 😅 😆 😇 😈 😉 😊 😋 😌 😍 😎 😏 😐 😑 😒 😓 😔 😕 😖 😗 😘 😙 😚 😛 😜 😝 😞 😟 😠 😡 😢 😣 😤 😥 😦 😧 😨 😩 😪 😫 😬 😭 😮 😯 😰 😱 😲 😳 😴 😵 😶 😷 😸 😹 😺 😻 😼 😽 😾 😿 🙀 🙁 🙂 🙃 🙄 🙅 🙆 🙇 🙈 🙉 🙊 🙋 🙌 🙍 🙎 🙏 🚀 🚁 🚂 🚃 🚄 🚅 🚆 🚇 🚈 🚉 🚊 🚋 🚌 🚍 🚎 🚏 🚐 🚑 🚒 🚓 🚔 🚕 🚖 🚗 🚘 🚙 🚚 🚛 🚜 🚝 🚞 🚟 🚠 🚡 🚢 🚣 🚤 🚥 🚦 🚧 🚨 🚩 🚪 🚫 🚬 🚭 🚮 🚯 🚰 🚱 🚲 🚳 🚴 🚵 🚶 🚷 🚸 🚹 🚺 🚻 🚼 🚽 🚾 🚿 🛀 🛁 🛂 🛃 🛄 🛅 🛋 🛌 🛍 🛎 🛏 🛐 🛑 🛒 🛕 🛠 🛡 🛢 🛣 🛤 🛥 🛩 🛫 🛬 🛰 🛳 🛴 🛵 🛶 🛷 🛸 🛹 🛺 🟠 🟡 🟢 🟣 🟤 🟥 🟦 🟧 🟨 🟩 🟪 🟫 🤍 🤎 🤏 🤐 🤑 🤒 🤓 🤔 🤕 🤖 🤗 🤘 🤙 🤚 🤛 🤜 🤝 🤞 🤠 🤡 🤢 🤣 🤤 🤥 🤦 🤧 🤰 🤳 🤴 🤵 🤶 🤷 🤸 🤹 🤺 🤼 🤽 🤾 🤿 🥀 🥁 🥂 🥃 🥄 🥅 🥇 🥈 🥉 🥊 🥋 🥐 🥑 🥒 🥓 🥔 🥕 🥖 🥗 🥘 🥙 🥚 🥛 🥜 🥝 🥞 🥟 🥠 🥡 🥢 🥣 🥤 🥥 🥦 🥧 🥨 🥩 🥪 🥫 🥬 🥭 🥮 🥯 🥰 🥱 🥳 🥴 🥵 🥶 🥺 🥻 🥼 🥽 🥾 🥿 🦀 🦁 🦂 🦃 🦄 🦅 🦆 🦇 🦈 🦉 🦊 🦋 🦌 🦍 🦎 🦏 🦐 🦑 🦒 🦓 🦔 🦕 🦖 🦗 🦘 🦙 🦚 🦛 🦜 🦝 🦞 🦟 🦠 🦡 🦢 🦥 🦦 🦧 🦨 🦩 🦪 🧀 🦮 🦯 🦰 🦱 🦲 🦳 🦴 🦵 🦶 🦷 🦸 🦹 🦺 🦻 🦼 🦽 🦾 🦿 🧀 🧁 🧂 🧃 🧄 🧅 🧆 🧇 🧈 🧉 🧊 🧍 🧎 🧏 🧐 🧑 🧒 🧓 🧔 🧕 🧖 🧗 🧘 🧙 🧚 🧛 🧜 🧝 🧞 🧟 🧠 🧡 🧢 🧣 🧤 🧥 🧦 🧧 🧨 🧩 🧪 🧫 🧬 🧭 🧮 🧯 🧰 🧱 🧲 🧳 🧴 🧵 🧶 🧷 🧸 🧹 🧺 🧻 🧼 🧽 🧾 🩰 🩱 🩲 🩳 🩸 🩹 🩺 🪀 🪁 🪂 🪐 🪑 🪒 🪓 🪔 🪕
PC で見るよりスマホとかでの方がきれいに表示されると思います。

表示用の Ruby コード。Gem 'nokogiri' でこのページスクレイピングする。

require 'open-uri'
require 'nokogiri'

url = "https://ja.wikipedia.org/wiki/Unicode%E3%81%AEEmoji%E3%81%AE%E4%B8%80%E8%A6%A7"
Nokogiri.HTML(URI.open(url)).css('td').each do |x|
  st = x.text
  print ('0x' + st[2..-1]).to_i(0).chr("UTF-8") + " " if st[0, 2] == "U+"
end
puts

 

別ページから

lets-emoji.comこのサイトからスクレイピングしました。

😀 😃 😄 😁 😆 😅 🤣 😂 🙂 🙃 😉 😊 😇 🥰 😍 🤩 😘 😗 ☺ 😚 😙 😋 😛 😜 🤪 😝 🤑 🤗 🤭 🤫 🤔 🤐 🤨 😐 😑 😶 😏 😒 🙄 😬 🤥 😌 😔 😪 🤤 😴 😷 🤒 🤕 🤢 🤮 🤧 🥵 🥶 🥴 😵 🤯 🤠 🥳 😎 🤓 🧐 😕 😟 🙁 ☹ 😮 😯 😲 😳 🥺 😦 😧 😨 😰 😥 😢 😭 😱 😖 😣 😞 😓 😩 😫 🥱 😤 😡 😠 🤬 😈 👿 💀 ☠ 💩 🤡 👹 👺 👻 👽 👾 🤖 😺 😸 😹 😻 😼 😽 🙀 😿 😾 🙈 🙉 🙊 💋 💌 💘 💝 💖 💗 💓 💞 💕 💟 ❣ 💔 ❤ 🧡 💛 💚 💙 💜 🤎 🖤 🤍 💯 💢 💥 💫 💦 💨 🕳 💣 💬 👁 ‍ 🗨 👁 ️ ‍ 🗨 ️ 🗨 🗯 💭 💤
👋 🤚 🖐 ✋ 🖖 👌 🤏 ✌ 🤞 🤟 🤘 🤙 👈 👉 👆 🖕 👇 ☝ 👍 👎 ✊ 👊 🤛 🤜 👏 🙌 👐 🤲 🤝 🙏 ✍ 💅 🤳 💪 🦾 🦿 🦵 🦶 👂 🦻 👃 🧠 🦷 🦴 👀 👁 👅 👄
👋 🏻 🤚 🏻 🖐 🏻 ✋ 🏻 🖖 🏻 👌 🏻 🤏 🏻 ✌ 🏻 🤞 🏻 🤟 🏻 🤘 🏻 🤙 🏻 👈 🏻 👉 🏻 👆 🏻 🖕 🏻 👇 🏻 ☝ 🏻 👍 🏻 👎 🏻 ✊ 🏻 👊 🏻 🤛 🏻 🤜 🏻 👏 🏻 🙌 🏻 👐 🏻 🤲 🏻 🙏 🏻 ✍ 🏻 💅 🏻 🤳 🏻 💪 🏻 🦵 🏻 🦶 🏻 👂 🏻 🦻 🏻 👃 🏻 🧠 🦷 🦴 👀 👁 👅 👄
👋 🏼 🤚 🏼 🖐 🏼 ✋ 🏼 🖖 🏼 👌 🏼 🤏 🏼 ✌ 🏼 🤞 🏼 🤟 🏼 🤘 🏼 🤙 🏼 👈 🏼 👉 🏼 👆 🏼 🖕 🏼 👇 🏼 ☝ 🏼 👍 🏼 👎 🏼 ✊ 🏼 👊 🏼 🤛 🏼 🤜 🏼 👏 🏼 🙌 🏼 👐 🏼 🤲 🏼 🙏 🏼 ✍ 🏼 💅 🏼 🤳 🏼 💪 🏼 🦵 🏼 🦶 🏼 👂 🏼 🦻 🏼 👃 🏼 🧠 🦷 🦴 👀 👁 👅 👄
👋 🏽 🤚 🏽 🖐 🏽 ✋ 🏽 🖖 🏽 👌 🏽 🤏 🏽 ✌ 🏽 🤞 🏽 🤟 🏽 🤘 🏽 🤙 🏽 👈 🏽 👉 🏽 👆 🏽 🖕 🏽 👇 🏽 ☝ 🏽 👍 🏽 👎 🏽 ✊ 🏽 👊 🏽 🤛 🏽 🤜 🏽 👏 🏽 🙌 🏽 👐 🏽 🤲 🏽 🙏 🏽 ✍ 🏽 💅 🏽 🤳 🏽 💪 🏽 🦵 🏽 🦶 🏽 👂 🏽 🦻 🏽 👃 🏽 🧠 🦷 🦴 👀 👁 👅 👄
👋 🏾 🤚 🏾 🖐 🏾 ✋ 🏾 🖖 🏾 👌 🏾 🤏 🏾 ✌ 🏾 🤞 🏾 🤟 🏾 🤘 🏾 🤙 🏾 👈 🏾 👉 🏾 👆 🏾 🖕 🏾 👇 🏾 ☝ 🏾 👍 🏾 👎 🏾 ✊ 🏾 👊 🏾 🤛 🏾 🤜 🏾 👏 🏾 🙌 🏾 👐 🏾 🤲 🏾 🙏 🏾 ✍ 🏾 💅 🏾 🤳 🏾 💪 🏾 🦵 🏾 🦶 🏾 👂 🏾 🦻 🏾 👃 🏾 🧠 🦷 🦴 👀 👁 👅 👄
👋 🏿 🤚 🏿 🖐 🏿 ✋ 🏿 🖖 🏿 👌 🏿 🤏 🏿 ✌ 🏿 🤞 🏿 🤟 🏿 🤘 🏿 🤙 🏿 👈 🏿 👉 🏿 👆 🏿 🖕 🏿 👇 🏿 ☝ 🏿 👍 🏿 👎 🏿 ✊ 🏿 👊 🏿 🤛 🏿 🤜 🏿 👏 🏿 🙌 🏿 👐 🏿 🤲 🏿 🙏 🏿 ✍ 🏿 💅 🏿 🤳 🏿 💪 🏿 🦵 🏿 🦶 🏿 👂 🏿 🦻 🏿 👃 🏿 🧠 🦷 🦴 👀 👁 👅 👄
👶 🧒 👦 👧 🧑 👱 👨 🧔 👱 ‍ ♂ ️ 👨 ‍ 🦰 👨 ‍ 🦱 👨 ‍ 🦳 👨 ‍ 🦲 👩 👱 ‍ ♀ ️ 👩 ‍ 🦰 👩 ‍ 🦱 👩 ‍ 🦳 👩 ‍ 🦲 🧓 👴 👵
👶 🏻 🧒 🏻 👦 🏻 👧 🏻 🧑 🏻 👱 🏻 👨 🏻 🧔 🏻 👱 🏻 ‍ ♂ ️ 👨 🏻 ‍ 🦰 👨 🏻 ‍ 🦱 👨 🏻 ‍ 🦳 👨 🏻 ‍ 🦲 👩 🏻 👱 🏻 ‍ ♀ ️ 👩 🏻 ‍ 🦰 👩 🏻 ‍ 🦱 👩 🏻 ‍ 🦳 👩 🏻 ‍ 🦲 🧓 🏻 👴 🏻 👵 🏻 🏻
👶 🏼 🧒 🏼 👦 🏼 👧 🏼 🧑 🏼 👱 🏼 👨 🏼 🧔 🏼 👱 🏼 ‍ ♂ ️ 👨 🏼 ‍ 🦰 👨 🏼 ‍ 🦱 👨 🏼 ‍ 🦳 👨 🏼 ‍ 🦲 👩 🏼 👱 🏼 ‍ ♀ ️ 👩 🏼 ‍ 🦰 👩 🏼 ‍ 🦱 👩 🏼 ‍ 🦳 👩 🏼 ‍ 🦲 🧓 🏼 👴 🏼 👵 🏼 🏼
👶 🏽 🧒 🏽 👦 🏽 👧 🏽 🧑 🏽 👱 🏽 👨 🏽 🧔 🏽 👱 🏽 ‍ ♂ ️ 👨 🏽 ‍ 🦰 👨 🏽 ‍ 🦱 👨 🏽 ‍ 🦳 👨 🏽 ‍ 🦲 👩 🏽 👱 🏽 ‍ ♀ ️ 👩 🏽 ‍ 🦰 👩 🏽 ‍ 🦱 👩 🏽 ‍ 🦳 👩 🏽 ‍ 🦲 🧓 🏽 👴 🏽 👵 🏽 🏽
👶 🏾 🧒 🏾 👦 🏾 👧 🏾 🧑 🏾 👱 🏾 👨 🏾 🧔 🏾 👱 🏾 ‍ ♂ ️ 👨 🏾 ‍ 🦰 👨 🏾 ‍ 🦱 👨 🏾 ‍ 🦳 👨 🏾 ‍ 🦲 👩 🏾 👱 🏾 ‍ ♀ ️ 👩 🏾 ‍ 🦰 👩 🏾 ‍ 🦱 👩 🏾 ‍ 🦳 👩 🏾 ‍ 🦲 🧓 🏾 👴 🏾 👵 🏾 🏾
👶 🏿 🧒 🏿 👦 🏿 👧 🏿 🧑 🏿 👱 🏿 👨 🏿 🧔 🏿 👱 🏿 ‍ ♂ ️ 👨 🏿 ‍ 🦰 👨 🏿 ‍ 🦱 👨 🏿 ‍ 🦳 👨 🏿 ‍ 🦲 👩 🏿 👱 🏿 ‍ ♀ ️ 👩 🏿 ‍ 🦰 👩 🏿 ‍ 🦱 👩 🏿 ‍ 🦳 👩 🏿 ‍ 🦲 🧓 🏿 👴 🏿 👵 🏿 🏿
🙍 🙍 ‍ ♂ ️ 🙍 ‍ ♀ ️ 🙎 🙎 ‍ ♂ ️ 🙎 ‍ ♀ ️ 🙅 🙅 ‍ ♂ ️ 🙅 ‍ ♀ ️ 🙆 🙆 ‍ ♂ ️ 🙆 ‍ ♀ ️ 💁 💁 ‍ ♂ ️ 💁 ‍ ♀ ️ 🙋 🙋 ‍ ♂ ️ 🙋 ‍ ♀ ️ 🧏 🧏 ‍ ♂ ️ 🧏 ‍ ♀ ️ 🙇 🙇 ‍ ♂ ️ 🙇 ‍ ♀ ️ 🤦 🤦 ‍ ♂ ️ 🤦 ‍ ♀ ️ 🤷 🤷 ‍ ♂ ️ 🤷 ‍ ♀ ️
🙍 🏻 🙍 🏻 ‍ ♂ ️ 🙍 🏻 ‍ ♀ ️ 🙎 🏻 🙎 🏻 ‍ ♂ ️ 🙎 🏻 ‍ ♀ ️ 🙅 🏻 🙅 🏻 ‍ ♂ ️ 🙅 🏻 ‍ ♀ ️ 🙆 🏻 🙆 🏻 ‍ ♂ ️ 🙆 🏻 ‍ ♀ ️ 💁 🏻 💁 🏻 ‍ ♂ ️ 💁 🏻 ‍ ♀ ️ 🙋 🏻 🙋 🏻 ‍ ♂ ️ 🙋 🏻 ‍ ♀ ️ 🧏 🏻 🧏 🏻 ‍ ♂ ️ 🧏 🏻 ‍ ♀ ️ 🙇 🏻 🙇 🏻 ‍ ♂ ️ 🙇 🏻 ‍ ♀ ️ 🤦 🏻 🤦 🏻 ‍ ♂ ️ 🤦 🏻 ‍ ♀ ️ 🤷 🏻 🤷 🏻 ‍ ♂ ️ 🤷 🏻 ‍ ♀ ️
🙍 🏼 🙍 🏼 ‍ ♂ ️ 🙍 🏼 ‍ ♀ ️ 🙎 🏼 🙎 🏼 ‍ ♂ ️ 🙎 🏼 ‍ ♀ ️ 🙅 🏼 🙅 🏼 ‍ ♂ ️ 🙅 🏼 ‍ ♀ ️ 🙆 🏼 🙆 🏼 ‍ ♂ ️ 🙆 🏼 ‍ ♀ ️ 💁 🏼 💁 🏼 ‍ ♂ ️ 💁 🏼 ‍ ♀ ️ 🙋 🏼 🙋 🏼 ‍ ♂ ️ 🙋 🏼 ‍ ♀ ️ 🧏 🏼 🧏 🏼 ‍ ♂ ️ 🧏 🏼 ‍ ♀ ️ 🙇 🏼 🙇 🏼 ‍ ♂ ️ 🙇 🏼 ‍ ♀ ️ 🤦 🏼 🤦 🏼 ‍ ♂ ️ 🤦 🏼 ‍ ♀ ️ 🤷 🏼 🤷 🏼 ‍ ♂ ️ 🤷 🏼 ‍ ♀ ️
🙍 🏽 🙍 🏽 ‍ ♂ ️ 🙍 🏽 ‍ ♀ ️ 🙎 🏽 🙎 🏽 ‍ ♂ ️ 🙎 🏽 ‍ ♀ ️ 🙅 🏽 🙅 🏽 ‍ ♂ ️ 🙅 🏽 ‍ ♀ ️ 🙆 🏽 🙆 🏽 ‍ ♂ ️ 🙆 🏽 ‍ ♀ ️ 💁 🏽 💁 🏽 ‍ ♂ ️ 💁 🏽 ‍ ♀ ️ 🙋 🏽 🙋 🏽 ‍ ♂ ️ 🙋 🏽 ‍ ♀ ️ 🧏 🏽 🧏 🏽 ‍ ♂ ️ 🧏 🏽 ‍ ♀ ️ 🙇 🏽 🙇 🏽 ‍ ♂ ️ 🙇 🏽 ‍ ♀ ️ 🤦 🏽 🤦 🏽 ‍ ♂ ️ 🤦 🏽 ‍ ♀ ️ 🤷 🏽 🤷 🏽 ‍ ♂ ️ 🤷 🏽 ‍ ♀ ️
🙍 🏾 🙍 🏾 ‍ ♂ ️ 🙍 🏾 ‍ ♀ ️ 🙎 🏾 🙎 🏾 ‍ ♂ ️ 🙎 🏾 ‍ ♀ ️ 🙅 🏾 🙅 🏾 ‍ ♂ ️ 🙅 🏾 ‍ ♀ ️ 🙆 🏾 🙆 🏾 ‍ ♂ ️ 🙆 🏾 ‍ ♀ ️ 💁 🏾 💁 🏾 ‍ ♂ ️ 💁 🏾 ‍ ♀ ️ 🙋 🏾 🙋 🏾 ‍ ♂ ️ 🙋 🏾 ‍ ♀ ️ 🧏 🏾 🧏 🏾 ‍ ♂ ️ 🧏 🏾 ‍ ♀ ️ 🙇 🏾 🙇 🏾 ‍ ♂ ️ 🙇 🏾 ‍ ♀ ️ 🤦 🏾 🤦 🏾 ‍ ♂ ️ 🤦 🏾 ‍ ♀ ️ 🤷 🏾 🤷 🏾 ‍ ♂ ️ 🤷 🏾 ‍ ♀ ️
🙍 🏿 🙍 🏿 ‍ ♂ ️ 🙍 🏿 ‍ ♀ ️ 🙎 🏿 🙎 🏿 ‍ ♂ ️ 🙎 🏿 ‍ ♀ ️ 🙅 🏿 🙅 🏿 ‍ ♂ ️ 🙅 🏿 ‍ ♀ ️ 🙆 🏿 🙆 🏿 ‍ ♂ ️ 🙆 🏿 ‍ ♀ ️ 💁 🏿 💁 🏿 ‍ ♂ ️ 💁 🏿 ‍ ♀ ️ 🙋 🏿 🙋 🏿 ‍ ♂ ️ 🙋 🏿 ‍ ♀ ️ 🧏 🏿 🧏 🏿 ‍ ♂ ️ 🧏 🏿 ‍ ♀ ️ 🙇 🏿 🙇 🏿 ‍ ♂ ️ 🙇 🏿 ‍ ♀ ️ 🤦 🏿 🤦 🏿 ‍ ♂ ️ 🤦 🏿 ‍ ♀ ️ 🤷 🏿 🤷 🏿 ‍ ♂ ️ 🤷 🏿 ‍ ♀ ️
👨 ‍ ⚕ ️ 👩 ‍ ⚕ ️ 👨 ‍ 🎓 👩 ‍ 🎓 👨 ‍ 🏫 👩 ‍ 🏫 👨 ‍ ⚖ ️ 👩 ‍ ⚖ ️ 👨 ‍ 🌾 👩 ‍ 🌾 👨 ‍ 🍳 👩 ‍ 🍳 👨 ‍ 🔧 👩 ‍ 🔧 👨 ‍ 🏭 👩 ‍ 🏭 👨 ‍ 💼 👩 ‍ 💼 👨 ‍ 🔬 👩 ‍ 🔬 👨 ‍ 💻 👩 ‍ 💻 👨 ‍ 🎤 👩 ‍ 🎤 👨 ‍ 🎨 👩 ‍ 🎨 👨 ‍ ✈ ️ 👩 ‍ ✈ ️ 👨 ‍ 🚀 👩 ‍ 🚀 👨 ‍ 🚒 👩 ‍ 🚒 👮 👮 ‍ ♂ ️ 👮 ‍ ♀ ️ 🕵 🕵 ️ ‍ ♂ ️ 🕵 ️ ‍ ♀ ️ 💂 💂 ‍ ♂ ️ 💂 ‍ ♀ ️ 👷 👷 ‍ ♂ ️ 👷 ‍ ♀ ️ 🤴 👸 👳 👳 ‍ ♂ ️ 👳 ‍ ♀ ️ 👲 🧕 🤵 👰 🤰 🤱
👨 🏻 ‍ ⚕ ️ 👩 🏻 ‍ ⚕ ️ 👨 🏻 ‍ 🎓 👩 🏻 ‍ 🎓 👨 🏻 ‍ 🏫 👩 🏻 ‍ 🏫 👨 🏻 ‍ ⚖ ️ 👩 🏻 ‍ ⚖ ️ 👨 🏻 ‍ 🌾 👩 🏻 ‍ 🌾 👨 🏻 ‍ 🍳 👩 🏻 ‍ 🍳 👨 🏻 ‍ 🔧 👩 🏻 ‍ 🔧 👨 🏻 ‍ 🏭 👩 🏻 ‍ 🏭 👨 🏻 ‍ 💼 👩 🏻 ‍ 💼 👨 🏻 ‍ 🔬 👩 🏻 ‍ 🔬 👨 🏻 ‍ 💻 👩 🏻 ‍ 💻 👨 🏻 ‍ 🎤 👩 🏻 ‍ 🎤 👨 🏻 ‍ 🎨 👩 🏻 ‍ 🎨 👨 🏻 ‍ ✈ ️ 👩 🏻 ‍ ✈ ️ 👨 🏻 ‍ 🚀 👩 🏻 ‍ 🚀 👨 🏻 ‍ 🚒 👩 🏻 ‍ 🚒 👮 🏻 👮 🏻 ‍ ♂ ️ 👮 🏻 ‍ ♀ ️ 🕵 🏻 🕵 🏻 ‍ ♂ ️ 🕵 🏻 ‍ ♀ ️ 💂 🏻 💂 🏻 ‍ ♂ ️ 💂 🏻 ‍ ♀ ️ 👷 🏻 👷 🏻 ‍ ♂ ️ 👷 🏻 ‍ ♀ ️ 🤴 🏻 👸 🏻 👳 🏻 👳 🏻 ‍ ♂ ️ 👳 🏻 ‍ ♀ ️ 👲 🏻 🧕 🏻 🤵 🏻 👰 🏻 🤰 🏻 🤱 🏻
👨 🏼 ‍ ⚕ ️ 👩 🏼 ‍ ⚕ ️ 👨 🏼 ‍ 🎓 👩 🏼 ‍ 🎓 👨 🏼 ‍ 🏫 👩 🏼 ‍ 🏫 👨 🏼 ‍ ⚖ ️ 👩 🏼 ‍ ⚖ ️ 👨 🏼 ‍ 🌾 👩 🏼 ‍ 🌾 👨 🏼 ‍ 🍳 👩 🏼 ‍ 🍳 👨 🏼 ‍ 🔧 👩 🏼 ‍ 🔧 👨 🏼 ‍ 🏭 👩 🏼 ‍ 🏭 👨 🏼 ‍ 💼 👩 🏼 ‍ 💼 👨 🏼 ‍ 🔬 👩 🏼 ‍ 🔬 👨 🏼 ‍ 💻 👩 🏼 ‍ 💻 👨 🏼 ‍ 🎤 👩 🏼 ‍ 🎤 👨 🏼 ‍ 🎨 👩 🏼 ‍ 🎨 👨 🏼 ‍ ✈ ️ 👩 🏼 ‍ ✈ ️ 👨 🏼 ‍ 🚀 👩 🏼 ‍ 🚀 👨 🏼 ‍ 🚒 👩 🏼 ‍ 🚒 👮 🏼 👮 🏼 ‍ ♂ ️ 👮 🏼 ‍ ♀ ️ 🕵 🏼 🕵 🏼 ‍ ♂ ️ 🕵 🏼 ‍ ♀ ️ 💂 🏼 💂 🏼 ‍ ♂ ️ 💂 🏼 ‍ ♀ ️ 👷 🏼 👷 🏼 ‍ ♂ ️ 👷 🏼 ‍ ♀ ️ 🤴 🏼 👸 🏼 👳 🏼 👳 🏼 ‍ ♂ ️ 👳 🏼 ‍ ♀ ️ 👲 🏼 🧕 🏼 🤵 🏼 👰 🏼 🤰 🏼 🤱 🏼
👨 🏽 ‍ ⚕ ️ 👩 🏽 ‍ ⚕ ️ 👨 🏽 ‍ 🎓 👩 🏽 ‍ 🎓 👨 🏽 ‍ 🏫 👩 🏽 ‍ 🏫 👨 🏽 ‍ ⚖ ️ 👩 🏽 ‍ ⚖ ️ 👨 🏽 ‍ 🌾 👩 🏽 ‍ 🌾 👨 🏽 ‍ 🍳 👩 🏽 ‍ 🍳 👨 🏽 ‍ 🔧 👩 🏽 ‍ 🔧 👨 🏽 ‍ 🏭 👩 🏽 ‍ 🏭 👨 🏽 ‍ 💼 👩 🏽 ‍ 💼 👨 🏽 ‍ 🔬 👩 🏽 ‍ 🔬 👨 🏽 ‍ 💻 👩 🏽 ‍ 💻 👨 🏽 ‍ 🎤 👩 🏽 ‍ 🎤 👨 🏽 ‍ 🎨 👩 🏽 ‍ 🎨 👨 🏽 ‍ ✈ ️ 👩 🏽 ‍ ✈ ️ 👨 🏽 ‍ 🚀 👩 🏽 ‍ 🚀 👨 🏽 ‍ 🚒 👩 🏽 ‍ 🚒 👮 🏽 👮 🏽 ‍ ♂ ️ 👮 🏽 ‍ ♀ ️ 🕵 🏽 🕵 🏽 ‍ ♂ ️ 🕵 🏽 ‍ ♀ ️ 💂 🏽 💂 🏽 ‍ ♂ ️ 💂 🏽 ‍ ♀ ️ 👷 🏽 👷 🏽 ‍ ♂ ️ 👷 🏽 ‍ ♀ ️ 🤴 🏽 👸 🏽 👳 🏽 👳 🏽 ‍ ♂ ️ 👳 🏽 ‍ ♀ ️ 👲 🏽 🧕 🏽 🤵 🏽 👰 🏽 🤰 🏽 🤱 🏽
👨 🏾 ‍ ⚕ ️ 👩 🏾 ‍ ⚕ ️ 👨 🏾 ‍ 🎓 👩 🏾 ‍ 🎓 👨 🏾 ‍ 🏫 👩 🏾 ‍ 🏫 👨 🏾 ‍ ⚖ ️ 👩 🏾 ‍ ⚖ ️ 👨 🏾 ‍ 🌾 👩 🏾 ‍ 🌾 👨 🏾 ‍ 🍳 👩 🏾 ‍ 🍳 👨 🏾 ‍ 🔧 👩 🏾 ‍ 🔧 👨 🏾 ‍ 🏭 👩 🏾 ‍ 🏭 👨 🏾 ‍ 💼 👩 🏾 ‍ 💼 👨 🏾 ‍ 🔬 👩 🏾 ‍ 🔬 👨 🏾 ‍ 💻 👩 🏾 ‍ 💻 👨 🏾 ‍ 🎤 👩 🏾 ‍ 🎤 👨 🏾 ‍ 🎨 👩 🏾 ‍ 🎨 👨 🏾 ‍ ✈ ️ 👩 🏾 ‍ ✈ ️ 👨 🏾 ‍ 🚀 👩 🏾 ‍ 🚀 👨 🏾 ‍ 🚒 👩 🏾 ‍ 🚒 👮 🏾 👮 🏾 ‍ ♂ ️ 👮 🏾 ‍ ♀ ️ 🕵 🏾 🕵 🏾 ‍ ♂ ️ 🕵 🏾 ‍ ♀ ️ 💂 🏾 💂 🏾 ‍ ♂ ️ 💂 🏾 ‍ ♀ ️ 👷 🏾 👷 🏾 ‍ ♂ ️ 👷 🏾 ‍ ♀ ️ 🤴 🏾 👸 🏾 👳 🏾 👳 🏾 ‍ ♂ ️ 👳 🏾 ‍ ♀ ️ 👲 🏾 🧕 🏾 🤵 🏾 👰 🏾 🤰 🏾 🤱 🏾
👨 🏿 ‍ ⚕ ️ 👩 🏿 ‍ ⚕ ️ 👨 🏿 ‍ 🎓 👩 🏿 ‍ 🎓 👨 🏿 ‍ 🏫 👩 🏿 ‍ 🏫 👨 🏿 ‍ ⚖ ️ 👩 🏿 ‍ ⚖ ️ 👨 🏿 ‍ 🌾 👩 🏿 ‍ 🌾 👨 🏿 ‍ 🍳 👩 🏿 ‍ 🍳 👨 🏿 ‍ 🔧 👩 🏿 ‍ 🔧 👨 🏿 ‍ 🏭 👩 🏿 ‍ 🏭 👨 🏿 ‍ 💼 👩 🏿 ‍ 💼 👨 🏿 ‍ 🔬 👩 🏿 ‍ 🔬 👨 🏿 ‍ 💻 👩 🏿 ‍ 💻 👨 🏿 ‍ 🎤 👩 🏿 ‍ 🎤 👨 🏿 ‍ 🎨 👩 🏿 ‍ 🎨 👨 🏿 ‍ ✈ ️ 👩 🏿 ‍ ✈ ️ 👨 🏿 ‍ 🚀 👩 🏿 ‍ 🚀 👨 🏿 ‍ 🚒 👩 🏿 ‍ 🚒 👮 🏿 👮 🏿 ‍ ♂ ️ 👮 🏿 ‍ ♀ ️ 🕵 🏿 🕵 🏿 ‍ ♂ ️ 🕵 🏿 ‍ ♀ ️ 💂 🏿 💂 🏿 ‍ ♂ ️ 💂 🏿 ‍ ♀ ️ 👷 🏿 👷 🏿 ‍ ♂ ️ 👷 🏿 ‍ ♀ ️ 🤴 🏿 👸 🏿 👳 🏿 👳 🏿 ‍ ♂ ️ 👳 🏿 ‍ ♀ ️ 👲 🏿 🧕 🏿 🤵 🏿 👰 🏿 🤰 🏿 🤱 🏿
👼 🎅 🤶 🦸 🦸 ‍ ♂ ️ 🦸 ‍ ♀ ️ 🦹 🦹 ‍ ♂ ️ 🦹 ‍ ♀ ️ 🧙 🧙 ‍ ♂ ️ 🧙 ‍ ♀ ️ 🧚 🧚 ‍ ♂ ️ 🧚 ‍ ♀ ️ 🧛 🧛 ‍ ♂ ️ 🧛 ‍ ♀ ️ 🧜 🧜 ‍ ♂ ️ 🧜 ‍ ♀ ️ 🧝 🧝 ‍ ♀ ️ 🧝 ‍ ♂ ️ 🧞 🧞 ‍ ♂ ️ 🧞 ‍ ♀ ️ 🧟 🧟 ‍ ♂ ️ 🧟 ‍ ♀ ️
👼 🏻 🎅 🏻 🤶 🏻 🦸 🏻 🦸 🏻 ‍ ♂ ️ 🦸 🏻 ‍ ♀ ️ 🦹 🏻 🦹 🏻 ‍ ♂ ️ 🦹 🏻 ‍ ♀ ️ 🧙 🏻 🧙 🏻 ‍ ♂ ️ 🧙 🏻 ‍ ♀ ️ 🧚 🏻 🧚 🏻 ‍ ♂ ️ 🧚 🏻 ‍ ♀ ️ 🧛 🏻 🧛 🏻 ‍ ♂ ️ 🧛 🏻 ‍ ♀ ️ 🧜 🏻 🧜 🏻 ‍ ♂ ️ 🧜 🏻 ‍ ♀ ️ 🧝 🏻 🧝 🏻 ‍ ♀ ️ 🧝 🏻 ‍ ♂ ️ 🧞 🧞 ‍ ♂ ️ 🧞 ‍ ♀ ️ 🧟 🧟 ‍ ♂ ️ 🧟 ‍ ♀ ️
👼 🏼 🎅 🏼 🤶 🏼 🦸 🏼 🦸 🏼 ‍ ♂ ️ 🦸 🏼 ‍ ♀ ️ 🦹 🏼 🦹 🏼 ‍ ♂ ️ 🦹 🏼 ‍ ♀ ️ 🧙 🏼 🧙 🏼 ‍ ♂ ️ 🧙 🏼 ‍ ♀ ️ 🧚 🏼 🧚 🏼 ‍ ♂ ️ 🧚 🏼 ‍ ♀ ️ 🧛 🏼 🧛 🏼 ‍ ♂ ️ 🧛 🏼 ‍ ♀ ️ 🧜 🏼 🧜 🏼 ‍ ♂ ️ 🧜 🏼 ‍ ♀ ️ 🧝 🏼 🧝 🏼 ‍ ♀ ️ 🧝 🏼 ‍ ♂ ️ 🧞 🧞 ‍ ♂ ️ 🧞 ‍ ♀ ️ 🧟 🧟 ‍ ♂ ️ 🧟 ‍ ♀ ️
👼 🏽 🎅 🏽 🤶 🏽 🦸 🏽 🦸 🏽 ‍ ♂ ️ 🦸 🏽 ‍ ♀ ️ 🦹 🏽 🦹 🏽 ‍ ♂ ️ 🦹 🏽 ‍ ♀ ️ 🧙 🏽 🧙 🏽 ‍ ♂ ️ 🧙 🏽 ‍ ♀ ️ 🧚 🏽 🧚 🏽 ‍ ♂ ️ 🧚 🏽 ‍ ♀ ️ 🧛 🏽 🧛 🏽 ‍ ♂ ️ 🧛 🏽 ‍ ♀ ️ 🧜 🏽 🧜 🏽 ‍ ♂ ️ 🧜 🏽 ‍ ♀ ️ 🧝 🏽 🧝 🏽 ‍ ♀ ️ 🧝 🏽 ‍ ♂ ️ 🧞 🧞 ‍ ♂ ️ 🧞 ‍ ♀ ️ 🧟 🧟 ‍ ♂ ️ 🧟 ‍ ♀ ️
👼 🏾 🎅 🏾 🤶 🏾 🦸 🏾 🦸 🏾 ‍ ♂ ️ 🦸 🏾 ‍ ♀ ️ 🦹 🏾 🦹 🏾 ‍ ♂ ️ 🦹 🏾 ‍ ♀ ️ 🧙 🏾 🧙 🏾 ‍ ♂ ️ 🧙 🏾 ‍ ♀ ️ 🧚 🏾 🧚 🏾 ‍ ♂ ️ 🧚 🏾 ‍ ♀ ️ 🧛 🏾 🧛 🏾 ‍ ♂ ️ 🧛 🏾 ‍ ♀ ️ 🧜 🏾 🧜 🏾 ‍ ♂ ️ 🧜 🏾 ‍ ♀ ️ 🧝 🏾 🧝 🏾 ‍ ♀ ️ 🧝 🏾 ‍ ♂ ️ 🧞 🧞 ‍ ♂ ️ 🧞 ‍ ♀ ️ 🧟 🧟 ‍ ♂ ️ 🧟 ‍ ♀ ️
👼 🏿 🎅 🏿 🤶 🏿 🦸 🏿 🦸 🏿 ‍ ♂ ️ 🦸 🏿 ‍ ♀ ️ 🦹 🏿 🦹 🏿 ‍ ♂ ️ 🦹 🏿 ‍ ♀ ️ 🧙 🏿 🧙 🏿 ‍ ♂ ️ 🧙 🏿 ‍ ♀ ️ 🧚 🏿 🧚 🏿 ‍ ♂ ️ 🧚 🏿 ‍ ♀ ️ 🧛 🏿 🧛 🏿 ‍ ♂ ️ 🧛 🏿 ‍ ♀ ️ 🧜 🏿 🧜 🏿 ‍ ♂ ️ 🧜 🏿 ‍ ♀ ️ 🧝 🏿 🧝 🏿 ‍ ♀ ️ 🧝 🏿 ‍ ♂ ️ 🧞 🧞 ‍ ♂ ️ 🧞 ‍ ♀ ️ 🧟 🧟 ‍ ♂ ️ 🧟 ‍ ♀ ️
💆 💆 ‍ ♂ ️ 💆 ‍ ♀ ️ 💇 💇 ‍ ♂ ️ 💇 ‍ ♀ ️ 🚶 🚶 ‍ ♂ ️ 🚶 ‍ ♀ ️ 🧍 🧍 ‍ ♂ ️ 🧍 ‍ ♀ ️ 🧎 🧎 ‍ ♂ ️ 🧎 ‍ ♀ ️ 👨 ‍ 🦯 👩 ‍ 🦯 👨 ‍ 🦼 👩 ‍ 🦼 👨 ‍ 🦽 👩 ‍ 🦽 🏃 🏃 ‍ ♂ ️ 🏃 ‍ ♀ ️ 💃 🕺 🕴 👯 👯 ‍ ♂ ️ 👯 ‍ ♀ ️ 🧖 🧖 ‍ ♂ ️ 🧖 ‍ ♀ ️ 🧗 🧗 ‍ ♂ ️ 🧗 ‍ ♀ ️
💆 🏻 💆 🏻 ‍ ♂ ️ 💆 🏻 ‍ ♀ ️ 💇 🏻 💇 🏻 ‍ ♂ ️ 💇 🏻 ‍ ♀ ️ 🚶 🏻 🚶 🏻 ‍ ♂ ️ 🚶 🏻 ‍ ♀ ️ 🧍 🏻 🧍 🏻 ‍ ♂ ️ 🧍 🏻 ‍ ♀ ️ 🧎 🏻 🧎 🏻 ‍ ♂ ️ 🧎 🏻 ‍ ♀ ️ 👨 🏻 ‍ 🦯 👩 🏻 ‍ 🦯 👨 🏻 ‍ 🦼 👩 🏻 ‍ 🦼 👨 🏻 ‍ 🦽 👩 🏻 ‍ 🦽 🏃 🏻 🏃 🏻 ‍ ♂ ️ 🏃 🏻 ‍ ♀ ️ 💃 🏻 🕺 🏻 🕴 🏻 🧖 🏻 🧖 🏻 ‍ ♂ ️ 🧖 🏻 ‍ ♀ ️ 🧗 🏻 🧗 🏻 ‍ ♂ ️ 🧗 🏻 ‍ ♀ ️
💆 🏼 💆 🏼 ‍ ♂ ️ 💆 🏼 ‍ ♀ ️ 💇 🏼 💇 🏼 ‍ ♂ ️ 💇 🏼 ‍ ♀ ️ 🚶 🏼 🚶 🏼 ‍ ♂ ️ 🚶 🏼 ‍ ♀ ️ 🧍 🏼 🧍 🏼 ‍ ♂ ️ 🧍 🏼 ‍ ♀ ️ 🧎 🏼 🧎 🏼 ‍ ♂ ️ 🧎 🏼 ‍ ♀ ️ 👨 🏼 ‍ 🦯 👩 🏼 ‍ 🦯 👨 🏼 ‍ 🦼 👩 🏼 ‍ 🦼 👨 🏼 ‍ 🦽 👩 🏼 ‍ 🦽 🏃 🏼 🏃 🏼 ‍ ♂ ️ 🏃 🏼 ‍ ♀ ️ 💃 🏼 🕺 🏼 🕴 🏼 🧖 🏼 🧖 🏼 ‍ ♂ ️ 🧖 🏼 ‍ ♀ ️ 🧗 🏼 🧗 🏼 ‍ ♂ ️ 🧗 🏼 ‍ ♀ ️
💆 🏽 💆 🏽 ‍ ♂ ️ 💆 🏽 ‍ ♀ ️ 💇 🏽 💇 🏽 ‍ ♂ ️ 💇 🏽 ‍ ♀ ️ 🚶 🏽 🚶 🏽 ‍ ♂ ️ 🚶 🏽 ‍ ♀ ️ 🧍 🏽 🧍 🏽 ‍ ♂ ️ 🧍 🏽 ‍ ♀ ️ 🧎 🏽 🧎 🏽 ‍ ♂ ️ 🧎 🏽 ‍ ♀ ️ 👨 🏽 ‍ 🦯 👩 🏽 ‍ 🦯 👨 🏽 ‍ 🦼 👩 🏽 ‍ 🦼 👨 🏽 ‍ 🦽 👩 🏽 ‍ 🦽 🏃 🏽 🏃 🏽 ‍ ♂ ️ 🏃 🏽 ‍ ♀ ️ 💃 🏽 🕺 🏽 🕴 🏽 🧖 🏽 🧖 🏾 🧖 🏽 ‍ ♂ ️ 🧖 🏽 ‍ ♀ ️ 🧗 🏽 🧗 🏽 ‍ ♂ ️ 🧗 🏽 ‍ ♀ ️
💆 🏾 💆 🏾 ‍ ♂ ️ 💆 🏾 ‍ ♀ ️ 💇 🏾 💇 🏾 ‍ ♂ ️ 💇 🏾 ‍ ♀ ️ 🚶 🏾 🚶 🏾 ‍ ♂ ️ 🚶 🏾 ‍ ♀ ️ 🧍 🏾 🧍 🏾 ‍ ♂ ️ 🧍 🏾 ‍ ♀ ️ 🧎 🏾 🧎 🏾 ‍ ♂ ️ 🧎 🏾 ‍ ♀ ️ 👨 🏾 ‍ 🦯 👩 🏾 ‍ 🦯 👨 🏾 ‍ 🦼 👩 🏾 ‍ 🦼 👨 🏾 ‍ 🦽 👩 🏾 ‍ 🦽 🏃 🏾 🏃 🏾 ‍ ♂ ️ 🏃 🏾 ‍ ♀ ️ 💃 🏾 🕺 🏾 🕴 🏾 🧖 🏿 🧖 🏾 ‍ ♂ ️ 🧖 🏾 ‍ ♀ ️ 🧗 🏾 🧗 🏾 ‍ ♂ ️ 🧗 🏾 ‍ ♀ ️
💆 🏿 💆 🏿 ‍ ♂ ️ 💆 🏿 ‍ ♀ ️ 💇 🏿 💇 🏿 ‍ ♂ ️ 💇 🏿 ‍ ♀ ️ 🚶 🏿 🚶 🏿 ‍ ♂ ️ 🚶 🏿 ‍ ♀ ️ 🧍 🏿 🧍 🏿 ‍ ♂ ️ 🧍 🏿 ‍ ♀ ️ 🧎 🏿 🧎 🏿 ‍ ♂ ️ 🧎 🏿 ‍ ♀ ️ 👨 🏿 ‍ 🦯 👩 🏿 ‍ 🦯 👨 🏿 ‍ 🦼 👩 🏿 ‍ 🦼 👨 🏿 ‍ 🦽 👩 🏿 ‍ 🦽 🏃 🏿 🏃 🏿 ‍ ♂ ️ 🏃 🏿 ‍ ♀ ️ 💃 🏿 🕺 🏿 🕴 🏿 🧖 🏿 ‍ ♂ ️ 🧖 🏿 ‍ ♀ ️ 🧗 🏿 🧗 🏿 ‍ ♂ ️ 🧗 🏿 ‍ ♀ ️
🤺 🏇 ⛷ 🏂 🏌 🏌 ️ ‍ ♂ ️ 🏌 ️ ‍ ♀ ️ 🏄 🏄 ‍ ♂ ️ 🏄 ‍ ♀ ️ 🚣 🚣 ‍ ♂ ️ 🚣 ‍ ♀ ️ 🏊 🏊 ‍ ♂ ️ 🏊 ‍ ♀ ️ ⛹ ⛹ ️ ‍ ♂ ️ ⛹ ️ ‍ ♀ ️ 🏋 🏋 ️ ‍ ♂ ️ 🏋 ️ ‍ ♀ ️ 🚴 🚴 ‍ ♂ ️ 🚴 ‍ ♀ ️ 🚵 🚵 ‍ ♂ ️ 🚵 ‍ ♀ ️ 🤸 🤸 ‍ ♂ ️ 🤸 ‍ ♀ ️ 🤼 🤼 ‍ ♂ ️ 🤼 ‍ ♀ ️ 🤽 🤽 ‍ ♂ ️ 🤽 ‍ ♀ ️ 🤾 🤾 ‍ ♂ ️ 🤾 ‍ ♀ ️ 🤹 🤹 ‍ ♂ ️ 🤹 ‍ ♀ ️ 🧘 🧘 ‍ ♀ ️ 🧘 ‍ ♂ ️ 🛀 🛌
🤺 🏇 🏻 🏂 🏻 🏌 🏻 🏌 🏻 ‍ ♂ ️ 🏌 🏻 ‍ ♀ ️ 🏄 🏻 🏄 🏻 ‍ ♂ ️ 🏄 🏻 ‍ ♀ ️ 🚣 🏻 🚣 🏻 ‍ ♂ ️ 🚣 🏻 ‍ ♀ ️ 🏊 🏻 🏊 🏻 ‍ ♂ ️ 🏊 🏻 ‍ ♀ ️ ⛹ 🏻 ⛹ 🏻 ‍ ♂ ️ ⛹ 🏻 ‍ ♀ ️ 🏋 🏻 🏋 🏻 ‍ ♂ ️ 🏋 🏻 ‍ ♀ ️ 🚴 🏻 🚴 🏻 ‍ ♂ ️ 🚴 🏻 ‍ ♀ ️ 🚵 🏻 🚵 🏻 ‍ ♂ ️ 🚵 🏻 ‍ ♀ ️ 🤸 🏻 🤸 🏻 ‍ ♂ ️ 🤸 🏻 ‍ ♀ ️ 🤽 🏻 🤽 🏻 ‍ ♂ ️ 🤽 🏻 ‍ ♀ ️ 🤾 🏻 🤾 🏻 ‍ ♂ ️ 🤾 🏻 ‍ ♀ ️ 🤹 🏻 🤹 🏻 ‍ ♂ ️ 🤹 🏻 ‍ ♀ ️ 🧘 🏻 🧘 🏻 ‍ ♀ ️ 🧘 🏻 ‍ ♂ ️ 🛀 🏻 🛌 🏻
🤺 🏇 🏼 🏂 🏼 🏌 🏼 🏌 🏼 ‍ ♂ ️ 🏌 🏼 ‍ ♀ ️ 🏄 🏼 🏄 🏼 ‍ ♂ ️ 🏄 🏼 ‍ ♀ ️ 🚣 🏼 🚣 🏼 ‍ ♂ ️ 🚣 🏼 ‍ ♀ ️ 🏊 🏼 🏊 🏼 ‍ ♂ ️ 🏊 🏼 ‍ ♀ ️ ⛹ 🏼 ⛹ 🏼 ‍ ♂ ️ ⛹ 🏼 ‍ ♀ ️ 🏋 🏼 🏋 🏼 ‍ ♂ ️ 🏋 🏼 ‍ ♀ ️ 🚴 🏼 🚴 🏼 ‍ ♂ ️ 🚴 🏼 ‍ ♀ ️ 🚵 🏼 🚵 🏼 ‍ ♂ ️ 🚵 🏼 ‍ ♀ ️ 🤸 🏼 🤸 🏼 ‍ ♂ ️ 🤸 🏼 ‍ ♀ ️ 🤽 🏼 🤽 🏼 ‍ ♂ ️ 🤽 🏼 ‍ ♀ ️ 🤾 🏼 🤾 🏼 ‍ ♂ ️ 🤾 🏼 ‍ ♀ ️ 🤹 🏼 🤹 🏼 ‍ ♂ ️ 🤹 🏼 ‍ ♀ ️ 🧘 🏼 🧘 🏼 ‍ ♀ ️ 🧘 🏼 ‍ ♂ ️ 🛀 🏼 🛌 🏼
🤺 🏇 🏽 🏂 🏽 🏌 🏽 🏌 🏽 ‍ ♂ ️ 🏌 🏽 ‍ ♀ ️ 🏄 🏽 🏄 🏽 ‍ ♂ ️ 🏄 🏽 ‍ ♀ ️ 🚣 🏽 🚣 🏽 ‍ ♂ ️ 🚣 🏽 ‍ ♀ ️ 🏊 🏽 🏊 🏽 ‍ ♂ ️ 🏊 🏽 ‍ ♀ ️ ⛹ 🏽 ⛹ 🏽 ‍ ♂ ️ ⛹ 🏽 ‍ ♀ ️ 🏋 🏽 🏋 🏽 ‍ ♂ ️ 🏋 🏽 ‍ ♀ ️ 🚴 🏽 🚴 🏽 ‍ ♂ ️ 🚴 🏽 ‍ ♀ ️ 🚵 🏽 🚵 🏽 ‍ ♂ ️ 🚵 🏽 ‍ ♀ ️ 🤸 🏽 🤸 🏽 ‍ ♂ ️ 🤸 🏽 ‍ ♀ ️ 🤽 🏽 🤽 🏽 ‍ ♂ ️ 🤽 🏽 ‍ ♀ ️ 🤾 🏽 🤾 🏽 ‍ ♂ ️ 🤾 🏽 ‍ ♀ ️ 🤹 🏽 🤹 🏽 ‍ ♂ ️ 🤹 🏽 ‍ ♀ ️ 🧘 🏽 🧘 🏽 ‍ ♀ ️ 🧘 🏽 ‍ ♂ ️ 🛀 🏽 🛌 🏽
🤺 🏇 🏾 🏂 🏾 🏌 🏾 🏌 🏾 ‍ ♂ ️ 🏌 🏾 ‍ ♀ ️ 🏄 🏾 🏄 🏾 ‍ ♂ ️ 🏄 🏾 ‍ ♀ ️ 🚣 🏾 🚣 🏾 ‍ ♂ ️ 🚣 🏾 ‍ ♀ ️ 🏊 🏾 🏊 🏾 ‍ ♂ ️ 🏊 🏾 ‍ ♀ ️ ⛹ 🏾 ⛹ 🏾 ‍ ♂ ️ ⛹ 🏾 ‍ ♀ ️ 🏋 🏾 🏋 🏾 ‍ ♂ ️ 🏋 🏾 ‍ ♀ ️ 🚴 🏾 🚴 🏾 ‍ ♂ ️ 🚴 🏾 ‍ ♀ ️ 🚵 🏾 🚵 🏾 ‍ ♂ ️ 🚵 🏾 ‍ ♀ ️ 🤸 🏾 🤸 🏾 ‍ ♂ ️ 🤸 🏾 ‍ ♀ ️ 🤽 🏾 🤽 🏾 ‍ ♂ ️ 🤽 🏾 ‍ ♀ ️ 🤾 🏾 🤾 🏾 ‍ ♂ ️ 🤾 🏾 ‍ ♀ ️ 🤹 🏾 🤹 🏾 ‍ ♂ ️ 🤹 🏾 ‍ ♀ ️ 🧘 🏾 🧘 🏾 ‍ ♀ ️ 🧘 🏾 ‍ ♂ ️ 🛀 🏾 🛌 🏾
🤺 🏇 🏿 🏂 🏿 🏌 🏿 🏌 🏿 ‍ ♂ ️ 🏌 🏿 ‍ ♀ ️ 🏄 🏿 🏄 🏿 ‍ ♂ ️ 🏄 🏿 ‍ ♀ ️ 🚣 🏿 🚣 🏿 ‍ ♂ ️ 🚣 🏿 ‍ ♀ ️ 🏊 🏿 🏊 🏿 ‍ ♂ ️ 🏊 🏿 ‍ ♀ ️ ⛹ 🏿 ⛹ 🏿 ‍ ♂ ️ ⛹ 🏿 ‍ ♀ ️ 🏋 🏿 🏋 🏿 ‍ ♂ ️ 🏋 🏿 ‍ ♀ ️ 🚴 🏿 🚴 🏿 ‍ ♂ ️ 🚴 🏿 ‍ ♀ ️ 🚵 🏿 🚵 🏿 ‍ ♂ ️ 🚵 🏿 ‍ ♀ ️ 🤸 🏿 🤸 🏿 ‍ ♂ ️ 🤸 🏿 ‍ ♀ ️ 🤽 🏿 🤽 🏿 ‍ ♂ ️ 🤽 🏿 ‍ ♀ ️ 🤾 🏿 🤾 🏿 ‍ ♂ ️ 🤾 🏿 ‍ ♀ ️ 🤹 🏿 🤹 🏿 ‍ ♂ ️ 🤹 🏿 ‍ ♀ ️ 🧘 🏿 🧘 🏿 ‍ ♀ ️ 🧘 🏿 ‍ ♂ ️ 🛀 🏿 🛌 🏿
🧑 ‍ 🤝 ‍ 🧑 👭 👫 👬 💏 👩 ‍ ❤ ️ ‍ 💋 ‍ 👨 👨 ‍ ❤ ️ ‍ 💋 ‍ 👨 👩 ‍ ❤ ️ ‍ 💋 ‍ 👩 💑 👩 ‍ ❤ ️ ‍ 👨 👨 ‍ ❤ ️ ‍ 👨 👩 ‍ ❤ ️ ‍ 👩 👪 👨 ‍ 👩 ‍ 👦 👨 ‍ 👩 ‍ 👧 👨 ‍ 👩 ‍ 👧 ‍ 👦 👨 ‍ 👩 ‍ 👦 ‍ 👦 👨 ‍ 👩 ‍ 👧 ‍ 👧 👨 ‍ 👨 ‍ 👦 👨 ‍ 👨 ‍ 👧 👨 ‍ 👨 ‍ 👧 ‍ 👦 👨 ‍ 👨 ‍ 👦 ‍ 👦 👨 ‍ 👨 ‍ 👧 ‍ 👧 👩 ‍ 👩 ‍ 👦 👩 ‍ 👩 ‍ 👧 👩 ‍ 👩 ‍ 👧 ‍ 👦 👩 ‍ 👩 ‍ 👦 ‍ 👦 👩 ‍ 👩 ‍ 👧 ‍ 👧 👨 ‍ 👦 👨 ‍ 👦 ‍ 👦 👨 ‍ 👧 👨 ‍ 👧 ‍ 👦 👨 ‍ 👧 ‍ 👧 👩 ‍ 👦 👩 ‍ 👦 ‍ 👦 👩 ‍ 👧 👩 ‍ 👧 ‍ 👦 👩 ‍ 👧 ‍ 👧
🧑 🏻 ‍ 🤝 ‍ 🧑 🏻 🧑 🏼 ‍ 🤝 ‍ 🧑 🏻 🧑 🏽 ‍ 🤝 ‍ 🧑 🏻 🧑 🏾 ‍ 🤝 ‍ 🧑 🏻 🧑 🏿 ‍ 🤝 ‍ 🧑 🏻 👭 🏻 👩 🏼 ‍ 🤝 ‍ 👩 🏻 👩 🏽 ‍ 🤝 ‍ 👩 🏻 👩 🏾 ‍ 🤝 ‍ 👩 🏻 👩 🏿 ‍ 🤝 ‍ 👩 🏻 👫 🏻 👩 🏻 ‍ 🤝 ‍ 👨 🏼 👩 🏻 ‍ 🤝 ‍ 👨 🏽 👩 🏻 ‍ 🤝 ‍ 👨 🏾 👩 🏻 ‍ 🤝 ‍ 👨 🏿 👩 🏼 ‍ 🤝 ‍ 👨 🏻 👩 🏽 ‍ 🤝 ‍ 👨 🏻 👩 🏾 ‍ 🤝 ‍ 👨 🏻 👩 🏿 ‍ 🤝 ‍ 👨 🏻 👬 🏻 👨 🏼 ‍ 🤝 ‍ 👨 🏻 👨 🏽 ‍ 🤝 ‍ 👨 🏻 👨 🏾 ‍ 🤝 ‍ 👨 🏻 👨 🏿 ‍ 🤝 ‍ 👨 🏻
🧑 🏼 ‍ 🤝 ‍ 🧑 🏻 🧑 🏼 ‍ 🤝 ‍ 🧑 🏼 🧑 🏽 ‍ 🤝 ‍ 🧑 🏼 🧑 🏾 ‍ 🤝 ‍ 🧑 🏼 🧑 🏿 ‍ 🤝 ‍ 🧑 🏼 👩 🏼 ‍ 🤝 ‍ 👩 🏻 👭 🏼 👩 🏽 ‍ 🤝 ‍ 👩 🏼 👩 🏾 ‍ 🤝 ‍ 👩 🏼 👩 🏿 ‍ 🤝 ‍ 👩 🏼 👩 🏻 ‍ 🤝 ‍ 👨 🏼 👩 🏼 ‍ 🤝 ‍ 👨 🏻 👫 🏼 👩 🏼 ‍ 🤝 ‍ 👨 🏽 👩 🏼 ‍ 🤝 ‍ 👨 🏾 👩 🏼 ‍ 🤝 ‍ 👨 🏿 👩 🏽 ‍ 🤝 ‍ 👨 🏼 👩 🏾 ‍ 🤝 ‍ 👨 🏼 👩 🏿 ‍ 🤝 ‍ 👨 🏼 👨 🏼 ‍ 🤝 ‍ 👨 🏻 👬 🏼 👨 🏽 ‍ 🤝 ‍ 👨 🏼 👨 🏾 ‍ 🤝 ‍ 👨 🏼 👨 🏿 ‍ 🤝 ‍ 👨 🏼
🧑 🏽 ‍ 🤝 ‍ 🧑 🏻 🧑 🏽 ‍ 🤝 ‍ 🧑 🏼 🧑 🏽 ‍ 🤝 ‍ 🧑 🏽 🧑 🏾 ‍ 🤝 ‍ 🧑 🏽 🧑 🏿 ‍ 🤝 ‍ 🧑 🏽 👩 🏽 ‍ 🤝 ‍ 👩 🏻 👩 🏽 ‍ 🤝 ‍ 👩 🏼 👭 🏽 👩 🏾 ‍ 🤝 ‍ 👩 🏽 👩 🏿 ‍ 🤝 ‍ 👩 🏽 👩 🏻 ‍ 🤝 ‍ 👨 🏽 👩 🏼 ‍ 🤝 ‍ 👨 🏽 👩 🏽 ‍ 🤝 ‍ 👨 🏻 👩 🏽 ‍ 🤝 ‍ 👨 🏼 👫 🏽 👩 🏽 ‍ 🤝 ‍ 👨 🏾 👩 🏽 ‍ 🤝 ‍ 👨 🏿 👩 🏾 ‍ 🤝 ‍ 👨 🏽 👩 🏿 ‍ 🤝 ‍ 👨 🏽 👨 🏽 ‍ 🤝 ‍ 👨 🏻 👨 🏽 ‍ 🤝 ‍ 👨 🏼 👬 🏽 👨 🏾 ‍ 🤝 ‍ 👨 🏽 👨 🏿 ‍ 🤝 ‍ 👨 🏽
🧑 🏾 ‍ 🤝 ‍ 🧑 🏻 🧑 🏾 ‍ 🤝 ‍ 🧑 🏼 🧑 🏾 ‍ 🤝 ‍ 🧑 🏽 🧑 🏾 ‍ 🤝 ‍ 🧑 🏾 🧑 🏿 ‍ 🤝 ‍ 🧑 🏾 👩 🏾 ‍ 🤝 ‍ 👩 🏻 👩 🏾 ‍ 🤝 ‍ 👩 🏼 👩 🏾 ‍ 🤝 ‍ 👩 🏽 👭 🏾 👩 🏿 ‍ 🤝 ‍ 👩 🏾 👩 🏻 ‍ 🤝 ‍ 👨 🏾 👩 🏼 ‍ 🤝 ‍ 👨 🏾 👩 🏽 ‍ 🤝 ‍ 👨 🏾 👩 🏾 ‍ 🤝 ‍ 👨 🏻 👩 🏾 ‍ 🤝 ‍ 👨 🏼 👩 🏾 ‍ 🤝 ‍ 👨 🏽 👫 🏾 👩 🏾 ‍ 🤝 ‍ 👨 🏿 👩 🏿 ‍ 🤝 ‍ 👨 🏾 👨 🏾 ‍ 🤝 ‍ 👨 🏻 👨 🏾 ‍ 🤝 ‍ 👨 🏼 👨 🏾 ‍ 🤝 ‍ 👨 🏽 👬 🏾 👨 🏿 ‍ 🤝 ‍ 👨 🏾
🧑 🏿 ‍ 🤝 ‍ 🧑 🏻 🧑 🏿 ‍ 🤝 ‍ 🧑 🏼 🧑 🏿 ‍ 🤝 ‍ 🧑 🏽 🧑 🏿 ‍ 🤝 ‍ 🧑 🏾 🧑 🏿 ‍ 🤝 ‍ 🧑 🏿 👩 🏿 ‍ 🤝 ‍ 👩 🏻 👩 🏿 ‍ 🤝 ‍ 👩 🏼 👩 🏿 ‍ 🤝 ‍ 👩 🏽 👩 🏿 ‍ 🤝 ‍ 👩 🏾 👭 🏿 👩 🏻 ‍ 🤝 ‍ 👨 🏿 👩 🏼 ‍ 🤝 ‍ 👨 🏿 👩 🏽 ‍ 🤝 ‍ 👨 🏿 👩 🏾 ‍ 🤝 ‍ 👨 🏿 👩 🏿 ‍ 🤝 ‍ 👨 🏻 👩 🏿 ‍ 🤝 ‍ 👨 🏼 👩 🏿 ‍ 🤝 ‍ 👨 🏽 👩 🏿 ‍ 🤝 ‍ 👨 🏾 👫 🏿 👨 🏿 ‍ 🤝 ‍ 👨 🏻 👨 🏿 ‍ 🤝 ‍ 👨 🏼 👨 🏿 ‍ 🤝 ‍ 👨 🏽 👨 🏿 ‍ 🤝 ‍ 👨 🏾 👬 🏿
🗣 👤 👥 👣 🦰 🦱 🦳 🦲
🐵 🐒 🦍 🦧 🐶 🐕 🦮 🐕 ‍ 🦺 🐩 🐺 🦊 🦝 🐱 🐈 🦁 🐯 🐅 🐆 🐴 🐎 🦄 🦓 🦌 🐮 🐂 🐃 🐄 🐷 🐖 🐗 🐽 🐏 🐑 🐐 🐪 🐫 🦙 🦒 🐘 🦏 🦛 🐭 🐁 🐀 🐹 🐰 🐇 🐿 🦔 🦇 🐻 🐨 🐼 🦥 🦦 🦨 🦘 🦡 🐾 🦃 🐔 🐓 🐣 🐤 🐥 🐦 🐧 🕊 🦅 🦆 🦢 🦉 🦩 🦚 🦜 🐸 🐊 🐢 🦎 🐍 🐲 🐉 🦕 🦖 🐳 🐋 🐬 🐟 🐠 🐡 🦈 🐙 🐚 🐌 🦋 🐛 🐜 🐝 🐞 🦗 🕷 🕸 🦂 🦟 🦠 💐 🌸 💮 🏵 🌹 🥀 🌺 🌻 🌼 🌷 🌱 🌲 🌳 🌴 🌵 🌾 🌿 ☘ 🍀 🍁 🍂 🍃
🍇 🍈 🍉 🍊 🍋 🍌 🍍 🥭 🍎 🍏 🍐 🍑 🍒 🍓 🥝 🍅 🥥 🥑 🍆 🥔 🥕 🌽 🌶 🥒 🥦 🧄 🧅 🥬 🍄 🥜 🌰 🍞 🥐 🥖 🥨 🥯 🥞 🧇 🧀 🍖 🍗 🥩 🥓 🍔 🍟 🍕 🌭 🥪 🌮 🌯 🥙 🧆 🥚 🍳 🥘 🍲 🥣 🥗 🍿 🧈 🧂 🥫 🍱 🍘 🍙 🍚 🍛 🍜 🍝 🍠 🍢 🍣 🍤 🍥 🥮 🍡 🥟 🥠 🥡 🦀 🦞 🦐 🦑 🦪 🍦 🍧 🍨 🍩 🍪 🎂 🍰 🧁 🥧 🍫 🍬 🍭 🍮 🍯 🍼 🥛 ☕ 🍵 🍶 🍾 🍷 🍸 🍹 🍺 🍻 🥂 🥃 🥤 🧃 🧉 🧊 🥢 🍽 🍴 🥄 🔪 🏺
🌍 🌎 🌏 🌐 🗺 🗾 🧭 🏔 ⛰ 🌋 🗻 🏕 🏖 🏜 🏝 🏞 🏟 🏛 🏗 🧱 🏘 🏚 🏠 🏡 🏢 🏣 🏤 🏥 🏦 🏨 🏩 🏪 🏫 🏬  🏭 🏯 🏰 💒 🗼 🗽 ⛪ 🕌 🛕 🕍 ⛩ 🕋 ⛲ ⛺ 🌁 🌃 🏙 🌄 🌅 🌆 🌇 🌉 ♨ 🎠 🎡 🎢 💈 🎪 🚂 🚃 🚄 🚅 🚆 🚇 🚈 🚉 🚊 🚝 🚞 🚋 🚌 🚍 🚎 🚐 🚑 🚒 🚓 🚔 🚕 🚖 🚗 🚘 🚙 🚚 🚛 🚜 🏎 🏍 🛵 🦽 🦼 🛺 🚲 🛴 🛹 🚏 🛣 🛤 🛢 ⛽ 🚨 🚥 🚦 🚧 🛑 ⚓ ⛵ 🛶 🚤 🛳 ⛴ 🛥 🚢 ✈ 🛩 🛫 🛬 🪂 💺 🚁 🚟 🚠 🚡 🛰 🚀 🛸 🛎 🧳 ⌛ ⏳ ⌚ ⏰ ⏱ ⏲ 🕰 🕛 🕧 🕐 🕜 🕑 🕝 🕒 🕞 🕓 🕟 🕔 🕠 🕕 🕡 🕖 🕢 🕗 🕣 🕘 🕤 🕙 🕥 🕚 🕦 🌑 🌒 🌓 🌔 🌕 🌖 🌗 🌘 🌙 🌚 🌛 🌜 🌡 ☀ 🌝 🌞 🪐 ⭐ 🌟 🌠 🌌 ☁ ⛅ ⛈ 🌤 🌥 🌦 🌧 🌨 🌩 🌪 🌫 🌬 🌀 🌈 🌂 ☂ ☔ ⛱ ⚡ ❄ ☃ ⛄ ☄ 🔥 💧 🌊
🎃 🎄 🎆 🎇 🧨 ✨ 🎈 🎉 🎊 🎋 🎍 🎎 🎏 🎐 🎑 🧧 🎀 🎁 🎗 🎟 🎫 🎖 🏆 🏅 🥇 🥈 🥉 ⚽ ⚾ 🥎 🏀 🏐 🏈 🏉 🎾 🥏 🎳 🏏 🏑 🏒 🥍 🏓 🏸 🥊 🥋 🥅 ⛳ ⛸ 🎣 🤿 🎽 🎿 🛷 🥌 🎯 🪀 🪁 🎱 🔮 🧿 🎮 🕹 🎰 🎲 🧩 🧸 ♠ ♥ ♦ ♣ ♟ 🃏 🀄 🎴 🎭 🖼 🎨 🧵 🧶
👓 🕶 🥽 🥼 🦺 👔 👕 👖 🧣 🧤 🧥 🧦 👗 👘 🥻 🩱 🩲 🩳 👙 👚 👛 👜 👝 🛍 🎒 👞 👟 🥾 🥿 👠 👡 🩰 👢 👑 👒 🎩 🎓 🧢 ⛑ 📿 💄 💍 💎 🔇 🔈 🔉 🔊 📢 📣 📯 🔔 🔕 🎼 🎵 🎶 🎙 🎚 🎛 🎤 🎧 📻 🎷 🎸 🎹 🎺 🎻 🪕 🥁 📱 📲 ☎ 📞 📟 📠 🔋 🔌 💻 🖥 🖨 ⌨ 🖱 🖲 💽 💾 💿 📀 🧮 🎥 🎞 📽 🎬 📺 📷 📸 📹 📼 🔍 🔎 🕯 💡 🔦 🏮 🪔 📔 📕 📖 📗 📘 📙 📚 📓 📒 📃 📜 📄 📰 🗞 📑 🔖 🏷 💰 💴 💵 💶 💷 💸 💳 🧾 💹 💱 💲 ✉ 📧 📨 📩 📤 📥 📦 📫 📪 📬 📭 📮 🗳 ✏ ✒ 🖋 🖊 🖌 🖍 📝 💼 📁 📂 🗂 📅 📆 🗒 🗓 📇 📈 📉 📊 📋 📌 📍 📎 🖇 📏 📐 ✂ 🗃 🗄 🗑 🔒 🔓 🔏 🔐 🔑 🗝 🔨 🪓 ⛏ ⚒ 🛠 🗡 ⚔ 🔫 🏹 🛡 🔧 🔩 ⚙ 🗜 ⚖ 🦯 🔗 ⛓ 🧰 🧲 ⚗ 🧪 🧫 🧬 🔬 🔭 📡 💉 🩸 💊 🩹 🩺 🚪 🛏 🛋 🪑 🚽 🚿 🛁 🪒 🧴 🧷 🧹 🧺 🧻 🧼 🧽 🧯 🛒 🚬 ⚰ ⚱ 🗿
🏧 🚮 🚰 ♿ 🚹 🚺 🚻 🚼 🚾 🛂 🛃 🛄 🛅 ⚠ 🚸 ⛔ 🚫 🚳 🚭 🚯 🚱 🚷 📵 🔞 ☢ ☣ ⬆ ↗ ➡ ↘ ⬇ ↙ ⬅ ↖ ↕ ↔ ↩ ↪ ⤴ ⤵ 🔃 🔄 🔙 🔚 🔛 🔜 🔝 🛐 ⚛ 🕉 ✡ ☸ ☯ ✝ ☦ ☪ ☮ 🕎 🔯 ♈ ♉ ♊ ♋ ♌ ♍ ♎ ♏ ♐ ♑ ♒ ♓ ⛎ 🔀 🔁 🔂 ▶ ⏩ ⏭ ⏯ ◀ ⏪ ⏮ 🔼 ⏫ 🔽 ⏬ ⏸ ⏹ ⏺ ⏏ 🎦 🔅 🔆 📶 📳 📴 ♀ ♂ ⚕ ♾ ♻ ⚜ 🔱 📛 🔰 ⭕ ✅ ☑ ✔ ✖ ❌ ❎ ➕ ➖ ➗ ➰ ➿ 〽 ✳ ✴ ❇ ‼ ⁉ ❓ ❔ ❕ ❗ 〰 © ® ™ # ⃣ * ⃣ 0 ⃣ 1 ⃣ 2 ⃣ 3 ⃣ 4 ⃣ 5 ⃣ 6 ⃣ 7 ⃣ 8 ⃣ 9 ⃣ 🔟 🔠 🔡 🔢 🔣 🔤 🅰 🆎 🅱 🆑 🆒 🆓 ℹ 🆔 Ⓜ 🆕 🆖 🅾 🆗 🅿 🆘 🆙 🆚 🈁 🈂 🈷 🈶 🈯 🉐 🈹 🈚 🈲 🉑 🈸 🈴 🈳 ㊗ ㊙ 🈺 🈵 🔴 🟠 🟡 🟢 🔵 🟣 🟤 ⚫ ⚪ 🟥 🟧 🟨 🟩 🟦 🟪 🟫 ⬛ ⬜ ◼ ◻ ◾ ◽ ▪ ▫ 🔶 🔷 🔸 🔹 🔺 🔻 💠 🔘 🔳 🔲
🏁 🚩 🎌 🏴 🏳 🏳 ️ ‍ 🌈 🏴 ‍ ☠ ️ 🇦 🇨 🇦 🇩 🇦 🇪 🇦 🇫 🇦 🇬 🇦 🇮 🇦 🇱 🇦 🇲 🇦 🇴 🇦 🇶 🇦 🇷 🇦 🇸 🇦 🇹 🇦 🇺 🇦 🇼 🇦 🇽 🇦 🇿 🇧 🇦 🇧 🇧 🇧 🇩 🇧 🇪 🇧 🇫 🇧 🇬 🇧 🇭 🇧 🇮 🇧 🇯 🇧 🇱 🇧 🇲 🇧 🇳 🇧 🇴 🇧 🇶 🇧 🇷 🇧 🇸 🇧 🇹 🇧 🇻 🇧 🇼 🇧 🇾 🇧 🇿 🇨 🇦 🇨 🇨 🇨 🇩 🇨 🇫 🇨 🇬 🇨 🇭 🇨 🇮 🇨 🇰 🇨 🇱 🇨 🇲 🇨 🇳 🇨 🇴 🇨 🇵 🇨 🇷 🇨 🇺 🇨 🇻 🇨 🇼 🇨 🇽 🇨 🇾 🇨 🇿 🇩 🇪 🇩 🇬 🇩 🇯 🇩 🇰 🇩 🇲 🇩 🇴 🇩 🇿 🇪 🇦 🇪 🇨 🇪 🇪 🇪 🇬 🇪 🇭 🇪 🇷 🇪 🇸 🇪 🇹 🇪 🇺 🇫 🇮 🇫 🇯 🇫 🇰 🇫 🇲 🇫 🇴 🇫 🇷 🇬 🇦 🇬 🇧 🇬 🇩 🇬 🇪 🇬 🇫 🇬 🇬 🇬 🇭 🇬 🇮 🇬 🇱 🇬 🇲 🇬 🇳 🇬 🇵 🇬 🇶 🇬 🇷 🇬 🇸 🇬 🇹 🇬 🇺 🇬 🇼 🇬 🇾 🇭 🇰 🇭 🇲 🇭 🇳 🇭 🇷 🇭 🇹 🇭 🇺 🇮 🇨 🇮 🇩 🇮 🇪 🇮 🇱 🇮 🇲 🇮 🇳 🇮 🇴 🇮 🇶 🇮 🇷 🇮 🇸 🇮 🇹 🇯 🇪 🇯 🇲 🇯 🇴 🇯 🇵 🇰 🇪 🇰 🇬 🇰 🇭 🇰 🇮 🇰 🇲 🇰 🇳 🇰 🇵 🇰 🇷 🇰 🇼 🇰 🇾 🇰 🇿 🇱 🇦 🇱 🇧 🇱 🇨 🇱 🇮 🇱 🇰 🇱 🇷 🇱 🇸 🇱 🇹 🇱 🇺 🇱 🇻 🇱 🇾 🇲 🇦 🇲 🇨 🇲 🇩 🇲 🇪 🇲 🇫 🇲 🇬 🇲 🇭 🇲 🇰 🇲 🇱 🇲 🇲 🇲 🇳 🇲 🇴 🇲 🇵 🇲 🇶 🇲 🇷 🇲 🇸 🇲 🇹 🇲 🇺 🇲 🇻 🇲 🇼 🇲 🇽 🇲 🇾 🇲 🇿 🇳 🇦 🇳 🇨 🇳 🇪 🇳 🇫 🇳 🇬 🇳 🇮 🇳 🇱 🇳 🇴 🇳 🇵 🇳 🇷 🇳 🇺 🇳 🇿 🇴 🇲 🇵 🇦 🇵 🇪 🇵 🇫 🇵 🇬 🇵 🇭 🇵 🇰 🇵 🇱 🇵 🇲 🇵 🇳 🇵 🇷 🇵 🇸 🇵 🇹 🇵 🇼 🇵 🇾 🇶 🇦 🇷 🇪 🇷 🇴 🇷 🇸 🇷 🇺 🇷 🇼 🇸 🇦 🇸 🇧 🇸 🇨 🇸 🇩 🇸 🇪 🇸 🇬 🇸 🇭 🇸 🇮 🇸 🇯 🇸 🇰 🇸 🇱 🇸 🇲 🇸 🇳 🇸 🇴 🇸 🇷 🇸 🇸 🇸 🇹 🇸 🇻 🇸 🇽 🇸 🇾 🇸 🇿 🇹 🇦 🇹 🇨 🇹 🇩 🇹 🇫 🇹 🇬 🇹 🇭 🇹 🇯 🇹 🇰 🇹 🇱 🇹 🇲 🇹 🇳 🇹 🇴 🇹 🇷 🇹 🇹 🇹 🇻 🇹 🇼 🇹 🇿 🇺 🇦 🇺 🇬 🇺 🇲 🇺 🇳 🇺 🇸 🇺 🇾 🇺 🇿 🇻 🇦 🇻 🇨 🇻 🇪 🇻 🇬 🇻 🇮 🇻 🇳 🇻 🇺 🇼 🇫 🇼 🇸 🇽 🇰 🇾 🇪 🇾 🇹 🇿 🇦 🇿 🇲 🇿 🇼 🏴 󠁧 󠁢 󠁥 󠁮 󠁧 󠁿 🏴 󠁧 󠁢 󠁳 󠁣 󠁴 󠁿 🏴
表示用の Ruby コード。

require 'open-uri'
require 'nokogiri'

top_url = "https://lets-emoji.com/emojilist/"

Nokogiri.HTML(URI.open(top_url)).css("div#the-content a")
  .map {|node| node.attribute("href")&.value}.compact.uniq
  .select {|url| /^https/.match(url)}
  .each do |url|
    Nokogiri.HTML(URI.open(url)).css('td').each do |e|
      e.text.split.each do |st|
        print ('0x' + st[2..-1]).to_i(0).chr("UTF-8") + " " if st[0, 2] == "U+"
      end
    end
    puts
end

Ruby FFI でエラトステネスの篩


これまで RubyC言語で「エラトステネスの篩」を書いたので、Ruby FFI で融合させてみました。Ruby FFI で簡単に Ruby から C言語の関数を呼ぶことができます。Linux Mint 18.2, Ruby 2.3.3 で確認しました。

Ruby FFI を使うには libffi が必要ですが、Linux Mint には最初から入っていました。あと、RubyGem 'ffi' が必要なのでインストールして下さい。

まず C言語のソース。
eratosthenes1.c

#include <math.h>

int sieve(int max, int *a) {
    int i, j;
    
    for (i = 2; i <= sqrt(max); i++) {
        if (a[i] == 1) continue;
        for (j = 2; j <= (max / i); j++) a[i * j] = 1;
    }
    
    i = 0;
    for (j = 2; j <= max; j++) {
        if (!a[j]) a[i++] = j;
    }
    
    return i;
}

コンパイルします。

$ gcc -Wall -fPIC -c eratosthenes1.c -o eratosthenes1.o
$ gcc -shared -o eratosthenes1.so eratosthenes1.o

-fPIC オプションはないとエラーが出るので付けました。これでできた eratosthenes1.so を使います。

Ruby 側。
eratosthenes_ffi.rb

require 'ffi'

module MyModule
  extend FFI::Library
  ffi_lib "./eratosthenes1.so"
  attach_function :sieve, [:int, :pointer], :int
end

max = 1000
pointer = FFI::MemoryPointer.new(:int, max + 1)

size = MyModule.sieve(max, pointer)
p pointer.read_array_of_int(size)

結果。

$ ruby eratosthenes_ffi.rb
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73,
 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163,
 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251,
 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349,
 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443,
 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557,
 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647,
 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757,
 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863,
 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983,
 991, 997]

1000万までの素数を求めてみました(出力なし)。

$ time ruby eratosthenes_ffi.rb

real	0m0.459s
user	0m0.448s
sys	0m0.008s

pure Ruby の場合と比べて、7倍ほどの高速化になりました。


※参考
Home · ffi/ffi Wiki · GitHub
c - How do I handle ruby arrays in ruby ffi gem? - Stack Overflow
Ruby FFIを使ったエクステンションの作り方 - Boost Your Programming!
Ruby-FFIについて調べてみた。(まとめ) - いものやま。

Ruby FFI(メモ) - Marginalia