Codegolf - Я Ничтожный Массив?

  • Автор темы Alla_zt
  • Обновлено
  • 21, Oct 2024
  • #1

Ан незначительный массив представляет собой массив положительных целых чисел, в котором абсолютные различия между последовательными элементами меньше или равны 1.

Например, следующий массив не имеет значения:

Input -> Output

[1, 2, 3, 4, 3, 4, 5, 5, 5, 4] -> true
[1, 2, 3, 4, 5, 6, 7, 8, 9, 8] -> true
[3, 3, 3, 3, 3, 3, 3]          -> true
[3, 4, 4, 4, 3, 3, 3, 4, 4, 4] -> true
[1, 2, 3, 4]                   -> true 
[5, 4, 3, 2]                   -> true 
[1, 3, 5, 7, 9, 7, 5, 3, 1]    -> false
[1, 1, 1, 2, 3, 4, 5, 6, 19]   -> false
[3, 4, 5, 6, 7, 8, 7, 5]       -> false
[1, 2, 4, 10, 18, 10, 100]     -> false
[10, 20, 30, 30, 30]           -> false

Потому что соответствующие (абсолютные) различия таковы:

 
 false 

которые все меньше или равны 1.


Ваша задача — определить, является ли данный массив целых чисел несущественным.

  • Вы можете предположить, что массив всегда содержит как минимум два элемента.
  • Стандартные правила ввода и вывода применять. Вы можете принимать входные данные (и выходные данные) в любом разумном формате.
  • Лазейки по умолчанию запрещены.
  • Истинные/ложные значения должны быть четкими и последовательными.
  • Это , поэтому побеждает самый короткий ответ в байтах.

Тестовые случаи

true

Я использовал значения [1, 1, 1, 1, 1, 1, 0, 0, 1] and [1, 2, 3, 4, 3, 4, 5, 5, 5, 4] .

#код-гольф #код-гольф #число #массив #задача-решения

Alla_zt


Рег
16 May, 2011

Тем
61

Постов
188

Баллов
493
  • 26, Oct 2024
  • #2

Желе, 3 байта


i 1 3 5 7 9 7 5 3 1  
0

Попробуйте онлайн!

Как?

Просто идеальный вызов для Джелли.

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
IỊẠ   Full program.

I     Increments; Get the difference between consecutive elements.

Ị    Insignificant; return abs(number) ≤ 1.

Ạ   All; returns 1 if all the elements are truthy, 0 otherwise.
||answer||

JavaScript (ES7), 33 29 байт

Сэкономлено 4 байта благодаря @JohanKarlsson.

 2&(-/\) finds the difference between two consecutive elements
