Erstellen Sie ein rechteckiges Array aus einer Ecke neu


30

Ich hatte einmal eine schöne rechteckige Anordnung. Es war sehr symmetrisch, aber leider ist es auseinandergefallen und jetzt habe ich nur die obere linke Ecke. Ihre Aufgabe wird es sein, das ursprüngliche Array wiederherzustellen.

Ihr Programm erhält ein zweidimensionales Array von Ganzzahlen. Um das Parsen zu vereinfachen, können Sie davon ausgehen, dass alle Werte zwischen 1 und 9 liegen. Ihre Aufgabe ist es, die Spalten und Zeilen des Arrays umzukehren, die resultierenden Ecken zusammenzufügen und das resultierende Array zurückzugeben.

Sie können davon ausgehen, dass die Array-Abmessungen mindestens 1x1 betragen.

Testfälle:

Input:
1 2 3
4 5 6

Output:
1 2 3 3 2 1
4 5 6 6 5 4
4 5 6 6 5 4
1 2 3 3 2 1

Input:
1

Output:
1 1
1 1

Input:
9
9
9

Output:
9 9
9 9
9 9
9 9
9 9
9 9

Das ist , die wenigsten Bytes gewinnen!


1
Ich wette, dass Holzkohle dies in
weniger als

1
@tbfninja chat.stackexchange.com/transcript/message/43184083#43184083 aber könnte vielleicht kürzer sein mit einem anderen Eingabeformat.
Pavel

@MagicOctopusUrn yes
Pavel

2
@tfbninja WS⟦ι⟧‖M→↓vielleicht? 5 Bytes, um die Eingabe zu lesen und 4, um sie wiederzugeben.
Neil

4
Ich bin mir zu 99% sicher, dass es eine Sprache gibt, die dies mit einem (oder einem ähnlichen) Charakter macht und sich nicht daran erinnern kann, welche: c
Rod

Antworten:


1

Proton , 29 Bytes

a=>[b+b[by-1]for b:a+a[by-1]]

Probieren Sie es online!

Es gibt jedoch noch einige andere interessante Ansätze:

Proton , 29 Bytes

a=>map(g,(g=x=>x+x[by-1])(a))

Probieren Sie es online!

Sie können die Spiegel-Unterfunktion gin-line definieren, weil Proton. Es ist jedoch nicht kürzer.

Proton , 36 Bytes

(a=>[x[0]for x:zip(*(a+a[by-1]))])*2

Probieren Sie es online!

Das sollte (a=>zip(*(a+a[by-1])))*224 Bytes sein, aber die Zip-Funktion ist völlig kaputt. Grundsätzlich spiegeln Sie es und zip und tun dies dann zweimal (Sie können eine Funktion mit einer positiven Ganzzahl multiplizieren, um die Funktion mehrmals anzuwenden).




5

Python 3, 38 Bytes

lambda a:[b+b[::-1]for b in a+a[::-1]]

Probieren Sie es online!

Nimmt eine Liste von Listen auf und gibt eine Liste von Listen zurück.

Erläuterung:

lambda a:                              # anonymous lambda function
                   for b in a+a[::-1]  # for each row in the array and the upside-down array
          b+b[::-1]                    # the row with its reverse appended
         [                           ] # return in a list


5

Retina , 13 Bytes

\%`$
$^$`
Vs`

Probieren Sie es online!

Erläuterung

\%`$
$^$`

Passen Sie in jeder Zeile ( %) das Ende der Zeile ( $) an, fügen Sie die Umkehrung ( $^) der gesamten Zeile ( $`) ein und drucken Sie das Ergebnis mit einem nachfolgenden Zeilenumbruch ( \). Dadurch wird die Reflexion entlang der vertikalen Achse ausgeführt und die erste Hälfte der Ausgabe gedruckt.

