8つの数字を出力する8つの方法でコードを読み取る


21

英語とほとんどのプログラミング言語は、左から右、上から下に書かれ、読まれますが、そうである必要はありません

実際、テキストのブロック用

ABC
DEF

関連する8つの読み方を考えることができます。

  1. 左から右、上から下(LTR-TTB): ABCDEF
  2. 上から下、左から右(TTB-LTR): ADBECF
  3. 左から右、下から上(LTR-BTT): DEFABC
  4. 下から上、左から右(BTT-LTR): DAEBFC
  5. 右から左、上から下(RTL-TTB): CBAFED
  6. 上から下、右から左(TTB-RTL): CFBEAD
  7. 右から左、下から上(RTL-BTT): FEDCBA
  8. 下から上、右から左(BTT-RTL): FCEBDA

チャレンジ

選択した言語の8つの単一行プログラムとして、上記の8つの方法のそれぞれで読み取れる長方形のテキストブロックを記述します。これらのプログラムはそれぞれ、1〜8の異なる整数を出力する必要があります。

どの読み取り方向がどの番号を出力するかは問題ではなく、上記の番号と一致する必要はありません。たとえば、テキストブロックがまだ

ABC
DEF

その後、プログラムのABCDEFかもしれない出力5FEDCBAかもしれない出力2、および他の6つのプログラムが出力だろう13467、および8いくつかのためです。

テキストブロックには、行末記号以外の文字を含めることができます

言語に適切な標準出力がない場合、出力は標準出力または同様の代替になります。入力はありません。プログラムはREPL環境で実行されていると想定できます。

Pietu1998は、テキストブロックが与えられたときに8つの異なる単一行プログラムを提供するJSFiddleを慈善的に作成しました。スタックスニペットにしました。

<script>function f(n){n=n.split("\n");var e=n.map(function(n){return n.length}).sort()[n.length-1];n=n.map(function(n){return(n+Array(e+1).join(" ")).substring(0,e)});var t=n[0].split("").map(function(e,t){return n.map(function(n){return n[t]}).join("")});n=[n.join(""),n.reverse().join(""),t.join(""),t.reverse().join("")],n=n.concat(n.map(function(n){return n.split("").reverse().join("")})),document.getElementById("a").innerHTML=n.map(function(n,e){return document.getElementById("b").checked?n+"   "+"LLTTRRBB"[e]+"T"+"RRBBLLTT"[e]+"-"+"TBLRBTRL"[e]+"T"+"BTRLTBLR"[e]:n}).join("\n")}</script><textarea onkeyup="f(this.value)" id="c" placeholder="Code"></textarea><br/><input type="checkbox" id="b" onchange="f(document.getElementById('c').value)" checked/>&nbsp;<label for="b">Show directions</label><br/><pre id="a"></pre>

まだMartinの CJamバージョンをここで見つけることができます

得点

スコアは、テキストブロックの領域(幅×高さ)です。最低スコアの提出が勝ちです。(本質的に最小のコードが勝つため、タグが使用されます。)Tiebreakerは以前に投稿された投稿に移動します。

例は2 x 3なので、スコアは6です。4(2 x 2)未満のスコアは不可能です。8つのプログラムの一部が同一であり、2つの異なる値を出力できなかったためです。


