... mas ei, não precisa ser rigoroso.
Dada uma matriz não vazia de números inteiros estritamente positivos, determine se é:
- Monótono estritamente decrescente . Isso significa que cada entrada é estritamente menor que a anterior.
- Monótono não aumenta, mas não diminui estritamente . Isso significa que cada entrada é menor ou igual à anterior e a matriz não se enquadra na categoria acima.
- Nenhuma das opções acima .
Observe os seguintes casos de canto:
- Uma matriz com um único número é monótona diminuindo estritamente (de maneira vacuosa).
- Uma matriz com o mesmo número repetido é monotônica, não aumentando, mas não diminuindo estritamente.
Regras
Você pode fornecer um programa ou uma função
As entradas podem ser obtidas em qualquer formato razoável: array, lista, string com números separados por espaços, ...
Você pode escolher quaisquer três saídas consistentes para as três categorias, respectivamente. Por exemplo, as saídas podem ser números 0
, 1
, 2
; ou strings 1 1
, 1 0
string vazia.
O menor código em bytes ganha
Casos de teste
Monotônico estritamente decrescente:
7 5 4 3 1
42 41
5
Monótono não crescente, mas não estritamente decrescente:
27 19 19 10 3
6 4 2 2 2
9 9 9 9
Nenhuma das acima:
1 2 3 2
10 9 8 7 12
4 6 4 4 2
Respostas:
Geléia ,
10 95 bytesMétodo encontrado por DrMcMoylex, dê algum crédito!
TryItOnline! ou execute todos os testes
Retorna:
-1
= monótono estritamente decrescente;0
= monótono não crescente;1
= outro.Quão?
fonte
M
parte de qualquer mapa de caracteres de 8 bits? Você não pode dizer que são 5 bytes porque não são. O CP1252 não possui, por exemplo.byte
no cabeçalho desta postagem.Perl 6 , 17 bytes
2
1
0
Expandido:
fonte
>
foi alternado comafter
e>=
com!before
.say {[after](@_)+[!before] @_}(<d c b a>) #=> 2
MATL ,
10, 7 bytesExperimente online! ou verifique todos os casos de teste!
3 bytes salvos, graças a @LuisMendo!
As saídas são
Estritamente decrescente: -1
Sem aumento: 0
Outro: 1
Explicação:
fonte
0
vez de anexar a última vantagem1
? Algo como0hdX>ZS
0hdX>0/
- Pergunta para você e @LuisMendo: É possível aproveitar o fato de que a classificação é de apenas 1 caractere (ao contrário deX>
), de alguma forma usando implicitamente o último valor?S
, mas eu não encontrei uma maneira de torná-lo mais curto ...Mathematica, 22 bytes
Função sem nome, levando uma lista de números como entrada. Retorna
-1
se a lista está estritamente diminuindo,0
se não está aumentando, mas não está estritamente diminuindo, e1
se não está.Algoritmo bastante simples: pegue as diferenças de pares consecutivos, pegue o maior e faça o sinal desse maior.
(Eu sinto que deve existir alguma linguagem na qual esse algoritmo tenha 3 bytes ....)
Em relação a uma matriz com uma única entrada:
Differences
gera uma lista vazia;Max
de uma lista vazia dá-∞
(!); eSign[-∞]
avalia como-1
(!!). Então, ele realmente funciona nesta caixa de canto. Às vezes tenho que amar o Mathematica. (De fato, a função também rotula corretamente uma lista vazia como estritamente decrescente.)fonte
Haskell,
403837 bytesDevoluções
GT
para Monotone diminuindo estritamenteEQ
para monótonos sem aumentoLT
outrocompare
compara dois números e retornaGT
(EQ
,LT
) se o primeiro número for maior que (igual a, menor que) o segundo número.zipWith compare<*>tail
compara elementos vizinhos.foldl min GT
reduz a lista dos resultados da comparação com a função min começando com GT (nota:LT
<EQ
<GT
).Edit: @xnor encontrado
23 bytes. Obrigado!fonte
GT
, porque precisamos do mínimo da lista (eu tinha no máximo, o que estava errado e uma relíquia de uma versão inicial em que eu usei=<<
em vez de<*>
).foldl min GT
?Lisp comum,
4340 bytesIsso leva de entrada como uma lista Lisp, e retorna
(T T)
,(NIL T)
e(NIL NIL)
para distinguir as 3 categorias. Aqui, ele está sendo executado nos casos de teste fornecidos:fonte
(defun f(x)(mapcar'apply'(> >=)`(,x,x)))
. Observe que você pode apenas escrever(lambda(x)...)
para ser mais curto.Python 2, 30 bytes
-1
para diminuir estritamente,0
para diminuir fracamente,+1
para não diminuirUsando
cmp
para comparar elementos consecutivos e leva o máximo. Isso é feito removendo o primeiro elemento de uma cópia da lista e, em seguida, mapeandocmp
. Por exemplo,l=[2,2,1]
dáque tem
max
0 porque existe uma igualdade.A lista mais curta é automaticamente estendida com
None
, que é menor que todos os números e é inofensiva. Esse elemento fantasma também se isola de aceitarmin
uma lista vazia quando a entrada tiver comprimento 1.fonte
Braquilog , 7 bytes
Experimente online!
Isso imprime
1
para diminuir estritamente,0
para não aumentar e defalse.
outra forma.Explicação
Outras soluções de 7 bytes
fonte
R, 44 bytes
Lê a entrada do stdin e imprime o seguinte, dependendo da entrada:
Saída:
[1] FALSE TRUE
: Monótono sem aumento[1] TRUE FALSE
: Monótono diminuindo estritamente[1] FALSE FALSE
: Nenhuma das acimafonte
d=diff(scan());ifelse(all(d<=0),!prod(d),2)
é 1 byte mais curto. Ele retorna 0 se monótono estritamente, 1 se monótono não aumenta e 2 se nenhum dos itens acima. Não tenho certeza se é permitido retornar nada se nenhuma das opções acima, mas você pode simplificar ainda maisd=diff(scan());if(all(d<=0))!prod(d)
.d=diff(scan());if(all(d<=0))any(!d)
é um byte melhor.JavaScript (ES6), 51 bytes
Retorna 0 para decrescente estrito, 1 para não aumentar, 2 caso contrário.
fonte
05AB1E ,
58 bytesBug corrigido por Emigna, obrigado! Ele usa o mesmo método que o DrMcMoylex .
Experimente online!
A saída é:
fonte
®¸ì¥Z0.S
corrigiria o problema de elemento único.Ruby, 37 bytes
Saída:
[true,true]
,[true,false]
ou[false,false]
fonte
Mathematica,
1511 bytesEssa é uma função variável, considerando todos os números inteiros de entrada como argumentos separados.
True | True
False | True
False | False
Note que
|
não éOr
, masAlternatives
, que faz parte da sintaxe padrão de correspondência, o que explica por que essas expressões não se avaliou aTrue
,True
,False
, respectivamente.O código em si é principalmente uma aplicação desta dica . Por exemplo
##>0
éGreater[##, 0]
mas depois##
se expande para todos os valores da entrada para que obter algo parecidoGreater[5, 3, 2, 0]
, o que em si significa5>3>2>0
.fonte
Raquete , 44 bytes
Invocado:
Resultado:
fonte
>
como verdadeiro. O Lisp comum acerta isso, mas falha ao definir o caso arity 0 (que também deve ser verdadeiro).C ++ 14, 85 bytes
Retorna 3 (0b11) para redução estrita, 1 (0b01) para não aumento e 0 em caso contrário.
Ungolfed:
Eu pensei que este era um problema perfeito para as expressões dobráveis do C ++ 17:
Infelizmente, ele não encadeia os operadores relacionais, mas
o que não é era desejado.
fonte
Python 2,
6174 bytes+13 bytes para a entrada de número único
Requer entrada em forma de lista de colchetes, como
[3,2,1]
. Retorna 2 para decrescente estrito, 1 para não aumentar e 0 caso contrário.Solução antiga:
fonte
Python 3,
8152 bytes (Graças a FryAmTheEggMan )Experimente online!
fonte
sorted(s)[::-1]
é mais curto para reverter uma lista classificada. No Python 3, você pode fazer{*a}
para obter um conjunto dos elementos dea
.sorted
retorna uma lista para que você também não precise converter o conjunto em uma lista. Também adicionar booleanos é perfeitamente kosher! Finalmente, você pode enviar uma lambda anônima, para não precisarf=
. Eu recebo 52 bytes no final. repl.it/E7eG/2Befunge, 50 bytes
Experimente online!
Aceita entrada como uma sequência de int separada por espaços e retorna 0 se estritamente decrescente, 1 se não estritamente decrescente, 2 caso contrário.
Como ler befunge é meio impossível se você não conhece a linguagem, este é o algoritmo no pseudocódigo:
* in befunge memory é uma pilha que começa com uma quantidade infinita de 0 nela. pop (), push (x), input () e output (x) são auto-explicativos, as outras pseudo-funções que eu usei funcionam assim:
Funge!
Versão anterior, apenas 41 bytes, mas inválida, pois requer um 0 para finalizar a sequência de entrada (ou usando um intérprete como este )
Experimente online!
fonte
0
não conte como um formato de entrada válido. Eu acho que se enquadra na categoria "entrada pré-processada". De fato, algumas respostas acrescentam a0
no código (incluindo isso na contagem de bytes). Eu seria aceitável se você pudesse. Você pode substituir o0
por algum caractere não numérico? Isso seria aceitável0
inserido pelo código para lidar com o caso em que a entrada possui apenas uma entrada. Essa é uma das razões pelas quais considero que incluir isso0
na entrada não é válido. De qualquer forma, se houver um intérprete que não seja necessário, você poderá usá-lo para provar que sua resposta é válida sem o0
. Se o intérprete do Try-it-online precisar disso0
, você poderá incluí-lo para fins de demonstração, com uma nota explicativa apropriadaJ, 14 bytes
Verbo monádico, tomando a lista à direita, retornando
1
para diminuir estritamente,0
para diminuir levemente e de_1
outra forma.Toma o sinal
*
do mínimo<./
de diferenças consecutivas2-/\
da lista. J não troca a ordem das diferenças ao tomá-las, por exemplo, a sequência diminui estritamente se todas forem positivas. Notavelmente,<./
retorna infinito positivo nas listas de elemento zero.Em uso no REPL:
fonte
C,
6867 bytesUma função
f
que recebe uma matriz de ints (l
) precedida por seu comprimento (n
, também um int). Retorna 3 se monótono estritamente diminuindo, 1 se monótono não aumentando, mas não estritamente diminuindo, 0 caso contrário.Un-golfed ligeiramente para facilitar a leitura:
Reorganizados e comentados para mostrar lógica:
Casos de teste (cortesia de IDEOne ):
fonte
Retina , 41 bytes
Experimente online! (A primeira linha ativa um conjunto de testes separado por avanço de linha.)
2
3
1
Explicação
Converte a entrada unária.
A regex aqui corresponde a um par crescente de números consecutivos. Se for esse o caso, a entrada claramente não pode aumentar. O
A
denota como um estágio "anti-grep", o que significa que a linha de entrada é descartada e substituída pela sequência vazia, se o regex corresponder.Este é um estágio dividido que é usado para anexar um avanço de linha à entrada apenas se a entrada não tiver sido descartada. Portanto, temos dois resultados possíveis até agora: entradas não crescentes obtêm um avanço de linha no final e outras ainda estão vazias.
Finalmente, contamos o número de correspondências desse regex. A regex corresponde a números idênticos (e depois tudo ao final da string para evitar várias correspondências desse tipo para entradas como
1 1 1 1
) ou o "final da entrada". Vamos analisar os três tipos de entradas:$
correspondências. Agora$
não é exatamente "o fim da string". Também pode corresponder à frente de um avanço de linha à direita. Então, na verdade, obteremos duas correspondências, uma no final da entrada e outra após o avanço de linha que inserimos.$
corresponde apenas uma vez.fonte
Axioma, 114 bytes
Ungolfed
Resultados
fonte
APL, 16 bytes
Nota: insira uma matriz de elementos como por exemplo
a←1⍴3
:a←4 3 2 1
Interpretando a saída:
Idéia: teste a monotonicidade comparando a matriz original com a classificada, verifique se não há aumento comparando a matriz com as duplicações removidas.
(E acho que pode ser melhorado ...)
fonte
Haskell, 36 bytes
(+x)
é porque haskell interpreta mal(-x)
como um valor em vez de uma seção. Eu me pergunto se toda a expressão pode ser lucrativa e sem sentido.fonte
LabVIEW, 12 nós, 18 fios ==> 48 bytes por convenção
Nenhuma função oculta nos outros quadros do gabinete, apenas um único fio.
fonte
Ceilão, 86 bytes
A função pega a entrada como seus parâmetros e retorna uma tupla de zero ou um booleano -
[false]
para Monotone estritamente decrescente ,[true]
para Monotone não crescente, mas não estritamente decrescente , e[]
para Nenhuma das opções acima .Pode ser usado assim:
Saída:
Uma versão não-gasta e comentada:
fonte
Clojure, 34 bytes
Muito simples, retorna
1
para se estiver estritamente diminuindo,2
se não estiver aumentando e denil
outra forma.Também tentei evitar
apply
com macro,~@
mas é apenas mais longo em 43 caracteres (isso resulta em[1 2 nil]
):fonte
Pip , 8 bytes
Programa completo. Leva a lista de entrada como argumentos da linha de comando. Saídas
11
para diminuir estritamente,01
para não aumentar,00
para nenhuma.Experimente online!
Explicação
Essa abordagem funciona porque os operadores de comparação do Pip, como o do Python, se encadearam:
4>3>2
são verdadeiros, em vez de serem(4>3)>2
(falsos), como em C. E o mesmo comportamento ocorre quando os operadores de comparação são modificados com o$
meta-operador fold.fonte
Japonês ,
987 bytesSaídas
-1
para "monotonia estritamente decrescente",0
para "monotonia não incrementada" e1
outras.Tente
1 byte salvo graças a Oliver .
fonte
än mg rw
retorna os resultados errados sem o,J
mas esse não é o casoän rw g
. Esquisito.R , 34 bytes
Experimente online!
Portos resposta do MATL do DJ .
R , 43 bytes
Experimente online!
Retorna
2
para diminuir estritamente,1
para não aumentar e de0
outra forma.all(x==cummin(x))
isTRUE
(converte para1
quando usado em aritmética) se e somente sef
não aumentar, incluindo o caso estrito.all(diff(x)<0)
éTRUE
somente quandof
está estritamente diminuindo.fonte