Pegue uma matriz que consiste em números ou matrizes, produza se ela contiver apenas 2
s.
A saída deve ser um valor verdadeiro ou falso (desculpe se isso destrói as respostas)
Casos de teste de verdade
[2]
[2,2]
[[2],[2,2],2]
[]
[[],[]]
Casos de Teste Falsey
[1]
[22]
[2,2,2,1]
[[1,2],2]
As brechas padrão são proibidas.
Regras de E / S padrão se aplicam.
Código de golfe, menos bytes ganha!
[[2]]
que não contêm um dois.Respostas:
MATL , 3 bytes
Experimente online!
Tecnicamente, isso poderia ser apenas
Como uma matriz que contém quaisquer elementos zero é falsa, mas isso parece barato.
fonte
2=
falha para matrizes vazias, ou?2=p
funciona bem. A versão mais curta no final,2=
não. Além disso, "os casos extremos de borda" são dois dos casos de teste. :-)Python 2 ,
4340 bytesExperimente online!
No momento da publicação desta resposta, ainda era permitido, por esse meta consenso, gerar um erro / não um erro. Portanto, esta resposta em 26 bytes era válida:
Experimente online!
fonte
all
, nada além de um erro é verdadeiro.Prolog (SWI) ,
4333 bytesEu cheiro... recursão .
Graças a Emigna e Leaky Nun por salvar 10 bytes!
Código
Experimente online!ou Verifique todos os casos de teste!
Explicação:
Para usuários não-Prolog, uma lista é formatado da seguinte maneira:
[Head | Tail]
.O
Head
é o primeiro elemento da lista e tail é a lista restante. Teste aqui! . Um caso importante aqui é que a cauda de uma lista com 1 elemento é igual a[]
. Você pode testar isso aqui .fonte
Gelatina , 4 bytes
Experimente online!
Como funciona
fonte
Oitava, 13 bytes
Verifique todos os casos de teste.
Esta é uma função anônima que recebe um argumento de entrada
x
,. Ele subtrai2
de todos os elementos, verifica se existem elementos diferentes de zero. Ele anula a saídatrue
para casos onde todos os valores são zero.Isso funciona porque
x-2
funciona para matrizes de todos os tamanhos, incluindo a matriz vazia[]
,.x-2
seria suficiente se não pudesse haver matrizes vazias na entrada.fonte
Matemática , 28 bytes
Experimente online!
fonte
{0}
é permitida; isso resultaria em um falso positivo.Retina ,
1310 bytesObrigado ao Kritixi Lithos por salvar 3 bytes.
Experimente online!
fonte
05AB1E , 4 bytes
Experimente online!
Explicação
fonte
2
funcionaria em vez deY
?2
funciona também. Eu apenas gosto do fato de que não há números nele :)JavaScript (ES6),
22192322 bytesTeste-o
fonte
Mathematica, 15 bytes
Também funciona em matemática. Experimente online!
fonte
APL (Dyalog) , 5 bytes
Experimente online!
Explicação
fonte
Mathematica, 24 bytes
Função pura retornando
True
ouFalse
. ApósFlatten
digitar a matriz aninhada e chamá-lat
,Cases[t,2]
retorna a lista de elementos que correspondem ao "padrão"2
e==t
verifica se essa é a lista inteira.Mathematica, 29 bytes
Não é tão curto, mas mais divertido. A partir da entrada
#
, duas regras de substituição são aplicadas até que o resultado pare de mudar (//.
): primeiro, todos os2
s são substituídos por{}
s; e qualquer lista cujas entradas sejam todos conjuntos vazios ({{}..}
) será substituída (repetidamente) por conjuntos vazios. Se o resto for um conjunto vazio (=={}
), vencemos.fonte
Haskell , 36 bytes
Uma função anônima, pega a
String
e retorna aBool
.Use como
(all((==2).fst).(reads=<<).scanr(:)[]) "[2,2,2,1]"
Experimente online!
Como funciona
scanr(:)[]
gera uma lista de todos os sufixos da sequência.(reads=<<)
tenta analisar um número no início de cada sufixo, combinando os sucessos em uma lista de tuplas(n,restOfString)
.all((==2).fst)
verifica se todos os números analisados são2
.fonte
not.all(`elem`"2,[]")
?22
.Python 2 , 38 bytes
Experimente online!
Pega uma string sem espaços, gera um bool.
Verifica se a remoção de todos os caracteres
'[],2'
del
fornece a sequência vazia. Também verifica que22
não é uma substring - se for, a entradal
é usada no lugar da cadeia vazia para comparar com o resultado da remoção e que sempre falha.fonte
Ruby,
282322 bytes - 5 bytes salvos por GBApesar de o "achatamento" ser muito longo, ainda é mais curto que as soluções baseadas em regex ou coisas recursivas que precisam resgatar erros no caso base. A combinação embutida de conjuntos e matrizes de Ruby, no entanto, às vezes é incrivelmente útil.
fonte
[]
or[[],[]]
.[2,*x].flatten.uniq==[2]
is slightly longerx.flatten-[2]==[]
is shorter still. Thanks for the tip!JavaScript (ES6), 26 bytes
Test cases
Show code snippet
fonte
f=
because you referred to it.MATL, 4 bytes
Try it online!
Breakdown:
Well, outgolfed. But I'm keeping this, since I'm quite happy I managed this all on my own (even though the task is super simple).
fonte
R, 28 bytes
unlist(x)
turns a (nested) list into a vector. Then2
is subtracted from that vector.any
converts (with a warning) numeric to logical and checks if there are anyTRUE
s. This is inverted with!
and output.This works with nested lists because
unlist
by default works recursively to unlist all list entries of the initial list.This also works with empty lists, because
unlist(list())
becomesnumeric()
, an empty numerical vector. Coercion byany
makes itlogical()
, which is interpreted asFALSE
byany
, and then reversed toTRUE
by!
.fonte
pryr::f(!any(unlist(x)-2))
saves a couple of bytes.all(unlist(x)==2)
as well.any(unlist(x)-2)
which returns a consistentTRUE
if there is a non-2 value in the flattened array and a consistentFALSE
if all the values are2
...TRUE
counts as falsey though :/Python 3, 55 bytes
No cheating. Uses nested list as input.
Try it online!
fonte
int!=type(x)and
Jelly, 4 bytes
Try it online!
Slightly different than Leaky's algorithm.
Explanation:
fonte
Retina,
1411 bytesTry it online!
fonte
\W
doesn't seem such a good criteria :2.2
is a number that isn't2
, yet I suppose it would match05AB1E, 4 bytes
Try it online!
fonte
JavaScript (ES6),
535048 bytesSaved 5 bytes, thanks to @Shaggy!
Test Cases :
fonte
f([])
andf([[],[]])
should be truthy!c
instead ofc==""
.05AB1E, 7 bytes
Try it online! or Try All Tests!
fonte
Java 8,
1265527 bytesPort of @KritixiLithos's amazing Retina answer, excluding the
^...$
, sinceString#matches
always matches the entire String and adds the^...$
implicitly.-2 bytes thanks to @Jakob for reminding me of
^...$
isn't necessary forString#matches
.Try it here.
fonte
boolean c(java.util.List l){return(l+"").matches("^(\\W|2\\b)+$");}
would work, right? Just wanted to point that out in case you were planning to further golf the list solution.^
and$
in the regex, sinceString.matches
only tests against the whole string.^...$
. Forgot about that, even though I've used it quite a lot of times in the past..Python 2,
444342 bytesTakes
x
as the string representation of the list. This also assumes like in the example the representations have no spaces.Try it online!
Explanation
Both of these take the characters in the string representation of the input and determine if any characters other than
[], 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 notx
contains"22"
. If it contains it this will be the empty set, otherwise it will be the same as before.fonte
lambda x:set(x)==set("[], 2")
?[22]
[]
lambda x:set(x)<=set("[],2"*-~-("22"in x))
for -1Ohm, 6 bytes
Uses
CP-437
encoding.Explanation:
fonte
PHP, 46 bytes
fonte
$_GET
as strings?<?=!preg_match('/:"(?!2")/',$argn);
and input is a string representation of the serialized array - 11 BytesPHP<7.0, 29 Bytes
Input as as string array JSON encoded
PHP<7.0, 42 Bytes
use the deprecated function ereg
PHP, 50 Bytes
prints 1 for true and nothing for false
-1 Byte for other wise remove
!
or + 1 Byte for true 1, false 0 add
+
before!
Try it online!
fonte
$r
variable:<?array_walk_recursive($_GET,function($i){$i-2&¨})?>1
.Pyth, 6 bytes
Very similar to my CJam answer. I'm still new to Pyth, so please tell me if there's anything I can golf off.
Explanation:
fonte