Stół bez obramowania

16

W tym wyzwaniu umieścisz litery z alfabetu na płaszczyźnie kartezjańskiej i wyślesz wynik jako tekst.

Twój wkład będzie składał się z listy z 3 parametrami:

  • Współrzędna X.
  • Współrzędna Y.
  • Strunowy

W jaki sposób?

Wiemy, że płaszczyzna kartezjańska zawiera 2 osie i 4 ćwiartki, w których znakami współrzędnych są , , i . Na przykład(X,Y)(X,Y)(+,+)(-,+)(-,-)(+,-)

Rozważ następującą macierz 3 na 3 jako płaszczyznę kartezjańską

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

Jeśli otrzymamy na wejściu, coś w rodzaju [[-1,1,L],[0,1,F]]naszej matrycy będzie wyglądało podobnie

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

I końcowy wynik LF

Oprócz tego należy uzyskać pewne punkty, aby uzyskać prawidłowe wyniki:

  • Po powtórzeniu współrzędnej X, Y konieczne będzie połączenie łańcuchów. Przykład: załóżmy, że w (-1,1) łańcuch Fjest umieszczony i musisz umieścić łańcuch aw tym samym punkcie. Łączysz oba łańcuchy, dzięki czemu powstaje Fai jest to wartość, która wejdzie w (-1,1).
  • Twój wynik musi być spójny z matrycą. Przykład wyobraź sobie to jako wynik końcowy:

M.zarjamijas(1,0)doutmi(0,-1)(1,-1)

Musisz wyprowadzać

Ma  rie 
i   s       
cute

Dlaczego?

Możesz to zobaczyć jako tabelę, w której kolumny są wartościami osi x, a rzędy osi y.

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

Wszystkie wartości kolumn muszą mieć tę samą długość

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

Ostatecznie wyprowadzamy wynik

Ma  rie
i   s
cute

Przypadki testowe

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

Notatki

  • To ma być
  • Możesz zawinąć współrzędne w jedną listę, np [[3, 3], "c"]
  • Możesz pobrać dane wejściowe w dowolnym rozsądnym formacie
  • Możesz założyć, że na wejściu nie będzie żadnej liczby ani pustych spacji. np. może być coś takiego, a aale nigdy 1lub " "lub 1alub1 1
Luis Felipe De Jesus Munoz
źródło
piaskownica
Luis felipe De jesus Munoz
1
@KevinCruijssen Możesz założyć, że nie będzie żadnej liczby ani pustych spacji tylko na wejściu. Może być coś takiego, a aale nigdy 1lub `` lub 1alub1 1
Luis Felipe De Jesus Munoz
1
@LuisfelipeDejesusMunoz Dzięki. Aha, i jeszcze jedno pytanie, jestem pewien, że więcej osób chciałoby wiedzieć: kim jest Marie? ; p
Kevin Cruijssen
2
@KevinCruijssen My crush 5 lat temu: c
Luis felipe De jesus Munoz
1
Czy możemy wziąć dane wejściowe jako listę nazwanych krotek? Coś takiego: (int a,int b,string c)?
Embodiment of Ignorance

Odpowiedzi:

8

JavaScript (ES8),  186 180  179 bajtów

Zaoszczędzono 1 bajt dzięki @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`
`)``

Wypróbuj online!

Negatywne wskaźniki w JS (lub ich brak)

Biorąc pod uwagę tablicę A[], JS może robić coś takiego A[-1] = 5. Nie spowoduje to jednak zapisania wartości w samej tablicy. Zamiast tego domyślnie wymusi ten ujemny indeks na string ( "-1") i ustawi odpowiednią właściwość w otaczającym obiekcie tablicy.

Zła wiadomość jest taka, że ​​właściwości nie można iterować metodami takimi jak map():

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

Wypróbuj online!

Powyższy kod zostanie wyświetlony tylko 3 is stored at index 1.

Możliwym obejściem byłoby:

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

Wypróbuj online!

Ale:

  • To nie jest zbyt przyjazne dla golfa.
  • Klucze nie są sortowane w kolejności numerycznej.

Co tu robimy

xy

xy

