横浜へなちょこプログラミング勉強会にいってきました。
プログラマの数学の読書会がメインです。
みんなで、だされた課題について討論したり、プログラムに起こしたり的なことをやってます。
今回は、n進数と論理式とカルノー図がメインでした。
カルノー図
・カルノー図を使うことにより複雑な論理式を簡略化できる
・簡略化した条件式を使えばパフォーマンスも上がる
簡略すると複雑な式がシンプルになるの代表的なのは実は排他的論理和なんじゃないかな・・・と思ったりします。
■排他的論理和
(A∧¬B)∨(¬A∧B) = A XOR B ※じつは「かつ」とか「または」で∧∨が変換できることを知らなかった
class Xor{ //(A∧¬B)∨(¬A∧B) public static void xor1(boolean a, boolean b){ System.out.println(( a == true && b == false) || (a == false && b == true)); } // A XOR B public static void xor2(boolean a, boolean b){ System.out.println(a ^ b); } } public class Test { public static void main(String[] args) { Xor.xor1(true, true); Xor.xor1(true, false); Xor.xor1(false, true); Xor.xor1(false, false); System.out.println("------------------------------------"); Xor.xor2(true, true); Xor.xor2(true, false); Xor.xor2(false, true); Xor.xor2(false, false); } }
と大変シンプルになります。
実はこんな当たり前なことすらしてなかった(^^;)
あと、極端な例では、
( (A∨B) ∨ (¬A∧¬B)) ∧ C
これを、そのまま式に置き換えると
if( (( A == true || B == true ) || ( A == false && B == false)) && C == true )
になりますが、簡略化すると
if(C == true)
これは少し見れば分かりますが、もっと複雑な条件のif文を作ったら、実はCがいらなかったとか条件がひとつ不要だったといった経験はあると思います。
漠然と条件式を書くのではなく、それと等価なものを見つけるということで、可読性・保守性・パフォーマンスも上がるということを覚えておくだけでだいぶ違うと思います。
2次会はTwitterの話があって、1日100呟きがデフォという強者が何人かいました。
自分はまだ発言2回というお粗末振り。少し、見習わなくては・・・
3次会は飲み屋で終電までの1時間だけ居酒屋にいました。
男6人そろって、全員スイーツ頼んでました。