フチ無しテーブル


16

このチャレンジでは、アルファベットの文字をデカルト平面に配置し、結果をテキストとして出力します。

入力は、3つのパラメーターを持つリストのリストで構成されます。

  • X座標
  • Y座標
  • ストリング

どうやって?

我々は、デカルト平面の2つの軸含まれていることを知っているの兆候場合と4つの象限座標は((及び。例えばバツYバツY++++

次の3行3列の行列をデカルト平面として考えます

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

入力で与えられた場合[[-1,1,L],[0,1,F]]、マトリックスのようなものは次のようになります。

LF11100010110111

そして最終出力 LF

それに加えて、正しい出力を得るために従う必要があるいくつかのポイントがあります。

  • X、Y座標が繰り返される場合、文字列を連結する必要があります。例:(-1,1)に文字列Fが配置さaれ、同じポイントに文字列を配置する必要があると仮定します。結果の両方の文字列を連結しFa、それが(-1,1)に入る値です。
  • 出力は、マトリックスと一貫している必要があります。最終的な結果としてこれを想像してください:

Marieis(1,0)cute(0,1)(1,1)

出力する必要があります

Ma  rie 
i   s       
cute

どうして?

これは、列がx軸の値で、行がy軸の値であるテーブルとして表示できます。

        Column 1    |   Column 2    |   Column 3
        ----------------------------------------
Row 1   |  "Ma"     |      "r"      |     "ie" 
Row 2   |  "i"      |      "s"      |
Row 3   |  "cute"   |               |

すべての列の値は同じ長さでなければなりません

        Column 1    |   Column 2    |   Column 3
        ----------------------------------------
Row 1   |  "Ma  "   |      "r"      |     "ie" 
Row 2   |  "i   "   |      "s"      |
Row 3   |  "cute"   |               |

最後に結果を出力します

Ma  rie
i   s
cute

テストケース

Input
------------
[[3, 3, "c"]
[4, 1, "un"]
[5, 3, "e"]
[4, 3, "od"]
[4, 2, "lf"]
[1, 2, "go"]
[2, 1, "i"]
[2, 1, "s f"]]

Output
--------------
      code
go     lf 
  is f un

Input
--------------
[[0, 0, 's'],
[-1,1, 'M'],
[0, 1, 'r'],
[-1,1, 'a'],
[1, 1, 'i'],
[-1, 0, 'i'],
[1, 1, 'e'],
[-1,- 1, 'c'],
[-1,- 1, 'u'],
[-1, -1, 'te']]

Output.
----------------
Ma  rie
i   s
cute

ノート

  • これはことになっています
  • 単一のリストで座標をラップできます。 [[3, 3], "c"]
  • 任意の合理的な形式で入力を取得できます
  • 入力にのみ数字や空のスペースがないと仮定できます。たとえば、次のようなことがありますがa a、決してない1" "または、1aまたは1 1


1
@KevinCruijssen入力にのみ数字や空のスペースがないと仮定できます。次のようなものがありますがa a、決してない、1または ``または1aまたは1 1
Luis felipe De jesus Munoz

1
@LuisfelipeDejesusMunozありがとう。ああ、もう1つ質問があります。ここでもっと知りたい人はきっといるでしょう。マリーとは誰ですか?; p
Kevin Cruijssen

2
@KevinCruijssen 5年前のクラッシュ:c
ルイスフェリペデジェススムニョス

1
名前付きタプルのリストとして入力を取得できますか?このようなもの:(int a,int b,string c)
無知の具体化

回答:


8

JavaScriptの(ES8)、 186の180  179バイト

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

a=>(g=d=>a.some(([x,y,s])=>(w[x+=d]>(l=((r=o[y=d-y]=o[y]||[])[x]=[r[x]]+s).length)||(w[x]=l),x|y)<0,w=[o=[]])?g(-~d):o.map(r=>w.map((w,x)=>(r[x]||'').padEnd(w)).join``).join`
`)``

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

JSの負のインデックス(またはそれらの欠如)

配列が与えられた場合、A[]JSではのようなことを行うことは完全に合法A[-1] = 5です。ただし、これは配列自体に値を保存しません。その代わりに、それは暗黙の文字列(この負のインデックスを強制します"-1")と対応して設定プロパティ周囲物体配列の。

悪いニュースは、次のようなメソッドではプロパティが反復可能でないことですmap()

a = [];
a[1] = 3;
a[-1] = 5;
a.map((v, i) => console.log(v + ' is stored at index ' + i))

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

上記のコードはのみ表示されます3 is stored at index 1

可能な回避策は次のとおりです。

a = [];
a[1] = 3;
a[-1] = 5;
Object.keys(a).map(k => console.log(a[k] + ' is stored with key ' + k))

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

だが:

  • これはゴルフにあまり適していません。
  • キーは数値順にソートされていません。

ここでやること

バツy

バツy

代わりに行うことは次のとおりです。

  • d=0
  • 反復を処理しますバツバツ+dydy
  • 我々は、いずれかがある場合または任意のエントリについては、我々は中止して再帰的に持つ別の試みを開始バツ<0y<0d+1

以下で宣言することoでバイトを節約できると思いますww=[o=[]]
シャギー

@Shaggyそれは確かに安全だと思う。ありがとう。:)
アーナウルド


5

APL(Dyalog Unicode)、39 バイトSBCS

匿名インフィックスラムダは、左および右の引数として座標と文字列のリストを取得します*。

{⊃,/↑¨↓⌽m⊣m[c],←⍵⊣m←(⊃⌈/c1+⍺-⌊/⍺)⍴⊂''}

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

{} "dfn"; 左(座標)および右(文字列)引数はおよびです。

⊂'' 囲まれた空の文字列なので、配列の塗りつぶしとして使用します

(... )⍴ 周期的にR eshape以下の寸法の配列へ:

  ⌊/⍺ 座標の各軸に沿った最小値

  ⍺- すべての座標からそれを引きます

  1+ それを1に追加します(包括的範囲が必要なため)

  c← 店舗c(のためのC oordinates)

  ⌈/ それらの各軸に沿った最高値

   寸法として使用するために開梱します

m← 保管mm atrixの場合)

