Um algoritmo de "classificação"


33

Há um "algoritmo de classificação", às vezes chamado classificação Stalin, no qual, para classificar uma lista, você simplesmente remove elementos da lista até que ela seja classificada em ordem crescente. Por exemplo, a lista

[1, 2, 4, 5, 3, 6, 6]

Quando "classificado" usando a classificação Stalin se torna

[1, 2, 4, 5, 6, 6]

Os três foram removidos porque estavam fora de ordem.

Agora, obviamente, existem muitas maneiras de remover elementos para classificar uma lista. Por exemplo, qualquer lista com menos de dois elementos deve ser classificada; portanto, basta remover elementos suficientes cegamente, sempre podemos classificar uma lista. Como esse é o caso, nos preocupamos apenas com o resultado mais longo possível de um tipo de Stalin.

Sua tarefa será pegar uma lista de números inteiros positivos e gerar o comprimento da lista classificada mais longa (crescente) que pode ser alcançada removendo elementos da lista original. É o comprimento da sub-lista classificada mais longa (possivelmente não contígua).

As listas ordenadas podem ter o mesmo elemento mais de uma vez em uma linha. Você não precisa oferecer suporte à lista vazia, a menos que seu próprio programa esteja vazio.

Pontuação

Sua resposta será pontuada pelo tamanho de sua própria classificação Stalin mais longa possível. Os programas serão interpretados como uma sequência de bytes em vez de caracteres, e sua ordem será a ordem natural que surgir ao interpretar os bytes como números. Pontuações mais baixas são melhores.

Este não é um

Aqui está uma ferramenta simples para ajudá-lo a obter suas respostas.

Casos de teste

[1, 2, 4, 5, 3, 6, 6] -> 6
[19, 2] -> 1
[3, 3, 4, 3] -> 3
[10] -> 1
[1, 2, 4, 9] -> 4
[1, 90, 2, 3, 4, 5] -> 5
[1, 90, 91, 2, 3, 4, 5] -> 5

3
Resumindo: imprima o comprimento da sequência crescente mais longa (não estritamente) .
user202729

1
Eu gosto da regra "Você não precisa oferecer suporte à lista vazia, a menos que seu próprio programa esteja vazio".
Paŭlo Ebermann 1/11/18

Este desafio me lembra muito do desafio dropsort: codegolf.stackexchange.com/questions/61808/...
Stefnotch

1
Eu fiz um verificador em ptpb.pw/SVSt.html . Ainda não é muito funcional, mas funciona. (TODO: gráfico de barras * * partição em sequências de pelo menos decrescentes * apoio para outras páginas de código)
user202729

@ user202729 Legal! Adicionei à postagem. Sinta-se livre para editar versões mais recentes, se necessário.
Wheat Wizard

Respostas:


8

Python 2 , comprimento 14 12 10 9

M=max;X=exit;i=input();L=[0]*M(i)
for	a	in	i:L[a-1]=M(L[:a])+1
X(M(L))

A saída é via código de saída.

Experimente online!

Como funciona

A todo momento, a matriz L controla os subarrays classificados mais longos encontrados até agora; L[a1] é o comprimento do mais longo que termina com a .

Inicialmente, não processamos os elementos de uma matriz, portanto L consiste inteiramente em zeros.

a[L[0],,L[a1]]aaaL[a1]

L


Você pode explicar por que funciona? Estou tendo dificuldades para compreendê-lo :(
Dead Possum

Eu adicionei uma explicação.
Dennis




4

Gelatina , comprimento  4  2

ṢƑƇZLƲ}ŒP

Experimente online!

Bytes na página de códigos de Jelly

183 146 144 90 76 169 125 19 80

Como funciona

ṢƑƇZLƲ}ŒP  Main link. Argument: A (array)

       ŒP  Powerset; yield P, the array of all sub-arrays of A.
     Ʋ     Vier; combine the preceding four links into a monadic chain...
      }    and apply the chain to the right argument (P).
  Ƈ            Comb; only keep arrays for which the link to the left returns 1.
ṢƑ             Sort fixed; yield 1 if sorting doesn't alter the array.
   Z           Zip; read the filtered powerset by columns.
    L          Take the length.

3

Pitão, pontuação 3 2 ( 7 bytes)

leSI#y

Guardou um ponto graças ao Anders Kaseorg.
Experimente aqui

Explicação

leSI#y
     yQ    Take the power set of the (implicit) input (preserving order).
  SI#      Get the ones that are sorted.
 e         Take the last (longest).
l          Get the length.

leSI#yscores 2.
Anders Kaseorg 30/10

2

Stax , 4 comprimento máximo tipo stalin

S{:^fF%|M

Execute e depure

Funciona assim.

S       powerset of input
{:^f    filter by non-descending sequences
F%|M    take the maximum length remaining


2

Brachylog , comprimento 2 (4 bytes)

⊇≤₁l

Experimente online!

Uma resposta que compensa ser tão concisa por não ser muito mais curta.

( 08 03 80 6Cna página de códigos de Brachylog)

        Output
   l    the length of
 ≤₁     a non-decreasing
⊇       sublist of
        the input.
        (maximizing the size of the sublist)

Eu ►LSnmOṖinventei Husk, mas sua pontuação (pelo menos no tamanho) é muito ruim para incomodar a postagem ...
String não relacionada
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.