| takes the absolute value
[: caps the fork so that the result is propagated onwards
2> finds if the values are smaller than 2
*/ calculates the product of all the elements, so yields 1 only if all are 1s
[: caps the fork so that the result is propagated onwards
 

Как?

Когда принуждают к i=.[:*/2>[:|2&(-/\) , arrays of at least two elements are evaluated to augment(sin⁻¹(ΔList(Ans . Повторно используя ввод а как переменная, содержащая предыдущее значение, первая итерация некоторый() всегда приводит к ([v0, v1, ...] - a[0]) ** 2 = NaN, независимо от значения а[0]. Таким образом, первый тест всегда является ложным, а фактические сравнения начинаются со второй итерации, как и предполагалось.

Тестовые случаи

ERR:DOMAIN ||answer||

Питон 3, 40 байт

ERR:ARGUMENT

Попробуйте онлайн!

 

Lena555


Рег
05 Apr, 2011

Тем
71

Постов
196

Баллов
571
  • 26, Oct 2024
  • #3

Математика, 24 байта

prod(2>abs(ΔList(Ans ||answer||

Хаскелл, 34 33 байта

#(every? #{-1 0 1}(map -(rest %)%))

Попробуйте онлайн! -1 байт благодаря @user1472751


Бесточечное решение — один два, опять же только один байт (благодаря -1 байту от @Деннис) короче, чем рекурсивный подход:

& (* Function *) Differences (* which takes the consecutive differences*) @# (* of the input list *) ~MatchQ~ (* and returns whether it matches *) {(1|0|-1)..} (* a list consisting of one or more 1s, 0s, or -1s *)

Попробуйте онлайн!

 

Finework


Рег
04 May, 2009

Тем
83

Постов
216

Баллов
641
  • 26, Oct 2024
  • #4

Питон 2, 35 байт

Differences@#~MatchQ~{(1|0|-1)..}&

Существует с кодом состояния 1 для несущественных массивов, с кодом состояния 0 в противном случае.

Попробуйте онлайн!

 

Denzel72


Рег
11 Jan, 2007

Тем
79

Постов
199

Баллов
644
  • 26, Oct 2024
  • #5

Октава, 21 байт

.+ Deltas, returns differences between consecutive values. ._ Signum, returns the sign of a number (1, 0, or -1). Note that this should be equal to the input for insignificant arrays. I Tests if it is equal to the input... # For each in the input, and filter out those that aren't... I And make sure none have been filtered out.

Анонимная функция, которая вводит числовой вектор и выводит ._I#I.+ if insignificant or a->{int p=0,i=1;for(;i<a.length;p+=Math.abs(a[i]-a[i++-1])>1?1:0);return p<1;} в противном случае.

Попробуйте онлайн!

 

ExerePent


Рег
14 Jan, 2014

Тем
57

Постов
209

Баллов
524
  • 26, Oct 2024
  • #6

Шелуха, 4 байта

r;f(a,n)int*a;{for(r=1;--n;r=(*a-*++a)/2?0:r);}

Попробуйте онлайн!

Объяснение:

r;f(a,n)int*a;{for(r=1;--n;r=(*a-*++a)/2?0:r);return r;} ||answer||

Пиф, 6 байт

a->{int r=1,p=a[0];for(int i:a)r|=(r=p-(p=i))*r;return r<2;}

Проверьте все тестовые примеры.


Пиф, 8 байт

I€A€2<»/& Main Link I Deltas € For each element A Take its absolute value € » For each element 2< Is it less than two? / Reduce over & Logical AND

Попробуйте онлайн!

Объяснение

I€A€2<»/&
d|2<A ||answer||

АПЛ, 13 байт

lambda k:all(-2<x-y<2for x,y in zip(k,k[1:]))

Первый ответ APL \o/

Примечание. Я бот, принадлежащий Hyper Neutrino. Я существую в основном для тестирования чата.

Объяснение

2 < ||answer||

05AB1E, 5 байт

supremum

Попробуйте онлайн!

Объяснение

vabs ||answer||

Протон, 41 байт

v-

Попробуйте онлайн!

-16 байт благодаря г-ну Xcoder
-2 байта
-6 байт благодаря г-ну Xcoder

 

Имира 455


Рег
04 Jul, 2016

Тем
77

Постов
207

Баллов
632
  • 26, Oct 2024
  • #7

Ом v2, 4 байта

dup rest

Попробуйте онлайн!

Как?

[ dup rest v- vabs supremum 2 < ] ||answer||

Япт, 6 байт

.count

Попробуйте онлайн!

Объяснение

-eq ||answer||

С# (.NET Core), 51 45 44 + 18 байт

-1 байт благодаря Йеппе Стиг Нильсен

.count

Подсчет байтов также включает в себя:

$l

Попробуйте онлайн!

Объяснение:

1,0,-1 ||answer||

Перл 6, 25 байт

-in

Попробуйте онлайн!

Это должно быть довольно читабельно. Единственная менее очевидная вещь здесь заключается в том, что оператор zip $_-$l will stop zipping when the shorter list is exhausted (we remove the first element of the list at the right) and that the empty subscript |?{...} , так называемый дзен-срез, дает весь список. $a returns the list without the first element.

 

Metsembency


Рег
27 Nov, 2019

Тем
65

Постов
201

Баллов
536
  • 26, Oct 2024
  • #9

PowerShell, 62 байта

$a

Попробуйте онлайн!

PowerShell не имеет .some or .map или подобная команда, поэтому здесь мы проверяем каждую дельту индивидуально.

Мы принимаем данные param($a)$l=$a[0];($a|?{$_-$l-in1..-1;$l=$_}).count-eq$a.count and set cat(all(diff(scan())^2<2)) равен первому элементу. Затем мы проходим .skip and take out each element where .[] разница Z is {?(2>all(.[]Z-.skip)>-2)} диапазон a => // Take an array of integers as input a.Zip( // Combine each element with corresponding one from: a.Skip(1), // the input array without first element (x, y) => x - y // get their difference ) .All(x => x * x < 4) // Check if all differences are less than 2 // (We only care about 0 and 1, and so happens that when they're squared, it works like Abs! Magic!) . We then set using System.Linq; равен текущему элементу. Итак, теперь у нас есть коллекция элементов, в которых дельта между их предыдущим соседом равна 1. Мы берем a=>a.Zip(a.Skip(1),(x,y)=>x-y).All(x=>x*x<4) of that and check whether it's ä Get all pairs of elements a Take absolute difference of each pair This results in the deltas of the array e Check if every element... <2 Is less than 2 обычно к äa e<2 of the array as a whole. If it is, then every delta is 1 or less, so it's an insignificant array. That Boolean result is left on the pipeline, and output is implicit.

 

IronHawk


Рег
16 Jul, 2009

Тем
65

Постов
174

Баллов
539
  • 26, Oct 2024
  • #10

Фактор, 48 33 байта

Сэкономлено 15 байт благодаря @chunes!

Δ2<Å ~ Full program. Δ ~ Absolute deltas. 2< ~ Is smaller than 2? Å ~ Check if all elements are truthy.

Попробуйте онлайн! (результаты внизу)

Δ2<Å makes a copy of the inputted sequence without the first element. a=>all(-2<a[i]-a[i+1]<2for i:0..len(a)-1) вычитает это из исходной последовательности (\$a_n-a_{n-1}\$). Затем ¥ # calculate deltas Ä # absolute values 2‹ # smaller than 2 P # product gets the absolute values of that. ¥Ä2‹P находит максимальное значение в последовательности и {×/(|2-/⍵)<2} { } Function; right argument is ⍵ ( ) Bracketed Expression / Reduce 2 Every pair (two elements) of ⍵ ⍵ - Using subtraction | Magnitude (Absolute Value) <2 For each element, is it less than two? / Reduce over × Multiplication (Product) (All) makes sure it's 0 or 1.

 

Еленка143


Рег
28 Aug, 2012

Тем
69

Постов
181

Баллов
546
  • 26, Oct 2024
  • #13

любое исправление, 9 байт

._MI.+ Full program. .+ Deltas. I Is invariant under... ._M Mapping with Sign. 0 if n == 0, -1 if n < 0, 1 if n > 0.

Попробуйте онлайн!

.A<R2aVt

По большей части это порт решения 05AB1E, за исключением того, что это ужасно, потому что в Anyfix нет автовекторизации и других интересных вещей.

 

Malez


Рег
04 Aug, 2007

Тем
68

Постов
197

Баллов
547
  • 26, Oct 2024
  • #15

С, 61 56 байт

Спасибо @scottinet за экономию пяти байт!

ΛεẊ- 2-function composition Λ (x -> y):f -> [x]:x -> TNum: Check if f returns a truthy result for all elements of x ε f: TNum:x -> TNum: Check if abs(x) <= 1 (shamelessly stolen from Jelly) Ẋ x: (x -> x -> y):f -> [x]:x -> [y]: reduce each overlapping pair of x by f - f: TNum:x -> TNum:y -> TNum: y - x

Попробуйте онлайн!

C (gcc), 47 байт

ΛεẊ-

Попробуйте онлайн!

 

Наум


Рег
07 Jun, 2009

Тем
60

Постов
203

Баллов
513
  • 26, Oct 2024
  • #17

Пиф, 7 байт

1

Тестовый набор

Возвращает истину/ложь.

Объяснение:

@(x)all(diff(x).^2<2) ||answer||

Математика, 34 байта

x=input() while-2<x.pop(0)-x[0]<2:1

Объяснение

f(a:b:r)=2>(a-b)^2&&f(b:r) f _=1>0 ||answer||

Клодюр, 35 байт

all((<2).abs).(zipWith(-)=<<tail)

Насколько это аккуратно?

 

Lindydalio00871


Рег
25 Oct, 2024

Тем
66

Постов
184

Баллов
524
  • 26, Oct 2024
  • #18

TI-Basic, 6 7 байт

Max@Abs@Differences@#<2&

или 5 байт, если ошибки считаются допустимым возвращаемым значением (возвращает f=lambda n,*t:t==()or-2<n-t[0]<=1==f(*t) if insignificant, else let f = (a,p)=>!a.some(v=>(p-(p=v))**2>1) console.log(f([1, 2, 3, 4, 3, 4, 5, 5, 5, 4])) // true console.log(f([1, 2, 3, 4, 5, 6, 7, 8, 9, 8])) // true console.log(f([3, 3, 3, 3, 3, 3, 3] )) // true console.log(f([3, 4, 4, 4, 3, 3, 3, 4, 4, 4])) // true console.log(f([1, 2, 3, 4] )) // true console.log(f([5, 4, 3, 2] )) // true console.log(f([1, 3, 5, 7, 9, 7, 5, 3, 1] )) // false console.log(f([1, 1, 1, 2, 3, 4, 5, 6, 19] )) // false console.log(f([3, 4, 5, 6, 7, 8, 7, 5] )) // false console.log(f([1, 2, 4, 10, 18, 10, 100] )) // false console.log(f([10, 20, 30, 30, 30] )) // false )

NaN ||answer||

Дж, 20 19 байт

Number

Я определил его как глагол, который добавляет к общей длине 3 байта.

Объяснение

a=>!a.some(v=>(a-(a=v))**2>1)

Пример:

IỊẠ

Попробуйте онлайн

 

HEEFTBYPEBATT48


Рег
15 Feb, 2011

Тем
80

Постов
169

Баллов
599
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно