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!

Pavel
quelle
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).

HyperNeutrino
quelle
19

Canvas , 1 Byte

Probieren Sie es hier aus!

Ausgabe als mehrzeilige Zeichenfolge

dzaima
quelle
2
Nizza, @Rod genannt , dass man hah! Ist das deine Sprache auch Dzaima?
Magic Octopus Urn
Verdammt ... ich hätte mich erinnern sollen ...
totalhuman
@MagicOctopusUrn Ja, IIRC soll im Grunde genommen SOGL II sein: Electric Boogaloo?
Nur ASCII
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
Pizzapants184
quelle
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.

Martin Ender
quelle
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.

Magische Kraken-Urne
quelle
... 2 Bytes
Mr. Xcoder
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

Gelee , 5 Bytes

m€0m0

Probieren Sie es online!

Erik der Outgolfer
quelle
Auch 5 Bytes: m0Z$⁺(von Hyper Neutrino).
Pavel
3

MATL , 5 Bytes

,tPv!

Probieren Sie es online!

Erläuterung:

(implicit input)
,               # do twice:
 t              # dup top of stack
 P              # flip vertically
 v              # vertically concatenate
 !              # transpose
(implicit output)

Giuseppe
quelle
3

Oktave ,  33  29 Bytes

Vielen Dank an @ Giuseppe für das Golfen mit vier Bytes!

@(A)[B=[A;flip(A)] fliplr(B)]

Probieren Sie es online!

Steadybox
quelle
29 Bytes
Giuseppe
3

JavaScript (Node.js) , 62 55 49 46 Byte

A=>(j=x=>[...x,...[...x].reverse()])(A).map(j)

Probieren Sie es online!

Da Array.prototype.reverse()sich das Array umkehrt, muss ich zuerst irgendwo eine flache Kopie erstellen. A=>(j=x=>[...x,...x.reverse()])(A).map(j)funktioniert nicht.

Shieru Asakoto
quelle
3

J , 12 Bytes

(,|.)@,.|."1

Probieren Sie es online!

Erläuterung

         |."1 - reverse each row
       ,.     - and stitch them to the input
 (   )@       - and 
  ,|.         - append the rows in reversed order        
Galen Ivanov
quelle
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]}
mmuntag
quelle
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.
Mr. Xcoder
quelle
2

APL + WIN, 11 Bytes

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

m⍪⊖m←m,⌽m←⎕
Graham
quelle
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.

rekursiv
quelle
2

Japt , 6 Bytes

mê1 ê1

Probieren Sie es hier aus


Erläuterung

           :Implicit input of 2D array
m          :Map
 ê1        :  Mirror sub array
    ê1     :Mirror main array
Zottelig
quelle
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
}
benj2240
quelle
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
Kevin Cruijssen
quelle
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

Adam
quelle
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.

Giuseppe
quelle
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!

Jonathan Frech
quelle
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.

Erik der Outgolfer
quelle
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
2

Addiere ++ , 30 Bytes

D,f,@,bU€{r}B]{r}
D,r,@,dbR+

Probieren Sie es online!

Die Fußzeile transformiert einfach das verschachtelte Array in das Format in der Frage. Definiert eine Funktion f, die eine Matrix (verschachteltes Array) als Argument erwartet.

Caird Coinheringaahing
quelle
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.

Lyndon White
quelle
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
DJMcMayhem
quelle