Хотите верьте, хотите нет, но Sex Bob-омбы стали всемирно известной группой и в настоящее время находятся в мировом турне! Как их бухгалтер, вы должны следить за их повседневным финансированием и предоставлять регулярные отчеты.
Каждые несколько недель вы составляете список их расходов (в долларах США ) в порядке их возникновения.
Например, список
378
-95
2234
означает, что 378 долл. США были зачислены на их счет, а после этого было снято 95 долл. США, а после этого было внесено 2234 долл. США.
Вы хотите , чтобы убедиться , что текущая сумма этих значений не опускается ниже некоторого порогового значения Т . Вы решили написать программу, которая сделает это для вас.
Вызов
Напишите программу или функцию, которая принимает одно целое число T и список целых чисел. Если текущая сумма списка целых чисел когда-либо меньше T , выведите или верните ложное значение , в противном случае выведите или верните истинное значение.
Вы можете использовать любые обычные методы ввода (stdin, из файла, командной строки, аргументы для функции).
- В начале списка промежуточная сумма равна 0. Таким образом, положительный T означает, что результат всегда ложный.
+
никогда не будет перед положительными целыми числами.- Список может содержать 0.
- Список может быть пустым.
Тестовые случаи
Т -5 во всех этих.
Falsy:
-6
1
2
3
-20
200
-300
1000
Truthy:
[empty list]
-5
4
-3
-6
счет
Представление с наименьшим количеством байтов выигрывает. Tiebreaker отправляется в самое раннее опубликованное представление.
источник
Ответы:
gs2 - 6 байт
Предположим, что список находится на вершине стека, а порог находится в регистре А. В мнемонике:
В байт-коде:
источник
inits
как в Haskell:"abcd" inits
→["" "a" "ab" "abc" "abcd"]
получает нам все префиксы. Затем мы выполняем фильтрацию с помощью «лямбды» из трех команд, которая находится__ __ __ F2
в байт-коде: мы ищем все префиксы, сумма которых меньше, чем в любом другомA
. Затемnot
определяет, является ли список пустым.Haskell, 22 байта
Использование:
f (-5) [4,-3,-6]
какие выходыTrue
.Составьте список промежуточных итогов и проверьте, все ли элементы> = t.
Редактировать: Исправление для пустого списка и положительных
t
значенийисточник
0
нет в списке, так как онscanl1
возвращает пустой список, если заполнен пустым списком, ноall
перехватывает этот случай.f (-5) []
возвращаетсяTrue
.Python 2, 41
Первый аргумент - это массив; вторая минимальная промежуточная сумма.
источник
J 11 байт
тесты
1-байтовое улучшение благодаря FUZxxl .
Пояснение к оригинальной версии
(*/@(<:0,+/\))
+/\
создает текущую сумму (сумму+/
префиксов\
)0,+/\
добавляет 0 к текущей сумме(<:0,+/\)
ввод с левой стороны меньше или равен результату<:
(элементам)0,+/\
на входе с правой стороны@
с предыдущим результатом*/
произведение всех элементов (1, если все элементы 1, 0, если элемент 0)источник
*/@:<:0,+/\
для одного персонажа, я думаю.APL,
810Эта функция принимает
T
левый аргумент, а список - правый аргумент.0,+\
: текущая сумма правильного аргумента, добавленная к 0∧.≤
: левый аргумент меньше или равен (≤), чем все (∧) элементы в правом аргументеисточник
Mathematica, 34 байта
Это определяет безымянную переменную функцию, которая принимает
T
в качестве первого параметра транзакции, а оставшиеся параметры возвращает логическое значение:Мне это нравится, потому что я мог бы использовать довольно редкое,
##2
которое «разбивает» все аргументы со второго в список. Для более подробной информации смотрите последний раздел в этом совете по игре в гольф .источник
к, 8 знаков
Диадический глагол, принимающий порог в качестве первого аргумента и список в качестве второго. Примечательно, что это работает во всех версиях k, включая Kona с открытым исходным кодом.
В k составление функций просто выполняется путем написания одной, а затем другой, поэтому мы можем разбить это по функциям. Справа налево:
-\,
принимает последовательные текущие суммы и вычитает их из порога. (Еслиf
является двоичным, тоf\ (a; b; c; ...)
расширяется до(a; a f b; (a f b) f c; ...)
.,
Просто объединяет списки.) Безубыточность происходит, когда что-то равно 0, а переопределение дает строго положительные значения.~0<
не меньше, чем 0 На самом деле k не имеет оператора больше-или-равно-равному<=
, поэтому мы должны бросить логическое НЕ на меньше, но это проверяет, является ли результат неположительным. Это автоматически применяется к каждому атому в списке.&/
это складка логического И над списком. (Дляf
двоичного числа). Таким образом, проверяется, является ли каждый логический элемент в списке истинным.Примеры:
источник
~|/>+\,
>
является «нисходящими родами перестановка» так~|/>+\,
дает верно только тогда , когда список входов пуст ...CJam, 17 байт
Принимает ввод как целое число и массив в стиле CJam в STDIN:
Проверьте это здесь.
источник
Пиф,
1615Попробуйте онлайн с вводом
Объяснение:
И снова глупый
s
функция тратит два байта. Я думаю, что сообщу об этом как об ошибке в репозиторий Pyth.изменить: 13 (недействительно)
Спасибо isaacg за сохранение одного байта (
>1
в!
) и за изменение реализации в репозитории Pyths
. Теперь возможен следующий код (но, конечно, он не подходит для этой задачи).источник
!
вместо>1
.#sY
. И спасибо за сохранение 1 байта.Р, 35
Попробуй здесь
источник
Юлия, 33 байта
Это создает безымянную функцию, которая принимает два параметра,
T
иl
, и возвращает логическое значение.all()
Функция делает все тяжелое здесь. Он принимает два аргумента: предикат и итеративный. Для предиката мы сообщаем ему, что онi
представляет текущее значение итерируемой функции без имени, указанной с помощьюi->
. Затем на каждой итерации мы сравниваемi
сT
использованиемi>=T
.Чтобы убедиться, что Джулия не волнуется об использовании
cumsum()
пустого списка, мы можем добавить ноль, используя[0, l]
.источник
Прелюдия ,
144136 байтЭто было ... сложно ...
Я думаю, что 6 голосов - новая запись для меня, хотя я уверен, что есть способ уменьшить это и избавиться от многих этих раздражающих пробелов. Проверка знака значения (и, следовательно, проверка, является ли одно значение больше другого), довольно сложна в Prelude.
Вход и выход задаются как байтовые значения. Когда вы используете интерпретатор Python , вы можете установить
NUMERIC_OUTPUT = True
, чтобы вы действительно получили ASCII0
или1
. Для числового ввода вам нужно будет добавить еще одинNUMERIC_INPUT
флаг (я, вероятно, должен был бы опубликовать мой измененный интерпретатор в какой-то момент).Также обратите внимание, что Prelude не может действительно отличить конец списка от
0
списка. Итак, чтобы разрешить нулевые транзакции, я читаюT
, затем длинуL
списка, а затемL
транзакции.источник
CJam, 18 байт
Другой подход в тех же байтах, что и другой.
Принимает ввод через STDIN в виде
<threshold> <array of transactions>
Попробуйте онлайн здесь
источник
f>:|!
вместо:)f<:&
JavaScript (ES6) 38
33Редактировать Исправлена ошибка начального баланса. Спасибо @martin & @rainbolt
Тест в консоли Firefox / FireBug
источник
Python 2,7 - 55 байт
Звоните как
print f(-5,[1,2,3,-20])
. Проверьте это здесь .Спасибо Якубе за помощь.
источник
> <>, 29 + 3 = 32 байта
Беги как
где порог является первым числом.
источник
Октава, 27
источник
Perl 6 (21 байт)
Это функция, принимающая начальный аргумент и список элементов. Это работает путем проверки, если ни один ( с помощью соединений ) элементов ниже порога.
[\+]
используется для генерации промежуточной суммы, например,[\+] 1, 2, 3
дает1, 3, 6
.0,
добавление0
в начале списка необходимо из-за требования, что положительный порог всегда должен потерпеть неудачу.Практически то же самое, что и решение на Haskell, только в синтаксисе Perl 6 (Perl 6 использовал множество полезных функций программирования от Haskell).
источник
Perl - 20
Возьми список чисел на
STDIN
разделенных переводами и возьмиT
с-i
флагом.+2 за
-i
и-n
флаги. Выходное значение255
для сбоев и0
при успехе.Бежать с:
источник
Clojure, 45
Например
Или немного лучше;
источник
Java 8 - 153 символа
Гольф-функция:
Ungolfed:
Программа для водителя:
}
Выход:
источник