直交ステップ


26

2Dマトリックス内をナビゲートすることは一般的な問題です。私たちは何度も見てきましたが、また見ます。それでは、将来の私たちを助け、2Dマトリックスで可能な8つのステップすべてを生成する最短のソリューションを開発しましょう。

チャレンジ

コードは、次の8ペアの-1,0,1を任意の順序で出力する必要があります。

(0,1)
(0,-1)
(1,0)
(-1,0)
(1,1)
(1,-1)
(-1,1)
(-1,-1)

ルール

  1. 入力はありません。
  2. 出力順序は関係ありません
  3. 出力は柔軟です。数字のペアは区別できる必要があります
  4. これはなので、バイト単位の最短回答が勝ちます

2
@MartinEnder私もそれについて99%確信していましたが、どちらも見つかりませんでした。それで私はそれを数日間サンドボックスに入れましたが、重複については誰もコメントしませんでした。
デッドポッサム

4
出力が柔軟であるため、これには興味深いコルモゴロフの複雑さのフレーバーがあります。一部の言語では、単に出力をハードコーディングするよりも優れている方が難しいと感じるでしょう。このタグを追加する必要がありますか?
ngm

1
アダムはい、使用何も@数のペアが識別可能である一方で
デッドポッサム

1
@Adámしかし、どう(1 + 0i)ですか?
デッドポッサム

8
これは、私が今までにした最初のコードゴルフの1つである、8つの隣接する正方形の正確な複製です。
isaacg

回答:



9

T-SQL、80 78バイト

SELECT-1n INTO t;INSERT t VALUES(0),(1)SELECT*FROM t,t z WHERE t.n<>0OR z.n<>0

を含む(永続的な)テーブルtを作成し、行を除外する句を使用(-1,0,1)して自己結合を実行します。テーブルtはコードによってクリーンアップされません。自分で削除する必要があります。WHERE0,0

悲しいことに、SQLは文字列でのリターンを許可しているため、退屈なソリューション(44バイト)のほぼ2倍の長さです。

PRINT'0,1
0,-1
1,0
-1,0
1,1
1,-1
-1,1
-1,-1'

私はT-SQLをあまりよく知りません:ちょうど使用できますWHERE t.n OR z.nか?(すべてではありませんが、一部のSQL方言で使用できます。)
msh210

@ msh210良いアイデアです。試しましたが、MS SQL Serverでは動作しないようです。エラーが表示されます:An expression of non-boolean type specified in a context where a condition is expected
BradC

1
*の周りのスペースを削除できます
ラズバンソコル

8

Pure Bash(外部ユーティリティなし)、36

a=({0,-1,1},{0,-1,1})
echo ${a[@]:1}

オンラインでお試しください!


Sedでバッシュ、35

printf %s\\n {-1..1},{-1..1}|sed 5d

オンラインでお試しください!


あるいはcut、36バイトにも使用します。
ბიმო

bash + sedの場合は33バイト(退屈であるにもかかわらず)echo {-1..1},{-1..1}|sed s/0,0.//
Kritixi Lithos

printf %s\\n {-1..1},{-1..1}|grep 1また35です
ニール


7

ゼリー8 7 6バイト

3p_2ẸƇ

オンラインでお試しください!

私の初めてのゼリーの答え!パズルの最後のピースをくれたデニスに感謝します。

それでは、説明できるかどうか見てみましょう...

3p_2ẸƇ   Main program, takes no input.
3p       Product with Range 3, yields [[1,1], [1,2], [1,3], [2,1], [2,2], ...]
  _2     Decrement twice, vectorizes, yields [[-1,-1], [-1,0], [-1,1], [0,-1], ...]
    ẸƇ   Comb, removes those that contain only falsey values, the [0,0]
         Implicit output

エリックのおかげで-1バイト。Xcoder氏とDennis氏のおかげで-1バイト


1
このアプローチに基づいてAlterate答え:3p3_2ẸƇ
氏Xcoder

@ Mr.Xcoder 2番目のをドロップできます3
デニス

@デニスああ、確かに。この場合、Admは6バイトで更新できます:)
Mr. Xcoder

7

R 26 24バイト

直接的なアプローチでさらに2バイトを節約した@JDoeの功績:

paste(-1:1,-3:5%/%3)[-5]

オンラインでお試しください!

元のasnwer:

outer(-1:1,-1:1,paste)[-5]

オンラインでお試しください!

または27バイト

sapply(-1:1,paste,-1:1)[-5]

オンラインでお試しください!

