Не ненавидите, когда хотите скопировать и вставить список чисел (вектор, массив ...) из одной программы в другую, но формат, в котором у вас есть числа, не соответствует формату, в котором вы нуждаетесь ?
Например, в MATLAB у вас может быть список, разделенный пробелами, например:
[1 2 3 4 5] (you can also have it comma separated, but that's not the point)
В Python вам нужно будет ввести запятые, чтобы сделать этот список допустимым, поэтому вам придется преобразовать его в
[1, 2, 3, 4, 5]
чтобы это работало. В C ++ вы можете захотеть что-то вроде:
{16,2,77,29}
и так далее.
Чтобы упростить жизнь каждого, давайте создадим конвертер списков, который берет список в любом формате * и выводит список в другом указанном формате.
Допустимые скобки:
[list]
{list}
(list)
<list>
list (no surrounding brackets)
Допустимые разделители:
a,b,c
a;b;c
a b c
a, b, c <-- Several spaces. Must only be supported as input.
a; b; c <-- Several spaces. Must only be supported as input.
a b c <-- Several spaces. Must only be supported as input.
Обратите внимание, что входные данные могут иметь любое количество пробелов между числами, но выходные данные могут иметь нулевые пробелы (если ,
или ;
используется в качестве разделителя) или один пробел (если он разделен пробелами).
В дополнение к списку ввода будет строка (или два символа), определяющая формат вывода. Строка формата первой будет типом открывающей скобки (только), [
, (
, <
, {
или (последний из которых является единым пространство используется , когда нет окружающей скобки). Кронштейн типа будет сопровождаться типа разделителем,
,
, ;
или (последний из которых является один пробел). Два символа входного формата должны восприниматься как один аргумент (строка или два последовательных символа) в порядке, описанном выше.
Некоторые примеры форматных строк:
[, <-- Output format: [a,b,c]
{; <-- Output format: {a;b;c}
<-- Two spaces, output list has format: a b c
Правила:
- Выход не может иметь начальные пробелы
- Вывод может иметь завершающие пробелы и перевод строки
- На выходе должен быть только список чисел, а не
ans =
аналогичный
- На выходе должен быть только список чисел, а не
- Входными данными будут список целых или десятичных чисел (как положительных, так и отрицательных (и ноль)), а также строка из двух символов
- Если входные данные состоят только из целых чисел, список вывода должен содержать только целые числа. Если входной список состоит из целых и десятичных чисел, все выходные числа могут быть десятичными числами. (Необязательно хранить целые числа как целые числа)
- Максимальное количество цифр после запятой, которое должно поддерживаться, равно 3.
- На вход будет два аргумента. Т.е. числа находятся в одном аргументе, а строка формата - это единственный аргумент.
- Код может быть программой или функцией
- Ввод может быть аргумент функции или STDIN
Несколько примеров:
1 2 3 4
[,
[1,2,3,4]
<1; 2; 3>
; <-- Space + semicolon
1;2;3
not valid: 1.000;2.000;3.000 (Input is only integers => Output must be integers)
{-1.3, 3.4, 4, 5.55555555}
[,
[-1.300,3.400,4.000,5.556] (5.555 is also valid. Rounding is optional)
also valid: [-1.3,3.4,4,5.55555555]
Самый короткий код в байтах побеждает. Как всегда, победитель будет выбран через неделю после того, как был объявлен конкурс. Ответы, которые публикуются позже, все равно могут выиграть, если они короче текущего победителя.
Leaderboard
Фрагмент стека в нижней части этого поста создает каталог из ответов а) в виде списка кратчайшего решения для каждого языка и б) в качестве общей таблицы лидеров.
Чтобы убедиться, что ваш ответ обнаружен, начните его с заголовка, используя следующий шаблон уценки:
## Language Name, N bytes
где N
размер вашего представления. Если вы улучшите свой счет, вы можете сохранить старые результаты в заголовке, вычеркнув их. Например:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Если вы хотите включить в заголовок несколько чисел (например, потому что ваш результат равен сумме двух файлов или вы хотите перечислить штрафы за флаг интерпретатора отдельно), убедитесь, что фактический результат является последним числом в заголовке:
## Perl, 43 + 2 (-p flag) = 45 bytes
Вы также можете сделать имя языка ссылкой, которая будет отображаться во фрагменте кода:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
_
для обозначения отрицательных элементов. :(Ответы:
CJam, 27 байт
Попробуй это здесь.
объяснение
источник
JavaScript (ES6), 75
82Как анонимная функция
Редактирование: 2 байта сохранены thx @ user81655 (и еще 5, просто просматривая его)
Тестовый фрагмент
источник
CJam,
3534 байтаПроверьте это здесь.
Ожидается формат в первой строке и список во второй.
объяснение
источник
Pyth, 33 байта
Попробуйте онлайн: демонстрация или тестовый набор
Объяснение:
источник
PowerShell,
1081009585 байт(см. историю изменений для предыдущих версий)
Гольф еще 15 байтов, удаляя
$b
и$s
переменные и меняя парены на внутренней строке.Он принимает входные данные в виде двух строк и сохраняет их в,
$i
а$z
затем мы создаем новую выходную строку. Внутренние парены-split
с$i
регулярным выражением для выбора только числовых цифр, а затем-join
снова вместе с запрошенным разделителем. Мы объединяем это с первым символом ввода разделителя (например,[
) и закрываем его индексированием в строку, основанную на значении ASCII первого символа и некоторой хитрости формулировки. Внешний.Trim()
удаляет любые ведущие или конечные пробелы.источник
"]})>"["[{(< ".IndexOf($b[0])]
на что-то вроде' }) >]'[($b[0]-32)%6]
. Это($b[0]-32)%6
дает вам0,2,4,5,1
возможность открывать символы в скобках, которые вы можете использовать для индексации в строке закрывающей скобки' }) >]'
. Там может быть более короткая «формула», но это кажется достаточно хорошим.()
находился рядом друг с другом, но в других скобках есть символ между ними, поэтому я занялся индексированием. Благодарность!String.Replace()
вместо-replace
оператора даст вам еще 2 байта (не нужно экранировать или определять класс символов с помощью[]
).Replace('[]{}()<>;,',' ')
он не будет ловить отдельные символы, а вместо этого попытается сопоставить символическое целое, которого не существует. Нам нужно использовать Regex.Replace , который включает[regex]::
вызов .NET и вместо этого удлиняет код.-ne''
вместо|?{$_}
.Python 2, 96 байт
Звоните как:
Выход:
источник
JavaScript (ES6),
829211692 байтаАнонимная функция, запустите ее так
Это, вероятно, может быть дальше в гольф ..
Ungolfed
источник
The input will be a list of integer or decimal numbers (both positive and negative (and zero)), and a string of two characters
. Исправлено, спасибоMathematica, 108 байт
Mathematica обычно неуклюжа со строковыми входами, если строка не предназначена для интерпретации как текст.
объяснение
StringCases[t,NumberString]
возвращает список числовых строк.Riffle
вставляет разделители между числами./.Thread[c@"[ {<(" -> c@"] }>)"])
заменяет левую «скобку» на правую скобку.<>
это инфиксная формаStringJoin
. Склеивает подстроки.источник
Matlab, 85 байт
Пример использования:
источник
Юлия, 95 байт
Это функция,
f
которая принимает две строки и возвращает строку.Ungolfed:
источник
Bash + GNU Utilities, 90
источник