Получив список с номером, выведите следующие диапазоны:
Вход: [0, 5, 0]
станет [0, 1, 2, 3, 4, 5, 4, 3, 2, 1, 0]
.
Это отображение диапазона через массив, так что мы должны сначала создать диапазон [0, 5]
, который [0, 1, 2, 3, 4, 5]
. После этого мы используем 5
для создания диапазона [5, 0]
. Добавленный в нашем предыдущем диапазоне, это дает нам:
[0, 1, 2, 3, 4, 5, 4, 3, 2, 1, 0]
Давайте посмотрим на тестовый пример с двумя одинаковыми цифрами рядом друг с другом:
[3, 5, 5, 3], ranges:
[3, 5] = 3, 4, 5
[5, 5] = 5 (actually [5, 5] due to overlapping)
[5, 3] = 5, 4, 3
Так что это даст нам [3, 4, 5, 5, 4, 3]
.
Некоторые другие тестовые случаи:
[1, 9] > [1, 2, 3, 4, 5, 6, 7, 8, 9]
[10, -10] > [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10]
[3, 0, 0, -3] > [3, 2, 1, 0, 0, -1, -2, -3]
[1, 3, 5, 7, 5, 3, 1, -1, -3] > [1, 2, 3, 4, 5, 6, 7, 6, 5, 4, 3, 2, 1, 0, -1, -2, -3]
На входе всегда будет как минимум 2 целых числа.
Кратчайший ответ выигрывает!
code-golf
array-manipulation
Lamaro
источник
источник
Ответы:
05AB1E, 1 байт
Попробуйте онлайн!
Как это устроено
Это встроенный.
источник
Javascript,
999593 байта46 байтов от спасибо @Neil .источник
y<b?b-y:y-b||1
. Сохраните другой байт с помощьюy>b||y-b&&-1
.y<b?-1:y>b
еще лучше.JavaScript (SpiderMonkey 30+),
8176 байтПротестировано в Firefox 44. Использует потрясающие возможности ES6 по уничтожению аргументов и понимание массивов ES7 (которые, к сожалению, были удалены из спецификации ES7).
источник
[3, 0, 0, -3]
. Я исправил RangeError и сохранил 10 байтов, но он все еще не работает:([n,...a],z=[n])=>z.concat([for(i of a)for(j of[...Array((r=n<i)?i-n-1:n-i-1),0])i=r?++n:--n])
([n,...a])=>[n].concat([for(i of a)for(j of[...Array((r=n<i)?i-n:n-i)])i=r?++n:--n])
конечно.JavaScript (ES6) 66
72Рекурсивная функция, которая многократно добавляет значения в массив, чтобы заполнить пробелы между близкими числами
Тестовое задание
источник
C 120 + 12 = 132 байта
Пример вызова:
Тест живи на идеоне .
источник
Python 2, 77 байт
Попробуйте онлайн
Спасибо Нилу, DenkerAffe и Эрвану за указание на улучшения, которые я пропустил
источник
+1
не нужно?lambda n:n[0:1]+sum([range(x,y,[1,-1][y+1<x])[1:]+[y]for(x,y)in zip(n,n[1:])],[])
? сохраняет несколько байтов.[1,-1][y+1<x]
на2*(y>x)-1
(также я не понимаю, почему вы используете,y<=x
а не простоy<x
)n[0:1]
эквивалентноn[:1]
.Perl, 47 байт
Включает +3 для
-p
(код содержит$'
пробел и-
счет тоже)Дайте список номеров на STDIN:
fluctuating.pl
:Временная переменная и все эти скобки кажутся неоптимальными ...
источник
$'
вы упомянули, не в коде ...Haskell,
6355 байтПример использования:
g [3,5,5,3]
->[3,4,5,5,4,3]
.Это модификация моего ответа на связанный вызов . Опять же, основная работа выполняется путем конкатенации списка
a
сверху внизb-1
иa
внизb+1
(где один список будет пустым) и рекурсивного вызова. Чтобы обработатьa==b
случай, когда оба списка пусты, мы добавляем,[a|a==b]
который оценивает,[a]
еслиa==b
и[]
иначе.источник
R
868275 байтсохранил 4 байта, используя rep, а не rep.int (код, гольф, а не производительность!) сохранил еще 7 байтов, используя встроенное частичное соответствие при использовании
$
(и свернув определение функции в 1 строкуисточник
(y=...)
, что не(y<-...)
является также действительным, и на один байт меньше.Рубин,
11682 байтаМой первый в мире гольф.
Изменить: Спасибо Manatwork за удивительные предложения.
источник
map
Блочный код «S может принимать массив в качестве нескольких параметров:->n{o,*m=n;o=[o];m.zip(n).map{|t,u|o+=u==t ?[u]:(u<t ?[*u+1..t]:[*t..u-1].reverse)};o}
. В противном случае хороший первый гольф.[[u],[*u+1..t],[*t..u-1].reverse][t<=>u]
.Japt , 12 байт
Сохранено 16 байтов благодаря @ETHproductions !
Протестируйте это онлайн
источник
Perl 6, 94 байта
Я не очень доволен этим прямо сейчас, я, вероятно, сделаю еще один выстрел позже
источник
PHP 5.4, 86 байт
Он предназначен для использования в качестве включенного файла, который возвращает результат.
Значения передаются как параметры командной строки.
Не совсем красиво или что-то еще, но делает работу.
источник
Python 3 , 76 байт
Первая попытка ответа на Python. Основная идея состоит в том, чтобы повторно идентифицировать пары в последовательности, где разница больше шага, и вставить один (и только один) дополнительный элемент для завершения последовательности в правильном направлении. Повторяйте, пока все различия между последовательными элементами не будут между +1 и -1.
Попробуйте онлайн!
источник
Луа, 156 байт
Функция, которая принимает массив в параметре и возвращает расширенный массив.
Неуправляемый и объяснения
Для простоты использования вы можете использовать следующую функцию для печати возвращаемого массива
f()
.При тестировании этого представления вы можете назвать его следующим образом:
источник
Mathcad, 62 "байта"
Поскольку Mathcad использует «белую доску» 2D и специальные операторы (например, оператор суммирования, интегральный оператор) и сохраняет в формате XML, фактическая рабочая таблица может содержать несколько сотен (или более) символов. Для целей Code Golf я взял число байтов Mathcad в качестве количества символов или операторов, которые пользователь должен ввести для создания таблицы.
Преобразование определения функции в прямую программу и замена переменной lst на имя одного символа дает в общей сложности 62 "байта". С помощью функции, использующей один символ, а не полное имя, это увеличивается до 65 «байтов» для определения и еще 4 «байтов» для каждого вызова (при условии, что создание самого списка не включено в общий байт count (использование встроенных таблиц Mathcad - еще один способ ввода списка).
источник
PHP, 144 байта
В разобранном виде Вход / вызов функции ВыходЭто грязно и коротко, и я постараюсь оптимизировать это позже. Он создает
range()
из каждой пары соседних пар значений, а затем объединяет их (послеpop
окончания предыдущего накопительного значенияArray
).источник
Perl6, 21
.join - это сокращение от $ _. join
Тест (ракудо)
Выход
источник
Желе , 10 байт
Попробуйте онлайн!
источник
R , 74 байта
Другое решение R
Попробуйте онлайн!
источник