Bàn không biên giới


16

Trong thử thách này, bạn sẽ đặt các chữ cái từ bảng chữ cái trong mặt phẳng Cartesian và xuất kết quả dưới dạng văn bản.

Đầu vào của bạn sẽ bao gồm một danh sách danh sách với 3 tham số:

  • Tọa độ X
  • Tọa độ Y
  • Chuỗi

Làm sao?

Chúng ta biết rằng một mặt phẳng Cartesian chứa 2 trục và 4 góc phần tư trong đó các dấu của tọa độ là , , và . Ví dụ(X,Y)(X,Y)(+,+)(-,+)(-,-)(+,-)

Coi ma trận 3 nhân 3 sau đây như một mặt phẳng Descartes

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

Nếu chúng ta được đưa vào đầu vào, một cái gì đó giống như [[-1,1,L],[0,1,F]]ma trận của chúng ta sẽ trông giống như

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

Và đầu ra cuối cùng LF

Ngoài ra, có một số điểm chúng tôi cần phải làm theo để có được đầu ra chính xác:

  • Khi tọa độ X, Y được lặp lại, bạn sẽ cần nối các chuỗi. Ví dụ: giả sử trong (-1,1) chuỗi Fđược đặt và bạn cần đặt chuỗi avào cùng một điểm. Bạn nối cả hai chuỗi dẫn đến Favà đó là giá trị sẽ đi vào (-1,1).
  • Đầu ra của bạn cần phải phù hợp với ma trận. Ví dụ hãy tưởng tượng đây là kết quả cuối cùng của bạn:

MmộtrTôieTôiS(1,0)cbạnte(0,-1)(1,-1)

Bạn phải xuất

Ma  rie 
i   s       
cute

Tại sao?

Bạn có thể xem bảng này dưới dạng bảng trong đó các cột là giá trị của trục x và các hàng trục y.

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

Tất cả các giá trị cột phải có cùng độ dài

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

Finnaly chúng tôi đưa ra kết quả

Ma  rie
i   s
cute

Các trường hợp thử nghiệm

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

Ghi chú

  • Đây được coi là
  • Bạn có thể gói tọa độ trong một danh sách, ví dụ: [[3, 3], "c"]
  • Bạn có thể lấy đầu vào ở bất kỳ định dạng hợp lý
  • Bạn có thể cho rằng sẽ không có bất kỳ số hoặc khoảng trống nào trong đầu vào. ví dụ Có thể có cái gì đó như a anhưng không bao giờ 1hoặc " "hoặc 1ahoặc1 1


1
@KevinCruijssen Bạn có thể cho rằng sẽ không có bất kỳ số hoặc khoảng trống nào trong đầu vào. Có thể có một cái gì đó giống như a anhưng không bao giờ 1hoặc `` hoặc 1ahoặc1 1
Luis felipe De jesus Munoz

1
@LuisfelipeDejesusMunoz Cảm ơn. Ồ, và một câu hỏi nữa Tôi chắc chắn nhiều người ở đây sẽ muốn biết: Marie là ai? ; p
Kevin Cruijssen

2
@KevinCruijssen Crush của tôi 5 năm trước: c
Luis felipe De jesus Munoz

1
Chúng ta có thể lấy đầu vào như một danh sách các bộ dữ liệu được đặt tên không? Một cái gì đó như thế này : (int a,int b,string c)?
Hiện thân của sự thiếu hiểu biết

Câu trả lời:


8

JavaScript (ES8),  186 180  179 byte

Đã lưu 1 byte nhờ @Shaggy

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

Hãy thử trực tuyến!

Các chỉ số tiêu cực trong JS (hoặc thiếu chúng)

Đưa ra một mảng A[], nó hoàn toàn hợp pháp trong JS để làm một cái gì đó như A[-1] = 5. Tuy nhiên, điều này sẽ không lưu giá trị trong mảng. Thay vào đó, nó sẽ ngầm ép buộc chỉ số tiêu cực này thành một chuỗi ( "-1") và thiết lập tương ứng tài sản trong đối tượng xung quanh của mảng.

Tin xấu là các thuộc tính không thể lặp lại với các phương thức như map():

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

Hãy thử trực tuyến!

Các mã trên sẽ chỉ hiển thị 3 is stored at index 1.

