Codegolf — Определить, Содержит Ли Массив Что-То Кроме 2

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

Возьмите массив, состоящий из чисел или массивов, выведите результат, если он содержит только

 
 [1]
[22]
[2,2,2,1]
[[1,2],2]
 
s.

Вывод должен быть правдивым или ложным значением (извините, если это уничтожает ответы)

Правдивые тестовые примеры

[2] [2,2] [[2],[2,2],2] [] [[],[]]

Ложные тестовые случаи

2

Стандартные лазейки Запрещены.

ввод-вывод по умолчанию применяются правила.

Код-гольф: выигрывает наименьшее количество байтов!

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

Dburon15


Рег
11 Apr, 2020

Тем
84

Постов
213

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

Питон 2, 43 40 байт

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
     Q   Input:     [[[], [2]], [1]]

.n    Flatten:   [2, 1]

-   2  Remove 2s: [1]
!       Not:       False
 

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


На момент публикации этого ответа это все еще было разрешено этот мета-консенсус для вывода через выдачу ошибки/не выдачу ошибки. Поэтому этот ответ размером 26 байт был действительным:

!-.nQ2

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

 

Fkosyachenko


Рег
01 Nov, 2008

Тем
71

Постов
196

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

Пролог (SWI), 43 33 байта

Я чувствую запах... рекурсия.

Благодаря Эминья и Дырявая монахиня за экономию 10 байт!

Код

<?=!preg_match('#22|[013-9]#',json_encode($_GET));

Попробуйте онлайн! или Проверьте все тестовые примеры!

Объяснение:

Для пользователей, не использующих Пролог, список форматируется следующим образом: ! .

+ is the first element of the list, and tail is the remaining list. Проверьте это здесь!. Важным случаем здесь является то, что хвост списка с 1 элементом равно ! . You can проверьте это здесь.

<?=!ereg("22|[013-9]",json_encode($_GET)); ||answer||

Желе, 4 байта

<?=!ereg("22|[013-9]",$argn);

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

Как это работает

<?=!preg_match('/:"(?!2")/',serialize($_GET)); ||answer||

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

∙e]Å2E ∙e ■Evaluate the input to form an array Å ■any( , ) ] ■ flatten(input) 2N ■ lambda x:x!=2 ■implict end of any and print

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

Это анонимная функция, принимающая один входной аргумент: CP-437 . It subtracts ∙e]Å2N из всех элементов проверяет, есть ли какие-либо ненулевые элементы. Он отрицает вывод, чтобы получить "22" for cases where all values are zero.

Это работает, потому что x works for matrices of all sizes, including the empty matrix, [], 2 .

lambda x:set(x)<=set("[],2"*0**("22"in x)) would be sufficient if there couldn't be empty matrices in the input.

 

Toxaua


Рег
18 Dec, 2007

Тем
69

Постов
208

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

МАТЛ, 3 байта

x

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

Технически это может быть просто

String#matches

Поскольку массив, содержащий любые нулевые элементы, является ложным, но это кажется дешевым.

 

Ital


Рег
14 Mar, 2020

Тем
73

Постов
208

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

05AB1E, 4 байта

String#matches

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

Объяснение

^...$ ||answer||

JavaScript (ES6), 22 19 23 22 байта

s->s.matches("(\\W|2\\b)+")

Проверьте это

˜D # Flatten and duplicate O # Sum one copy sg· # Get double the length of the other copy Q # Check if they are equal ||answer||

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

˜DOsg·Q

Это также работает в математике. Попробуйте онлайн!

 

Cocinform


Рег
18 Nov, 2019

Тем
82

Постов
225

Баллов
665
  • 26, Oct 2024
  • #8

АПЛ (Диалог), 5 байт

let f = _=>(_+"").split`,`.map(c=>!c?2:c).every(c=>c==2) console.log(f([2])) console.log(f([2,2])) console.log(f([[2],[2,2],2])) console.log(f([])) console.log(f([[],[]])) console.log(f([1])) console.log(f([22])) console.log(f([2,2,2,1])) console.log(f([[1,2],2]))

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

Объяснение