Oto, co robimy zamiast tego:

  • re=0
  • xx+reyre-y
  • x<0y<0re+1
Arnauld
źródło
Myślę, że można zapisać bajt oświadczając ow terminie w: w=[o=[]].
Kudłaty
@Shaggy Myślę, że to naprawdę bezpieczne. Dzięki. :)
Arnauld
5

Python 2 , 188 185 181 bajtów

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

Wypróbuj online!

TFeld
źródło
5

APL (Dyalog Unicode) , 39 bajtów SBCS

Anonimowy przyrostek lambda przyjmujący * listy współrzędnych i ciągów znaków jako lewy i prawy argument.

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

Wypróbuj online!

{} „Dfn”; argumentami left (współrzędne) i right (string) są i :

⊂'' dołączony pusty ciąg, więc użyj jako wypełnienia dla tablicy

(... )⍴ cyklicznie r eshape w szeregu następujących wymiarach:

  ⌊/⍺ najniższa wartość wzdłuż każdej osi współrzędnych

  ⍺- odejmij to od wszystkich współrzędnych

  1+ dodaj to do jednego (ponieważ chcemy zakres obejmujący)

  c← Przechowywać w c(na c oordinates)

  ⌈/ najwyższa wartość wzdłuż każdej z nich

   rozpakuj, aby użyć jako wymiarów

m← zapisz w m(dla m atrix)

⍵⊣ odrzuć to na rzecz łańcuchów

m[c],← dołącz je do mwspółrzędnychc

m⊣ odrzucić tych, którzy opowiadają się za zmienionymi m

 lustro

 podzielony na listę list ciągów

↑¨ zmieszaj każdą listę ciągów znaków w macierz znaków, wypełniając je spacjami

,/ zmniejszyć przez konkatenację poziomą

 rozpakuj (ponieważ redukcja zmniejsza rangę z 1 do 0)


* Jeśli wymagany jest pojedynczy argument przeplatanych współrzędnych i łańcuchów, będzie on dłuższy o 5 bajtów.

Adám
źródło
4

05AB1E , 45 44 bajtów

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

Pobiera współrzędne wejściowe jako wewnętrzną listę.

Wypróbuj online lub sprawdź wszystkie przypadki testowe .

Wyjaśnienie:

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
źródło
3

Węgiel , 60 bajtów

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

Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:

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

Wyodrębnij współrzędne z wejścia.

F…·⌊ζ⌈ζ«

Pętla nad współrzędnymi x.

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

Pętlę nad współrzędnymi y, wyodrębniając i łącząc wszystkie ciągi o podanych współrzędnych.

⮌ε

Drukuj łańcuchy w odwrotnej kolejności, ponieważ współrzędne y są odwrócone w porównaniu do układu współrzędnych węgla drzewnego.

M⌈EεLκ±Lε

Przejdź na początek następnej kolumny.

Neil
źródło
3

Perl 5 -p00 -MList::Util=max, 148 bajtów

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

W jaki sposób

  • s/(\S+) (\S+) (.*) /... ;''/ge;, ewaluacja /gpętli flag podstawienia /e, zamiana zwraca do pustej linii wejściowej / domyślnej zmiennej rozliczeniowej
  • $a{$1}=max$a{$1},length($h{$2}{$1}.=$3), automatycznie uwiarygodnia mapę% h mapy, której klucze pierwszego poziomu ydrugiego poziomu xi konkatenują ciąg znaków $3z wartością, uzyskują długość i automatycznie uwiarygodniają drugą mapę% a, której klucze xi wartość maksymalną długość nad kolumną ( x)
  • for$y(sort{$b-$a}keys%h){... ;say""}, dla indeksów wierszy $yw kluczach %hposortowanych numerycznie do tyłu, say""na końcu, aby wydrukować nowy wiersz
  • map{... }sort{$a-$b}keys%a, dla indeksu kolumny $_w kluczach% a posortowane numerycznie
  • printf"%-$a{$_}s",$h{$y}{$_}, wydrukuj ciąg wyrównany do lewej z szerokością kolumny
Nahuel Fouilleul
źródło
3

Czysty , 212 206 bajtów

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

Wypróbuj online!

Obrzydliwe
źródło