Implementar Classificação de Tirano [fechado]

8

TL; DR

  • Registro (esquerda-direita) / comprimento para cada par de elementos consecutivos. Se forem 0 ou negativos, não registre.
  • Feito isso, execute essas ações. Não atualize quocientes:
    • Incrementar à direita e decrementar à esquerda para (0, .3)
    • Remova da matriz em> =. 3
    • Imprimir ambos os elementos para> .5
  • Imprima a matriz restante. Tenha algum separador para executado e restante.

Agora, para o desafio ...

Este é o algoritmo de classificação que tem o pior caso de GLORIOSO TEMPO LINEAR , e onde qualquer um que ousar se opor à SABEDORIA INFINITA será prontamente EXECUTADO por seu CRIME HONESTO DE ALTA TREINAÇÃO .

O LEADER FEARLESS encarregou você da MISSÃO HONORÁVEL de escrever um programa ou função que recebe uma matriz de números inteiros e a classifica usando o seguinte algoritmo de classificação:

  1. Itere através de sua matriz, iluminando cada elemento com a presença GLORIOSA de seu LÍDER SEM MEDO .
  2. Faça com que sua POLÍCIA SECRETA verifique cada par de 2 elementos consecutivos para garantir que eles sejam apropriadamente leais à sua nação . Se eles não estiverem ordenados corretamente, registre a diferença entre os números, divididos pelo comprimento da matriz. Este é o quociente da dissidência deles.
  3. No final do seu TOUR GLORIOSO , percorrer a lista e DO DIVINO RAIN sem medo do líder PUNIÇÃO em toda a traição dissidentes da seguinte forma:
    • Para um quociente dissidente inferior a 0,3, eles apenas precisam fazer uma lavagem cerebral na lembrança da GLÓRIA INFINITA DO LÍDER SEM MEDO . Decremente o elemento esquerdo e aumente o elemento direito. Não altere nenhum quociente de dissidência.
    • Para um quociente de dissidência de 0,3 a 0,5 (inclusive), eles são TRAITORES e devem ser enviados para o PRISON CAMPS . Remova-os da matriz.
    • Para um quociente de dissidência maior que 0,5, eles são ODIOUS REBEL SCUM . Eles devem ser EXECUTADOS PUBLICAMENTE como um exemplo para qualquer outro heregário que eles possam ter aliado. Remova-os da matriz e envie-os para a fonte de notícias nacional, The STDOUT Times.
  4. Sua matriz agora está classificada COMPLETAMENTE E PARA SEMPRE . Envie para o The STDOUT Times para que eles possam cantar sua VITÓRIA GLORIOSA .

Como VISÃO OBRIGATÓRIA para aqueles que são muito tolos para entender a GLÓRIA INFINITA deste algoritmo, ela será usada para classificar a seguinte matriz:

[1,8,6,0,4,9,3,5,7,2]
  • 1 e 8 estão ordenados corretamente.
  • 8 e 6 não estão ordenados corretamente, então o quociente de dissensão de .2 é registrado para os dois.
  • 6 e 0 são outro par de dissidentes. Este quociente de dissidência é 0,6.
  • 0 e 4 estão ordenados corretamente.
  • 4 e 9 estão ordenados corretamente.
  • 9 e 3 têm um quociente de dissidência de .6.
  • 3 e 5 estão ordenados corretamente.
  • 5 e 7 estão ordenados corretamente.
  • 7 e 2 têm um quociente de dissidência de 0,5.

Portanto, você executa as seguintes ações em nome do LEADER FEARLESS :

  • Diminua 8 a 7 e aumente 6 a 7.
  • Remova 0 e o novo 7 e EXECUTE-OS .
  • Siga com 9 e 3.
  • Leve os 7 e os 2 originais para os campos de reeducação e remova-os.

Este deve ser o seu comunicado de imprensa, feito no STDOUT ou o que for conveniente:

Executions: 7, 0, 9, 3
[1, 7, 4, 5]

Como você pode ver, a matriz resultante é COMPLETAMENTE E SORTIDA PARA SEMPRE . Tentar sugerir que não está classificado constitui HIGH TREASON .

Agora, como um DEMONSTRAÇÃO GLORIOSO dos RECURSOS INTERMINÁVEIS dadas pelo líder destemido , ele forneceu sua infinita sabedoria na geração de casos de teste:

import random

len=random.randint(2,20)
arr=list(range(len))
random.shuffle(arr)
print(arr)

dissent=[(arr[i]-arr[i+1])/len for i in range(len-1)]
dissent.append(0) # Barrier between front and back of the array.
executions=[]
for i in range(len-1):
    if dissent[i] > 0:
        if dissent[i] < 0.3:
            arr[i] -= 1
            arr[i+1] += 1
        elif dissent[i] > 0.5:
            if dissent[i-1] <= 0.5:
                executions.append(arr[i])
            executions.append(arr[i+1])

print([arr[i] for i in range(len) if dissent[i] < 0.3 and dissent[i-1] < 0.3])
print(executions)

Experimente on-line - pressione o botão de execução para usar, caso contrário, você está obtendo o que a última pessoa recebeu.

No interesse do stare desecis, o FEARLESS LEADER também forneceu um exemplo de caso:

Input                  Output
3,2,1,4,4,1,2,3,4,5    2,2,2,4,2,3,4,5

(Não há execuções neste exemplo.)

Por fim, você deve tratar os bytes em seu programa como principais apoiadores e minimizá-los. O programa mais curto em bytes ganhará o FAVOR ETERNO DO LÍDER SEM MEDO .

Crédito onde é devido

O conceito para isso foi inspirado em Lazy Drop Sort , e o estilo de escrita usado foi amplamente retirado das ditaduras psicóticas - visite-as se você gostou do aspecto paródico disso.

Crédito adicional vai para todos que votaram nisso no Sandbox desde o início. O +8 alcançado foi minha motivação para reescrevê-lo para evitar duplicação.

Nissa
fonte
Comentários não são para discussão prolongada; esta conversa foi movida para o bate-papo .
Mego 27/04
isso precisa de muita reforma. Mais sobre o que fazer e menos sobre histórias. O que você acha ?
Muhammad Salman
@ MuhammadSalman, assim como na primeira vez em que foi fechado, eu realmente gostaria de saber o que está faltando no resumo.
N27 de
@StephenLeppik: Nada está faltando no resumo (tenho certeza), mas como eu disse, menos histórias e mais fatos concretos sobre o que precisa ser feito. Pelo menos foi por essa razão que votei para que fosse suspensa. Outros podem ter razões diferentes.
Muhammad Salman
+1 para a ideia interessante. -1 para o desnecessário sobre o estilo de escrita superior. Histórias interessantes, embora eu não seja fã delas, podem ficar bem se elas não prejudicarem o desafio, mas tive que reler o desafio três vezes (mesmo com os exemplos) para garantir que não perdesse nada . Também no seu tl; dr você está perdendo o ponto dizendo se esquerda <direita e dissidência = 0. Além disso, eu tenho certeza que você quer dizer esquerda menos direita, não direita menos esquerda, pois isso sempre seria negativo se a direita for menor que a esquerda .
precisa saber é o seguinte

Respostas:

2

Ruby , 146 135 bytes

->l{e=[];i=0;l.inject{|j,k|q=(j-k)*10.0/l.size;b,c=l[i],l[i+=1];q>5&&e<<b<<c;q>0&&(l[i-1],l[i]=q<3?[b&&b-1,c&&c+1]:p);k};[l-a=[a],e-a]}

Experimente online!

Asone Tuhid
fonte