ドミノ倒しで論理演算に挑戦 37
ストーリー by hylom
中学校あたりでやってみると楽しそう 部門より
中学校あたりでやってみると楽しそう 部門より
「数字」に関するさまざまな動画を作っているプロジェクト「numberphile」が、ドミノ倒しによって論理演算を実装するというチャレンジを行った(ITmedia)。
1本のドミノの列で1つのビットを示し(ドミノが立っていれば0、倒れていれば1)、さらにドミノの列を特別な並べ方で交差させることで、OR/AND/XOR/NOTという論理演算を実装するというもの。チャレンジでは「9+3」という演算を実行したが、最終的には途中で計算通りに倒れなかったドミノがあったために正しい演算結果は得られなかったそうだ。
ドミノ (スコア:2)
ドミノというとドミノ倒ししか思い付けないほど、
ドミノってドミノ倒しにしか使われていない。
Re: (スコア:0)
ピザ屋があるじゃん
Re: (スコア:0)
Lotus Dominoがでてこねーとはなぁ
Re: (スコア:0)
ずばりドミノ回路がありますが…
Re: (スコア:0)
麻雀はドミノの派生物と考えていいらしいので、日本ローカルでは麻雀という姿で大人気という感じでしょうか。
チェスやバックギャモンなど王侯貴族に愛好されたゲームは記録に残りやすいのですが、
どうもトランプやドミノといった庶民の間に流行したゲームの起源や記録というのは、あまり残らないようです。
今のところ定説となっているのは中国起源のゲームが18世紀にイタリアを通じて伝わり、
独自のスタイルを確立しながら急速にヨーロッパ全土に広まったという説です。
http://www.geocities.jp/unoassoc/domino.html [geocities.jp]
(麻雀の起源の)最も有力な説は清の同治年間(1862 - 1874年)に寧波の人陳魚門が、
明代(1368 - 1644年)からあったカードゲーム「馬吊(馬弔、マーディアオ)」と「骨牌」というゲームを
合体させて麻雀を完成させたというものである。
http://ja.wikipedia.org/wiki/%E9% [wikipedia.org]
クロック同期 (スコア:2)
というかイベント同期のための専用ラッチがほしいですね。
(これから見るんだけど)
# 論理素子で組むわけにはいかないので、なんかしらの専用の作りで機能だけ実現、とか
M-FalconSky (暑いか寒い)
次はピタゴラ装置で論理演算に挑戦して下さい (スコア:1)
結果が全てではない
過程も大事なのだ
Re:次はピタゴラ装置で論理演算に挑戦して下さい (スコア:2)
むしろピタゴラ装置の方が楽かもしれない。
例えばボールを信号にする場合、ANDならボール1個を落とし穴に落とせば良いし、ORなら1個通ったら通せんぼ、NOTならシーソーとか使えるわけですし、別経路でクロック用ボールを流せば同期も取れます。
今回のドミノもクロック経路を別に用意すればマシになったのかも。
先に入力で経路を適切に破壊して、クロック経由で次の段へ出力すれば大分マシになったんじゃ。
ただし、設計と本数が大変になりそうなので非現実的だったのかもしれませんが。
Domino Computing! (スコア:1)
こういうの好きだなあ。
シフト命令実行するとドミノ牌が一端から落ちてくるので、bit bucket(『ハッカー英語辞典』p.31)が必要になるじゃないか!
Re: (スコア:0)
Domino effect computing!
リプルキャリー (スコア:1)
不具合の原因は床の凹凸と位置誤差によるノイズ(1/fノイズみたいなもの?)だとすると、
ドミノのサイズ(ゲートサイズ)を大きくすれば、誤動作は減ると思う。
回路を忘れてしまいましたが、リレーの接点に最適化した加算回路を模せばドミノの数は減る?
揮発計算だから1bit ALUは使えないか。。
最終的には途中で計算通りに倒れなかったドミノがあったために正しい演算結果は得られなかったそうだ。 (スコア:1)
誤り訂正回路は作れないか?
Re: (スコア:0)
誤り訂正回路ってこういう単純な計算の集合体みたいなものだから、
ここまで単純な計算で誤り訂正を入れようと思ったら、同じ計算を3重以上にして多数決回路でも入れないと。
#そして多数決回路でエラーが出ると。
こういうのを見ると (スコア:1)
単電子論理回路の実装って難しそうだな, と思っていたら, 実際に単電子ドミノ論理回路を研究してる人 [ynu.ac.jp]がいた.
単体テストで失敗しとるやん! (スコア:1)
動画中、AND回路 [youtube.com]とXOR回路 [youtube.com]の単体での動作させて動作説明をしているシーンがあります。
両方にTrueを入れた結果、AND回路の出力はFalse、XOR回路の出力はTrue。
…いや、そりゃ、9+3=30にもなりますわ。
Re: (スコア:0)
失敗の原因を見せてるだけで、常にそういう結果になるわけじゃないんだけど…
ORの単純さがすばらしい。 (スコア:0)
それにくらべてANDの複雑さは、泣ける。
Re:ORの単純さがすばらしい。 (スコア:1)
複雑さもそうだが、タイミングもかなり厳しくみえる。
あとXORは信号の反射で失敗していたし。
あのクネクネ曲がった経路も含めマザーボードかよ?
ところで、この手のイベントが終わったあと、あの大量のドミノはどうするのだろう? スタッフがおいしく頂くの?
Re:ORの単純さがすばらしい。 (スコア:1)
ダイナミック回路だね。タイミング失敗すると復帰できない。
冷めた見方 (スコア:0)
簡単なところでは、リンク先のANDの図で左側に縦に2つ並んでいる入力のうち、
下側が先に確定しないとまともに動かない。
無理とは言わないが、タイミング関係が逆転しないように径路の距離を
決める必要があるね。
andとxorの解説・実演(失敗)は動画の6分あたりから (スコア:1)
あと、false状態の素子が不安定でノイズに弱くて、
ちょっとした信号のぶれで想定外のtrueになっちゃいそう。
使用後のドミノは誰かが回収して、別のイベントでまた並べるんじゃ?
Re: (スコア:0)
きっとあると思って検索したら、ドミノ貸出を行ってる団体があった
http://www.domino.or.jp/domi-Rental-1.htm [domino.or.jp]
料金は1個と1円と思ったよりリーズナブル
誰か挑戦してみては
Re: (スコア:0)
> OR/AND/XOR/NOTという論理演算を実装するというもの
どうやればNOTを実装できるか思い付かない。
falseの状態からtrueの状態を作り出すには、何らかの外的補助入力が要るような。
Re:ORの単純さがすばらしい。 (スコア:2, 参考になる)
xorを作って、一方の入力をtrueに
falseをtrueにできないので、入力タイミングの順序は重要です
Re:ORの単純さがすばらしい。 (スコア:2)
オフトピぎみだけど
if (IsEmpty(xx) == true)
とか書いちゃう人がいまだに多くて困る。
この書き方を嫌って、他人が書いてるのまで(可能なら)書き換えてるような事続けてたら、
このトピのコメントまで拒否反応でるようになってきたw
Re:ORの単純さがすばらしい。 (スコア:1)
それ、本当にTrue/Falseだけが帰ってくるか、仕様変更も有り得ないとちゃんと確認してますか?
実はパラメータやクラスの状況によってはTrue/False以外にエラーコードが帰りますみたいな罠設計になってたら、余計な事してバグを作りこんでるだけですよ?
Re: (スコア:0)
そんなんあんたの好き嫌いじゃなくてコーディング規約で決めることだろ
コードレビューでしっかりと条件を確認できるようにするために
冗長だとわかっていながらIsNull() == trueとか明示することだってあるしね
勝手に自分流に直すのやめた方がいいんじゃないですかね?
それが嫌なら一人で作ってろよ
Re: (スコア:0)
Re:ORの単純さがすばらしい。 (スコア:2)
それもいいけど、論理演算をきちっり理解していることをアピールするために
こういう書き方はどや?!
if (IsNull() != true) {
// 処理無し
} else {
// 何かの処理
:
:
}
#マジメにこういう書き方するヤツいるのよ。
冗長だとわかって明示するってステキよね。
Re: (スコア:0)
お前の使ってる処理系は論理比較結果の真理値が信用できないの?
そんな言語捨てちまえよ
Re: (スコア:0)
(#2581141) へのコメントだよね?
Re:ORの単純さがすばらしい。 (スコア:1)
XOR の片方に常に1を入れれば
出力側は反対側の NOT になるよ
常に1を入れることが、補助入力に相当しています
Re: (スコア:0)
#2580781に書かれているビデオを見ると、XORの入力タイミングは
2つ入力がドンピシャに一致しないと動かないね。
常に1を入れたのと同じ結果を得るなんて神業。
実用化はまだかね (スコア:0)
これが実用化された暁には、過去、プログラマとは別に「キーパンチャー」なる職業が存在していたように
またプログラマとは別の「ドミノ並べer」なる職業が誕生するのだろうか。
Re:実用化はまだかね (スコア:1)
プログラム通りにドミノを並べるロボットが必要なのかと思いました
Re: (スコア:0)
そしてそのロボットの制御プログラムを実行する為にドミノを並べる必要があって・・・
WHAT DO YOU GET... (スコア:0)
IF YOU MULTIPLY SIX BY NINE. 次は乗算器で6×9だな。答えは先にわかっているけど。