Шелуха
M
, 12 - 5 = 7 байт
Попробуйте онлайн!
Если удалить первые 5 байтов для присоединения, результат останется прежним.
╗
||answer||
n
, 5 байт Попробуйте онлайн!
(вернее, нет) За дополнительную плату 3 байта
(опять же не работает на TIO), можем получить 3 балла
n
||answer||
, 33 байта Это используетТехника Денниса Пита
[[1],[2,2],[3,3,3],[4,4,4,4],...]
, хотя это значительно дольше... Попробуйте онлайн! Предупреждение:
Для больших входных данных (<= 20) требуется некоторое время, и ваш браузер зависает до тех пор, пока это не произойдет.
n
Ungolfed и объяснение
k
||answer||
Версия для получения бонуса: (38 байт - 5 = 33)
2c3b3b3bbc603b75406ec728443b29606e2858586b60697540754
0783be4be3d5b5d29496960bb60a4bd4d604d3bb0704058272b6a
Юля, 92 байта ,;;;╝`;u@n╟(D;)`n(XXk`iu@u@x;Σ╛=[])Ii`╗`ñ╜M`M;░p@X'+j
.
Это анонимная функция, которая принимает целое число и возвращает массив. Чтобы вызвать его, дайте ему имя, например.
->n{([*1..n].permutation(2).map{|i,j|[*i..j]if(i..j).reduce(:+)==n}-[p]).max_by{|k|k.size}||n}[25]
=> [3, 4, 5, 6, 7]
||answer||
Не в гольфе:
-> n {
([*1..n].permutation(2).map { |i,j| # Finds all the possible sets of size 2
[*i..j] if(i..j).reduce(:+) == n # Adds a set to an array if sum of the set is n.
}-[p] # Removes nil from the array
).max_by { |k| # Finds the longest sequence
k.size
} || n # Returns n if no sequence found.
}
Рубин, 94 байта
->n{([*1..n].permutation(2).map{|i,j|[*i..j]if(i..j).reduce(:+)==n}-[p]).max_by{|k|k.size}||n}
Не в гольфе:
function f(x::Integer)
# Get all arrays of integers that sum to x
p = partitions(x)
# Filter these down to only consecutive runs by checking whether
# all differences are 1
t = filter(i -> all(j -> j == 1, diff(sort(i))), p)
# Find the index of the longest element of t
i = indmax(map(length, t))
return collect(t)[i]
end
||answer||
Использование:
f=x->...
Серьезно, 53 – 5 = 48 байт.
x->(t=filter(i->all(j->j==1,diff(sort(i))),partitions(x));collect(t)[indmax(map(length,t))])
Шестнадцатеричная свалка
Попробуйте онлайн!
Это подход грубой силы, похожий на метод Денниса Пита. 1oU à2 £W=Xg o1+Xg1¹x ¥U©W} rª ªU² q'+
just reads input 1oU à2 £ W=Xg o1+Xg1¹ x ¥ U© W} rª ª U
1oU à2 mXYZ{W=Xg o1+Xg1) x ==U&&W} r|| ||U
// Implicit: U = input integer
1oU à2 // Generate a range from 1 to U, and take all combinations of length 2.
mXYZ{ // Map each item X in this range to:
W=Xg o // Set variable W to the range of integers starting at the first item in X,
1+Xg1) // and ending at 1 + the second item in X.
x ==U&&W // If the sum of this range equals U, return W; otherwise, return false.
r|| // Reduce the result with the || operator, returning the first non-false value.
||U // If this is still false, there are no consecutive ranges that sum to U,
// so resort to U itself.
// Implicit: output last expression
Всё вплоть до 1oU à2 £W=Xg o1+Xg1¹x ¥U©W} rª ªU
up to ẆSƘ¹Ṫ - Main link. Takes N on the left
Ẇ - Cast N to range and get all contiguous, non-empty sublists
Ƙ¹ - Keep those for which the following is equal to N:
S - Sum
Ṫ - Take the last (and longest) one
ẆSƘ¹Ṫ
's.
в регистр 1, а затем создает список J'+msḟo=¹ΣQḣ
ḣ range from 1..n
Q all possible sublists
ḟ get the first value which satisfies:
=¹Σ sum = input.
ms convert each number to string
J'+ join on '+'
is a function stored in register 0 that takes a pair, increments both elements, converts them to a range, finds the sum of the range, and checks whether that sum is the value in register 1. If it is, it returns the corresponding range, and if it's not, it returns an empty list.
Следующий бит до J'+msḟo=¹ΣQḣ
maps a function over the fancy list of lists described above, doing 464562+...+1488562
Часть до последнего вхождения 1e12
.
echo 303 | awk '{while($0!=s+=s<$0?++j:-++i);while(++i-j)r=r i"+"}$0=r j'
removes the empty lists. {while($0!=s+=s<$0?++j:-++i);while(++i-j)r=r i"+"}$0=r j
в каждом списке, а затем сопоставить с ним сохраненную функцию. Когда это будет сделано, у нас будет список списков, каждый из которых пуст, или диапазон, сумма которого равна 1000002
would also work). 2000000
берет первый оставшийся список ( x=input('');k=1;i=1;while x;s=sum(k:i);if s<x;i=i+1;elseif s>x;k=k+1;else x=0;end;end;disp(k:i)
between each number as it converts the list to a string for the bonus.
ставит