ネットで見かけた確率の問題に答える

https://story.hyuki.net/20161023173434/

数学ガールとかの著者の方がtwitterでつぶやいてた問題。 面白そう。少し考えてみる (あってるかどうかは不明)

表に1と書いてあり、裏に2と書いてあるコインが一枚ある。このコインを二回投げて、出た数二つを合計する。合計が偶数か奇数か、どちらに掛けたほうが当たるだろうか。
たかしくんはこう考えた。一回投げて出るのは偶数か奇数のどちらかだ。二回投げたときには「両方とも偶数」か「両方とも奇数」か「偶数と奇数」かの三種類になる。このうち合計が奇数になるのは「偶数と奇数」の一種類しかない。だから、合計が偶数になる方に掛けたほうが当たる。
たかしくんの考えをどう思う?
ただし、コインには偏りがないとする。


偶数と奇数のどちらの方の合計になる確率が高いかっていう問題だとおもう。

表で考えると出てくる通りは下で全部。 偶数が2通り(2, 4) 奇数も2通り(3,3)、

1回目2回目合計
112
123
213
224

つまり、どちらに掛けても変わらない。

結果: どっちも一緒

で多分・・合ってるとおもう

間違ってたらコメントで教えてくれ〜〜〜〜

orelangをPythonで実装してみた

http://qiita.com/shuetsu@github/items/ac21e597265d6bb906dc

いろんな人がいろんな言語で実装してた。 Python版が載ってなかったので参戦。

一応、引き算にも対応した。

class Engine:
    def __init__(self):
        self.operators = {}
        self.variables = {}
        
        self.operators["+"] = AddOperator()
        self.operators["-"] = SubOperator()
        self.operators["*"] = MultiplyOperator()
        self.operators["="] = EqualOperator()
        self.operators["set"] = SetOperator()
        self.operators["get"] = GetOperator()
        self.operators["until"] = UntilOperator()
        self.operators["step"] = StepOperator()

    def eval(self, script):
        return self._get_expression(script).eval(self)
    
    def _get_expression(self, script):
        if isinstance(script, list):
            script_list = script
            return CallOperator(self.operators[script_list[0]], script_list[1:])
        else:
            return ImmediateValue(script)


class CallOperator:
    def __init__(self, operator, args):
        self.operator = operator
        self.args = args
    
    def eval(self, engine):
        return self.operator.call(engine, self.args)


class ImmediateValue:
    def __init__(self, value):
        self.value = value
        
    def eval(self, engine):
        return self.value


class SubOperator:
    def call(self, engine, args):
        retval = engine.eval(args[0])
        for arg in args[1:]:
            v = engine.eval(arg)
            retval -= v
        return retval
        

class AddOperator:
    def call(self, engine, args):
        retval = 0
        for arg in args:
            v = engine.eval(arg)
            retval += v
        return retval


class MultiplyOperator:
    def call(self, engine, args):
        retval = 1
        for arg in args:
            v = engine.eval(arg)
            retval *= v
        return retval


class EqualOperator:
    def call(self, engine, args):
        return engine.eval(args[0]) == engine.eval(args[1])
    
    
class SetOperator:
    def call(self, engine, args):
        value = engine.eval(args[1])
        engine.variables[str(engine.eval(args[0]))] = value
        return value
    
    
class GetOperator:
    def call(self, engine, args):
        return engine.variables[engine.eval(args[0])]
    

class UntilOperator:
    def call(self, engine, args):
        retval = None
        while not engine.eval(args[0]):
            retval = engine.eval(args[1])
        return retval
    
    
class StepOperator:
    def call(self, engine, args):
        retval = None
        for arg in args:
            retval = engine.eval(arg)
        return retval

言語を作るのは、どうやるのか想像がしにくかったので面白かった

Stack Overflowの通知アプリをWebExtensionsでやろうとしたらできなかった

Stack Overflowの通知アプリをWebExtensionsで作ろうとしたらAPIがなくてできなかった

自分の質問に回答がついたとか、誰かがコメントしたとか、そういうのがトゥルテンって通知センターとかに出るようにしたいと思ってトライした。

inboxの内容をとるAPIはあるけど、1度通知されたinboxの内容の状態を既読にするAPIがなかった。 だから、inboxの内容が何回も通知される

トゥルテン、トゥルテン、トゥルテン、トゥルテンと延々となり続けるというなんともうざいアプリができた。

KiYugadgeter/StackNoisyOverflow: Stack Overflow Notification WebExtensions (WIP)

トゥルテン・・・

DOMParserが便利すぎる

なんかDOMParserというのを見つけた

標準であるやつで、HTMLとかXMLとかSVGとかの文字列をParseしてDOMにしてくれるらしい。 返ってくるのはDOMなのでgetElementByIdとかが使えるようだ

var parser = new DOMParser();
var dom = parser.parseFromString(xml_string, "application/xml");
dom.getElementsByTagName("TagName");

という風にできる。

これはすごく、すごく便利である。

今まで頑張って正規表現使ってやっていたがもうそんなことをしなくていいのは良い

DOMParser - Web API インターフェイス | MDN

kiloを読む

kiloという1000行ほど(コメント除く)のテキストエディタがあるらしい。 私はコードを読むのがとても苦手なので読んでみようと思う

こんな記事もあるので今回はなんとなく理解できそうな希ガス

C言語1000行以下のエディタ「Kilo」を理解する (1) シンプルな内部構造 | マイナビニュース

あと、今日は暑すぎる。もう9月終わるのに.

はじめてのOSコードリーディングを買ってみた

面白そうだったから買った

ちょっと読んでみて思ったが、かなり詳しく説明してあるけど、コード読むのが苦手な私としては、やっぱりむずい。 もっとコードを読むことに慣れないといけない。

ただ、大事な構造体のフィールドの使われ方が表になっているのは読んで行くのに便利。

p.p_addrとか出てきて、これ何だっけ? ってなった時に見返せる。

あと、ブックカバーがかっこいい

はじめてのOSコードリーディング ~UNIX V6で学ぶカーネルのしくみ (Software Design plus) : Amazon.co.jp

柿(かき)と杮(こけら)というどう見ても一緒にしか見えない、実は違う文字

柿(かき)と杮(こけら)というどうみても同じだろ!! って思うけど実は違うらしい。 Pythonをつかって検証してみた。

結果: やっぱり違った

ほかにもいろいろな紛らわしい漢字はたくさんあります。 ぜひ、さがしてみてください!!