または、要因のある34バイトの場合:

(gl(3,3,,-1:1):gl(3,1,9,-1:1))[-5]

オンラインでお試しください!

出力が-1から1ではなく1から3である可能性がある場合、この最後の解決策は最もゴルファーかもしれません。

またはの代替ソリューションについては、他のRの回答を参照してください。expand.gridcbind


ハァッ、柔軟な出力形式の素晴らしい使用!
ジュゼッペ

2
これは私のものよりも優れています。なぜなら、それは最終的には役に立たないからです:)
ngm

@Giuseppeもともと私cはマトリックス内で意味をなさないものを試したのでpaste、元の出力形式に切り替えました
...-JayCe


1
@ J.Doe揺れる!
JayCe

6

Japt13 12 11バイト

@Shaggyのおかげで1バイト節約

9ó8_ìJõ é)Å

オンラインでお試しください!-Rフラグを使用して、各項目を独自の行に配置します。

説明

9ó8_ìJõ é)Å
9ó8             Create the range [9, 9+8). [9, 10, ..., 16]
   _            Map each item in this range through this function:
     Jõ é)        Generate the range [-1...1] and rotate to get [1, -1, 0].
    ì             Convert the item to an array of base-3 digits,
                  mapping [0,1,2] to [1,-1,0]. [[-1, 1, 1], [-1, 1,-1], [-1, 1, 0],
                                                [-1,-1, 1], [-1,-1,-1], [-1,-1, 0],
                                                [-1, 0, 1], [-1, 0,-1]]
          Å       Remove the first item (gets rid of the leading -1).


6

Haskell、22バイト

_:l=mapM(:[1,-1])[0,0]

オンラインでお試しください!

Laikoniは1バイトを節約しました。


_:l=mapM(:[1,-1])[0,0]バイトを保存します。(以前の課題に対するisaacgの回答から引用)。
ライコニ

@Laikoniそれで私はそれを考え、それがスニペットになると思っていました(古い挑戦に対する多くの答えがあったように)。しかし、このメタ投稿と、関数を間接的に定義できるというルールを組み合わせることで、これで問題ないようです。提案をありがとう。
xnor


5

05AB1E8 7バイト

2Ý<ãʒĀZ

オンラインでお試しください!

説明

2Ý<     # Range of 2 decremented, yields [-1, 0, 1]
   ã    # Cartesian product of the list with itself
    ʒ   # Filter by ...
     ĀZ # Maximum of the truthified values, yields 0 only if both values are 0.

エミグナのおかげで-1バイト!


ダン、あなたはそれに私を打った。同じ開始点(2Ý<ã)がありましたが、ペアのリストの中央の要素を削除する方法を考えていました。絶対値によるソートと最初からの削除を考えていませんでした。
ケビンクルーイッセン

2
ʒĀZ1を保存するために使用
エミグナ

@Emigna正規化されたコマンドと05AB1IEバージョンの真実のコマンドの違いを理解してくれてありがとう:
カルド


5

Java 8、83 42バイト

v->"1,1 1,0 1,-1 0,1 0,-1 -1,1 -1,0 -1,-1"

ハードコーディングによる@AdmBorkBorkのおかげで-41バイト。

オンラインでお試しください。


参照としてハードコーディングされていないバージョン(83 72 70 68バイト):

v->{for(int i=9;i-->1;)System.out.println(~i%3+1+","+(~(i/3)%3+1));}

@OlivierGrégoireのおかげで-11バイト。
-2バイトで@ETHproductionsのJavaScript(ES6)回答のポートを作成します。

オンラインでお試しください。


72バイトのハードコードされていない回答:v->{for(int i=9;i-->0;)if(i!=4)System.out.println((i/3-1)+","+(i%3-1));}
オリビエグレゴワール

@OlivierGrégoireありがとう、追加(さらに2バイト追加)。
ケビンCruijssen





4

ハスク7 6バイト

さまざまな方法がありますが(トリッキー/コストのかかる部分は除去されます[0,0])、10バイト変換()をフィルターとして使用することを指摘しくれたLeoのおかげで、7バイトが最短になりましたd

fdπ2ṡ1

オンラインでお試しください!

説明

fdπ2ṡ1  -- constant function (expects no arguments)
    ṡ1  -- symmetric range [-n..n]: [-1,0,1]
  π2    -- cartesian power of 2: [[-1,-1],[-1,0],[0,-1],[-1,1],[0,0],[1,-1],[0,1],[1,0],[1,1]]
