Classificação Quebrada Confiável

23

Dada uma lista de números inteiros positivos que contém pelo menos 3 entradas distintas, produz uma permutação dessa lista que não é classificada em ordem crescente ou decrescente.

Exemplos

1,2,3 -> 2,1,3 or 3,1,2 or 1,3,2 or 2,3,1
1,2,3,3 -> 2,1,3,3 or 3,1,2,3 or 1,3,2,3 etc..

Obrigado @Arnauld e @NoOneIsHere pelo título!

flawr
fonte
A entrada será sempre classificada?
Xnor
O tipo deve ser "confiável", dado que, dado um determinado conjunto de entradas, sempre produz a mesma permutação que a saída? Ou deve ser "confiável" apenas porque a saída não está classificada?
Wildcard
Deve apenas satisfazer as especificações.
flawr
Uma matriz aninhada seria permitida como saída? por exemplo [2,[1,3]],.
Shaggy
Não, deve ser uma única matriz / lista.
perfil completo de Flawr

Respostas:

14

JavaScript (ES6), 39 34 bytes

a=>[a.sort((x,y)=>x-y).pop(),...a]

Classifique a matriz em ordem crescente, pop o último elemento e use-o como o primeiro elemento de uma nova matriz. Em seguida, desestruture os elementos restantes da matriz original na nova matriz (em JS, ambos sorte popmodifique a matriz original).


Teste-o

o.innerText=(f=

a=>[a.sort((x,y)=>x-y).pop(),...a]

)(i.value=[1,2,3]);oninput=_=>o.innerText=f(i.value.split`,`)
<input id=i><pre id=o>

Shaggy
fonte
Por que você não pode simplesmente fazer a.sort()?
geokavel
1
@geokavel: Porque o sortmétodo de JS classifica lexicograficamente.
Shaggy
3
Então, porque já está quebrado de maneira confiável? = D
jpmc26
7

Gelatina , 3 bytes

Ṣṙ1

Experimente online!

Erik, o Outgolfer
fonte
Ṣṙ-também funciona (apenas senti como dizer isso, você provavelmente sabia: P)
HyperNeutrino
@HyperNeutrino Sim, isso também funciona, o mesmo bytecount: p
Erik the Outgolfer
Em qual codificação há Ṣṙ1apenas três bytes? No UTF-8, são 7 bytes.
precisa
2
@ heinrich5991 A geléia usa uma página de código personalizada .
cole
Eu sinto que todos que usam o Jelly devem ter uma extensão do navegador que adiciona um botão para postar automaticamente o comentário "O Jelly usa uma página de código personalizada".
precisa saber é o seguinte
6

Ohm , 2 bytes

S╙

Experimente online!

Classifique e gire para a direita.

totalmente humano
fonte
6

Japonês , 3 bytes

n é

Teste-o

Classifica ( n) a matriz e gira ( é) um elemento para a direita.

Shaggy
fonte
5

Python 3 , 31 bytes

lambda a:sorted(a)[1:]+[min(a)]

Experimente online!

-1 byte graças ao xnor

HyperNeutrino
fonte
... Como eu não via essa lógica básica. >.>
totalmentehuman
@totallyhuman lol todas as 3 das minhas respostas fazem exatamente a mesma coisa. mas ha: P Também
fundi o
Sim, eu notei e apaguei meu ramo. : P
totallyhuman 13/08
Colocar minno final salva um byte.
Xnor
5

APL, 9 bytes

{1⌽⍵[⍋⍵]}

Experimente online!

Quão?

⍵[⍋⍵] - classifique a lista

1⌽ - gire 1

Uriel
fonte
Também funciona no GNU e ngn!
Zachary
@ Zachary acho que eu vou remover o dyalog ...
Uriel
5

TI-Basic (TI-84 Plus CE), 31 bytes

