无边桌


16

在此挑战中,您将把来自字母的字母放置在笛卡尔平面中,并将结果输出为文本。

您的输入将包含在具有3个参数的列表列表中:

  • X坐标
  • Y坐标

怎么样?

我们知道笛卡尔平面包含2个轴Xÿ和4个象限,其中坐标的符号为,,- - + - 。例如Xÿ++-+--+-

将以下3 x 3矩阵视为笛卡尔平面

-1个1个01个1个1个-1个0001个0-1个-1个0-1个1个-1个

如果我们在输入中给出类似[[-1,1,L],[0,1,F]]矩阵的内容,则类似于

大号F1个1个-1个0001个0-1个-1个0-1个1个-1个

最后的输出 LF

除此之外,为了获得正确的输出,我们还需要注意以下几点:

  • 重复X,Y坐标时,您需要连接字符串。示例:假设在(-1,1)F中放置了字符串,并且您需要将字符串放置a在同一点。您将两个字符串连接在一起,得到Fa,这就是将要输入的值(-1,1)。
  • 您的输出必须与矩阵一致。例如,将其想象为最终结果:

中号一种[R一世Ë一世s1个0CüŤË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或`` 1a1 1
Luis felipe De jesus Munoz

1
@LuisfelipeDejesusMunoz谢谢。哦,还有一个问题,我敢肯定,这里还会有更多人想知道:谁是玛丽?; p
Kevin Cruijssen

2
@KevinCruijssen我的迷恋5年前:c
路易斯·

1
我们可以将输入作为命名元组的列表吗?事情是这样的:(int a,int b,string c)
无知的体现,

Answers:


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))

在线尝试!

但:

  • 这不是很高尔夫。
  • 键不是按数字顺序排序的。

我们在这里做什么

Xÿ

我们可以对数据进行第一次遍历,寻找 Xÿ

这是我们要做的:

  • 我们从开始d=0
  • 我们处理一个迭代,其中X替换为X+dÿd-ÿ
  • 如果任何条目的X<0ÿ<0,我们将中止并以d +递归开始另一次尝试d+1个

我认为您可以通过ow以下位置声明来节省一个字节w=[o=[]]
毛茸茸的

@Shaggy我认为那确实是安全的。谢谢。:)
Arnauld

5

Python 2中188个 185 181字节

s=sorted;d={};k={}
for x,y,c in input():d[x]=d.get(x,{});k[~y]=d[x][y]=d[x].get(y,'')+c
for y in s(k):print''.join('%*s'%(-max(map(len,d[x].values())),d[x].get(~y,''))for x in s(d))

在线尝试!


5

APL(Dyalog Unicode),39 个字节 SBCS

匿名中缀lambda,将*坐标和字符串列表作为左右参数。

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

在线尝试!

{…… } “ dfn”;左(坐标)和右(字符串)参数是

⊂'' 封闭的空字符串,因此用作数组的填充

(... )⍴ 循环ř ESHAPE到以下尺寸的阵列:

  ⌊/⍺ 沿坐标轴的最低值

  ⍺- 从所有坐标中减去

  1+ 将其添加到一个(因为我们想要包含范围)

  c← 存储在c(对于Ç oordinates)

  ⌈/ 沿这些轴的每个轴的最大值

   打开包装以用作尺寸

m← 存储在m(为 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坐标是反向的,所以以相反的顺序打印字符串。

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""}

蒂奥

怎么样

  • s/(\S+) (\S+) (.*) /... ;''/ge;,替换标志/g循环/e评估,替换结果为空的清算行输入/默认变量
  • $a{$1}=max$a{$1},length($h{$2}{$1}.=$3),自动保存其地图的地图%h的地图,该地图的第一个级别将y第二个级别的键x并连接$3到该值,获取长度,并自动保存第二个地图%a的地图,其键x和值的值是列(x)的最大长度
  • for$y(sort{$b-$a}keys%h){... ;say""},对于数字倒序排序的$y键中的行索引,最后打印换行符%hsay""
  • map{... }sort{$a-$b}keys%a,用于列索引$_键%a中按数字排序的
  • printf"%-$a{$_}s",$h{$y}{$_},将列左对齐并以列宽打印字符串

3

干净212个 206字节

import StdEnv,StdLib
? =minList
m=maxList
c=flatten
$a#(x,y,z)=unzip3 a
=flatlines(map c(transpose[[ljustify(m(map length l))k\\l<-[reverse[c[s\\(u,v,s)<-a|u==i&&v==j]\\j<-[?y..m y]]],k<-l]\\i<-[?x..m x]]))

在线尝试!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.