f       -- filter only elements that are truthy when
 d      -- | decimal conversion (interpret as polynomial and evaluate at x=10)
        -- : [[-1,-1],[-1,0],[0,-1],[-1,1],[1,-1],[0,1],[1,0],[1,1]]

代替、7バイト

tπ2ṙ1ṡ1

オンラインでお試しください!

説明

tπ2ṙ1ṡ1  -- constant function (expects no arguments)
     ṡ1  -- symmetric range [-n..n]: [-1,0,1]
   ṙ1    -- rotate by 1: [0,1,-1]
 π2      -- cartesian power of 2: [[0,0],[0,1],[1,0],[0,-1],[1,1],[-1,0],[1,-1],[-1,1],[-1,-1]]
t        -- tail: [[0,1],[1,0],[0,-1],[1,1],[-1,0],[1,-1],[-1,1],[-1,-1]]

1
別の7バイトの代替tπ2↑3İZ
ライコニ

2
10進変換に基づいてリストをフィルタリングすることにより、1バイトを節約できます。オンラインで試してください!
レオ

3

PowerShell、41バイト

(1..-1|%{$i=$_;1..-1|%{"$i,$_"}})-ne'0,0'

オンラインでお試しください!

ダブル用ループ範囲にわたり1..-1、と-nOT e余分引き出す終わりQUALS 0,0エントリーを。それらはそれぞれ個別にパイプラインに残され、Write-outputプログラムの完了時に暗黙的に改行を無料で提供します。


残念ながら、ベアボーン文字列の出力は2バイト短くなっています。

'1,1
1,0
1,-1
0,1
0,-1
-1,1
-1,0
-1,-1'

しかし、それは退屈です。



3

J18 16バイト

echo}.,{;~0 1 _1

オンラインでお試しください!


TIOでマイナスがアンダースコアとして表示されるのはなぜですか?
デッドポッサム

18は、代替バイト:echo }.>,{;~0 1 _1 TIO
ガレン・イワノフ

@Dead Possum負の数は、Jの下線付きで表示されます
ガレンイワノフ

1
はい、17 :) echo}.>,{;~0 1 _1
ガレンイワノフ

2
されるecho必要?
コール

3

CJam、13バイト

3,:(2m*{2b},`

オンラインでお試しください!

説明

3,    e# Range [0,3):       [0 1 2]
:(    e# Decrement each:    [-1 0 1]
2m*   e# Cartesian square:  [[-1 -1] [-1 0] [-1 1] [0 -1] [0 0] [0 1] [1 -1] [1 0] [1 1]]
{     e# Filter by
 2b   e#   conversion to binary:
},    e#                    [[-1 -1] [-1 0] [-1 1] [0 -1] [0 1] [1 -1] [1 0] [1 1]]
`     e# Stringify:         "[[-1 -1] [-1 0] [-1 1] [0 -1] [0 1] [1 -1] [1 0] [1 1]]"




3

MATL、12バイト

3:qq2Z^[]5Y(

MATL Onlineでお試しください!

初めての真剣なMATL回答!多くのおかげでルイスMendoSanchisesDJMcMayhem助けてします。

使い方

3:qq2Z ^ [] 5Y(–完全なプログラム。STDOUTへの出力。
3:–範囲3。[1 2 3]をスタックに押します。
  qq – 2ずつ減少します。収量[-1 0 1]。
    2Z ^ – 2のデカルト累乗。
         5Y(–インデックス5の行を...
       [] –空のベクター。


3

バッシュ、30バイト

echo "
"{-1..1},{-1..1}|grep 1

オンラインでお試しください!

最後の行以外の各行に末尾のスペースを出力します。(@Neilに感謝-これは元々先頭のスペースを印刷していましたが、コメントによると末尾のスペースの方が良いです)


代替手段として、最後の行を除くすべての行に末尾スペースを印刷できると思います。
ニール

2

バッチ、77バイト

@for %%x in (-1 0 1)do @for %%y in (-1 0 1)do @if not %%x%%y==00 echo %%x %%y

非標準の区切り文字が許可されている場合、63バイト:

@for %%x in (-1/-1 -1/0 -1/1 0/-1 0/1 1/-1 1/0 1/1)do @echo %%x

2

Pyth、11 9バイト

t^+U2_1 2

ここで試してみてください

説明

t^+U2_1 2
  +U2_1     [0, 1, -1]
 ^      2   Product with itself.
t           Exclude the first.

同様に、を使用することもできますがt*J+U2_1J、それより短くなることはありません。

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