g | x | w | all
Bytes Lang Time Link
045Nibbles250826T221719ZAdam
003Pip250825T192758ZDLosc
067AWK250825T184606Zxrs
009Uiua231113T192615Zchunes
036Perl 5 lp Mfeature=say190331T202053ZPavel
029Proton190402T163123Zhyperneu
030Add++180305T171556Zcaird co
088awk180308T153410Zmmuntag
056Clojure180308T141148ZJoshua
049Python 3180307T011929ZDat
005Charcoal180305T184052ZErik the
111C gcc180306T001341ZJonathan
nanSNOBOL4 CSNOBOL4180305T171119ZGiuseppe
012V180305T162847ZDJMcMayh
011J180306T103622ZAdá
049Julia 0.6180306T061811ZFrames C
131Java 8180306T081650ZKevin Cr
012J180306T083521ZGalen Iv
046JavaScript Node.js180306T035458ZShieru A
00205AB1E180305T162334ZMagic Oc
035Ruby180305T224653Zbenj2240
007APL Dyalog Classic180305T212148Zngn
029Octave180305T204615ZSteadybo
002SOGL V0.12180305T202011Ztotallyh
001Canvas180305T204520Zdzaima
029Mathematica180305T185554Ztotallyh
013Retina180305T163411ZMartin E
006Japt180305T174122ZShaggy
005Stax180305T170211Zrecursiv
005MATL180305T170103ZGiuseppe
011APL+WIN180305T164641ZGraham
024Haskell180305T162454Znimi
057R180305T164007ZGiuseppe
006Husk180305T161949ZMr. Xcod
031Triangularity180305T161111ZMr. Xcod
038Python 3180305T160732Zpizzapan
005Jelly180305T160257ZErik the

Nibbles, 4.5 bytes

;!$.@\$:\

Attempt This Online!

;!$.@\$:\
 !     :  Join each row
  $       of the input
    @     with the input
   . \$   with each row reversed
;         Save the result
        \ and join it with the reverse of itself

Pip, 3 bytes

There is a builtin operator, QuadReflect:

QR_

The code is an anonymous function that takes and returns a nested list. Attempt This Online!


Without using QuadReflect or its relative Reflect (RF), a function would be 15 bytes:

{_AL R_MaAL Ra}

Attempt This Online!

{_AL R_MaAL Ra}
{             }  Anonymous function of argument a:
        aAL        To a, append the list...
            Ra     Reverse(a)
       M           To each row, map this function:
 _AL R_              To the argument, append its reverse

AWK, 67 bytes

{for(d=$0;NF;NF--)d=d FS$NF;$0=s[++i]=d}1;END{for(;i;)print s[i--]}

Attempt This Online!

Very similar to previous AWK answer but independently found.

Uiua, 9 bytes

⍥(⍉⊂∶⇌.)2

Try it!

⍥(⍉⊂∶⇌.)2
⍥(     )2  # run a function twice
      .    # duplicate
     ⇌     # reverse
   ⊂∶      # prepend
  ⍉        # transpose

Perl 5 -lp -Mfeature=say, 36 bytes

unshift@l,$_.=reverse;END{say for@l}

Deparsed:

BEGIN { $/ = "\n"; $\ = "\n"; }
use feature 'say';
LINE: while (defined($_ = readline ARGV)) {
    chomp $_;
    unshift @l, $_ .= reverse;
    sub END {
        say $_ foreach (@l);
    }
}
continue {
    die "-p destination: $!\n" unless print $_;
}

Try it online!

Proton, 29 bytes

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

Try it online!

There are a few other interesting approaches though:

Proton, 29 bytes

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

Try it online!

You can define the mirror sub-function g in-line, because Proton. It's not shorter though.

Proton, 36 bytes

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

Try it online!

This should be (a=>zip(*(a+a[by-1])))*2 which is 24 bytes, but the zip function is completely broken. Basically, you mirror it and zip, and then do that twice (you can multiply a function by a positive integer to apply the function multiple times).

Add++, 30 bytes

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

Try it online!

The footer simply transforms the nested array into the format in the question. Defines a function f, which expects a matrix (nested array) as an argument.

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

Clojure, 56 bytes

