これは難解なプログラミング言語を発明しようとする私の探求に正接しています。
2進数のテーブル0 .. 15を使用して、インデックス操作を使用してユニバーサルバイナリ関数を実装できます。2つの1ビット入力XおよびYが与えられた場合、16の可能な関数すべてを 4ビットのオペコードでエンコードできます。
X Y F|0 1 2 3 4 5 6 7 8 9 A B C D E F
- - - - - - - - - - - - - - - - - -
0 0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
0 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
1 0 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
- - - - - - - - -
0 ~X ~Y ^ & Y X | 1
ZERO NOT-Y AND OR
NOT-X XOR ONE
したがって、この16個の関数のセットは、関数としてバイナリ入力に適用できます。
U(f、x、y):(f >>((x << 1)| y))&1、
または
U(f、x、y):(f / 2 ^(x×2 + y))%2、
または、インデックス付けまたはマトリックス分割を使用します。
このタイプのバイナリ演算に基づいて構築される可能性のある言語に対して、このような値の表を表現または生成する最もコンパクトな方法を知っていると便利です。
目標:
この正確なテキスト出力を生成します。
0101010101010101
0011001100110011
0000111100001111
0000000011111111
それでおしまい!最短コードが勝ちます。