В этом задании вы будете распределять продукт по суммам и разницам чисел, как описано здесь .
Примеры
Input | Output
-------------|-------------
23(12+42) | (23*12)+(23*42)
9(62-5) | (9*62)-(9*5)
4(17+8-14) | (4*17)+(4*8)-(4*14)
15(-5) | -(15*5)
2(3) | (2*3)
8(+18) | +(8*18)
8(-40+18) | -(8*40)+(8*18)
Технические характеристики
На входе будет строка вида n(_)
с единственным положительным целым числом без знака, n
за которым следует выражение в скобках _
. Это выражение _
будет состоять из сумм и разности одной из более положительно целочисленных терминов , разделенного +
и -
признаков. Первому термину может предшествовать +
знак, -
знак или знак.
В выходных данных начальное число n
должно быть распределено для умножения каждого из членов. Каждый член a
должен быть умножен на лево, n
чтобы получить заключенное в скобки выражение (n*a)
, и эти новые термины должны быть объединены +
и -
подписаны точно так же, как и исходные термины.
Неверные входы
Это примеры входных данных, которые вам не нужно обрабатывать.
3(5 plus 3)
6(5 13)
(5+8)(6+6)
(5+3)8
выигрыш
Это код-гольф , поэтому выигрывает самый короткий код в байтах.
источник
8(-40+18)
Ответы:
Пип, 28 байт
Объяснение:
Объекты Pattern Pip в основном следуют синтаксису регулярных выражений Python, но
&
шаблон замены заимствован из sed.Узнайте больше о Pip в хранилище Github
источник
JavaScript 65 байт
Это примет участие. Получите + или -, затем цифры, затем замените их в правильном порядке.
объяснение
использование
Это работает только в Firefox и Safari Nightly, может быть, Edge? потому что он использует функции ES6. Вы можете запустить его:
источник
(.?)(\d+)
сломан. Это терпит неудачу23(12+42)
, производя1(23*2)+(23*42)
.\D?
может быть использован вместо[+-]?
Python 2.7,
110108 байтПрограмма принимает входные данные из stdin, ищет совпадения с -
([+-]?)(\d+)
regex и создает выходную строку.Тестирование это -
источник
Сетчатка , 40 байт
Каждая строка должна идти в свой собственный файл, но вы можете запустить код как один файл с
-s
флагом. Например:Первые две строки помещают множитель рядом с каждым числом в ожидаемой форме:
Последние две строки удаляют ненужную завершающую часть:
источник
sed, 105 байт
Просто хотел посмотреть, можно ли это сделать с помощью sed.
Может быть, немного старой школы, но это работает.
источник
RS , 77 байт
Живая демоверсия и все тестовые случаи.
Это первый раз, когда макросы RS действительно используются!
источник
REGXY , 45 байт
Использует REGXY, язык подстановки регулярных выражений.
источник
//
работает? Я полагаю, что это происходит до вершины, пока строка не изменится, но я не могу найти на странице esolang, почему.//
создается бесконечный цикл, посколькуnothing
он всегда будет совпадать, поэтому мы всегда возвращаемся к первой строке.Perl, 36 байт
35-байтовый код + 1-байтовая командная строка
Использование:
источник
Pyth,
3938 байтУжасное решение для регулярных выражений:
источник
Рубин, 94 байта
источник
CJam, 50 байтов
Попробуйте онлайн
CJam не имеет поддержки регулярных выражений или чего-либо, кроме поиска и разбиения строк, что очень удобно для разбора выражений. Так что здесь есть немного труда.
Объяснение:
источник
поглазеть -
6058Фу ... давно не работал с регулярным выражением.
источник
Perl 5,
70605544 байта + 1 штрафРешение Perl, которое использует только split и 1 регулярное выражение.
Также рассчитывает более длинные входы.
Тест
Версия, которая принимает параметр
Версия, которая использует только регулярные выражения.
Этот работает через группу захвата в пределах положительного взгляда и ленивого соответствия. Вероятно, использовал бы позитивный взгляд назад, если бы Perl 5 поддерживал это, но увы. Мне потребовалось время, чтобы понять, что это возможно с помощью регулярных выражений.
источник
-p
опцию командной строки (я думаю, что это +1 символ против 9 для,<>
и;print
), так какsplit
будет работать$_
по умолчанию (что будет в любом месте<>
), и печать также включена в цикл ! Надеюсь, это поможет!Retina ,
505143 байтаЯ думаю, что это может быть моей первой программой Retina. Если нет, то это моя первая программа Retina, которая такая сложная (на самом деле не такая уж сложная). Каждая строка идет в своем собственном файле.
Я на самом деле не тестировал это с Retina, я тестировал его с помощью тестера regex-replace несколько раз, но он должен работать.
Описание для первого примера:
Поскольку существует четное количество файлов, Retina использует режим замены. Первая замена (первые два файла) удаляет номер, подлежащий распределению, и добавляет эту пару распределения
(23*12)
в конец, давая23(+42)(23*12)
.+`
в начале говорит Retina многократно заменять, пока шаблон не совпадает, и так как это снова сопоставляется, шаблон заменяет это на23()(23*12)+(23*42)
. Это больше не соответствует, поэтому следующие 2 файла используются для следующей замены. На этот раз он просто удаляет23()
. Это хорошо работает: поскольку продукты добавляются в конец, мне не нужно делать ничего странного, если число не имеет знака, так как единственным, который может быть без знака, является первое число.РЕДАКТИРОВАТЬ:
$'
в замене представляет остальную часть строки после матча, так что я могу удалить конечные(.*)
s.источник
к, 98 байт
Не очень в гольфе.
Разделите на нецифровые символы, удалите парены, удалите пустые строки, затем сохраните
x
константу в качестве первой строки, объедините*
с каждой оставшейся строкойy
, заключите в скобки и переместите знак в начало, если оно есть; свести вывод в одну строку.источник