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!