【今年の漢字】(2020年)の質問

 皆さん、【今年の漢字】(2020年)の質問の回答・コメント有難うございました。
 今年の漢字は、「密」でした。
 今年は2名の方が正解されました。おめでとうございます。o(^-^)o
 個人的には、「冠」がお気に入りでした。それで、ちょっとだけポイントを多くしました。(^_^;
 ちなみに、第1位および、2位以下の情報は、次の通りです。

1位 「密」 28,401 票(13.65%)
2位 「禍」 13,655 票(6.56%)
3位 「病」 10,369 票(4.98%)
4位 「新」 9,882 票(4.75%)
5位 「変」 7,037 票(3.38%)
6位 「家」 6,865 票(3.30%)
7位 「滅」 5,200 票(2.50%)
8位 「菌」 5,062 票(2.43%)
9位 「鬼」 4,840 票(2.33%)
10位 「疫」 4,082 票(1.96%)
11位 「粛」 3,513 票(1.69%)
12位 「染」 3,186 票(1.53%)
13位 「耐」 2,913 票(1.40%)
14位 「感」 2,368 票(1.14%)
15位 「命」 2,179 票(1.05%)
16位 「離」 2,171 票(1.04%)
17位 「災」 1,896 票(0.91%)
18位 「苦」 1,773 票(0.85%)
19位 「休」 1,762 票(0.85%)
20位 「悲」 1,338 票(0.64%)
※応募総数 208,025 票

※参考URL
公益財団法人 日本漢字能力検定協会
『2020年に関するアンケート調査』今年の「新語・流行語大賞」と「今年の漢字」を予測!新語・流行語大賞の1位予測は「3密(三つの密)」今年の漢字は「禍」|CCCMKHDのプレスリリース

【新語・流行語大賞】(2020)の質問

 皆さん、質問の回答・コメントありがとうございました。今年の【新語・流行語大賞】は、「3密」でした。(^_^;
 おめでとう御座います。Gleam さんと wanderinpenguin さんが正解でしたが、先着順ということで、Gleam さんをベストアンサー(BA)とさせていただきました。o(^-^)o

※参考URL
https://www.jiyu.co.jp/singo/

知恵袋で見つけた判断推理のトランプの問題をPythonで解いてみた。(3)

 知恵袋で見つけた判断推理のトランプの問題Pythonで解いてみました。(^_^;

 トランプが12枚ある。ハート、ダイヤ、クラブ、スペードの4種類でそれぞれにジャック、クィーン、キングが揃っている。A~Dの4人に3枚ずつ配ったところ次のことが分かった。
・Aにはハートが2枚あるがクラブはない
・Bにはジャックが2枚あるがハートはない
・Cにはスペードとクイーンは2枚あるがキングはない
・Dにはダイヤが2枚とクラブのキングがある
 以上のことから正しいものをえらびなさい
1 Aにはキングが2枚ある
2 Bにはダイヤのクイーンがある
3 Cにはハートのジャックがある
4 Dにはクイーンが2枚ある
5 Bにはスペードのキングがある

 前回、作った拙プログラムTrump2.pyを雛形にしましたが、countRank関数とcountSuit関数をちょっと書き直してみました。(^_^;
 トランプに、0~11の通し番号を与えて、1人分の枚数3で割った商でスート(絵柄マーク)、3で割った余りからランク(番号)を得ることにしました。

 sSuit: ('S','D','C','H') = n: (0,1,2,3) = (スペード,ダイア,クラブ,ハート)
 sRank: ('J','Q','K') = n: (0,1,2) = (ジャック,クィーン,キング)

      0  1  2
      J  Q  K : Rank
 0 S  0  1  2
 1 D  3  4  5
 2 C  6  7  8
 3 H  9 10 11
 Suit

● Trump3.py

# coding: UTF-8
# Trump3.py

import itertools
from time import time

SUIT = 'SDCH'
RANK = 'JQK'
N = len(RANK)   # 1人分の枚数

# sRank: 'J','Q','K'
def countRank(sRank, cards):
    li = []
    for c in cards:
        li.append(RANK[c%N])
    return li.count(sRank)

# sSuit: 'S','D','C','H'
def countSuit(sSuit, cards):
    li = []
    for c in cards:
        li.append(SUIT[c//N])
    return li.count(sSuit)

def countSuits(cards):
    return [countSuit(SUIT[i],cards) for i in range(4)]

# suitとrankから通し番号を得る
def getN(sSuit,sRank):
    return SUIT.index(sSuit)*N+RANK.index(sRank)

def toStrCards(cards):
    li = []
    for c in cards:
        li.append(SUIT[c//N]+RANK[c%N])
    return "(%s)"%(','.join(li))

# 確実にいえる選択肢を得る
def getAns(cho,lbl='12345'):
    return ','.join([lbl[i] for i in range(len(cho)) if cho[i]])

def main():
    tm = time()  # Timer Start

    choices = [True]*5
    Cards = range(4*N)
    for a in itertools.combinations(Cards,N):
        if countSuit('H',a)!=2: continue                # 条件A-1
        if countSuit('C',a)!=0: continue                # 条件A-2
        B = tuple(set(Cards)-set(a))                # aを除いた残り
        for b in itertools.combinations(B,N):
            if countRank('J',b)!=2: continue            # 条件B-1
            if countSuit('H',b)!=0: continue            # 条件B-2
            C = tuple(set(B)-set(b))                # a,bを除いた残り
            for c in itertools.combinations(C,N):
                if countSuit('S',c)!=2: continue        # 条件C-1
                if countRank('Q',c)!=2: continue        # 条件C-2
                if countRank('K',c)!=0: continue        # 条件C-3
                d = tuple(set(C)-set(c))            # a,b,cを除いた残り
                if countSuit('D',d)!=2: continue        # 条件D-1
                if not getN('C','K') in d: continue     # 条件D-2
                # チェックを潜り抜けたものだけを表示
                print(toStrCards(a),toStrCards(b),toStrCards(c),toStrCards(d))
                # 選択肢のチェック
                choices[0] &= (countRank('K',a)==2)
                choices[1] &= (getN('D','Q') in b )
                choices[2] &= (getN('H','J') in c )
                choices[3] &= (countRank('Q',d)==2)
                choices[4] &= (getN('S','K') in b )

    print(u"∴%s"%getAns(choices))
    print("Runtime : %.3f [sec]"%(time()-tm))   # Timer Stop & Disp

if __name__ == '__main__':
    main()

●実行結果

(SK,HJ,HK) (DJ,CJ,CQ) (SJ,SQ,HQ) (CK,DQ,DK)
∴1
Runtime : 0.016 [sec]

※参考URL
知恵袋で見つけた判断推理のトランプの問題をPythonで解いてみた。 - rscのブログ
知恵袋で見つけた判断推理のトランプの問題をPythonで解いてみた。(2) - rscのブログ









知恵袋で見つけた判断推理のトランプの問題をPythonで解いてみた。(2)

 知恵袋で見つけた判断推理のトランプの問題Pythonで解いてみました。(^_^;

 トランプの4種類のマークのカードがそれぞれ5枚(うち1枚はエース)、計20枚ある。
これをA,B,C,Dの4人に5枚ずつ配ったところ、それぞれ次のように話した。
A 『同じ種類が4枚ある。エースが2枚ある』
B 『ダイヤが3枚、スペードが1枚、他のマークが1枚ある』
C 『ダイヤが1枚、クラブが3枚ある』
D 『すべての種類のカードがある。エースが1枚ある』
 このとき、次のア~ウのうち、常に正しいといえるものの組み合わせはどれか。
ア、ハートを持っている者は、スペードを持っている。
イ、スペードを持っている者は、ダイヤを持っている。
ウ、クラブを持っている者は、ダイヤを持っている。

 ただし、P,Q,R,XをA,B,C,Dに変えました。また、問題では、エースのことしか触れられていませんが、他は任意ということで番号をK,A,2,3,4と自分で設定しました。
 以前に作った拙プログラムTrump1.pyを雛形にしましたが、ちょっと改良しました。
 問題は、選択肢が大きく変わっていますが、条件部分はあまり変わっていないようです。選択肢の判定には、論理包含Impとall関数を使ってみました。(^_^;

● Trump2.py

# coding: UTF-8
# Trump2.py

import itertools
from time import time

SUIT = 'SDCH'
RANK = 'KA234'
N = len(RANK)   # 1人分の枚数

# sRank: 'K','A','2','3','4'
def countRank(sRank, cards):
    n = RANK.index(sRank)
    count = 0
    for c in cards:
        if c%N==n: count+=1
    return count

# sSuit: 'S','D','C','H'
def countSuit(sSuit, cards):
    n = SUIT.index(sSuit)
    count = 0
    for c in cards:
        if c//N==n: count+=1
    return count

def countSuits(cards):
    return [countSuit(SUIT[i],cards) for i in range(4)]

# suitとrankから通し番号を得る
def getN(sSuit,sRank):
    return SUIT.index(sSuit)*N+RANK.index(sRank)

def toStrCards(cards):
    li = []
    for c in cards:
        li.append(SUIT[c//N]+RANK[c%N])
    return "(" + ','.join(li) + ")"

# 論理包含Imp
def Imp(p,q):
    return not p or q

# 確実にいえる選択肢を得る
def getAns(cho,lbl='12345'):
    return ','.join([lbl[i] for i in range(len(cho)) if cho[i]])

def main():
    tm = time()  # Timer Start

    choices = [True]*3
    Cards = range(4*N)
    for a in itertools.combinations(Cards,N):
        if not 4 in countSuits(a): continue             # 条件A-1
        if countRank('A',a)!=2: continue                # 条件A-2
        B = tuple(set(Cards)-set(a))                # aを除いた残り
        for b in itertools.combinations(B,N):
            if countSuit('D',b)!=3: continue            # 条件B-1
            if countSuit('S',b)!=1: continue            # 条件B-2
            C = tuple(set(B)-set(b))                # a,bを除いた残り
            for c in itertools.combinations(C,N):
                if countSuit('D',c)!=1: continue        # 条件C-1
                if countSuit('C',c)!=3: continue        # 条件C-2
                d = tuple(set(C)-set(c))            # a,b,cを除いた残り
                if 0 in countSuits(d) : continue        # 条件D-1
                if countRank('A',d)!=1: continue        # 条件D-2
                # チェックを潜り抜けたものを表示
##                print(toStrCards(a),toStrCards(b),toStrCards(c),toStrCards(d))
                # 選択肢のチェック
                li = [a,b,c,d]
                choices[0] &= all([Imp(countSuit('H',x)!=0,countSuit('S',x)!=0) for x in li])
                choices[1] &= all([Imp(countSuit('S',x)!=0,countSuit('D',x)!=0) for x in li])
                choices[2] &= all([Imp(countSuit('C',x)!=0,countSuit('D',x)!=0) for x in li])

    print(u"∴%s"%getAns(choices,'アイウ'))
    print("Runtime : %.3f [sec]"%(time()-tm))   # Timer Stop & Disp

if __name__ == '__main__':
    main()

●実行結果

∴ア,ウ
Runtime : 6.953 [sec]

※参考URL
組み込み関数 — Python 3.9.0 ドキュメント
知恵袋で見つけた判断推理のトランプの問題をPythonで解いてみた。 - rscのブログ
知恵袋で見つけた判断推理のトランプの問題をPythonで解いてみた。(3) - rscのブログ









【好きなプログラミング言語】のアンケート

 皆さん、アンケートの回答、ありがとうございました。
 はてな民的には、C,C++,BASIC,Pythonが人気のようです。BASICが意外と人気なようです。(^_^;

※参考URL
index | TIOBE - The Software Quality Company