Я написал несколько проблем, связанных с матрицами, и общим для всех является то, что я использую формат, подобный приведенному ниже, при представлении матриц как в примерах, так и в тестовых примерах:
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]
Я полностью осознаю это , но в этом вызове громоздкий формат ввода-вывода - это весь смысл. Задача будет заключаться в форматировании вывода на некоторых языках, в то время как чтение ввода будет самой сложной частью на других языках.
Пожалуйста, не расстраивайтесь, если читать входные данные сложно, эти материалы могут быть наиболее интересными. Короткие не обязательно такие же впечатляющие. И как всегда, объяснения приветствуются!
Japt ,
6353 байтаЭто входило в 44 байта, прежде чем я заметил, что интервал в выходных данных был обязательным.
Проверь это
объяснение
источник
Perl 5 , 71 байт
69 байтов кода +
-p0
флаги.Попробуйте онлайн!
Пояснения
s/^ *(.+)/[$1]/gm;
добавляет[]
вокруг каждой строки при удалении ведущих пробелов.s/\s+/, /g;
заменяет пробелы и символы новой строки запятой и пробелом.Первый выход затем получается путем окружения с фигурными скобками:
[$_]
.Второй необходимо заменить фигурные скобки с фигурными скобками (
y/[]/{}/r
) и окружить фигурными скобками"{" ... "}"
.В-третьих,
], [
заменяются точкой с запятой и пробелом (s/], \[/; /gr
).После написания этого решения я попытался добавить ответ Retina Мартина Эндера, но он оказался на 10 байт длиннее ( TryItOnline ):
Для этой версии см. Ответ Мартина для объяснений.
источник
MATL , 60 байт
Попробуйте онлайн!
Огромное спасибо Луису Мендо за то, что он сбрил четверть моего байтаунта на мастер-классе в чате.
Вставьте ввод, а затем пустую строку.
источник
05AB1E ,
4544 байтаПопробуйте онлайн!
Первый вывод
Второй выход
Третий выход
источник
Python 2 , 143 байта
Попробуйте онлайн!
источник
Javascript (ES6),
121110106 байт-15 байт благодаря @Shaggy и @Justin
Пример кода:
источник
map(x=>x.trim().replace(/ +/g,", "))
наmap(x=>x.match(/\S+/g).join`, `)
.Python 2 ,
163152150145 байт-5 байт благодаря Фелипе Нарди Батисте, который предложил использовать знаки (извините, мне просто нужно оправдание, чтобы произнести это слово: P).
Попробуйте онлайн!
источник
Python 3 ,
184 178 174 173 169 163 * 157 *153 байтаФормат ввода / вывода: вывод с пробелом между матрицами и ввод с помощью вызова этой функции (как показано на TIO):
Это функция:
Попробуйте онлайн!
* Сохранено 6 байтов благодаря @officialaimm (от 169 до 163 байтов).
* Сохранено 4 байта благодаря @FelipeNardiBatista.
Объяснение, чтобы прийти после дальнейшего игры в гольф.
источник
C 415 байт
Это чудовище и ваааыыы слишком длинные, но я с этим покончил. Наверное, должен был пойти по другому пути.
Попробуйте онлайн!
Второй контрольный пример | Третий контрольный пример | Четвертый контрольный пример | Пятый контрольный пример | Шестой контрольный пример | Седьмой контрольный пример
источник
Желе , 37 байт
Полная программа печати трех форматов в три строки.
Попробуйте онлайн!
Как?
источник
В , 41 байт
Попробуйте онлайн!
объяснение
источник
R , 132 байта
Попробуйте онлайн!
анонимная функция. Принимает вход как
Он печатает их в том же порядке, что и контрольные примеры, но с пробелами в качестве разделителя.
Объяснение:
Сначала он обменивается пробелами
,
и сохраняет результат какy
. Затем он меняет строки на новые], [
, ставит[[
и]]
с обоих концов, и сохраняет результат какz
.Далее
chartr
переключается[
с{
и]
с}
вz
.Наконец, он берет
y
, меняет строки с;
и ставит[
и]
на любом конце.Затем все результаты передаются в том порядке, в
cat
котором они распечатаны, все красиво отформатированы и разделены одним пробелом.Слегка разряженный
источник
Java 8 с NetBeans 8+, 209 байт
Количество составляет 208 от кода, плюс 1 байт, чтобы запустить его, нажав
F6
.Громоздкий ответ на громоздкий вызов: p
Как пользоваться?
В Netbeans вставьте этот код в файл с именем
M.java
. Затем скопируйте матрицу, которую вы хотите использовать. Затем между двумя последовательными символами""
нажмитеctrl
+v
как того требует задание.Теперь нажмите
F6
! Это скомпилирует код, запустит его и выведет ожидаемые матричные представления.источник
\n
, что делает результат что ты видел Так что я не совсем понимаю,Mathematica, 129 байт
Третья и четвертая строки вместе определяют чистую функцию, принимающую строку в качестве входных данных; например, если мы установим
f=Print...&
, то последний контрольный пример будет называться как:Фрагмент
анализирует входную строку как матрицу (из строк - мы никогда не пытаемся интерпретировать записи как числовые величины) и преобразует полученное выражение обратно в строку; это автоматически генерирует выходной формат с фигурными скобками. Затем
Print[#,n,#~r~{"{"->"[","}"->"]"},n,#~r~{"{{"->"[","}}"->"]","}, {"->"; "}]
печатает этот выходной формат и два других, разделенных символами новой строки, используя простые правила замены строк.источник
Пип ,
4946 байт45 байт кода, +1 для
-r
флага.Принимает ввод от стандартного ввода. Попробуйте онлайн!
объяснение
(Этот формат объяснения кажется мне немного запутанным, поэтому дайте мне знать, если что-то не имеет смысла.)
источник
СКАЛА, 590 байт
Было тяжело, но я думаю, что с этим покончено
Краткое объяснение: я беру ввод, заключенный в тройные кавычки, затем убираю ненужные пробелы; разбить строку два раза (один раз для строк и один раз для столбцов); и я печатаю с моими тремя процедурами. Может быть возможно определить функцию для взаимной привязки, но я не знаю как.
Попробуйте онлайн!
источник
05AB1E , 34 байта
Попробуйте онлайн!
ε...}
был замененvy...})
на TIO, так как там его еще не вытащили.источник
C # (.NET Core) , 214 байтов
Попробуйте онлайн!
Принимает Матрицу в виде строки, возвращает три формата в виде одной строки, разделенной символами новой строки.
источник
using System.Text.RegularExpressions
требуется оператор, добавляющий (по моим подсчетам) 37 дополнительных байтов.Древесный уголь , 38 байт
Попробуйте онлайн! Примечание: конечный пробел. Ссылка на подробную версию кода. У древесного угля есть опция многострочного ввода, разделенная с помощью
["""
и"""]
. Объяснение:Он принимает входные данные и подготавливает их, разбивая их на строки и нормализуя разделители.
Это обрабатывает
[[ ... ], [ ... ]]
и{{ ... }, { ... }}
случаи.Это обрабатывает
[ ... ; ... ]
дело.До того, как я проиграл один байт вышеупомянутому решению, у меня было два 39-байтовых решения; это другой:
Попробуйте онлайн! Примечание: конечный пробел. Ссылка на подробную версию кода. Объяснение:
источник