Напишите программу или функцию, которая принимает массив неотрицательных целых чисел в качестве входных данных и выводит набор векторов / массивов с элементами входного массива по порядку, разбивая их так, чтобы каждый вектор суммировал до 15. Если сумма первых N элементов не «попадают в 15», тогда число, которое прошло 15, должно быть обрезано, а остаток будет первым элементом следующего вектора. Это продолжается до тех пор, пока вы не достигнете конца входного массива. Если сумма итогового вектора меньше 15, то в конце необходимо добавить число, чтобы сумма увеличивалась.
Я думаю, что правила легче понять, посмотрев на примеры:
Input: 3 7 5 10
Output:
3 7 5 <- Sum is 15
10 5 <- 5 is added to make the sum 15
Input: 2 4 5 9 2 3 5 0 2 4 5 0 3
Output:
2 4 5 4 <- Sum 15. 9 is split in two.
5 2 3 5 <- The first 5 is the remainder of 9
0 2 4 5 0 3 1 <- The last number is added to make the sum 15
Input: 1 1 1
Output:
1 1 1 12 <- The number 12 is added to make the sum 15
Input: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
Output:
1 2 3 4 5
6 7 2 <- 2 is the first part of 8
6 9 <- 6 is the remainder of 8
10 5 <- 5 is first part of 11
6 9 <- 6 is remainder of 11. 9 is first part of 12
3 12 <- 3 is remainder of 12. 12 is first part of 13
1 14 <- 1 is remainder of 13. 14 is 14
15
15 <- 15 is first part of 16
1 14 <- 1 is remainder of 16. 14 is first part of 17
3 12 <- 3 is remainder of 17. 12 is added to make the sum 15
Input: 20 20
Output:
15
5 10 <- 5 is remainder from the first 20
10 5 <- 10 is remainder from second 20. 5 is added to make the sum = 15.
Формат ввода и вывода является необязательным. Что бы ни было лучше на вашем языке.
Самый короткий код в байтах побеждает.
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
источник
[[3, 7, 5], [10, 5]]
что будет правильным выводом для первого контрольного примера?Input: 100 Output: 15; 15; 15; 15; 15; 15; 10 5
Ответы:
Pyth, 37 байт
Разъяснения
Это был мой первый пит, поэтому не стесняйтесь предлагать улучшения.
Пример:
вход
Выход
Примечание: Большое спасибо Исааку за несколько байтов рекомендации по уменьшению размера и созданию Pyth в первую очередь! Пожалуйста, оставьте свои комментарии ниже :)
источник
.?
вместоE
, но я забыл обновить документы. Прости за это.=Z+ZN
и=+ZN
такие же. Это немного похоже на Python+=
. Likewiese,=Z-ZK
->=-ZK
. Кроме того, вам не нужно)
в конце - он заполняется автоматически. Наконец-тоFNQ
иVQ
такие же.I>Z0
наIZ
-Z
не может быть отрицательным, так что вы на самом деле просто проверяете, неZ
является ли ноль, а ноль - ложь, в то время как все остальные числа верны.Ява -
229200192181172170168 байтУже началось, не для победы, а для удовольствия :)
Любое предложение приветствуется.
Сохранено 8 байтов благодаря @ThomasKwa.
Сохранено 20 байтов благодаря @corsiKa.
Сохранено 2 байта благодаря @Ypnypn.
Сохранено 2 байта благодаря @ user902383.
170 байт
172 байта
181 байт
192 байта
200 байт
229 байт
источник
Python 3 - 1̶7̶7̶ 1̶3̶8̶ 1̶6̶6̶ 1̶3̶3̶ 113
Редактировать 5 Действительно игра в гольф благодаря @poke * удаленным разрывам строк и т. Д.
Отредактируйте 4 печати с псевдонимами и замените a = на - =, чтобы сохранить байт. Благодаря @poke и @elzell. Также перемещен входной eval в цикл for, чтобы сохранить 2 байта из назначения
Редактировать 3 Найденные сбережения в разных OO в секунду, если
Редактировать 2 Исправлена ошибка
Редактировать 1 Изменил ввод в форме «[1,2,3,4,5 ...]» и реализовал первые два комментария, большое спасибо @Morgan Thrapp
Первый раз постер здесь. Ввод - это командная строка с записями, разделенными пробелами, вывод - запись в каждой строке, с новой строкой между группами
источник
print
так часто, вы должны сохранить его в качестве переменной:p=print
. Спасает вас еще 14 символов.if s>i:s-=i;p(e-s);p();e=s
для второй. Это спасает вас от разрывов строк и символов отступов.Haskell,
126107102100 байтПример использования:
(#[]).(++[14]) $ [1..17]
->[[1,2,3,4,5],[6,7,2],[6,9],[10,5],[6,9],[3,12],[1,14],[15],[15],[1,14],[3,12]]
Изменить: @ Стиви Гриффин помог мне сэкономить 19 байтов. Благодарность!
источник
CJam, 39 байт
Проверьте это здесь.
Это кажется очень неоптимальным, но до сих пор все мои попытки найти более короткое решение были сорваны присутствием нулей на входе.
источник
Python2 работает от RegEx :
158155 байтСделано на питоне с любовью и почти без математики.
Или Regex Math, если хотите, унарная математика.
«Настоящая» математика используется только для «исправления» последнего требования:
Codegolfed:
Это работает путем преобразования каждого числа N в строку длины N ( x выбран в качестве символа для заполнения строки) и объединения их всех в разделенный пробел
string
. Результирующая строка разделяется через RegEx BLACK MAGIC на что-то вроде:для ввода, подобного:
f([1, 2, 3, 4, 5, 6, 7, 8, 10])
Это снова разделяется, и длина последовательных
x
es используется для создания чисел снова, все хорошо упаковано в понимании списка.Ungolfed:
Выход:
Примечание: для нулей не было достаточно магии, поэтому эта запись дисквалифицирует
источник
Серьезно, 88 байт
Попробуйте онлайн
Это мой первый серьезный ответ! Теперь я хорошо знаком со всеми недостатками языка!
Шестнадцатеричный дамп:
Объяснение:
источник
Javascript,
138128 байтС пробелами:
Пример:
Присвойте функцию переменной
Тогда оцените так:
Лист регистраций изменений:
03.12.2015 00:02 - Спасибо user81655 (+1 ему в комментариях) за 10 байтное улучшение
02.12.2015 21:44 - Переключен на использование функционального стиля для уменьшения размера.
источник
f=
не требуется в соответствии с правилами сайта, удалите скобки из(i)
, окружающего сeval
так что вам не нужноreturn
или скобки и заменитьif
с тройным , так чтоo
возвращается и изменение'\n'
в`\n`
, слияниеt+=...
сt>=m
вынимаются для петли скобки. Вот ваше решение в 127 байтов со всеми этими улучшениями:i=>eval("for(o=z=n='',m=15,t=q=0;q<i.length;q++)(t+=c=+i[q])>=m?(t-=m,z+=c-t,o+=z+`\n`,z=t>0?t+' ':n):z+=c+' ';t<m?o+z+(m-t):o")
o+
в конце строки. Удалитеo+=z
и запишите это снова, и это будет работать. : P\n
какая разница`\n`
? Это не будет работать без него, потому что код внутри"..."
из-заeval
.Python 3: 139 байт
Немного другой подход, чем другой ответ. Выводит фактический результат из вопроса, потому что я изначально предполагал, что это требование.
Пример использования:
источник
Perl, 86 байт
Считая Шебанг как три, ввод берется из стандартного ввода, разделенного пробелом.
Образец использования
источник
R 155 байт
С отступами и переносами строк:
Использование:
источник
Python 2, 117 байт
Принимает ввод в виде списка:
источник
Perl, 76 байт
Включает +3 для
-p
(обычно +1, но +3, чтобы играть честно с другим решением Perl)Запустить с вводом по STDIN (последний перевод строки на вводе необязателен, но ДОЛЖЕН отсутствовать для пустого ввода)
sum15.pl
:Смотри, ма, никаких расчетов ...
источник
0
s довольно сложны в этом решении (представлены дополнительными пробелами), и я должен быть очень осторожным, чтобы правильно обрабатывать пробелы, чтобы сохранить число0
s правильным. В частности, рассмотрим входные данные, где частичная сумма равна 15, как1 14 2 13
. Попробуйте их без `?` И посмотрите, что получитсяJava -
158155 байтЛямбда-версия https://codegolf.stackexchange.com/a/65590/46866 от yassin-hajaj , Не уверен, что это правильное представление, но у него недостаточно представителей, чтобы добавить комментарий к связанному ответу. Подсчитано с использованием http://meta.codegolf.stackexchange.com/questions/4944/byte-counter-snippet
158 байт
Ungolfed
можно использовать как
источник