Matrizes alternadas
Uma matriz alternada é uma lista de qualquer comprimento em que dois valores (não necessariamente diferentes) sejam alternados. Ou seja, todos os itens indexados pares são iguais e todos os itens indexados ímpares são iguais.
Sua tarefa é escrever um programa ou função que, quando recebida uma lista de números inteiros positivos, gera / retorna, truthy
se for alternado ou falsy
não.
Isso é código-golfe , então o código mais curto (em bytes) vence!
Casos de borda:
[] -> True
[1] -> True
[1,1] -> True
[1,2,1] -> True
Outros casos de teste:
[1,2,1,2] -> True
[3,4,3] -> True
[10,5,10,5,10] -> True
[10,11] -> True
[9,9,9,9,9] -> True
[5,4,3,5,4,3] -> False
[3,2,1,2,1,2] -> False
[1,2,1,2,1,1,2] -> False
[2,2,3,3] -> False
[2,3,3,2] -> False
Exemplo
Aqui está um exemplo no qual você pode testar sua solução, escrita em Python 3 (sem jogar golfe):
def is_alternating(array):
for i in range(len(array)):
if array[i] != array[i%2]:
return False
return True
Respostas:
Gelatina , 4 bytes
Experimente online!
Como funciona
fonte
2
para outros números generaliza imediatamente o desafio!Ɲ
não existia quando o desafio foi lançado.brainfuck, 34 bytes
Pega a matriz como valores de bytes em uma string e gera
\x00
como false e\x01
true.Experimente online.
Isso mantém a estrutura
a b 1 c
na fita, onde
c
está o caractere atual,b
é o caractere anterior ea
é o caractere anterior anterior, desde que a matriz esteja alternada. Se uma incompatibilidade for encontrada, o ponteiro será movido para a esquerda, de modo quea
,,b
e o1
sinalizador se tornem zero, e essa situação continuará até que toda a entrada seja consumida.fonte
R,
2423 bytesLê um vetor no STDIN, pega os dois primeiros elementos desse vetor e verifica a igualdade. Se os comprimentos de
a[1:2]
e a não corresponderem, R passaráa[1:2]
para corresponder ao comprimento de a. Dará um aviso sobre isso, mas funcionará.Surpreendentemente, isso funciona mesmo para entradas vazias, não sei por que, mas vou rolar com ela.
Guardado 1 byte graças a @MickyT
fonte
all((a=scan())==a[1:2])
MATL ,
76 bytesPara matrizes alternadas, isso gera uma matriz não vazia de unidades, que é verdadeira. Para matrizes não alternadas, a matriz contém pelo menos um zero e, portanto, é falsa (veja aqui ).
Experimente online! Ou verifique todos os casos de teste .
Explicação
Vamos dar
[1 2 1 2]
como exemplo de entrada.fonte
JavaScript (ES6), 27 bytes
Casos de teste
Mostrar snippet de código
fonte
Retina , 25 bytes
Experimente online!
Em vez de combinar uma entrada com valores alternativos (o que leva a alguns efeitos irritantes de borda em uma regex), estou combinando entradas que não são válidas e depois negamos o resultado posteriormente.
O benefício de corresponder uma entrada inválida é que esta é uma propriedade que pode ser verificada localmente e não precisa tratar especialmente entradas vazias ou curtas: qualquer entrada é inválida se contiver dois valores distintos que estão separados por uma posição.
Portanto, o primeiro estágio conta o número de correspondências
\b(\d+),\d+,(?!\1\b)
correspondentes e captura um valor, depois corresponde ao próximo valor e, em seguida, afirma que o terceiro valor na sequência é diferente. Isso dá zero para entradas válidas e algo positivo para valores inválidos.A segunda fase simplesmente conta o número de jogos de
^0
que é1
, se a primeira etapa devolvido0
e1
de outra forma.fonte
Mathematica, 29 bytes
Uma porta do algoritmo MATL de Luis Mendo. Função sem nome, levando uma lista de números (ou objetos ainda mais gerais) e retornando
True
ouFalse
. Testa se somas de elementos consecutivos são iguais. InfelizmenteMost
eRest
engasgar com a lista vazia, de modo que tem de ser testados separadamente.Mathematica, 33 bytes
Função sem nome, levando uma lista de números (ou objetos ainda mais gerais) e retornando
True
ouFalse
. A funçãoDifferences[#,1,2]
pega as diferenças, não de pares consecutivos de números inteiros, mas pares de números inteiros na distância dois. Depois, apenas verificamos se a lista resultante não possui nada além de zeros.Como bônus, para mais um byte (altere
2
para#2
), obtemos uma função que insere uma lista de números inteiros e outro número inteiro positivo#2
e verifica se a lista de entrada é o resultado da intercalação#2
periódica de seqüências constantes entre si. Por exemplo,avalia como
True
.fonte
Haskell,
2726 bytesIsso avalia uma função anônima que resolve o desafio. A idéia é soltar os dois primeiros números da lista, compactar com a lista original usando igualdade e verificar se o resultado contém apenas
True
s. Experimente online!Obrigado a nimi por 1 byte!
fonte
and.(zipWith(==)=<<drop 2)
salva um byte.Retina ,
39.32.28 bytesExperimente online!
Economizou 7 bytes graças a Martin ! Guardado mais 3 agradecimentos a Kobi ! E a Kritixi por uma idéia para outra 1.
Opcionalmente, combinamos um número que ocupa toda a entrada, qualquer par de números ou qualquer par de números seguido pelo mesmo par várias vezes e, opcionalmente, não incluindo o segundo número no final. Pode salvar 2 bytes se a entrada estiver unária.
fonte
^(\d+)?(.\d+)?(.\1\2)*(.\1)?$
alternativa de 29 bytes. Isso não corresponde,1,,1
.Pitão, 9 bytes
Explicação
fonte
Q
s ao código. Eu os adicionei na explicação para deixar mais claro o que estava acontecendo, mas eles não estão realmente no código.Braquilog , 15 bytes
Experimente online!
Explicação
fonte
APL, 7 bytes
Explicação:
2⍴⊢
: remodelar a matriz de entrada por 2⍴⍴
: remodelar o resultado pelo tamanho original da entrada, repetindo elementos⊢≡
: veja se o resultado é igual à entrada originalCasos de teste:
fonte
Java 8, 63 bytes
Esta é uma expressão lambda para um
Predicate< int[ ] >
Explicação: inicialize o resultado como 0. Para cada elemento, Biteise OU o resultado com a diferença entre o elemento atual e o elemento 2 indica anteriormente. retorne
true
se o resultado for igual a 0. Caso contrário, retornefalse
fonte
Perl 6 ,
49 4342 bytesTente
Tente
Tente
Expandido:
fonte
$_[1]
pode ser um byte mais curto que.[1]
. O corpo do lambda interno pode ser um byte mais curto que{.[0]!=a||.[1]!=b}
..[1]
. Também!=
não parece funcionar se não for seguido por um espaço. Eu acho que algo como$_!=3
está sendo analisado como se estivesse escrito como!( $_ = 3 )
Python 2 , 35 bytes
Experimente online!
fonte
J, 8 bytes
Explicação
Casos de teste
fonte
{.
Take por$
Shape.Haskell ,
3332 bytesExperimente online! ou Verifique as caixas de teste. -1 byte graças ao Zgarb.
fonte
[]
, mas por algum motivo o ghc não pode inferir o tipo correto para[]
. Funciona se testado junto com o outro caso de teste, consulte Verificar as caixas de teste.f(a:x@(_:b:_))=a==b&&f x
bash,
565438 bytesSalve isso como um script e passe a lista de números como argumentos (para uma lista de n elementos, você passará n argumentos). A saída é o código de saída: 0 (para true) se a lista estiver alternada e 1 (para false) caso contrário.
(A saída de retorno no código de saída é permitida nos métodos de E / S padrão do PPCG.)
Isso funciona recursivamente:
fonte
Python 2.7, 38 bytes
Casos de teste:
fonte
Pyke, 6 bytes, não-competitivo
Experimente aqui!
Permitir remodelar o nó para obter uma lista e uma sequência
fonte
Shenzen IO (Assembler),
8376 bytes, não-concorrenteShenzen io é um jogo de quebra-cabeça em que você pode codificar em uma linguagem montadora-ish especial.
Infelizmente, você só pode usar números inteiros entre -999 e 999 como entradas ou saídas, e não há como saber se uma matriz terminou. Então eu assumi que o array foi escrito em uma ROM que envolve depois de ler a última célula. Isso significa que apenas matrizes podem ser usadas, razão pela qual não são concorrentes.
Código:
Explicação:
Desculpe se isso é confuso, esta é minha primeira resposta ao código-golfe.
Edição: removido 7 bytes, substituindo loops pelo código de execução única
fonte
Ruby, 23 bytes
fonte
Ruby,
131119 bytesO Lambda
a
espera uma matrizx
e retorna true se houver 0 ou 1 valores exclusivos para os elementos indexados ímpares e 0 ou 1 valores exclusivos para os elementos indexados pares na matriz.Notte byte-safers
def
!arr[1]
vs.arr.length < 2
&
vs&&
Casos de teste
fonte
Dardo, 46 bytes
Correr com:
fonte
C #, 54 bytes
Filtre a matriz para mostrar valores que não correspondem ao primeiro valor para pares e o segundo valor para probabilidades. Se não houver nenhum resultado, retorne true.
fonte
Japonês,
76 bytesExperimente ou execute todos os casos de teste
fonte
C #, 66 bytes
Função anônima que recebe uma matriz inteira e retorna 1 se a matriz estiver alternada e 0 caso contrário.
Programa completo com funções não testadas e casos de teste:
fonte
Oitava, 51 bytes
Input é uma matriz de células de números inteiros positivos.
Experimente online!
fonte
Clojure, 70 bytes
Verifica se a contagem distinta de cada segundo item é 1 e lida com coleções vazias como um caso especial. Também tentei muitas abordagens baseadas em
reduce
egroup-by
mas não muito sorte lá.fonte
Outra opção com R: 36 bytes.
E acho que encontrei uma versão muito mais curta: 15 bytes
fonte