6
なぜ「印刷可能なアスキーのみ」ルールなのですか?これは、APLがこの課題に対抗できないことを意味します。:(
モリスズッカ

3
コードブロックを8つのプログラムに変換するフィドルを作成しました。スニペットとして含めることができますが、これに関するOPの意見が必要です。
-PurkkaKoodari

3
@MartinBüttnerわかった、修正した。String.prototype.repeat()まだ新しいようです。IEで動作することも確認されました。新しいフィドル
-PurkkaKoodari

@MorisZucca行終了記号以外のすべての文字が許可されるようになりました。
カルバンの趣味

@ Pietu1998 Fiddleをありがとう、スニペットとして追加しました。
カルバンの趣味

回答:


21

J、3 * 3 = 9

1[2
+2+
2+2

すべての指示の実行:

       ". '1[2+2+2+2','2+2+2+1[2','1+2[2+2+2','2+2[2+1+2','2+2+2+2[1','2[1+2+2+2','2+2+2[2+1',:'2+1+2[2+2'
1 7 3 4 8 2 6 5

説明:

  • Jでは、実行は右から左に進み、演算子の優先順位はありません。
  • [leftそれは基本的に私たちの表現などの全体の右側には、キャンセルして)その2つのオペランドの左側を取り1+2[2+2+2になり1+2[6、その後と1+2
  • 左の式は、合計1、2、3、および4オペランドの加算です。それぞれのnオペランド式には2つあり1、1つは数字で、もう1つは2s のみです。で加算1すると奇数が生成され、その他では偶数が生成されます。

5
これは本当にいいです。に置き換える[;、ほとんどの言語のREPL環境で動作するはずです。
オプティマイザー

18

Befunge-985x5 = 25 5x3 = 15

1+4+2
$.@.$
3+4+4

正しい数字を見つけるための小さなスクリプトを書きました。しばらく時間がかかりましたが、ちょっと、GolfScriptを倒しただけです!:D

私が使用したスクリプトはここここにありますが、コードスタイルは非常に発がん性があるため、それらを参照することはお勧めしません。

サブプログラム

1+4+2$.@.$3+4+4   LTR-TTB   5
3+4+4$.@.$1+4+2   LTR-BTT   7
1$3+.+4@4+.+2$4   TTB-LTR   3
2$4+.+4@4+.+1$3   TTB-RTL   4
4+4+3$.@.$2+4+1   RTL-BTT   8
2+4+1$.@.$4+4+3   RTL-TTB   6
4$2+.+4@4+.+3$1   BTT-RTL   2
3$1+.+4@4+.+4$2   BTT-LTR   1

古いバージョン

 1.6
3 @ 4
.@ @.
8 @ 7
 2.5

サブプログラム

それぞれ1〜8の数字を出力します。

 1.6 3 @ 4.@ @.8 @ 7 2.5    LTR-TTB
 2.5 8 @ 7.@ @.3 @ 4 1.6    LTR-BTT
 3.8 1 @ 2.@ @.6 @ 5 4.7    TTB-LTR
 4.7 6 @ 5.@ @.1 @ 2 3.8    TTB-RTL
 5.2 7 @ 8.@ @.4 @ 3 6.1    RTL-BTT
 6.1 4 @ 3.@ @.7 @ 8 5.2    RTL-TTB
 7.4 5 @ 6.@ @.2 @ 1 8.3    BTT-RTL
 8.3 2 @ 1.@ @.5 @ 6 7.4    BTT-LTR

14

Brainfuck $、4x3 = 12

Brainfuck $は非常によく似ているBrainfuckが、数値の出力として出力するコマンドを含むいくつかのより多くのコマンドは、現在のセルの値を持ち、この挑戦のために非常に有用でした。

++:+
  ++
++++

1行のコマンド:

++:+  ++++++   LTR-TTB, outputs 2
++++  ++++:+   LTR-BTT, outputs 8
+ ++ +:+++++   TTB-LTR, outputs 4
+++:+++ ++ +   TTB-RTL, outputs 3
++++++  +:++   RTL-BTT, outputs 7
+:++++  ++++   RTL-TTB, outputs 1
+++++:+ ++ +   BTT-RTL, outputs 5
+ ++ +++:+++   BTT-LTR, outputs 6

私はあなたがBrainfuck $を必要としないと主張します。コマンド。単純に使用することを検討します。0x01-0x08を完全に有効に出力します。それは(頭脳)性交のためのBrainfuckです。+1。
マテガ

バイナリ出力でも大丈夫です。
captncraig

7

TECO、3 * 5 = 15

 +4 5
+2=4 
 +1 \

=最後の数値式の値を出力します。\文字列から数値を読み書きするために使用されますが、ここでは破棄としてのみ使用します。

  • +4 5+2=4 +1 \ 7
  • + +2+4=1 4 5 \ 6
  • + +2+1=4 4 \ 5 3
  • +1 \+2=4 +4 5 2
  • \ 1+ 4=2+5 4+ 5
  • \ 5 4 1=4+2+ + 1
  • 5 \ 4 4=1+2+ + 4
  • 5 4+ 4=2+\ 1+ 8

7

piet-12x12 = 144

ここに画像の説明を入力してください

1行のプログラムは決して終了できないため、最初の出力後に終了すると仮定します。

単一イメージ内の8つのサブプログラム:

ここに画像の説明を入力してください


6

GolfScript、4x4 = 16

1})7
)  }
}  )
3)}5

古き良き「スーパーコメント」を利用します:一致}しないものは残りのコードを無視します(実際、この場合、#すべてのコードが1行として実行されるため、通常のコメントでも同様に機能します)。実行が終了し、スタックの内容が出力されるため、各コーナーから1つの数字のみ、または(反対方向に)1ずつ増加する数字があります。8つのプログラムは

1})7)  }}  )3)}5  # LTR-TTB
1)}3}  ))  }7})5  # TTB-LTR
3})1)  }}  )5)}7  # BTT-LTR
3)}5}  ))  }1})7  # LTR-BTT
5})3)  }}  )7)}1  # RTL-BTT
5)}7}  ))  }3})1  # BTT-RTL
7})5)  }}  )1)}3  # TTB-RTL
7)}1}  ))  }5})3  # RTL-BTT

5

Haskell、26x26 = 676

コメント(--)を使用して、後方および側方のビットを非表示にします。これはひどく長くなります

main=print 1--2 tnirp=niam
a                        a
i                        i
n                        n
=                        =
p                        p
r                        r
i                        i
n                        n
t                        t

3                        4
-                        -
-                        -
5                        6

t                        t
n                        n
i                        i
r                        r
p                        p
=                        =
n                        n
i                        i
a                        a
main=print 7--8 tnirp=niam

2
インラインコメントで、ほとんどの言語に拡張することができるように私には思える
SP3000

