Meja tanpa batas

16

Dalam tantangan ini, Anda akan menempatkan huruf-huruf dari alfabet dalam bidang Kartesius dan menampilkan hasilnya sebagai teks.

Input Anda akan terdiri dari daftar daftar dengan 3 parameter:

  • Koordinat X
  • Koordinat Y
  • Tali

Bagaimana?

Kita tahu bahwa sebuah pesawat Cartesian mengandung 2 sumbu (X,Y) dan 4 kuadran di mana tanda-tanda koordinat (X,Y) adalah (+,+) , (,+) , (,) , dan (+,) . Sebagai contoh

Pertimbangkan matriks 3 per 3 berikut sebagai bidang Kartesius

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

Jika kita diberikan dalam input, sesuatu seperti [[-1,1,L],[0,1,F]]matriks kita akan terlihat mirip

L.F(1,1)(-1,0)(0,0)(1,0)(-1,-1)(0,-1)(1,-1)

Dan hasil akhirnya LF

Selain itu ada beberapa poin yang perlu kita ikuti untuk mendapatkan hasil yang benar:

  • Ketika sebuah X, Y coord diulang, Anda harus menyatukan string. Contoh: asumsikan dalam (-1,1) string Fditempatkan dan Anda perlu menempatkan string apada titik yang sama. Anda menggabungkan kedua string yang menghasilkan Fadan itulah nilai yang akan masuk (-1,1).
  • Output Anda harus konsisten dengan matriks. Contoh bayangkan ini sebagai hasil akhir Anda:

M.Sebuahrsayaesayas(1,0)ckamute(0,-1)(1,-1)

Anda harus mengeluarkan

Ma  rie 
i   s       
cute

Mengapa?

Anda dapat melihat ini sebagai tabel di mana kolom adalah nilai sumbu x dan baris sumbu y.

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

Semua nilai kolom harus memiliki panjang yang sama

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

Finnaly kami hasilkan

Ma  rie
i   s
cute

Uji Kasus

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

Catatan

  • Ini seharusnya
  • Anda dapat membungkus koordinat dalam satu daftar misalnya [[3, 3], "c"]
  • Anda dapat mengambil input dalam format apa pun yang masuk akal
  • Anda dapat mengasumsikan tidak akan ada angka atau ruang kosong hanya dalam input. misalnya ada bisa menjadi sesuatu seperti a atetapi tidak pernah 1atau " "atau 1aatau1 1
Luis felipe De jesus Munoz
sumber
sandbox
Luis felipe De jesus Munoz
1
@KevinCruijssen Anda dapat mengasumsikan tidak akan ada angka atau spasi kosong hanya pada input. Mungkin ada sesuatu seperti a atetapi tidak pernah 1atau `` atau 1aatau1 1
Luis felipe De jesus Munoz
1
@LuisfelipeDejesusMunoz Terima kasih. Oh, dan satu pertanyaan lagi saya yakin lebih banyak orang di sini ingin tahu: siapa itu Marie? ; p
Kevin Cruijssen
2
@KevinCruijssen Naksir saya 5 tahun yang lalu: c
Luis felipe De jesus Munoz
1
Bisakah kita mengambil input sebagai daftar tupel bernama? Sesuatu seperti ini (int a,int b,string c):?
Perwujudan Ketidaktahuan

Jawaban:

8

JavaScript (ES8),  186 180  179 byte

Disimpan 1 byte berkat @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`
`)``

Cobalah online!

Indeks negatif di JS (atau kurang dari itu)

Diberikan array A[], sangat legal di JS untuk melakukan sesuatu seperti A[-1] = 5. Namun, ini tidak akan menyimpan nilai dalam array itu sendiri. Sebagai gantinya, itu secara implisit akan memaksa indeks negatif ini menjadi string ( "-1") dan mengatur properti terkait di objek array sekitarnya.

Berita buruknya adalah bahwa properti tidak dapat diubah dengan metode seperti map():

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

Cobalah online!

