Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
10
Help us understand the problem. What is going on with this article?
@monoquro

愛はたまたま生まれたのか?誰かの陰謀なのか?

More than 3 years have passed since last update.

TLDR

たまたまです。私は、なるべくしてなったのだと信じたい!
プログラムを作って検証しました。
愛以外の漢字についてもパターンを作成することができます。

概要

愛が生まれた, なんで愛が生まれるのか がトレンドなので

'生' & '死' = '愛'

これがたまたまなのを検証する。

検証1 : Unicode の順番

Unicodeでは、漢字はどのような順番なのか?

UnicodeのCJK統合漢字は、概ね部首順(部首内は画数順)に並んでいます。

cf. http://www.asahi-net.or.jp/~ax2s-kmtn/ref/unicode/cjku_radical.html

'生', '死', '愛' を参照してみると、部首通りに並んでいた。

i.e. 陰謀ではない

検証2 : 逆算ができない

そもそも、bit演算であるため、逆算ができない。

i.e. '愛'と'死'からは、'生'は導きだせない。

では、'愛'を作るパターンは他にもあるのでは?

検証3 : '愛'を作るパターンは?

プログラムを書いてみた。
実行はこちらPaiza.IO

# coding: utf-8
import operator 

# 任意の漢字で
kanji = '愛'
# __and__ を__or__, __xor__に変更可
bit_operation = operator.__and__


def f(word, bit_pattern, obj1='', obj2=''):
    if(len(word) == len(obj1)):
        # 終端処理
        return [(obj1, obj2)] if not(word == obj1 == obj2) else []
    else:
        use_pattern = bit_pattern[int(word[len(obj1)])]
        # flatMap化
        return [tup for i, j in use_pattern 
                    for tup in f(word, bit_pattern, obj1 + str(i), obj2 + str(j))]

bits = (1, 0)
# 論理演算の結果から引く辞書を作成する。dict(結果:[パターン])
bit_pattern = {bit:
                [pattern 
                    for ans, pattern in 
                    ((bit_operation(x,y), (x,y)) for x in bits 
                                                 for y in bits) 
                 if ans == bit] 
                    for bit in bits}

kanji_bit = bin(ord('愛'))
# 漢字の範囲でfiltering
result = filter(lambda x:
        int('4E00', 16) <= int(kanji_bit[:2]+x[0],2) <= int('9FFF', 16) and int('4E00', 16) <= int(kanji_bit[:2]+x[1],2) <= int('9FFF', 16), 
      f(kanji_bit[2:], bit_pattern))
result = list(
            map(lambda x:(chr(int(kanji_bit[:2]+x[0],2)), chr(int(kanji_bit[:2]+x[1],2))), 
                result))
print("'"+kanji+"' を作り得るパターン数", end=" : ")
print(len(result))
print("漢字一覧", end="\n")
print({y for x in result for y in x})

結果

'愛'を作るパターン : 6560
使われうる漢字数 : 256
{'榟', '疛', '愛', '浟', '篛', '涿', '羻', '禛', '斻', '礟', '熿', '欛', '涟', '漿', '焛', '柿', '敟', '焻', '祻', '綛', '殟', '椻', '緟', '毿', '愻', '掛', '罟', '捿', '攛', '箛', '矛', '朻', '換', '箿', '楛', '淟', '甿', '濛', '移', '眻', '眛', '歿', '祿', '椿', '挻', '紿', '懻', '翿', '生', '懟', '翛', '欟', '涛', '熻', '憿', '掟', '羿', '缛', '猻', '畟', '添', '煻', '翟', '甛', '猿', '挟', '敻', '猟', '燻', '淿', '枻', '煟', '朿', '禿', '礿', '痟', '潻', '潿', '敿', '猛', '燛', '掻', '畛', '槟', '絿', '浿', '獿', '珛', '睻', '疿', '枟', '枿', '珻', '缟', '椛', '死', '羟', '歟', '槛', '羛', '紛', '絛', '掿', '租', '獻', '榻', '秿', '旟', '瞻', '笿', '緻', '筻', '杛', '礻', '涻', '柟', '焿', '画', '柛', '损', '篿', '离', '椟', '淛', '澿', '珿', '槿', '笻', '浻', '感', '挿', '慿', '欿', '旿', '歛', '絻', '禟', '翻', '煛', '矟', '熟', '毟', '濟', '憟', '憻', '緿', '疟', '營', '燿', '篟', '瞟', '祛', '旛', '睟', '睿', '紟', '槻', '殿', '捛', '玿', '濻', '痿', '痻', '眿', '殻', '緛', '獛', '捻', '榛', '篻', '慟', '榿', '毛', '楻', '真', '煿', '缿', '玛', '綟', '旻', '罿', '絟', '秛', '攟', '矻', '浛', '疻', '缻', '挛', '罻', '笛', '畿', '漛', '杻', '懿', '楟', '瞛', '礛', '揿', '筛', '揟', '活', '枛', '珟', '筿', '痛', '玟', '毻', '焟', '綿', '束', '笟', '楿', '政', '望', '熛', '板', '綻', '筟', '懛', '獟', '斛', '欻', '畻', '箟', '洟', '澟', '澻', '祟', '玻', '澛', '濿', '瞿', '慻', '査', '斟', '潟', '慛', '揻', '斿', '漟', '攻', '洿', '期', '洛', '憛', '潛', '殛', '紻', '愿', '漻', '罛', '矿', '睛', '敛', '箻'}

作られるパターンは多いが、この中で関連あるペアのパターンはあるのか?

まとめ

作られるパターンは多いが、この中で関連あるペアのパターンはあるのか?

i.e.
存在することが非常に稀ではないか
'生'&'死'='愛'はたまたま

しかし、生・死・愛は関連が非常に強い単語のように思える。
なるべくしてなったのではないか?

蛇足 : 他の漢字は?

作成したプログラムで他の漢字についてもいじれます。
また、and だけではなく、or、xor についても行えます。
(xorは漢字限定では結果が出ません漢字が4E00~9FFFのため、一桁目で漢字と漢字以外の組み合わせになるため)

いろいろ試行してください。

Link

生死から愛が生まれるとき教科書から恐が生まれる
愛を生む二人を探して

10
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
monoquro

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
10
Help us understand the problem. What is going on with this article?