_=>(_+"").split`,`.map(c=>!c?2:c).every(c=>c==2) ||answer||

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

2‚˜Ë

Чистый возврат функции ^(\W|2\b)+$ or F=2Ạ F Flatten =2 Check if equal to 2 (vectorizes) Ạ Check if there isn't any falsey value . После F=2Ạ ing the nested array and calling it f=lambda a:all(type(x)!=int and f(x)for x in a if x!=2) , ! returns the list of elements that match the "pattern" TRUE , и any checks whether that's the whole list.

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

FALSE

Не так коротко, но веселее. Начиная с ввода logical() , two replacement rules are applied until the result stops changing ( any ): во-первых, все numeric() s are replaced by unlist(list()) с; а затем любой список, все записи которого представляют собой пустые множества ( unlist ) are replaced (repeatedly) by empty sets. If the rest is an empty set ( ! ), мы победим.

 

Sergey Shukan


Рег
25 Oct, 2020

Тем
73

Постов
211

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

Хаскелл, 36 байт

Анонимная функция принимает TRUE and returns a any .

Использовать как 2

unlist(x)

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

Как это работает

  • В Haskell нет встроенных списков смешанного типа, поэтому в качестве аргумента мы принимаем строку.
  • function(x)!any(unlist(x)-2) generates a list of all suffixes of the string.
  • % Implicit input 2- % Push 2 to the stack, and subtract from input a % Any non-zero elements? ~ % Negate to get true for cases where all elements are zero. tries to parse a number at the beginning of each suffix, combining the successes into a list of tuples 2-a~ .
  • f=a=>a.map?a.every(f):a==2 console.log(f([2])) console.log(f([2,2])) console.log(f([[2],[2,2],2])) console.log(f([])) console.log(f([[],[]])) console.log(f([1])) console.log(f([22])) console.log(f([2,2,2,1])) console.log(f([[1,2],2])) checks if all the parsed numbers are f=a=>a.map?a.every(f):a==2 .
 

OlesJ


Рег
19 Aug, 2011

Тем
78

Постов
197

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

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

->x{x.flatten-[2]==[]}

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

Принимает строку без пробелов, выводит логическое значение.

Проверяет, удаляются ли все символы l of 22 дает пустую строку. Также проверяет это l is not a substring -- if it is, the input '[],2' используется вместо пустой строки для сравнения с результатом удаления, и это всегда терпит неудачу.

 

Lenx2007


Рег
01 Jun, 2011

Тем
69

Постов
188

Баллов
553
  • 26, Oct 2024
  • #11

Ruby, 28 23 22 байта — 5 байт сохранено ГБ

lambda l:l.strip('[],2')==l*('22'in l)

Несмотря на то, что «сглаживание» очень длинное, оно все же короче, чем решения на основе регулярных выражений или рекурсивные методы, которые должны устранять ошибки в базовом случае. Однако встроенное в Ruby объединение множеств и массивов иногда оказывается удивительно полезным.

 

AlisonRof


Рег
12 Feb, 2014

Тем
63

Постов
208

Баллов
543
  • 26, Oct 2024
  • #12

JavaScript (ES6), 26 байт

2

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

all((==2).fst) ||answer||

МАТЛ, 4 байта

(n,restOfString)

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

Авария:

(reads=<<)

Хорошо, переиграл. Но я сохраняю это, так как очень рад, что справился со всем этим самостоятельно (хотя задача очень простая).

 

Golgocha


Рег
25 Jan, 2012

Тем
70

Постов
168

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

Р, 28 байт

scanr(:)[]

all((==2).fst).(reads=<<).scanr(:)[] turns a (nested) list into a vector. Then (all((==2).fst).(reads=<<).scanr(:)[]) "[2,2,2,1]" вычитается из этого вектора. Bool converts (with a warning) numeric to logical and checks if there are any String с. Это перевернуто с =={} and output.

Это работает с вложенными списками, потому что {{}..} by default works recursively to unlist all list entries of the initial list.

Это также работает с пустыми списками, потому что {} becomes 2 , пустой числовой вектор. Принуждение со стороны //. makes it # , что интерпретируется как (#//.{2->{},{{}..}->{}})=={}& by ==t , а затем вернулся к 2 by Cases[t,2] .

 