Vs`

Dies kehrt einfach die gesamte Saite um, was einer Drehung um 180 ° entspricht, oder in unserem Fall (aufgrund der horizontalen Symmetrie) eine Reflexion entlang der horizontalen Achse. Auf diese Weise funktioniert dies, da dies die V(umgekehrte) Standard-Regex ist (?m:^.*$), die normalerweise mit jeder Zeile der Zeichenfolge übereinstimmt. Wir aktivieren jedoch die Option singleline s, mit der auch .Zeilenvorschübe abgeglichen werden. Daher entspricht dieser Standard-Regex tatsächlich der gesamten Zeichenfolge.

Das Ergebnis wird am Ende des Programms automatisch ausgedruckt und gibt uns die zweite Hälfte der Ausgabe.


Das sieht nach keinem Regex-Geschmack aus, den ich kenne: P
Pavel

@Pavel Weil Retina nicht nur Regex ist. :)
Erik der Outgolfer

@Pavel Der einzige Teil dieses Codes, der ein regulärer Ausdruck ist, befindet sich $in der ersten Zeile. ;) Ich werde später eine Erklärung hinzufügen.
Martin Ender

5

05AB1E , 2 Bytes

∞∊

Probieren Sie es online!


   # Input:Array of String | ['12','34']
---#-----------------------+------------------------------------------
∞  # Mirror horizontally.  | [12,34]       -> [1221,3443]
 ∊ # Mirror vertically.    | [1221,3443]   -> [1221\n3443\n3443\n1221]

Kredit für Herren Xcoder Hinweis darauf , dass Arrays von String zählen können als 2D - Arrays und Pavel für sie bestätigt.



Um das Parsen zu vereinfachen, können Sie davon ausgehen, dass sie alle zwischen 1 und 9 liegen. Ich denke, das ist gültig. Ich
nehme an

@ Mr.Xcoder das war es, was ich anfangs hatte, dann waren die TIO-2D-Arrays als Eingabe komisch ... also musste ich mir das Header-Zeug einfallen lassen.
Magic Octopus Urn

Eine Zeichenfolge ist ein Array von Zeichen, daher ist eine Liste von Zeichenfolgen immer noch ein 2D-Array. @ Mr.Xcoders Lösung ist gültig.
Pavel

Coolio, arbeitet für mich.
Magic Octopus Urn






3

awk, 88 bytes

{s="";for(i=NF;i>0;i--)s=" "$i s" "$i;a[FNR]=s;print s}END{for(i=NR;i>0;i--)print a[i]}

3
Willkommen bei PPCG! Schöne erste Antwort :)
HyperNeutrino

2

Dreieckigkeit , 31 Bytes

...)...
..IEM..
.DRs+}.
DRs+...

Probieren Sie es online!

Erläuterung

Das Programm entfernt die Zeichen, aus denen sich das Auffüllen zusammensetzt.

)IEMDRs+}DRs+ – Full program. Takes a matrix as a 2D list from STDIN.
)             – Push a 0 onto the stack.
 I            – Take the input at that index.
  E           – Evaluate it.
   M    }     – For each row...
    DR        – Duplicate and replace the second copy by its reverse.
      s+      – Swap and append.
         DR   – Duplicate the result and replace the second copy by its reverse.
           s+ – Swap and append.


2

APL + WIN, 11 Bytes

Fordert zur Eingabe eines 2d-Arrays von Ganzzahlen auf.

m⍪⊖m←m,⌽m←⎕

2

Stax , 5 Bytes

:mm:m

Führen Sie es online aus und debuggen Sie es

:mbedeutet Spiegel, was ist input.concat(reverse(input)). mbedeutet in diesem Zusammenhang, dass jede Zeile nach dem Anwenden von ... ausgegeben wird.

Spiegeln Sie also das Array von Zeilen und spiegeln Sie dann jede Zeile und Ausgabe.






2

Ruby , 35 Bytes

->a{r=->b{b+b.reverse}
r[a].map &r}

Probieren Sie es online!

Ein Lambda, das ein 2D-Array akzeptiert und ein 2D-Array zurückgibt. Es ist unkompliziert, aber hier ist die ungolfed Version:

->a{
  r=->b{ b+b.reverse } # r is a lambda that returns the argument and its reverse
  r[a].map &r          # Add the array's reverse, then add each row's reverse
}

2

Java 8, 140 131 Bytes

m->{String r="";for(int a=m.length,b=m[0].length,i=a+a,j;i-->0;r+="\n")for(j=b+b;j-->0;)r+=m[i<a?i:a+a+~i][j<b?j:b+b+~j];return r;}

Erläuterung:

Probieren Sie es online aus.

m->{                      // Method with integer-matrix parameter and String return-type
  String r="";            //  Result-String, starting empty
  for(int a=m.length,     //  Amount of rows of the input-matrix
          b=m[0].length,  //  Amount of columns of the input-matrix
          i=a+a,j;        //  Index integers
      i-->0;              //  Loop over double the rows
      r+="\n")            //    After every iteration: append a new-line to the result
     for(j=b+b;j-->0;)    //   Inner loop over double the columns
       r+=                //    Append the result with:
          m[i<a?          //     If `i` is smaller than the amount of rows
             i            //      Use `i` as index in the input-matrix
            :             //     Else:
             a+a+~i]      //      Use `a+a+i-1` as index instead
           [j<b?          //     If `j` is smaller than the amount of columns
             j            //      Use `j` as index in the input-matrix
            :             //     Else:
             b+b+~j];     //      Use `b+b+j-1` as index instead
  return r;}              //  Return the result-String

2

J , 11 Bytes

Anonyme implizite Präfixfunktion.

|:@(,|.)^:2

Probieren Sie es online!

|: transponieren

@(…) das Ergebnis von:

, das Argument gefolgt von

|. es ist umgekehrt

^:2 und das alles zweimal


2

SNOBOL4 (CSNOBOL4) , 119 113 Bytes

	T =TABLE()
I	X =X + 1
	I =INPUT	:F(D)
	OUTPUT =T<X> =I REVERSE(I)	:(I)
D	X =X - 1
	OUTPUT =GT(X) T<X>	:S(D)
END	

Probieren Sie es online!

Übernimmt die Eingabe als Zeichenfolge in STDIN ohne Leerzeichen. Dies funktioniert nur, weil die Ziffern sind 1-9und sonst fehlschlagen würden.


Ich kann sehen, warum die Leute diese Sprache nicht mehr benutzen. Das ist so seltsam.
Pavel

1
@Pavel SNOBOL ist wirklich eine schreckliche Sprache, mit der man arbeiten kann. Dies ist eine modernere C-Implementierung, die zusätzliche eingebaute Funktionen wie hat REVERSE; Soweit ich das beurteilen kann, unterstützt das Original auch nur Ganzzahl-Arithmetik.
Giuseppe

2

C (gcc) , 114111 Bytes

j,i;f(A,w,h)int*A;{for(i=h+h;i-->0;puts(""))for(j=w+w;j-->0;)printf("%d,",A[(i<h?i:h+h+~i)*w+(j<w?j:w+w+~j)]);}

Probieren Sie es online!

C (gcc) , 109 Bytes (missbräuchliche einfache Analyse)

  • Vielen Dank an Kevin Cruijssen für den Vorschlag, nur einstellige ganze Zahlen einzugeben. sparte zwei Bytes.
j,i;f(A,w,h)int*A;{for(i=h+h;i-->0;puts(""))for(j=w+w;j-->0;)putchar(A[(i<h?i:h+h+~i)*w+(j<w?j:w+w+~j)]+48);}

Probieren Sie es online!


Sie können 3 Bytes sparen, indem Sie die Schleifen invertieren. for(i=h+h;i-->0;puts(""))for(j=w+w;j-->0;)
Kevin Cruijssen

Erfüllt nicht die Spezifikation; druckt das Array, anstatt es zurückzugeben.

Zur Erleichterung der Analyse können annehmen , dass Sie sie alle zwischen 1 und 9 sind “, so dass Sie das Komma in denen entfernen können printf("%d"für ein zusätzlichen -1 Byte.
Kevin Cruijssen

@ Rogem Ich würde sagen, Drucken des Arrays fällt unter akzeptierte I / O.
Jonathan Frech

1
@ KevinCruijssen Vielen Dank; Mit der Leichtigkeit des Parsens gelang es mir, ein weiteres Byte zu entfernen.
Jonathan Frech

2

Kohle , 5 Bytes

θ‖C→↓

Probieren Sie es online!

Dank ASCII-only für ein besseres Eingabeformat.


Ich frage mich, ob dieses Eingabeformat gültig ist, da Charcoal Eingaben leider nicht verarbeiten kann. Wenn nicht, lösche ich diese Antwort gerne.
Erik der Outgolfer

Dies ist eine gültige Eingabe / Ausgabe.
Pavel

@Pavel Ich habe mich nur gefragt, weil Sie gesagt haben, dass "Ihr Programm ein zweidimensionales Array von Ganzzahlen erhält", während eine Zeichenfolge eindimensional ist (und nein, die äußere []macht es nicht genau 2D).
Erik der Outgolfer

@ ASCII-only Charcoal braucht wirklich eine bessere I / O-Methode ...
Neil

@Neil Er hat hier keinen Ping bekommen, aber ich habe ihn über TNB gepingt. :)
Erik der Outgolfer


1

Julia 0,6 , 55 49 Bytes

~i=i:-1:1
!x=[x x[:,~end];x[~end,:] x[~end,~end]]

Probieren Sie es online!

~(i)ist eine Funktion zum Erstellen von Slices von iunten nach 1.
Also ~endgibts die Scheibeend:-1:1

!(x) ist die Funktion zum Wiederherstellen des Arrays.


1

V , 12 Bytes

yGæGPÎy$æ_|P

Probieren Sie es online!

Erläuterung:

yG              " Yank every line
  æG            " Reverse the order of the lines
    P           " Paste what we yanked
     Î          " On every line:
      y$        "   Yank the whole line
        æ_      "   Reverse the whole line
          |     "   Move to the beginning of the line
           P    "   Paste what we yanked
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.