4

プレリュード、5x3 = 15

12 34
  !  
56 78

これは、値を文字コードではなく数値として出力するPythonインタープリターを想定しています。

これはBefunge $に勝るものではありませんが、GolfScriptの提出に勝るものであり、そのシンプルさが気に入っています。また、スペース以外の文字は9個しか使用していないことに注意してください。これはこれまでの他のどのサブミッションよりも少ない(Jが再びストライキする:))。Preludeでは、各桁が個別にスタックにプッシュされます。パスに応じて、の!直前に別の桁があり、最上位のスタック要素が印刷されます。8つのプログラムは次のとおりです。

12 34  !  56 78   LTR-TTB   4
56 78  !  12 34   LTR-BTT   8
1 52 6 ! 3 74 8   TTB-LTR   6
4 83 7 ! 2 61 5   TTB-RTL   7
87 65  !  43 21   RTL-BTT   5
43 21  !  87 65   RTL-TTB   1
8 47 3 ! 6 25 1   BTT-RTL   3
5 16 2 ! 7 38 4   BTT-LTR   2

あるいは、またあります

 1 3 
1+!+1
 5 7 

垂直パスに奇数をプッシュし、それらをインクリメントします 1し、水平パスでます。

 1 3 1+!+1 5 7    LTR-TTB   4
 5 7 1+!+1 1 3    LTR-BTT   8
 1 1+5 ! 3+7 1    TTB-LTR   5
 1 3+7 ! 1+5 1    TTB-RTL   7
 7 5 1+!+1 3 1    RTL-BTT   6
 3 1 1+!+1 7 5    RTL-TTB   2
 1 7+3 ! 5+1 1    BTT-RTL   3
 1 5+1 ! 7+3 1    BTT-LTR   1

2

CJam-7×7

印象的ではありませんが、CJamの回答はありませんでした。

 8;];1 
7     2
;  0  ;
] 0 0 ]
;  0  ;
6     3
 5;];4 

それは主に ];スタッククリアます。

オンラインで試す


1

ルビー-7x7

Haskellの答えと同じ戦術も印象的ではありません。

p 1#2 p

3     7
#     #
4     8

p 5#6 p

1

R、9x9

空白もコメントもありません。

75%%99299
99%%99699
%%299%%41
%%699%%06
995999997
11%%999%%
99%%799%%
39719%%99
59519%%16

これはあなたが望むどんなサイズにも拡張できると思います。モジュロ演算子は、データサイズに関係なく値が大きくなりすぎるのを防ぎ、間に大きな数値を配置しても効果がないため、使用可能な演算子の中で最も柔軟性が高いと考えました。

75%%9929999%%99699%%299%%41%%699%%0699599999711%%999%%99%%799%%39719%%9959519%%16   LTR-TTB  2
59519%%1639719%%9999%%799%%11%%999%%995999997%%699%%06%%299%%4199%%9969975%%99299   LTR-BTT  3
79%%9193559%%91999%%265%%75%%999%%1199999979999%%999%%26%%999%%99409%%9199167%%96   TTB-LTR  4
99167%%9699409%%9126%%999%%99%%999%%999999799%%999%%11%%265%%7559%%9199979%%91935   TTB-RTL  1
61%%9159599%%91793%%997%%99%%999%%1179999959960%%996%%14%%992%%99699%%9999299%%57   RTL-BTT  5
99299%%5799699%%9914%%992%%60%%996%%799999599%%999%%11%%997%%9999%%9179361%%91595   RTL-TTB  6
69%%7619919%%90499%%999%%62%%999%%9999799999911%%999%%57%%562%%99919%%9553919%%97   BTT-RTL  7
53919%%9799919%%9557%%562%%11%%999%%997999999%%999%%99%%999%%6219%%9049969%%76199   BTT-LTR  8

1

このプログラミング言語、5 * 9 = 45

1i;i2
2   2
+   +
i   i
;   ;
i   i
+   +
2   2
5i;i6

これは次のように変換されます:

1i;i22   2+   +i   i;   ;i   i+   +2   25i;i6
5i;i62   2+   +i   i;   ;i   i+   +2   21i;i2
12+i;i+25i       i;       ;i       i22+i;i+26
22+i;i+26i       i;       ;i       i12+i;i+25
6i;i52   2+   +i   i;   ;i   i+   +2   22i;i1
2i;i12   2+   +i   i;   ;i   i+   +2   26i;i5
62+i;i+22i       i;       ;i       i52+i;i+21
52+i;i+21i       i;       ;i       i62+i;i+22

;プログラムが終了するため、上記は次のように変換されます。

1i;   - outputs 1
5i;   - outputs 5
12+i; - outputs 3
22+i; - outputs 4
6i;   - outputs 6
2i;   - outputs 2
62+i; - outputs 8
52+i; - outputs 7

説明:からの任意の数字は、対応する数字をスタック09プッシュします。+上の2つの値xyスタックからポップしてスタックにプッシュx + yします。iスタックを整数として出力します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.