Randloser Tisch

16

In dieser Herausforderung platzieren Sie Buchstaben aus dem Alphabet in einer kartesischen Ebene und geben das Ergebnis als Text aus.

Ihre Eingabe besteht aus einer Liste mit 3 Parametern:

  • X-Koordinate
  • Y-Koordinate
  • String

Wie?

Wir wissen, dass eine kartesische Ebene 2 Achsen und 4 Quadranten enthält, wobei die Vorzeichen der -Koordinaten , , und . Beispielsweise(X,Y.)(X,Y.)(+,+)(-,+)(-,-)(+,-)

Betrachten Sie die folgende 3 mal 3 Matrix als kartesische Ebene

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

Wenn wir in der Eingabe etwas wie [[-1,1,L],[0,1,F]]unsere Matrix erhalten, sieht es ungefähr so ​​aus

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

Und die endgültige Ausgabe LF

Darüber hinaus müssen wir einige Punkte beachten, um die richtige Ausgabe zu erhalten:

  • Wenn eine X, Y-Koordinate wiederholt wird, müssen Sie die Zeichenfolgen verketten. Beispiel: Nehmen FSie an, dass in (-1,1) die Zeichenfolge platziert ist und Sie die Zeichenfolge aan derselben Stelle platzieren müssen. Sie verketten beide Zeichenfolgen, was dazu führt, Faund das ist der Wert, der in (-1,1) eingegeben wird.
  • Ihre Ausgabe muss der Matrix entsprechen. Beispiel stellen Sie sich das als Ihr Endergebnis vor:

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

Sie müssen ausgeben

Ma  rie 
i   s       
cute

Warum?

Sie können dies als Tabelle anzeigen, in der die Spalten die Werte der X-Achse und die Zeilen die Y-Achse sind.

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

Alle Spaltenwerte müssen gleich lang sein

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

Finnisch geben wir das Ergebnis aus

Ma  rie
i   s
cute

Testfälle

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

Anmerkungen

  • Dies soll
  • Sie können die Koordinaten in eine einzelne Liste einschließen, z [[3, 3], "c"]
  • Sie können die Eingabe in jedem vernünftigen Format vornehmen
  • Sie können davon ausgehen, dass nur in der Eingabe keine Anzahl oder Leerzeichen vorhanden sind. zB kann es sowas a aaber nie geben 1oder " "oder 1aoder1 1
Luis Felipe De Jesus Munoz
quelle
Sandkasten
Luis Felipe De Jesus Munoz
1
@KevinCruijssen Es kann davon ausgegangen werden, dass die Eingabe keine Zahlen oder Leerzeichen enthält. Es kann so etwas wie a aaber nie 1oder `` oder 1aoder1 1
Luis Felipe De Jesus Munoz
1
@ LuisfelipeDejesusMunoz Danke. Oh, und noch eine Frage, ich bin sicher, dass mehr Leute hier wissen möchten: Wer ist Marie? ; p
Kevin Cruijssen
2
@KevinCruijssen Mein Schwarm vor 5 Jahren: c
Luis felipe De jesus Munoz
1
Können wir Eingaben als Liste benannter Tupel nehmen? So etwas wie das (int a,int b,string c):?
Verkörperung der Unwissenheit

Antworten:

8

JavaScript (ES8),  186 180  179 Bytes

1 Byte dank @Shaggy gespeichert

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

Probieren Sie es online!

Negative Indizes in JS (oder das Fehlen von ihnen)

Angesichts eines Arrays A[]ist es in JS vollkommen legal, so etwas zu tun A[-1] = 5. Dies wird jedoch nicht den Wert im Array selbst speichern. Stattdessen wird dieser negative Index implizit in eine Zeichenfolge ( "-1") umgewandelt und die entsprechende Eigenschaft im umgebenden Objekt des Arrays festgelegt.

Die schlechte Nachricht ist, dass Eigenschaften mit folgenden Methoden nicht iterierbar sind map():

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

Probieren Sie es online!

Der obige Code wird nur angezeigt 3 is stored at index 1.

Eine mögliche Problemumgehung wäre:

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

Probieren Sie es online!

Aber:

  • Dies ist nicht sehr golffreundlich.
  • Die Schlüssel sind nicht in numerischer Reihenfolge sortiert.

Was machen wir hier?

