Определение и правила
Golfy массив представляет собой массив целых чисел, где каждый элемент является выше , чем или равно средним арифметическим все предыдущими элементами. Ваша задача - определить, является ли массив положительных целых чисел, указанных в качестве входных данных, гольфием или нет.
Вам не нужно обрабатывать пустой список.
Вы можете выбрать любые два различных непустых значения. Они должны быть последовательными и должны соответствовать всем другим правилам решения проблем . Это код-гольф , выигрывает самый короткий код на каждом языке!
Тестовые случаи и пример
Например, следующий массив:
[1, 4, 3, 8, 6]
Является массивом гольфа, потому что каждый член выше среднего арифметического числа предшествующих ему. Давайте разберемся пошагово:
Число -> Предшествующие элементы -> Среднее -> Следует ли правилу? 1 -> [] -> 0.0 -> 1 ≥ 0.0 (True) 4 -> [1] -> 1,0 -> 4 ≥ 1,0 (правда) 3 -> [1, 4] -> 2,5 -> 3 ≥ 2,5 (True) 8 -> [1, 4, 3] -> 2. (6) -> 8 ≥ 2. (6) (True) 6 -> [1, 4, 3, 8] -> 4,0 -> 6 ≥ 4,0 (верно)
Все элементы соответствуют условию, таким образом, это массив для гольфа. Обратите внимание, что для этой задачи мы будем предполагать, что среднее значение пустого списка ( []
) равно 0
.
Больше тестовых случаев:
Вход -> Выход [3] -> Правда [2, 12] -> Правда [1, 4, 3, 8, 6] -> Верно [1, 2, 3, 4, 5] -> Правда [6, 6, 6, 6, 6] -> Правда [3, 2] -> Ложь [4, 5, 6, 4] -> Неверно [4, 2, 1, 5, 7] -> Неверно [45, 45, 46, 43] -> Ложь [32, 9, 15, 19, 10] -> Ложь
Обратите внимание , что это головоломка 1 из CodeGolf-Hackathon и также размещена на Anarchy Golf (что одна сломана) - Повторно по histocrat , но я оригинальный автор на обоих сайтах, и , таким образом , разрешено перепечатывать их здесь.
источник
Ответы:
Python 2 , 37 байт
Попробуйте онлайн!
Выходы через код выхода: вылеты (код выхода 1) для массивов для игры в гольф, просто выходы с кодом выхода 0 для массивов без игры в гольф. ovs и Джонатан Фрех сохранили 3 байта.
Python 2 , 44 байта
Попробуйте онлайн!
Более традиционный вариант, который возвращается
True
для гольф-массивов, ещеFalse
. Джонатан Фрех спас 2 байта.источник
a==[]or
может бытьa and
.sum(a)<=len(a)*a.pop()*[]
для базового случая, который всегда так и естьint < list
!Желе ,
65 байтПопробуйте онлайн!
Как это устроено
источник
ÆmƤµ⁼Ṣ
JavaScript (ES6),
3332 байтаКод также работает с отрицательными значениями, такими как
[-3, -2]
. Возвращаетfalse
для массива гольфа,true
для других массивов. Редактировать: 1 байт сохранен благодаря @JustinMariner.источник
!
поскольку спецификация запрашивает только два разных значения, поэтому возвращение,false
когда это массив для гольфа, вполне подойдет.Wolfram Language (Mathematica) , 35 байт
Попробуйте онлайн!
Выходы
False
для гольф-массивов и прочееTrue
.источник
MATL ,
98 байтВыходы
0
для гольф-массивов, в1
противном случае.Попробуйте онлайн!
объяснение
Рассмотрим ввод
[1, 4, 3, 8, 6]
.источник
Haskell ,
535048 байтовПопробуйте онлайн!
Редактировать: -3 байта благодаря Zgarb!
объяснение
Вышеуказанная бессмысленная версия эквивалентна следующей программе:
С учетом ввода
s=[1,4,3,8,6]
,scanl1(+)s
вычисляет префикс суммы[1,5,8,16,22]
иzipWith(*)[1..](tail s)
падает первый элемент и умножает все остальные элементы с их индексом:[4,6,24,24]
. Список теперь golfy если попарно префиксные суммы меньше или равны индекс элементов раз, которые могут быть проверены путем архивирования как списки(<=)
и убедившись , что все результатыTrue
сand
.источник
C # (компилятор Visual C #) , 71 + 18 = 89 байт
дополнительные 18 байтов для
using System.Linq;
Попробуйте онлайн!
источник
using System.Linq;
, на самом деле это будет 89 байтов, иногда выражаемых как «71 + 18 = 89», чтобы показать, что 18 байтов требуются, но не являются частью решения, в то время как окончательное число будет последним числом в строке заголовка ( что полезно для некоторых автоматических парсеров).APL (Dyalog) , 10 байт
Это анонимная функция с молчаливым префиксом (в терминах APL называется монадической последовательностью).
Попробуйте все тестовые случаи на TIO!
Это
∧/
все правда, что⊢
элементы≥
больше или равно+\
совокупные суммы÷
деленное на⍳
целые числа от 1 до∘
the≢
количество элементов?
источник
∘
связывает вместе вещи так же, как «the» связывает вместе в «count the cats». Это действительно называется Compose .C (gcc) ,
626062 байтаb=
).Попробуйте онлайн!
источник
05AB1E , 5 байтов
Попробуйте онлайн!
Обширная помощь от Денниса и Аднана попала в эту уменьшенную версию. Также была исправлена ошибка, чтобы сделать это возможным, еще раз спасибо вам, ребята. Я не очень благодарен за этот ответ.
05AB1E , 10 байтов
Попробуйте онлайн!
Длинный, потому чтоDgsO/
это эквивалент «среднего» в 05AB1E.По-видимому,
ÅA
это среднее арифметическое.источник
+\÷J
(разделить совокупную сумму на индексы) в желе. Разве это не так просто в 05AB1E? Редактировать: фигу.ü+
то на самом деле нет divie другими , чем индексы ,g
чтобы получить длину массива,L
чтобы толчок1,2,...,n
и разделить , чтобы получить средние, который до сих пор по существу 5 байт..S_
это длинный путь<=
, если у кого-то есть идеи, lmk.÷W
работать вместоü.S_P
?ÅA
, так чтоηÅA÷W
теперь работает.APL (Dyalog) , 15 байтов
Попробуйте онлайн!
Как?
источник
PowerShell , 60 байт
Попробуйте онлайн!
Принимает ввод как буквенный массив (например,
@(1, 4, 3, 8, 6)
) в$a
. Устанавливает нашу$o
переменную utput1
. Затем проходит через$a
. На каждой итерации мы (ab) используем неявное приведение PowerShell к*=
результату логического сравнения с нашим$o
utput. Логическое значение - это то, является ли текущее значение$_
больше,-g
чемe
обычно для предыдущих терминов,$a[0..$i++]
добавленных вместе (-join'+'|iex
), деленное на количество терминов, которые мы уже видели$i
. Таким образом, если какой-либо шаг на этом пути неверен, то он$o
будет умножен на0
. Иначе оно останется1
повсюду.Затем мы просто
$o
помещаем в конвейер и вывод неявный.1
за правду и0
за фалси.источник
Perl 5, 27 +2 (-ap) байтов
Попробуйте онлайн
источник
C # (.NET Core) , 74 байта
Попробуйте онлайн!
Возвращает 0 для false и 1 для true.
3 байт больше , чем ядро chryslovelaces ответа . Но всего несколько байт короче, потому что мой вариант не нуждается ни в каких
using
утверждениях.источник
Cubix , 35 байт
Попробуйте онлайн!
Не самое эффективное использование пространства (6 запретных операций в коде). Не производит вывода для массива
1
для гольфа, для массива не для гольфа.Расширяется до следующего куба:
Объяснение готовится, но оно в основном переносит что-то вроде ответа MATL Луиса Мендо или ответа Джулии Денниса .
Смотреть это бежать!
источник
Matlab и Octave,
4136 байт5 байт сохранено благодаря Луису Мендо
Попробуйте онлайн!
источник
a
равен нулю. Но, тем не менее, это полезный трюк в подобных ситуациях, нужно помнить об этом.SQL (MySQL), 68 байт
Попробуйте онлайн!
Возвращает 1 для массивов гольфа и 0 в противном случае. Принимает входные данные от имени таблицы ,
t
. Чтобы создатьt
, запустите:и загрузить значения:
источник
Рубин , 30 байтов
Попробуйте онлайн!
Вдохновленный ответом Линн . Выдает
NoMethodError
для golfy, возвращается вnil
противном случае.источник
Python 2 , 52 байта
Попробуйте онлайн!
Python 2 ,
50484442 байтаand
.S=k=0
.or
и логическое значение сравнения в качествеk
значения приращения.NameError
с использованием неопределенной переменной вместоZeroDivisionError
.Попробуйте онлайн!
источник
q / kdb + , 14 байтов
Решение:
Примеры:
Объяснение:
Довольно просто со
avgs
встроенным:источник
Юлия 0,6 , 29 байт
Возвращает ложь или истину .
Попробуйте онлайн!
источник
R ,
3834 байтаПопробуйте онлайн!
источник
y
в аргументах функцииcumsum(x)
прямое использование на 4 байта короче. Это позорcummean
, не существует в базе R.Добавить ++ , 54 байта
Попробуйте онлайн!
Неоригинальная версия, 30 байт
Попробуйте онлайн!
Оба выводят 1 для гольф-массивов и 0 в противном случае
Как они работают
Первая версия была создана мной, без проверки каких-либо других решений. Второй был вдохновлен комментарием Денниса , поэтому я менее доволен им.
Первая версия
dbLR$
#
BF
B
€
g
k
{...}
I
K
U
Y
Z
g
k
l
u
w
¦+
AbL
/
0b]$
ABcB]
Bc
zip
ª!
Вторая версия
¬+
J
BcB/
@0@B]
источник
Pyth ,
1110 байт-1 байт благодаря мистеру Xcoder
Попробуйте онлайн!
источник
SI.OM._
(решение Cairdcoinheringaahing от Jelly, Эрик Аутгольфер), или 10 байтов, используя ваш подход:.A.egb.O<Q
Java (OpenJDK 8) , 96 байт
Я знаю, что это не очень хороший язык для игры в гольф, но я все же попробовал!
Входной массив в качестве первого аргумента разделенных запятыми целых для проверки.
Возвращает 1 для истины, 0 для ложных.
Попробуйте онлайн!
источник
Java 7, 100 байт
Golfed:
Ungolfed:
Попробуйте онлайн
Возвращает 0 для негольфии и 1 для массивов гольфа. Чуть дольше, чем Java 8 ответ.
источник
PHP, 44 байта
принимает входные данные из аргументов командной строки, выходит с помощью
0
(ok) для массива гольфа, с помощью1
else.Запустите
-nr
или попробуйте онлайн .источник
J, 19 байт
+/\ % #\
средние значения префиксов:#\
производит 1..n}:0,
добавить 0 в начало и удалить последний[>:
исходный элемент списка по элементу> = сдвинутому списку средних?*/
являются все элементы больше, то есть, предыдущий список всех1
s?Попробуйте онлайн!
источник
AWK , 39 байт
Попробуйте онлайн!
Обратите внимание, что ссылка TIO имеет 5 дополнительных байтов
i=s=0
для многострочного ввода.источник
Japt , 10 байт
Придумали два 10-байтовых решения, которые, кажется, не могут улучшить это.
Попытайся
объяснение
альтернатива
Попытайся
источник