⍵⊣ 文字列を支持してそれを破棄します

m[c],← それらをm座標に追加しますc

m⊣ 修正されたものを支持するものを破棄する m

 鏡

 文字列のリストのリストに分割

↑¨ 文字列の各リストをスペースで埋めて文字マトリックスに混ぜます

,/ 水平連結により削減

 アンパック(削減によりランクが1から0に減少するため)


*織り交ぜられた座標と文字列の単一の引数を取ることが必要な場合、5バイト長くなります。


4

05AB1E45 44 バイト

WsàŸãεUõIvyнXQiyθ«]IZsß->ôεíDéθgjí}øRJʒðKĀ}»

入力座標を内部リストとして取得します。

オンラインそれを試してみたり、すべてのテストケースを確認してください

説明:

Wsà           # Get the minimum and maximum of the (implicit) input-list
   Ÿ          # Create a list in the range [min, max]
    ã         # Create each possible pair by taking the cartesian product with itself
ε             # Map each coordinate to:
 U            #  Pop and store the coordinate in variable `X`
 õ            #  Push an empty string ""
  Iv          #  Loop `y` over the input-items:
    yн        #   Get the coordinates of item `y`
      XQi     #   If it's equal to variable `X`:
         yθ   #    Get the string of item `y`
           «  #    Concat it to the (non-)empty string
]             # Close the if-statement, loop, and map
 IZsß         # Get the maximum and minimum of the input-list
     -        # Subtract them from each other
      >       # And increase it by 1
       ô      # Split the list into parts of this size
ε             # Map each part to:
 í            #  Reverse each inner string
  Déθg        #  Get the length of the longest inner string
      j       #  Prepend spaces to each item up to that length
       í      #  And reverse every item back again
              #  (so the spaces are trailing instead of leading)
            # After the map: zip/transpose; swapping rows/columns
  R           # Reverse the entire list
   J          # Join each inner list together to a single string
ʒðKĀ}         # Remove all strings consisting only of spaces
     »        # Join the strings by newlines (and output implicitly)

3

、60バイト

≔Eθ§ι¹η≔Eθ§ι⁰ζF…·⌊ζ⌈ζ«≔E…·⌊η⌈η⭆θ⎇∧⁼ι§μ⁰⁼κ§μ¹§μ²ωε⮌εM⌈EεLκ±Lε

オンラインでお試しください!リンクは、コードの詳細バージョンです。説明:

≔Eθ§ι¹η≔Eθ§ι⁰ζ

入力から座標を抽出します。

F…·⌊ζ⌈ζ«

X座標をループします。

≔E…·⌊η⌈η⭆θ⎇∧⁼ι§μ⁰⁼κ§μ¹§μ²ωε

y座標をループ処理し、指定された座標ですべての文字列を抽出して連結します。

⮌ε

y座標がCharcoalの座標系と比較して逆になっているため、文字列を逆順に印刷します。

M⌈EεLκ±Lε

次の列の先頭に移動します。


3

Perl -p00 -MList::Util=max5、148バイト

s/(\S+) (\S+) (.*)
/$a{$1}=max$a{$1},length($h{$2}{$1}.=$3);''/ge;for$y(sort{$b-$a}keys%h){map{printf"%-$a{$_}s",$h{$y}{$_}}sort{$a-$b}keys%a;say""}

TIO

どうやって

  • s/(\S+) (\S+) (.*) /... ;''/ge;、置換フラグはevalを/gループし/e、置換は空のクリア行入力/デフォルト変数に評価されます
  • $a{$1}=max$a{$1},length($h{$2}{$1}.=$3)、最初のレベルのキーがy第2レベルのマップのマップ%hを自動化し、x文字列$3を値に連結し、長さを取得し、キーxと値が列の長さの最大値の第2マップ%aを自動化します(x
  • for$y(sort{$b-$a}keys%h){... ;say""}、ソートされた数値的に逆の$yキーの行インデックスの場合、最後に改行を出力します%hsay""
  • map{... }sort{$a-$b}keys%a$_キー%aの列インデックスを数値順にソートします
  • printf"%-$a{$_}s",$h{$y}{$_}、列幅で左揃えの印刷文字列

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