Prompt A
SortA(LA
max(LA→B
dim(LA)-1→dim(LA
augment({B},LA

Solicita a entrada no formato {1,2,3,4}.

O TI-Basic é um idioma tokenizado , todos os tokens usados ​​aqui são de um byte.

Explicação:

Prompt A         # 3 bytes, store user input in LA
SortA(LA         # 4 bytes, sort LA ascending
max(LA→B         # 6 bytes, save the last value in the sorted list to B
dim(LA)-1→dim(LA # 11 bytes, remove the last value from LA
augment({B},LA   # 7 bytes, prepend B to LA and implicitly print the result
pizzapants184
fonte
5

Pitão , 7 5 4 bytes

.P1S

Experimente online!

-1 byte graças a FryAmTheEggman

Ninguém está aqui
fonte
Você pode salvar um byte usando permutações: pyth.herokuapp.com/…
FryAmTheEggman
@FryAmTheEggman obrigado, vou atualizá-lo quando chegar a um computador.
NoOneIsHere
3

Retina , 21 bytes

O#`
s`(.*)¶(.*)
$2¶$1

Experimente online! Classifique e gire como de costume. Pelo menos não há conversão unária dessa vez.

Neil
fonte
3

Java 8, 68 37 bytes

l->{l.sort(null);l.add(l.remove(0));}

-31 bytes graças a @Nevay (esqueci que o Java 8 tinha um List#sort(Comparator)método ..)

Modifica a entrada ArrayList, em vez de retornar uma nova.

Explicação:

Experimente aqui.

l->{                   // Method with ArrayList parameter and no return-type
  l.sort(null);        //  Sort the input-list (no need for a Comparator, thus null)
  l.add(l.remove(0));  //  Remove the first element, and add it last
}                      // End of method
Kevin Cruijssen
fonte
Você pode usar l->{l.sort(null);java.util.Collections.rotate(l,1);}para salvar 16 bytes.
Nevay
2
Como alternativa, você pode usar l->{l.sort(null);l.add(l.remove(0));}para salvar 31 bytes (requer o uso de uma lista de tamanho não fixo).
Nevay
@Nevay nice one, mas ... os parênteses estão um pouco errados em relação à documentação: a realidade é que as operações opcionais adde removedevem ser implementadas; nada é dito sobre lista de tamanho fixo ... Kevin Cruijssen, como existem alternativas muito melhores nos comentários anteriores, esperarei uma edição antes de marcar com +1.
Olivier Grégoire
3

Haskell, 36 37 bytes

import Data.List
f(a:b)=b++[a];f.sort

Use os padrões de exibição para corresponder no início de uma versão classificada da lista de entrada e, em seguida, anexe o primeiro item da lista ao final da lista restante.

Os padrões de exibição não valem a pena. Classifique a lista, retire a cabeça e coloque-a no final. Nesse caso, verifica-se que a solução ingênua digitada compactamente é a melhor.

typedrat
fonte
1
Bem-vindo ao PPCG! Ótima idéia para usar padrões de exibição, eu não os conhecia antes. Infelizmente, eles não estão ativados no Haskell padrão; portanto, por regras do site, você precisa incluir os bytes para o sinalizador da linha de comando -XViewPatterns. Contar esses da maneira padrão f(a:b)=b++[a];f.sorté mais curto.
Laikoni 15/08/19
De alguma forma, eu não estava pensando na bandeira necessária. Acho que as utilizo tanto que esqueci de ativá-las nos meus arquivos Cabal e que não faz parte do idioma.
Typedrat
2

Perl 6 ,  43  19 bytes

{first {![<=]($_)&&![>=] $_},.permutations}

Tente

*.sort[1..*,0].flat

Tente

Observe que [1..*,0]isso resultaria em ((2,3),1), então .flatexiste para transformá-lo em(2,3,1)

Brad Gilbert b2gills
fonte
2

Mathematica, 18 bytes

RotateLeft@Sort@#&

Experimente online!

J42161217
fonte
4
Mais curto:RotateLeft@*Sort
JungHwan Min
2

Ly , 7 bytes

&nasprl

Experimente online!

Ugh, arruinar o tipo é tão caro!

Explicação:

&nasprl

&n      # take input as a list of numbers
  a     # sort
   sp   # save top of stack and pop
     r  # reverse stack
      l # load saved item
LyricLy
fonte
2

R, 33 32 29 bytes

Recebe entrada de stdin. Classifica a lista e move o primeiro elemento para o final, garantindo que ele não seja mais classificado. Salvo três bytes devido a Giuseppe.

c(sort(x<-scan())[-1],min(x))

Outra implementação, mesma contagem de bytes:

c((x<-sort(scan()))[-1],x[1])
rturnbull
fonte
c(sort(x<-scan())[-1],min(x))tem 29 bytes usando essencialmente a mesma ideia que a sua.
Giuseppe
1

Ohm , 2 bytes

S╜

Experimente online!

Eu acho que isso é bastante diferente do post de totallyhuman para postar uma nova resposta; Espero que você não se importe: P EDIT : DAMMIT YOU NINJA'D ME

HyperNeutrino
fonte
Ninja você. ;)
totallyhuman 13/08
1

Python, 31 bytes

def f(a):a[1:]=a[a.sort():0:-1]

Mais uma solução Python.

Infelizmente, este tem o mesmo comprimento para a resposta do HyperNeutrino .

tsh
fonte
1

Gaia , 3 bytes

ȯ1«

Experimente online!

Igual a outras respostas: classifique ȯe gire para a esquerda uma vez .

Gato de negócios
fonte
1

Retina , 10 bytes

O#`
O^#-2`

Experimente online!

O#`     Sort the list
O^#-2`  Reverse sort the list other than the last element

Isso deixa a lista com o segundo elemento mais alto primeiro e o último elemento mais alto, que nunca é classificado corretamente

PunPun1000
fonte
1

Ruby, 18 bytes

Enviado no celular. Por favor, não me mate por problemas.

->a{a.sort.rotate}
dkudriavtsev
fonte
1

Pitão, 5 bytes

.>SQ1

Explicação

SQ - classificar lista de entrada

.>SQ1 - gire a lista de entrada ciclicamente por 1

Karan Elangovan
fonte
1

Próton , 19 bytes

a=>sorted(a)[1to,0]

Experimente online!

-2 bytes indiretamente, graças ao xnor

Ainda não está trabalhando no TIO; esperando por um puxão.

HyperNeutrino
fonte
1

Python 3 , 28 bytes

lambda a:a[1:a.sort()]+a[:1]

Experimente online!

a.sort()classifica ano lugar e retorna None. Nonepode ser usado como um índice de fatiamento e é o mesmo que omitir esse índice.

Gato de negócios
fonte
1

PHP, 44 bytes

requer PHP 5.4 ou posterior para sintaxe de matriz curta.

sort($a=&$argv);print_r([array_pop($a)]+$a);

classifique argumentos, substitua o 0-th argumento pelo último argumento removido, imprima.
Corra com -nrou experimente online .


O argumento 0-th é o nome do arquivo de script, "-"se você chamar PHP com -r. "-"é comparado aos outros argumentos como uma sequência e ord("-")==45, como é menor que qualquer número. Os próprios números, apesar de cordas, são comparados como números: "12" > "2".

php -nr '<code>' 3 4 2 5 1e sort($a=&$argv)levar a $a=["-","1","2","3","4","5"]
[array_pop($a)]+$aé [0=>"5"]+[0=>"-",1=>"1",2=>"2",3=>"3",4=>"4"], o
que resulta em [0=>"5",1=>"1",2=>"2",3=>"3",4=>"4"].

Titus
fonte
Você pode explicar por que [array_pop ($ a)] + $ a não substitui o 0º índice de $ a? Por exemplo: $ a = [1,2,3,4,5], array_pop ($ a) = 5, $ a = [1,2,3,4]. Se você fizer [5] + [1,2,3,4], não deveria acabar sendo [5,2,3,4] porque ambas as matrizes têm um 0º índice? Estou confuso porque o manual do PHP diz "O operador + retorna a matriz da direita anexada à matriz da esquerda; para chaves que existem nas duas matrizes, os elementos da matriz da esquerda serão usados ​​e a correspondência elementos da matriz da direita serão ignorados ".
Jstnthms
@jstnthms O +operador não anexa, é mesclado (sem reordenar os índices; mas isso não importa aqui). O ponto importante é que $aaponta para $argve $argv[0]contém o nome do arquivo do script, os argumentos começam no índice 1. Estendi a descrição. Obrigado pela pergunta.
Titus
1

Julia, 23 bytes

f(x)=sort(x)[[2:end;1]]

Um pouco menor que, mas equivalente a f(x)=circshift(sort(x),1). Eu gostaria de poder fazer um método baseado selectnisso, era mais compacto, mas não posso

Lyndon White
fonte