Я написал несколько проблем, связанных с матрицами, и общим для всех является то, что я использую формат, подобный приведенному ниже, при представлении матриц как в примерах, так и в тестовых примерах:
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
Это, вероятно, громоздкий формат во многих языках.
Вызов:
Напишите программу / функцию, которая может принимать матрицу в форме, приведенной вверху, в качестве входных данных (непосредственно копировать / вставлять из этого поста) и выводить ту же матрицу для всех трех других обычных форматов, показанных ниже .
Формат ввода:
Числа, разделенные различным количеством пробелов, и новые строки для представления строк (см. Контрольные примеры).
- Количество пробелов между числами не гарантируется быть последовательным. Однако вы можете предположить, что последние цифры в каждом столбце совпадают (если это помогает).
- Могут быть как целые числа, так и числа с плавающей точкой, и они могут быть положительными, отрицательными или нулевыми. Матрица не будет содержать целые числа и числа с плавающей точкой одновременно.
- Вы можете предположить, что ни одно число не длиннее 10 символов, включая минус и десятичную точку для отрицательных чисел с плавающей запятой.
- Вы можете предположить, что в каждой строке и в каждом столбце одинаковое количество записей.
- Не будет никаких пустых входных матриц, но могут быть отдельные числа или матрицы только с одной строкой или столбцом.
- В этих случаях вы можете выбирать между форматами вывода, показанными в тестовых примерах.
Ваша программа / функция должна обрабатывать ввод, если он напрямую скопирован из этого поста и вставлен в интерпретатор (STDIN или как аргумент функции или что-то эквивалентное). Вы можете иметь все, что вам нравится (скобки, кавычки, круглые скобки) перед и / или после матрицы, но вы должны рассматривать матрицу как последовательность символов, которую нельзя изменить (включая символы новой строки).
Для пояснения: предположим, что ваша функция / программа вызывается f
и матрица:
1 -2
3 5
6 7
тогда вы можете дать матрицу в качестве аргументов функции следующим образом (и бесконечно много других опций):
f(1 -2
3 5
6 7)
f([1 -2
3 5
6 7])
f("""1 -2
3 5
6 7""")
Если ваш язык не может каким-либо образом принять скопированную / вставленную матрицу в качестве входных данных, то, боюсь, вам придется выбрать другой язык.
Формат вывода:
Вы должны вывести матрицу в следующих трех форматах (порядок не имеет значения):
[[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
----
[[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]
Я полностью осознаю это , но в этом вызове громоздкий формат ввода-вывода - это весь смысл. Задача будет заключаться в форматировании вывода на некоторых языках, в то время как чтение ввода будет самой сложной частью на других языках.
Пожалуйста, не расстраивайтесь, если читать входные данные сложно, эти материалы могут быть наиболее интересными. Короткие не обязательно такие же впечатляющие. И как всегда, объяснения приветствуются!