Icanitarhin


Рег
18 Jul, 2015

Тем
95

Постов
205

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

JavaScript (ES6), 53 50 48 байт

∧/ Only 2= 2s are equal to ∊ any of the elements in the enlisted form of the right argument

Сэкономлено 5 байт, спасибо @Shaggy!

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

∧/2=∊ ||answer||

05AB1E, 7 байт

FreeQ[x_/;x!=2]

Попробуйте онлайн! или Попробуйте все тесты!

f= a=>!/[^2,]|22/.test(a) console.log(" "+f([2])+": "+JSON.stringify([2])) console.log(" "+f([2,2])+": "+JSON.stringify([2,2])) console.log(" "+f([[2],[2,2],2])+": "+JSON.stringify([[2],[2,2],2])) console.log(" "+f([])+": "+JSON.stringify([])) console.log(" "+f([[],[]])+": "+JSON.stringify([[],[]])) console.log(f([1])+": "+JSON.stringify([1])) console.log(f([22])+": "+JSON.stringify([22])) console.log(f([2,2,2,1])+": "+JSON.stringify([2,2,2,1])) console.log(f([[1,2],2])+": "+JSON.stringify([[1,2],2])) ||answer||

Java 8, 126 55 27 байт

a=>!/[^2,]|22/.test(a)

Порт @KritixiLithosпотрясающий ответ Retina, исключая ˜ # flatten list YQ # check each element for equality to 2 P # product of list , since ˜YQP всегда соответствует всей строке и добавляет \W|\b2 ^$ implicitly.

-2 байта спасибо @Jakob за напоминание Select[Flatten@#,#!=2&]=={}& isn't necessary for 2= .

Попробуйте здесь.

 

Виктор Б


Рег
12 Jul, 2011

Тем
73

Постов
197

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

Питон 2, 44 43 42 байта

Берет 2=p as the string representation of the list. This also assumes like in the example the representations have no spaces.

x-2

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


Объяснение

Оба они принимают символы из строкового представления ввода и определяют, есть ли какие-либо символы, кроме [] are in it. They do this by casting to a set and comparing to the set of just those characters. However this fails if we have a number other than 2 which has only digits of 2 (e.g. 22 or 222), in order to patch this case we multiply the string used to create the set by the negation of whether or not x-2 содержит true . If it contains it this will be the empty set, otherwise it will be the same as before.

 

Cocaatmomphot63


Рег
25 Oct, 2024

Тем
73

Постов
188

Баллов
603
  • 26, Oct 2024
  • #19

Ом, 6 байт

2

Использование x encoding.

Объяснение:

@(x)~any(x-2) ||answer||

PHP, 46 байт

F;2E F flatten ;2 append 2 E all elements are equal ||answer||

PHP<7.0, 29 байт

Ввод в виде массива строк в кодировке JSON.

F;2E

PHP<7.0, 42 байта

используйте устаревшую функцию эрег

% State that an empty array is truthy. a([]). % If the list is not empty (covered by the previous line), we need to check % whether the Head is equal to 2 or whether the head is truthy. % After that, we only need to check if the remaining list is truthy. a([Head | Tail]) :- (Head = 2; a(Head)), a(Tail).

PHP, 50 байт

печатает 1 для истинного и ничего для ложного

-1 байт для другого мудрого удаления []

или + 1 байт для истинного 1, ложного 0 добавить Head before [Head | Tail]

a([]). a([X|T]):-(X=2;a(X)),a(T).

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

 

Bobin001


Рег
20 Apr, 2008

Тем
69

Постов
214

Баллов
609
  • 26, Oct 2024
  • #20

Пиф, 6 байт

f=lambda l:l==2or map(f,l)

Очень похоже на мой ответ CJam. Я все еще новичок в Пите, поэтому, пожалуйста, скажите мне, могу ли я чем-нибудь заняться в гольф.

Объяснение:

f=lambda l:l>=[]and all(map(f,l))or l==2
 

Ion100


Рег
02 Apr, 2013

Тем
101

Постов
197

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

Интересно