J'ai écrit quelques défis liés aux matrices, et commun à tous, c'est que j'utilise un format comme celui ci-dessous pour représenter les matrices, à la fois dans les exemples et dans les cas de test:
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
Il s'agit probablement d'un format encombrant dans de nombreuses langues.
Défi:
Écrivez un programme / une fonction qui peut prendre une matrice sur la forme donnée en haut comme entrée (directement copiée / collée à partir de ce post), et sortir la même matrice sur les trois autres formats conventionnels illustrés ci-dessous .
Le format d'entrée:
Des nombres séparés par un nombre variable d'espaces et des retours à la ligne pour représenter les lignes (voir les cas de test).
- Le nombre d'espaces entre les nombres n'est pas garanti pour être cohérent. Vous pouvez cependant supposer que le dernier chiffre de chaque colonne s'aligne (si cela peut aider).
- Il peut y avoir à la fois des entiers et des flottants, et ils peuvent être positifs, négatifs ou nuls. Une matrice ne contiendra pas d'entiers et de flottants en même temps.
- Vous pouvez supposer qu'aucun nombre ne dépasse 10 caractères, y compris le point négatif et décimal pour les flottants négatifs.
- Vous pouvez supposer qu'il y a le même nombre d'entrées dans chaque ligne et dans chaque colonne.
- Il n'y aura pas de matrices d'entrée vides, mais il peut y avoir des nombres simples ou des matrices avec une seule ligne ou colonne.
- Dans ces cas, vous pouvez choisir entre les formats de sortie affichés dans les cas de test
Votre programme / fonction doit gérer l'entrée si elle est directement copiée de ce message et collée dans l'interpréteur (STDIN ou comme argument de fonction ou quelque chose d'équivalent). Vous pouvez avoir tout ce que vous voulez (crochets, guillemets, parenthèses) devant et / ou après la matrice, mais vous devez considérer la matrice comme une séquence de caractères qui ne peut pas être modifiée (y compris les nouvelles lignes).
Pour clarifier: Supposons que votre fonction / programme est appelé f
et que la matrice est:
1 -2
3 5
6 7
alors vous pouvez donner à la matrice des arguments de fonction comme celui-ci (et infiniment d'autres options):
f(1 -2
3 5
6 7)
f([1 -2
3 5
6 7])
f("""1 -2
3 5
6 7""")
Si votre langue ne peut, en aucune façon, prendre la matrice copier / coller comme entrée, alors je crains que vous ne deviez choisir une autre langue.
Le format de sortie:
Vous devez sortir la matrice dans les trois formats suivants (l'ordre n'a pas d'importance):
[[16, 2, 3, 13], [5, 11, 10, 8], [9, 7, 6, 12], [4, 14, 15, 1]]
{{16, 2, 3, 13}, {5, 11, 10, 8}, {9, 7, 6, 12}, {4, 14, 15, 1}}
[16, 2, 3, 13; 5, 11, 10, 8; 9, 7, 6, 12; 4, 14, 15, 1]
- Vous pouvez séparer les trois sorties comme vous le souhaitez (par exemple une nouvelle ligne)
- Vous devez sortir les nombres en utilisant la même précision que l'entrée (par exemple, vous ne devez pas couper le nombre de décimales, ni sortir les entiers sous forme de flottants).
- Les espaces sont obligatoires
- Vous devez utiliser
-
pour les nombres négatifs, non_
ou similaires.
Cas de test:
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
----
[[16, 2, 3, 13], [5, 11, 10, 8], [9, 7, 6, 12], [4, 14, 15, 1]]
{{16, 2, 3, 13}, {5, 11, 10, 8}, {9, 7, 6, 12}, {4, 14, 15, 1}}
[16, 2, 3, 13; 5, 11, 10, 8; 9, 7, 6, 12; 4, 14, 15, 1]
0.14778 0.27114 0.24415
0.45997 0.12287 0.67470
0.28945 0.37928 0.51887
----
[[0.14778, 0.27114, 0.24415], [0.45997, 0.12287, 0.6747], [0.28945, 0.37928, 0.51887]]
{{0.14778, 0.27114, 0.24415}, {0.45997, 0.12287, 0.6747}, {0.28945, 0.37928, 0.51887}}
[0.14778, 0.27114, 0.24415; 0.45997, 0.12287, 0.6747; 0.28945, 0.37928, 0.51887]
-0.0398301 0.2403455 -0.2253368 0.3565870 0.0605803 0.0830780
-0.3254422 -0.1185191 -0.2989537 0.1647319 0.3621135 0.2018815
-0.0022281 -0.3362287 -0.3568447 0.4419063 0.3801872 -0.2847033
---
[[-0.0398301, 0.2403455, -0.2253368, 0.3565870, 0.0605803, 0.0830780], [-0.3254422, -0.1185191, -0.2989537, 0.1647319, 0.3621135, 0.2018815], [-0.0022281, -0.3362287, -0.3568447, 0.4419063, 0.3801872, -0.2847033],]
{{-0.0398301, 0.2403455, -0.2253368, 0.3565870, 0.0605803, 0.0830780}, {-0.3254422, -0.1185191, -0.2989537, 0.1647319, 0.3621135, 0.2018815}, {-0.0022281, -0.3362287, -0.3568447, 0.4419063, 0.3801872, -0.2847033},}
[-0.0398301, 0.2403455, -0.2253368, 0.3565870, 0.0605803, 0.0830780; -0.3254422, -0.1185191, -0.2989537, 0.1647319, 0.3621135, 0.2018815; -0.0022281, -0.3362287, -0.3568447, 0.4419063, 0.3801872, -0.2847033]
0 4 1 0
0 0 -6 0
0 1 4 -3
2 0 0 8
0 0 0 0
----
[[0, 4, 1, 0], [0, 0, -6, 0], [0, 1, 4, -3], [2, 0, 0, 8], [0, 0, 0, 0]]
{{0, 4, 1, 0}, {0, 0, -6, 0}, {0, 1, 4, -3}, {2, 0, 0, 8}, {0, 0, 0, 0}}
[0, 4, 1, 0; 0, 0, -6, 0; 0, 1, 4, -3; 2, 0, 0, 8; 0, 0, 0, 0]
1
----
[1] (or [[1]])
{1} (or {{1}})
[1] (or 1)
1 2
----
[1, 2] (or [[1, 2]])
{1, 2} (or {{1, 2}})
[1, 2]
4
5
----
[[4], [5]]
{{4}, {5}}
[4; 5]
Je suis pleinement conscient de cela , mais dans ce défi, le format d'E / S encombrant est tout l'intérêt. Le défi consistera à formater la sortie dans certaines langues, tandis que la lecture de l'entrée sera la partie la plus difficile dans d'autres langues.
Ne vous découragez pas si la lecture de l'entrée est difficile, ces soumissions pourraient être les plus intéressantes. Court n'est pas nécessairement le même qu'impressionnant. Et comme toujours, les explications sont encouragées!
Japt ,
6353 octetsCela arrivait à 44 octets avant de remarquer que l'espacement dans la sortie était obligatoire.
Essaye-le
Explication
la source
Perl 5 , 71 octets
69 octets de code +
-p0
drapeaux.Essayez-le en ligne!
Explications
s/^ *(.+)/[$1]/gm;
ajoute[]
autour de chaque ligne tout en supprimant les espaces de tête.s/\s+/, /g;
remplace les séries d'espaces et de nouvelles lignes par une virgule et un espace.La première sortie est alors obtenue en l' entourant avec des accolades:
[$_]
.Le second doit remplacer les accolades par des accolades (
y/[]/{}/r
) et entourer par des accolades"{" ... "}"
.Pour le troisième,
], [
sont remplacés par un point-virgule et un espace (s/], \[/; /gr
).Après avoir écrit cette solution, j'ai essayé d'adapter la réponse Retina de Martin Ender, mais cela a fini par 10 octets de plus ( TryItOnline ):
Pour cette version, voir la réponse de Martin pour les explications.
la source
MATL , 60 octets
Essayez-le en ligne!
Merci beaucoup à Luis Mendo d'avoir rasé un quart de mon bytecount dans une masterclass sur le chat.
Collez l'entrée, suivie d'une ligne vide.
la source
05AB1E ,
4544 octetsEssayez-le en ligne!
Première sortie
Deuxième sortie
Troisième sortie
la source
Python 2 , 143 octets
Essayez-le en ligne!
la source
Javascript (ES6),
121110106 octets-15 octets grâce à @Shaggy et @Justin
Exemple d'extrait de code:
la source
map(x=>x.trim().replace(/ +/g,", "))
àmap(x=>x.match(/\S+/g).join`, `)
.Python 2 ,
163152 152150145 octets-5 octets merci à Felipe Nardi Batista qui a suggéré l'utilisation de splats (désolé, j'ai juste besoin d'une excuse pour dire ce mot: P).
Essayez-le en ligne!
la source
Python 3 ,
184 178 174 173 173 169 163 * 157 *153 octetsFormat d'entrée / sortie: sortie avec un espace entre les matrices et entrée avec cet appel de fonction (comme indiqué sur TIO):
Voici la fonction:
Essayez-le en ligne!
* Sauvegardé 6 octets grâce à @officialaimm (de 169 à 163 octets).
* Sauvegardé 4 octets grâce à @FelipeNardiBatista.
Explication à venir après un nouveau golf.
la source
C, 415 octets
C'est un monstre et waaayyyy trop longtemps, mais j'en ai fini avec. Aurait probablement dû opter pour une approche différente.
Essayez-le en ligne!
Deuxième cas de test | Troisième cas de test | Quatrième cas de test | Cinquième cas de test | Sixième cas de test | Septième cas de test
la source
Gelée , 37 octets
Un programme complet imprimant les trois formats sur trois lignes.
Essayez-le en ligne!
Comment?
la source
V , 41 octets
Essayez-le en ligne!
Explication
la source
R , 132 octets
Essayez-le en ligne!
une fonction anonyme. Prend l'entrée comme
Il les imprime dans le même ordre que les cas de test, mais avec des espaces comme séparateur.
Explication:
Il échange d'abord les espaces avec
,
et enregistre le résultat sousy
. Ensuite, il échange les sauts de ligne avec], [
, met[[
et]]
à chaque extrémité, et enregistre le résultat de cela sousz
.Prochain,
chartr
bascule[
avec{
et]
avec}
dansz
.Enfin, il prend
y
, échange de nouvelles lignes avec;
et met[
et]
à chaque extrémité.Ensuite, tous les résultats sont passés dans cet ordre dans
cat
lequel ils sont imprimés, tous bien formatés et séparés par un seul espace.Légèrement non golfé:
la source
Java 8 avec Netbeans 8+, 209 octets
Le nombre est de 208 à partir du code, plus 1 octet pour l'exécuter en appuyant sur
F6
.Réponse lourde pour défi encombrant: p
Comment utiliser?
Dans Netbeans, collez ce code dans un fichier appelé
M.java
. Copiez ensuite la matrice que vous souhaitez utiliser. Puis entre les deux caractères consécutifs""
, appuyez surctrl
+v
comme requis par le défi.Maintenant, appuyez sur
F6
! Cela compilera le code, l'exécutera et affichera les représentations matricielles attendues.la source
\n
, ce qui rend le résultat ce que tu as vu. Donc je ne comprends pas très bien, pour être franc: sMathematica, 129 octets
Les troisième et quatrième lignes définissent ensemble une fonction pure prenant une chaîne en entrée; par exemple, si nous définissons
f=Print...&
, le dernier cas de test sera appelé comme:L'extrait
analyse la chaîne d'entrée comme une matrice (de chaînes - nous n'essayons jamais d'interpréter les entrées comme des quantités numériques) et reconvertit l'expression résultante en chaîne; cela génère automatiquement le format de sortie avec des accolades.
Print[#,n,#~r~{"{"->"[","}"->"]"},n,#~r~{"{{"->"[","}}"->"]","}, {"->"; "}]
Imprime ensuite ce format de sortie et les deux autres, séparés par des retours à la ligne, en utilisant des règles de remplacement de chaîne simples.la source
Pip ,
4946 octets45 octets de code, +1 pour l'
-r
indicateur.Prend l'entrée de stdin. Essayez-le en ligne!
Explication
(Ce format d'explication me semble un peu compliqué, alors faites-moi savoir si quelque chose n'a pas de sens.)
la source
SCALA, 590 octets
C'était dur, mais je pense que j'en ai fini avec ça
Explication rapide: je prends une entrée entourée de guillemets triples, puis je supprime les espaces non requis; diviser la chaîne deux fois (une fois pour les lignes et une fois pour les colonnes); et j'imprime avec mes trois routines. Il serait peut-être possible de définir une fonction à mutualiser, mais je ne sais pas comment.
Essayez-le en ligne!
la source
05AB1E , 34 octets
Essayez-le en ligne!
ε...}
a été remplacé parvy...})
sur TIO car il n'y a pas encore été retiré.la source
C # (.NET Core) , 214 octets
Essayez-le en ligne!
Prend la matrice sous forme de chaîne, renvoie les trois formats sous la forme d'une chaîne unique séparée par des retours à la ligne.
la source
using System.Text.RegularExpressions
est nécessaire en ajoutant (à mon avis) 37 octets supplémentaires.Fusain , 38 octets
Essayez-le en ligne! Remarque: Espace de fin. Le lien est vers la version détaillée du code. Le charbon de bois a une option d'entrée multiligne délimitée à l'aide de
["""
et"""]
. Explication:Cela prend l'entrée et la prépare en la divisant en lignes et en normalisant les séparateurs.
Cela gère les cas
[[ ... ], [ ... ]]
et{{ ... }, { ... }}
.Cela gère la
[ ... ; ... ]
cas.Avant de jouer un octet sur la solution ci-dessus, j'avais deux solutions de 39 octets; c'est l'autre:
Essayez-le en ligne! Remarque: Espace de fin. Le lien est vers la version détaillée du code. Explication:
la source