C#, 146 bytes
Data
- Input
Int32[,]
m
The matrix to be exploded
- Output
Int32[,]
The exploded matrix
Golfed
(int[,] m)=>{int X=m.GetLength(0),Y=m.GetLength(1),x,y;var n=new int[X*2+1,Y*2+1];for(x=0;x<X;x++)for(y=0;y<Y;y++)n[x*2+1,y*2+1]=m[x,y];return n;}
Ungolfed
( int[,] m ) => {
int
X = m.GetLength( 0 ),
Y = m.GetLength( 1 ),
x, y;
var
n = new int[ X * 2 + 1, Y * 2 + 1 ];
for( x = 0; x < X; x++ )
for( y = 0; y < Y; y++ )
n[ x * 2 + 1, y * 2 + 1 ] = m[ x, y ];
return n;
}
Ungolfed readable
// Takes an matrix of Int32 objects
( int[,] m ) => {
// To lessen the byte count, store the matrix size
int
X = m.GetLength( 0 ),
Y = m.GetLength( 1 ),
x, y;
// Create the new matrix, with the new size
var
n = new int[ X * 2 + 1, Y * 2 + 1 ];
// Cycle through the matrix, and fill the spots
for( x = 0; x < X; x++ )
for( y = 0; y < Y; y++ )
n[ x * 2 + 1, y * 2 + 1 ] = m[ x, y ];
// Return the exploded matrix
return n;
}
Full code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TestBench {
public static class Program {
private static Func<Int32[,], Int32[,]> f = ( int[,] m ) => {
int
X = m.GetLength( 0 ),
Y = m.GetLength( 1 ),
x, y,
a = X * 2 + 1,
b = Y * 2 + 1;
var
n = new int[ a, b ];
for( x = 0; x < X; x++ )
for( y = 0; y < Y; y++ )
n[ a, b ] = m[ x, y ];
return n;
};
public static Int32[,] Run( Int32[,] matrix ) {
Int32[,]
result = f( matrix );
Console.WriteLine( "Input" );
PrintMatrix( matrix );
Console.WriteLine( "Output" );
PrintMatrix( result );
Console.WriteLine("\n\n");
return result;
}
public static void RunTests() {
Run( new int[,] { { 1 } } );
Run( new int[,] { { 1, 3, 5 } } );
Run( new int[,] { { 1 }, { 3 }, { 5 } } );
Run( new int[,] { { 1, 3, 5 }, { 1, 3, 5 }, { 1, 3, 5 } } );
}
static void Main( string[] args ) {
RunTests();
Console.ReadLine();
}
public static void PrintMatrix<TSource>( TSource[,] array ) {
PrintMatrix( array, o => o.ToString() );
}
public static void PrintMatrix<TSource>( TSource[,] array, Func<TSource, String> valueFetcher ) {
List<String>
output = new List<String>();
for( Int32 xIndex = 0; xIndex < array.GetLength( 0 ); xIndex++ ) {
List<String>
inner = new List<String>();
for( Int32 yIndex = 0; yIndex < array.GetLength( 1 ); yIndex++ ) {
inner.Add( valueFetcher( array[ xIndex, yIndex ] ) );
}
output.Add( $"[ {String.Join( ", ", inner )} ]" );
}
Console.WriteLine( $"[\n {String.Join( ",\n ", output )}\n]" );
}
}
}
Releases
- v1.0 -
146 bytes
- Initial solution.
Notes