Иногда, когда мне очень скучно, мне нравится брать сумму целого ряда неотрицательных целых чисел. Я беру только сумму массивов длин, которые являются степенями двух. К сожалению, я часто делаю ошибки. К счастью, я слежу за своей работой следующим образом:
Я добавляю пары соседних номеров, пока не останется только один. Например:
6 + 18 + 9 + 6 + 6 + 3 + 8 + 10
= 24 + 15 + 9 + 18
= 39 + 27
= 66
Твоя работа - определить, сделал ли я где-нибудь ошибку. Вы можете либо передать ввод в вашу функцию, либо прочитать из стандартного входа. Вывод можно распечатать или вернуть.
Ввод: массив / список / и т. Д. неотрицательных целых чисел и, возможно, также длины этого массива, если ваш язык требует этого. Этот массив будет содержать все числа, читаемые слева направо, а затем сверху вниз. Например, приведенный выше массив станет:
[[6, 18, 9, 6, 6, 3, 8, 10], [24, 15, 9, 18], [39, 27], [66]]
или,
[6, 18, 9, 6, 6, 3, 8, 10, 24, 15, 9, 18, 39, 27, 66]
если вы предпочитаете.
Вывод: единственное логическое значение, представляющее, была ли допущена ошибка. Логическое значение может быть представлено с использованием любого отображения при условии, что все входные данные, в которых была допущена ошибка, возвращают / печатают идентичный результат, а все входные данные, которые не содержат ошибок, возвращают / печатают идентичный результат. Это само собой разумеется, но эти два выхода не могут быть одинаковыми.
Некоторые примеры правильных суммирований:
6
5+6
=11
3 + 2 + 4 + 5
= 5 + 9
= 14
[0, 1, 2, 3, 1, 5, 6]
[[1, 2, 4, 8], [3, 12], [15]]
Некоторые примеры неправильного суммирования:
5+4
=8
4 + 4 + 4 + 4
= 9 + 7
= 16
[[1, 2, 3, 4], [7, 3], [10]]
[3, 4, 5, 6, 7, 8, 9]
Имейте в виду, что я могу ошибаться и все равно получить правильный ответ. Если я сделаю ошибку, это никогда не приведет к дополнительному числу или отсутствующему числу в конечном массиве, только к неправильному номеру.
Стандартные лазейки запрещены. Самый короткий ответ на каждом языке - победитель. Старый ответ выиграет в случае ничьей. Я оставляю за собой право решать, что такое «тот же язык», но я скажу заранее, что баллы нельзя заработать как в Python 2, так и в Python 3.
[0,1,2,3,1,5,6]
недопустим, потому что «Ввод: массив / список / и т. Д. Натуральных чисел».Ответы:
Желе , 6 байт
Попробуйте онлайн!
Как это работает
источник
Python 2 , 51 байт
Попробуйте онлайн! Спасибо Роду за тестовые случаи.
Принимает весь список в качестве входных данных. Группирует элементы в соседние пары, используя трюк zip / iter , берет сумму пар и проверяет, равен ли результат второй половине списка.
Рекурсивный метод был близок по 55 байт:
При этом входные целые числа были положительными, что с тех пор изменилось в спецификации.
источник
[0,0,1,1,1,1,1]
.Рёда , 40 байт
Попробуйте онлайн!
Это анонимная функция, которая возвращается,
0
если нет ошибок и ничего, если есть ошибки.Объяснение:
Вот версия, которая короче (35 байт), но противоречит правилам (я думаю):
Попробуйте онлайн!
Это анонимная функция, которая читает значения из потока и отправляет
TRUE
илиFALSE
для каждой правильной строки.Я не уверен, если это (несколько возвращаемых значений) принимается в правилах. Вот моя защита: в Röda условия
if
иwhile
блоки - это не логические значения, а потоки. «Истинный» поток либо пуст, либо содержит толькоTRUE
s, а «ложный» поток содержит один или несколькоFALSE
s. Таким образом, эта функция возвращает «логическое» значение. И может использоваться как условиеif
оператора без каких-либо операций сокращения и т. Д.источник
0
. Я не уверен точно, как Рода справляется с этим, но это не неслыханно.if
условного выражения . Если так работает Röda, он соответствует нашим правилам, если только спецификация вызова не переопределяет значения по умолчанию.Python 2 ,
6965 байтПопробуйте онлайн!
Возвращает:
Пустой список как
Falsy
Общая сумма как
Truthy
источник
Mathematica, 36 байт
Чистая функция, принимающая вложенный список в качестве входных данных и возвращающая
True
илиFalse
. ФункцияTr/@#~Partition~2&
принимает попарные суммы списка, который затем применяется (/@#
) к каждому подсписку списка ввода. Первый, второй, ... подсписки в результирующем списке должны равняться второму, третьему, ... подспискам в исходном вводе;Most[...]==Rest@#
тесты для этого свойства.источник
Python 2 , 80 байт
Попробуйте онлайн!
Не так хорошо, как в другом ответе на Python, но я все равно хотел опубликовать его. Это просто показывает, почему я не так хорош в игре в гольф на обычных языках.
источник
JavaScript (ES6), 54 байта
Принимает сплющенный массив.
источник
05AB1E ,
1512 байтПопробуйте онлайн!
объяснение
источник
Haskell ,
827965 байт-14 байт благодаря Ними!
Работает путем сравнения суммы каждой пары элементов с соответствующим элементом на следующей строке вниз. Некоторые байты, вероятно, могут быть в гольфе
f
, но я не могу понять, где.источник
p
:p(x:y:z)=x+y:p z
а затем использоватьzipWith(==)
вместоzip
и объединить списокBool
сand
:f x=and.zipWith(==)(drop(length x`div`2+1)x)$p x
.Python 3 ,
6968 байтЯ знаю, что уже есть два других ответа Python ... но этот в Python 3, так что это экзотика.
Это работает на плоском входе.
Выход :
False
если нет ошибки,True
если есть ошибка.источник
Рубин, 50 байтов
Обращая массив, любой элемент первой половины (позиция n) должен быть суммой элементов в позиции n * 2 и n * 2 + 1.
источник
Брахилог ,
1613 байтПопробуйте онлайн!
Это просто ужасно долго! Здесь должен быть какой-то способ не вкладывать встроенные предикаты.
Предикат завершается успешно (печать
true.
как программа), если не было допущено никаких ошибок, и не выполняется (печатьfalse.
как программа) в противном случае.источник
Python 2 , 64 байта
Попробуйте онлайн!
Неименованная функция, которая принимает список списков (по одному на строку в рабочем состоянии) и возвращает True, если ошибок не было, и False в противном случае.
Он работает, используя ввод без последней записи,
a[:-1]
для формирования того, каким должен быть ввод без первой записи, и проверяя, что именно было введено==a[1:]
.Это формирование достигается путем отображения функции сложения целочисленного типа по
int.__add__
парам чисел, полученным из двух «срезов», один срез - каждый второй элемент, начинающийся с 0-го индексаx[::2]
, а другой срез - каждый второй элемент, начинающийся с 1-го индексx[1::2]
.источник
Пип ,
2019 байтЭто анонимная функция, которая принимает один аргумент, список списков (например
[[1 2 3 4] [3 7] [10]]
). Проверьте все контрольные примеры: попробуйте онлайн!объяснение
В функции Pip первые два аргумента присваиваются
a
иb
.Например:
источник
PHP,
9695 байт:используя встроенные функции:
рекурсивные функции возвращают
true
илиfalse
.разбивка по первой функции:
старые решения (96 байт каждое) с использованием циклов:
разбивка по последней функции:
итерационные фрагменты, 81 байт
предположим, что массив предопределен в
$a
; выходит с ошибкой, если она неверна.источник
C 54 байта:
Ungolfed:
Тест с
Как видите,
f()
возвращает true для неверных входных данных и false (= 0) для допустимых.Как всегда, рекурсия меньше байтов, чем итерация, поэтому
f()
рекурсивна, даже если она принимает два итератора в качестве аргумента. Он работает путем многократного сравнения суммы двух целых чиселs
с одним целым числом вe
, игнорируя границы уровня и продолжая, пока не встретятся два итератора. Я также использовал некоторый логический дзен вместе с тем фактом, что любое ненулевое целочисленное значение считается истинным в C для дальнейшего сокращения кода.источник
R,
9277 байтовАнонимная функция, которая принимает плоскую последовательность чисел в качестве входных данных. Возвращает
TRUE
илиFALSE
в зависимости от обстоятельств. Концептуально используется тот же подход, что и для ответа xnor на python.Предыдущее решение, используя
rollapply
функцию изzoo
пакета и принимая входные данные в виде списка, напримерlist(c(6, 18, 9, 6, 6, 3, 8, 10), c(24, 15, 9, 18), c(39, 27), c(66))
:источник
JavaScript (ES6),
4644 байтаПринимает ввод как плоский массив. Возвращает
NaN
за действительный или0
за недействительный.Тест
Показать фрагмент кода
источник
PHP, 102 байта
входной параметр URL в этом формате
?0=[1,2,3]&1=[3,3]&2=[6]
использовать этот вход[[int,int],[int]]
Сломать
источник
Japt, 10 байт
Принимает ввод как двумерный массив.
Попытайся
источник