xy

xy

Stattdessen machen wir Folgendes:

  • d=0
  • xx+dyd-y
  • x<0y<0d+1
Arnauld
quelle
Ich denke , dass Sie ein Byte speichern kann , indem er erklärt oin w: w=[o=[]].
Shaggy
@ Shaggy Ich denke, das ist in der Tat sicher. Vielen Dank. :)
Arnauld
5

Python 2 , 188 185 181 Bytes

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

Probieren Sie es online!

TFeld
quelle
5

APL (Dyalog Unicode) , 39 Byte SBCS

Anonymes Infix Lambda, das * Listen von Koordinaten und Zeichenfolgen als linkes und rechtes Argument verwendet.

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

Probieren Sie es online!

{... } "dfn"; Argumente für left (Koordinaten) und right (Zeichenfolgen) sind und :

⊂'' Umschlossene leere Zeichenfolge, verwenden Sie diese als Füllung für ein Array

(... )⍴ zyklisch r eshape in eine Anordnung der folgenden Abmessungen:

  ⌊/⍺ der niedrigste Wert entlang jeder Achse der Koordinaten

  ⍺- subtrahiere das von allen Koordinaten

  1+ addiere das zu eins (da wir den inklusiven Bereich wollen)

  c← store in c(für c oordinates)

  ⌈/ der höchste Wert entlang jeder Achse von diesen

   auspacken, um als Maße zu verwenden

m← Speichern in m(für m atrix)

⍵⊣ wirf das zugunsten der Saiten weg

m[c],← Hänge diese man die Koordinaten anc

m⊣ Werfen Sie diese zugunsten der geänderten m

 Spiegel

 in Liste von Listen von Zeichenfolgen aufgeteilt

↑¨ Mischen Sie jede Liste von Zeichenfolgen in eine Zeichenmatrix, die mit Leerzeichen aufgefüllt ist

,/ durch horizontale Verkettung reduzieren

 auspacken (da die Reduktion den Rang von 1 auf 0 verringert)


* Wenn ein einzelnes Argument aus verwobenen Koordinaten und Zeichenfolgen erforderlich ist, sind diese 5 Byte länger.

Adam
quelle
4

05AB1E , 45 44 Bytes

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

Nimmt die Eingabekoordinaten als innere Liste.

Probieren Sie es online aus oder überprüfen Sie alle Testfälle .

Erläuterung:

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
quelle
3

Kohle , 60 Bytes

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

Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:

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

Extrahieren Sie die Koordinaten aus der Eingabe.

F…·⌊ζ⌈ζ«

Schleife über die x-Koordinaten.

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

Durchlaufen Sie die y-Koordinaten und extrahieren und verketten Sie alle Zeichenfolgen an den angegebenen Koordinaten.

⮌ε

Drucken Sie die Zeichenfolgen in umgekehrter Reihenfolge aus, da die y-Koordinaten im Vergleich zum Charcoal-Koordinatensystem umgekehrt sind.

M⌈EεLκ±Lε

Gehen Sie zum Anfang der nächsten Spalte.

Neil
quelle
3

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

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

Wie

  • s/(\S+) (\S+) (.*) /... ;''/ge;, Ersetzungskennzeichen /gSchleifenauswertung /e, Ersetzung ergibt leere Löschzeileneingabe / Standardvariable
  • $a{$1}=max$a{$1},length($h{$2}{$1}.=$3), autoviviert eine Map% h der Map, deren Schlüssel der ersten Ebene die yzweite Ebene sind , und verknüpft den xString $3mit dem Wert, ermittelt die Länge und autoviviert eine zweite Map% a, deren Schlüssel xund Wert die maximale Länge über die Spalte ( x)
  • for$y(sort{$b-$a}keys%h){... ;say""}für Zeilenindizes $yin Schlüsseln mit %humgekehrter numerischer Sortierung, say""um am Ende eine neue Zeile zu drucken
  • map{... }sort{$a-$b}keys%a, für Spaltenindex $_in Schlüsseln% a numerisch sortiert
  • printf"%-$a{$_}s",$h{$y}{$_}, Zeichenfolge linksbündig mit Spaltenbreite drucken
Nahuel Fouilleul
quelle
3

Sauber , 212 206 Bytes

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

Probieren Sie es online!

Οurous
quelle