Ваша задача состоит в том, чтобы проанализировать ввод и вывод формулы для n-го члена, если это арифметическая последовательность, в противном случае она должна вывести «NAAP».
вход
Ввод (из STDIN) будет состоять из нескольких чисел, от 4 до 10 чисел, где каждое число будет в диапазоне от -1000 до 1000 включительно, разделенных разделителем (пробел, запятая или точка с запятой [в зависимости от того, что ваши предпочтения]). Вот несколько примеров ввода.
12,14,16,18 //valid
-3 4 5 1 -2 -4 //valid
45;35;-35 //invalid (only three numbers are present instead of the minimum of 4 numbers)
2,32;21,321 //invalid (it uses two different delimiters: `,` and `;`)
Выход
Программа должна сначала проверить, является ли ввод арифметической прогрессией или нет.
Арифметические прогрессии (AP) в двух словах: у каждого AP будет общая разница. В этом разница между $ n $ и $ {n-1} $ th членами (в основном $ a (n + 1) - a (n) $ где a
- функция для последовательности). Эта разница остается неизменной для любого значения $ n $ в точке доступа. Если нет общей разницы, то это не арифметическая последовательность. Чтобы вычислить значение n-го члена, используйте эту формулу $ a (n) = a (1) + (n-1) d $, где $ a (1) $ - первое слагаемое, а $ d $ - общее разница.
Если это не арифметическая прогрессия, то программа должна напечатать сообщение об ошибке «NAAP» (сокращение от «Not An Arithmetic Progression»).
Если это является арифметической прогрессией, то программа должна напечатать упрощенную п-й член последовательности к STDOUT.
Пример:
> 1,3,5,7,9
2n-1
Пояснение: Это AP, потому что есть общая разница ($ 3 - 1 = 2 $). Тогда вы используете формулу $ a (n) = a (1) + (n-1) d $
Поэтому вывод есть 2n-1
(обратите внимание на отсутствие пробелов)
Стандартные лазейки по умолчанию запрещены.
Вы можете создать функцию, если хотите (с массивом чисел в качестве параметра). Если нет, то вы должны создать полную программу, которая принимает входные данные в виде строки или массива и выводит соответственно.
Тестовые случаи:
1.
1,3,5,7,9
2n-1
2.
1 3 12312 7 9
NAAP
3.
-6;8;22;36;50
14n-20
4.
5,1,-3,-7,-11,-15
-4n+9
5.
-5,-7,-9,-11,-13,-15
-2n-3
6.
3,3,3,3,3,3,3,3,3
0n+3
7.
-4,-5,-6,-7
-1n-3
Это код-гольф, поэтому выигрывает самый короткий код в байтах! (извините за плохую математику)
Любые предложения приветствуются!
источник
0,0,0,0
и3,1,-1,-3,-5
арифметические прогрессии? Если так, то я думаю, что они были бы хорошими тестовыми примерами, поскольку они нарушили метод, который я пробовал.Ответы:
Pyth, 30 байт
Тестирование
Чтобы проверить, является ли это арифметическим процессом, используется векторизованное вычитание между каждым элементом и предыдущим
-VtQQ
. Троичный проверяет наличие нескольких значений в result (?tJ{
) и печатает,NAAP
если так. Затем, чтобы получить+
или-
правильно, используется форматирование%+d
.источник
Haskell, 103 байта
Пример использования:
Как всегда в Haskell, необычное форматирование вывода (например, смешивание чисел со строками) потребляет много байтов (около 40). Логика программы довольно компактна:
источник
TI-BASIC, 70 байтов
Чтобы исправить отсутствие преобразования чисел в строку в TI-BASIC, используется вывод на graphscreen (
Text(
), если последовательность является арифметической, которая автоматически объединяет аргументы вместе.Это предполагает, что отрицательные числа вводятся с использованием символа высокого минуса TI-BASIC (который выглядит немного похоже
⁻
), а не двоичного знака минуса. Однако вывод использует двоичный знак минус.источник
Japt ,
605251 байтПопробуйте онлайн!
Ввод может быть сделан с любым разделителем, который вам нравится, так как именно так устроен переводчик;)
Неуправляемый и объяснение
источник
Matlab, 103 байта
источник
CJam, 38 байт
Это анонимная функция, которая принимает массив в стеке в качестве входных данных и оставляет строку в стеке в качестве выходных данных. Попробуйте онлайн с дополнительным кодом ввода / вывода для тестирования.
Объяснение:
источник
JavaScript (ES6), 91 байт
объяснение
Тест
источник
Perl 6,
123102101 байтРЕДАКТИРОВАТЬ: не отрицать разницу
РЕДАКТИРОВАТЬ: использовать анонимные суб, логические операторы и интерполяцию строк. Спасибо Брэд Гилберт b2gills
Тестовая программа (читает со стандартного ввода):
Объяснение:
источник
sub f
. Также, если бы вы использовали@_
вместо@a
вас, вы бы сохранили несколько байтов.{my@b=@_.rotor...
, Кроме того, вы не должны ставить скобки вокруг условияif
оператора, это не Perl 5. Если вы измените этоif
значение,@b.end&&"NAAP"||$_=...
вы сэкономите еще несколько байтов. Вы также можете покончить с последнимif
оператором, если используете"@b[0]n{'+'x($_>=0)}$_"
вместо этого, сохранив 4 байта.sub
в начале, без этого он становится анонимным блоком. Кроме того, чтобы вы знали, я бы не подумал об использовании, которое.map({[-] $_})
я, вероятно, использовал бы».map(*-*).flat
дольше, теперь я должен просмотреть свои собственные записи, чтобы посмотреть, смогу ли я сократить его с помощью вашего трюка.Рубин,
957876 байт78 байт
95 байт
Ungolfed:
Использование:
источник
Python 3, 92 байта
На основании моего ответа из Find the Sequence
def m(t):s=str;a=t[0];b=t[1];q=b-a;return((s(q)+'n'+'+'*(0<a-q)+s(a-q)),'NAAP')[t[2]/b==b/a]
источник