f={t=_this;c=count(t select 0);e=[0];i=0;while{i<c*2}do{e=e+[0];i=i+1};m=[e];i=0;while{i<count t}do{r=+e;j=0;while{j<c}do{r set[j*2+1,(t select i)select j];j=j+1};m=m+[r,e];i=i+1};m}
Ungolfed:
f=
{
// _this is the input matrix. Let's give it a shorter name to save bytes.
t = _this;
c = count (t select 0);
// Create a row of c*2+1 zeros, where c is the number of columns in the
// original matrix.
e = [0];
i = 0;
while {i < c*2} do
{
e = e + [0];
i = i + 1
};
m = [e]; // The exploded matrix, which starts with a row of zeros.
i = 0;
while {i < count t} do
{
// Make a copy of the row of zeros, and add to its every other column
// the values from the corresponding row of the original matrix.
r = +e;
j = 0;
while {j < c} do
{
r set [j*2+1, (t select i) select j];
j = j + 1
};
// Add the new row and a row of zeroes to the exploded matrix.
m = m + [r, e];
i = i + 1
};
// The last expression is returned.
m
}
Appeler avec:
hint format["%1\n\n%2\n\n%3\n\n%4",
[[1]] call f,
[[1, 4], [5, 2]] call f,
[[1, 4, 7]] call f,
[[6],[4],[2]] call f];
Sortie:
Dans l'esprit du challenge:
Gelée ,
12 à11 octets-1 octet grâce à Erik l'Outgolfer (inutile d'utiliser des arguments échangés pour une jointure)
Essayez-le en ligne! Ou voir une suite de tests .
Un lien monadique acceptant et renvoyant des listes de listes.
Comment?
la source
j00,0jµ€Z$⁺
Haskell , 38 octets
Essayez-le en ligne!
la source
MATL , 12 octets
L'entrée est une matrice avec un
;
séparateur de lignes.Essayez-le en ligne!
Explication
la source
Japt , 18 octets
Testez-le en ligne! (Utilise le
-Q
drapeau pour que la sortie soit plus facile à comprendre.)Semblable à la réponse de gelée, mais beaucoup plus longtemps ...
Explication
La partie externe du code est juste une solution de contournement pour simuler celle de Jelly
⁺
:Le code lui-même est:
Répété deux fois, ce processus donne le résultat souhaité. Le résultat est implicitement imprimé.
la source
Coque , 12 octets
Prend et retourne un tableau entier 2D. Essayez-le en ligne!
Explication
Même idée que dans beaucoup d'autres réponses: ajoutez des zéros à chaque ligne et transposez-les deux fois. L'opération de ligne est implémentée avec un pli.
la source
Mathematica, 39 octets
Essayez-le au bac à sable Wolfram! Appelez ça comme "
r=Riffle[#,0,{1,-1,2}]&/@Thread@#&;r@*r@{{1,2},{3,4}}
".Comme beaucoup d'autres réponses, cela fonctionne en transposant et en décalant les zéros dans chaque ligne, puis en répétant la même chose. Inspiré par la réponse de Jonathan Allan sur la gelée en particulier, mais uniquement parce que je suis tombé sur cette réponse en premier.
la source
Dyalog APL, 24 octets
4 octets enregistrés grâce à @ZacharyT
5 octets enregistrés grâce à @KritixiLithos
Essayez-le en ligne!
la source
1,1,⍴⍵
, hein?{{⍵↑⍨-1 1+⍴⍵}⊃⍪/,/2 2∘↑¨⍵}
à 261 1+
!1+
fonctionnerait?Octave, 41 octets
Essayez-le en ligne!
la source
Python 3 ,
104 101 97 9386 octetsw
supprimée et un espace indésirable[a,b]
commea,b
lors de l'ajout à une listeEssayez-le en ligne!
la source
w
et sauvegarder 2 octets: repl.it/JBPEm+=[r,w]
[j,0]
destinationj,0
ou de[r,m[0]
destinationr,m[0]
?for
indentation de la boucle en un seul onglet.Python 3, 118 octets
Première fois au golf! Pas le meilleur, mais je suis assez fier si je peux le dire moi-même!
la source
+=
et=
sont entourés d'espaces, qui peuvent être supprimés. De plus, faire+=
deux fois de suite pourrait être simplifié en une seule déclaration, par exemplee+=str(d)+'0'
for
boucle interne sur une seule lignefor d in c:e+=str(d)+'0'
, mais vous pouvez également utiliser une carte de jointure (str, d)) + '0', in which case it becomes pointless to define
e ' .z
etr
sur la même ligne (avec un;
entre elles), en sauvegardant un octet d'indentation.R, 65 octets
Merci à Jarko Dubbeldam et Giuseppe pour leurs précieux commentaires!
Code
L'entrée pour la fonction doit être une matrice ou un tableau à deux dimensions.
Tester
Sortie
la source
a=dim(x)*2+1
au lieu denrow
etncol
serait mieux. Vous pourriez alors fairey=matrix(0);dim(y)=a
et2*1:a[1],2*1:a[2]
.y=array(0,a)
serait encore plus court.2*1:a[1]
parce:
que leur priorité est supérieure à celle de*
Mathematica, 55 octets
la source
o={0,0}
peut être réduit ào=0{,}
PHP , 98 octets
Entrée sous forme de tableau 2D, sortie sous forme de chaîne
Essayez-le en ligne!
PHP , 116 octets
Entrée et sortie sous forme de tableau 2D
Essayez-le en ligne!
la source
Clojure, 91 octets
Itère sur les plages par demi-pas.
la source
Perl 6 , 33 octets
Essayez-le en ligne!
la source
Python 2 , 64 octets
Essayez-le en ligne!
La fonction
g
sépare l'entrée entre les zéros. La fonction principale transpose l'entrée lors de l'applicationg
, puis recommence. Peut-être y a-t-il un moyen d'éviter la répétition dans la fonction principale.la source
JavaScript (ES6),
7372 octetsFormaté et commenté
Insérer des zéros horizontalement et verticalement est une opération très similaire. L'idée ici est d'utiliser la même fonction g () pour les deux étapes.
Cas de test
Afficher l'extrait de code
la source
Charbon de bois , 49 octets
Essayez-le en ligne!
L'entrée est une simple chaîne séparant les lignes par un point-virgule.
la source
≔E⪪θ;⪫00⪫ι0θFθ⟦⭆ι0ι⟧⭆⊟θ0
mais même en évitant StringMap, je pense toujours que cela peut être fait en 27 octets.C ++ 17 + Modules, 192 octets
Entrée sous forme de rangées de chaînes de cin , Sortie vers cout
la source
C # , 146 octets
Les données
Int32[,]
m
La matrice à exploserInt32[,]
La matrice éclatéeGolfé
Ungolfed
Ungolfed lisible
Code complet
Communiqués
146 bytes
- Solution initiale.Remarques
la source
(int[,] m)=>
,m=>
c’est suffisant si vous déclarezm
être un int-tableau 2D int. En outre, vous pouvez changer,x,
pour,x=0,
et se débarrasser dex=0
dans l'initialisation en boucle pour -1 octet. Et vous pouvez retirery++
de la boucle intérieure en changeant=m[x,y];
d'=m[x,y++];
un montant supplémentaire -1 octet. Mais +1 de moi, et si je crée un port de votre réponse, il est également plus court que ma réponse Java actuelle. :)Dyalog APL, 24 octets
Toutes les améliorations sont les bienvenues et souhaitées!
la source
Python 2 , 92 octets
Essayez-le en ligne!
la source
Python 3 + Numpy , 87 octets
Essayez-le en ligne!
la source
JavaScript (ES6),
8078 octetsla source
Pyth, 13 octets
Manifestation
Un autre 13:
la source
APL (Dyalog) , 22 octets
Invite la matrice, retourne la matrice jointe.
Essayez-le en ligne!
a←⎕
invite pour la matrice et attribuer à un⍴
les dimensions d' un (lignes, colonnes)2×
multiplier par deux1+
ajoute un⍴∘0 1¨
utiliser chacun de r Eshape (cyclique) les nombres zéro et un{
…}/
Réduire en insérant la fonction anonyme suivante entre les deux nombres:⍵\a
développer * les colonnes de a en fonction du bon argument⍺⍀a
développer * les lignes de cela selon l'argument de gauche* 0 insère une colonne / ligne de zéros, 1 insère une colonne / ligne de données d'origine
la source
Java 8,
183166162129 octetsEntrée et sortie en tant que
int[][]
.-33 octets en créant un port de la réponse C # de @auhmaan .
Explication:
Essayez ici.
la source
J , 24 octets
Essayez-le en ligne!
la source
05AB1E , 22 octets
Essayez-le en ligne!
Utilise réellement le même morceau de code 2x, je peux donc le stocker en tant que chaîne et utiliser Eval pour -10 octets.
la source