Kode di atas hanya akan ditampilkan 3 is stored at index 1.

Solusi yang mungkin adalah:

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

Cobalah online!

Tapi:

  • Ini tidak terlalu ramah golf.
  • Kunci tidak diurutkan dalam urutan numerik.

Apa yang kami lakukan di sini

xy

xy

Inilah yang kami lakukan sebagai gantinya:

  • d=0
  • xx+dyd-y
  • x<0y<0d+1
Arnauld
sumber
Saya pikir Anda dapat menyimpan byte dengan menyatakan odalam w: w=[o=[]].
Shaggy
@ Shaggy, saya pikir itu memang aman. Terima kasih. :)
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))

Cobalah online!

TFeld
sumber
5

APL (Dyalog Unicode) , 39 byte SBCS

Infix lambda anonim mengambil * daftar koordinat dan string sebagai argumen kiri dan kanan.

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

Cobalah online!

{... } "dfn"; Argumen kiri (koordinat) dan kanan (string) adalah dan :

⊂'' string kosong terlampir, jadi gunakan sebagai fill untuk array

(... )⍴ siklis r eshape ke array dimensi berikut:

  ⌊/⍺ nilai terendah di sepanjang setiap sumbu koordinat

  ⍺- kurangi itu dari semua koordinat

  1+ tambahkan itu ke satu (karena kami ingin rentang inklusif)

  c← toko di c(untuk c oordinates)

  ⌈/ nilai tertinggi di sepanjang setiap sumbu itu

   buka kemasan untuk digunakan sebagai dimensi

m← simpan di m(untuk m atrix)

⍵⊣ Buang yang mendukung string

m[c],← tambahkan ke mkoordinatc

m⊣ Buang yang mendukung amandemen m

 cermin

 dipecah menjadi daftar daftar string

↑¨ campur setiap daftar string ke dalam matriks karakter, padding dengan spasi

,/ kurangi dengan penyatuan horizontal

 membuka kemasan (karena pengurangan mengurangi peringkat dari 1 menjadi 0)


* Jika diperlukan argumen tunggal dari jalinan koordinat dan string, itu akan menjadi 5 byte lebih lama.

Adám
sumber
4

05AB1E , 45 44 byte

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

Mengambil input-koordinat sebagai daftar dalam.

Cobalah secara online atau verifikasi semua kasus uji .

Penjelasan:

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)
Kevin Cruijssen
sumber
3

Arang , 60 byte

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

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:

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

Ekstrak koordinat dari input.

F…·⌊ζ⌈ζ«

Simpulkan koordinat x.

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

Lingkari koordinat y, ekstraksi dan gabungkan semua string pada koordinat yang diberikan.

⮌ε

Cetak string dalam urutan terbalik karena koordinat y dibalik dibandingkan dengan sistem koordinat Charcoal.

M⌈EεLκ±Lε

Pindah ke awal kolom berikutnya.

Neil
sumber
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

Bagaimana

  • s/(\S+) (\S+) (.*) /... ;''/ge;, penggantian flags /gloop /eeval, penggantian dievaluasi menjadi input baris kliring kosong / variabel default
  • $a{$1}=max$a{$1},length($h{$2}{$1}.=$3), autovivifies, peta% h dari peta yang tingkat pertama kunci tingkat ykedua xdan merangkai string $3ke nilai, dapatkan panjang dan otomatis film peta kedua% a yang kunci xdan nilai maks panjangnya di atas kolom ( x)
  • for$y(sort{$b-$a}keys%h){... ;say""}, untuk indeks baris $ydalam kunci yang %hdiurutkan secara numerik terbalik, say""di akhir untuk mencetak baris baru
  • map{... }sort{$a-$b}keys%a, untuk indeks kolom $_pada kunci% a diurutkan secara numerik
  • printf"%-$a{$_}s",$h{$y}{$_}, cetak string sejajar ke kiri dengan lebar kolom
Nahuel Fouilleul
sumber
3

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

Cobalah online!

Suram
sumber