Một cách giải quyết khác có thể là:

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

Hãy thử trực tuyến!

Nhưng:

  • Đây không phải là rất thân thiện với golf.
  • Các phím không được sắp xếp theo thứ tự số.

Chúng ta làm gì ở đây

xy

xy

Đây là những gì chúng tôi làm thay thế:

  • d= =0
  • xx+dyd-y
  • x<0y<0d+1

Tôi nghĩ bạn có thể lưu một byte bằng cách khai báo obên trong w: w=[o=[]].
Xù xì

@Shaggy Tôi nghĩ rằng đó thực sự an toàn. Cảm ơn. :)
Arnauld

5

Python 2 , 188 185 181 byte

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

Hãy thử trực tuyến!


5

APL (Dyalog Unicode) , 39 byte SBCS

Ẩn danh lambda lấy * danh sách tọa độ và chuỗi làm đối số trái và phải.

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

Hãy thử trực tuyến!

{... } "DFN"; đối số bên trái (tọa độ) và bên phải (chuỗi) là :

⊂'' chuỗi rỗng kèm theo, vì vậy sử dụng như điền vào một mảng

(... )⍴ theo chu kỳ r eshape vào một mảng của các kích thước sau:

  ⌊/⍺ giá trị thấp nhất dọc theo mỗi trục của tọa độ

  ⍺- trừ đi tất cả các tọa độ

  1+ thêm nó vào một (vì chúng tôi muốn phạm vi bao gồm)

  c← cửa hàng ở c(đối với c oordinates)

  ⌈/ giá trị cao nhất dọc theo mỗi trục của chúng

   giải nén để sử dụng như kích thước

m← lưu trữ trong m(cho m atrix)

⍵⊣ loại bỏ mà có lợi cho các chuỗi

m[c],← nối chúng mvào tọa độc

m⊣ loại bỏ những người ủng hộ sửa đổi m

 gương

 chia thành danh sách các chuỗi

↑¨ trộn từng danh sách các chuỗi thành một ma trận ký tự, đệm với khoảng trắng

,/ giảm bằng cách ghép ngang

 giải nén (vì giảm làm giảm thứ hạng từ 1 xuống 0)


* Nếu lấy một đối số duy nhất của tọa độ và chuỗi đan xen là bắt buộc, nó sẽ dài hơn 5 byte.


4

05AB1E , 45 44 byte

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

Lấy tọa độ đầu vào như một danh sách bên trong.

Hãy thử trực tuyến hoặc xác minh tất cả các trường hợp thử nghiệm .

Giải trình:

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

Than , 60 byte

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

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Giải trình:

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

Trích xuất tọa độ từ đầu vào.

F…·⌊ζ⌈ζ«

Vòng qua tọa độ x.

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

Lặp lại các tọa độ y, trích xuất và nối tất cả các chuỗi tại các tọa độ đã cho.

⮌ε

In các chuỗi theo thứ tự ngược lại khi tọa độ y được đảo ngược so với hệ tọa độ của Than.

M⌈EεLκ±Lε

Di chuyển đến đầu cột tiếp theo.


3

Perl 5 -p00 -MList::Util=max, 148 byte

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

Làm sao

  • s/(\S+) (\S+) (.*) /... ;''/ge;, cờ thay thế /glặp /eeval, thay thế đánh giá thành biến đầu vào / biến mặc định của dòng xóa trống
  • $a{$1}=max$a{$1},length($h{$2}{$1}.=$3), tự động xác định bản đồ% h của bản đồ có khóa cấp ythứ nhất cấp thứ hai xvà nối chuỗi $3thành giá trị, lấy độ dài và tự động hóa bản đồ thứ hai% a có khóa xvà giá trị độ dài tối đa trên cột ( x)
  • for$y(sort{$b-$a}keys%h){... ;say""}, cho các chỉ mục hàng $ytrong các khóa được %hsắp xếp ngược số, say""ở cuối để in một dòng mới
  • map{... }sort{$a-$b}keys%a, cho chỉ mục cột $_trong khóa% a được sắp xếp bằng số
  • printf"%-$a{$_}s",$h{$y}{$_}, in chuỗi thẳng hàng sang trái với chiều rộng cột

3

Sạch sẽ , 212 206 byte

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

Hãy thử trực tuyến!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.