(fn[i](map #(concat %(reverse %))(concat i(reverse i))))

Creates an anonymous function which takes the two dimensional list and returns the fixed rectangle as two dimensional list.

Try it online!

Python 3, 49 bytes

def f(a):o=[i+i[::-1]for i in a];return o+o[::-1]

Where a is the input array. This function will return a 2D array.

Charcoal, 5 bytes

θ‖C→↓

Try it online!

Thanks to ASCII-only for a better input format.

C (gcc), 114 111 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)]);}

Try it online!

C (gcc), 109 bytes (abusing ease of parsing)

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

Try it online!

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	

Try it online!

Takes input as strings on STDIN, without spaces. This only works because the digits are 1-9 and would fail otherwise.

V, 12 bytes

yGæGPÎy$æ_|P

Try it online!

Explanation:

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

J, 11 bytes

Anonymous tacit prefix function.

|:@(,|.)^:2

Try it online!

|: transpose

@(…) the result of:

, the argument followed by

|. its reverse

^:2 and all this done twice

Julia 0.6, 55 49 bytes

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

Try it online!

~(i) is a function to create slice from i down to 1.
So ~end gives the slice end:-1:1

!(x) is the function to do the rebuilding of the array.

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;}

Explanation:

Try it online.

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

J, 12 bytes

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

Try it online!

Explanation

         |."1 - reverse each row
       ,.     - and stitch them to the input
 (   )@       - and 
  ,|.         - append the rows in reversed order        

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

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

Try it online!

Because Array.prototype.reverse() reverses the array in place, I have to make a shallow copy somewhere first. A=>(j=x=>[...x,...x.reverse()])(A).map(j) does not work.

05AB1E, 2 bytes

∞∊

Try it online!


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

Credit for Mr. Xcoder pointing out that arrays of string may count as 2D arrays and Pavel for confirming it.

Ruby, 35 bytes

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

Try it online!

A lambda accepting a 2D array and returning a 2D array. It's straightforward, but here's the ungolfed version anyway:

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

APL (Dyalog Classic), 7 bytes

⍪∘⊖⍨⊢,⌽

Try it online!

Octave,  33  29 bytes

Thanks to @Giuseppe for golfing four bytes!

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

Try it online!

SOGL V0.12, 2 bytes

-1 byte thanks to dzaima.

╬ø

Try it here!

Canvas, 1 byte

Try it here!

Outputs as a multiline string

Mathematica, 29 bytes

(g=#~Join~Reverse@#&)@*Map[g]

Try it online!

Retina, 13 bytes

\%`$
$^$`
Vs`

Try it online!

Explanation

\%`$
$^$`

On each line (%), match the end of the line ($), and insert the reverse ($^) of the entire line ($`) and print the result with a trailing linefeed (\). This does the reflection along the vertical axis and prints the first half of the output.

Vs`

This just reverses the entire string, which is equivalent to a 180° degree rotation, or in our case (due to the horizontal symmetry) a reflection along the horizontal axis. This way this works is that V's (reverse) default regex is (?m:^.*$), which normally matches each line of the string. However, we activate the singleline option s, which makes . match linefeeds as well and therefore this default regex actually matches the entire string.

The result of this is printed automatically at the end of the program, giving us the second half of the output.

Japt, 6 bytes

mê1 ê1

Try it here


Explanation

           :Implicit input of 2D array
m          :Map
 ê1        :  Mirror sub array
    ê1     :Mirror main array

Stax, 5 bytes

:mm:m

Run and debug it online

:m means mirror, which is input.concat(reverse(input)). m, in this context means output each line after applying...

So, mirror the array of rows, and then mirror each row and output.

MATL, 5 bytes

,tPv!

Try it online!

Explanation:

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

APL+WIN, 11 bytes

Prompts for a 2d array of integers.

m⍪⊖m←m,⌽m←⎕

Haskell, 25 24 bytes

r=(++)<*>reverse
r.map r

Try it online!

R, 57 bytes

function(m)rbind(N<-cbind(m,m[,ncol(m):1]),N[nrow(N):1,])

Try it online!

Husk,  7  6 bytes

Coincidentally, Erik had posted the exact same code in the Husk chatroom about a minute before I posted this.

‼oTS+↔

Try it online!

Pervious version, 7 bytes:

mS+↔S+↔

Triangularity, 31 bytes

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

Try it online!

Explanation

Removing the characters that make up for the padding, here is what the program does:

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

Python 3, 38 bytes

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

Try it online!

Takes a list of lists and returns a list of lists.

Explanation:

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

Jelly, 5 bytes

m€0m0

Try it online!