Alternar uma matriz


25

O Driftsort é uma maneira simples de "classificar" uma matriz. Ele funciona "deslizando" ou "girando" os elementos na matriz até que a matriz seja classificada ou até que a matriz falhe na classificação.

Vamos percorrer dois exemplos. Primeiro, considere a matriz [10, 2, 3, 4, 7]. Como o array não está classificado, nós o rotacionamos uma vez. (Isso pode acontecer em qualquer direção, desde que permaneça na mesma direção.) Em seguida, a matriz se torna:

[7, 10, 2, 3, 4]

Como não está classificado, giramos novamente.

[4, 7, 10, 2, 3]

E de novo:

[3, 4, 7, 10, 2]

E uma última vez:

[2, 3, 4, 7, 10]

E está resolvido! Portanto, a matriz [10, 2, 3, 4, 7]é selecionável em derivações. Aqui estão todas as rotações da matriz, para maior clareza:

[10, 2, 3, 4, 7]
[7, 10, 2, 3, 4]
[4, 7, 10, 2, 3]
[3, 4, 7, 10, 2]
[2, 3, 4, 7, 10]

Considere agora a matriz [5, 3, 9, 2, 6, 7]. Veja suas rotações:

[5, 3, 9, 2, 6, 7]
[7, 5, 3, 9, 2, 6]
[6, 7, 5, 3, 9, 2]
[2, 6, 7, 5, 3, 9]
[9, 2, 6, 7, 5, 3]
[3, 9, 2, 6, 7, 5]

Nenhuma dessas matrizes é classificada, portanto, a matriz [5, 3, 9, 2, 6, 7]não é passível de derivação.


Objetivo Dada uma matriz / lista não-vazias de números inteiros como entrada para um programa / função, implemente o driftsort na entrada e a produza ou produza um valor falsey ( ou uma matriz / lista vazia) se não puder ser derivado. Os números inteiros estão vinculados aos seus idiomas max / min, mas isso deve ser pelo menos 255 para o máximo e 0 para o mínimo.

Você pode usar métodos de classificação internos, mas não um interno que resolva o desafio.

Este é um , portanto, o programa mais curto em bytes.

Casos de teste

input => output
[1] => [1]
[5, 0, 5] => [0, 5, 5]
[3, 2, 1] => false
[0, 9, 3] => false
[1, 2, 3, 4] => [1, 2, 3, 4]
[4, 1, 2, 3] => [1, 2, 3, 4]
[0, 2, 0, 2] => false
[5, 3, 9, 2, 6, 7] => false
[0, 0, 0, 0, 0, 0, 0] => [0, 0, 0, 0, 0, 0, 0]
[75, 230, 30, 42, 50] => [30, 42, 50, 75, 230]
[255, 255, 200, 200, 203] => [200, 200, 203, 255, 255]

5
Uma maneira fácil de verificar se uma lista é passível de derivação é se sorted(l)é uma sub- lista contígua de l+l.
Xnor

Só para esclarecer: se nosso idioma suporta números inteiros negativos, eles podem ocorrer na entrada, sim?
Dennis

@ Dennis está correto.
Conor O'Brien

Isso não deveria ser chamado shiftsort?
precisa saber é o seguinte

@FilipHaglund Pensei em chamá-lo assim, mas pode causar confusão com a shiftoperação que remove o primeiro elemento de uma matriz.
Conor O'Brien

Respostas:


9

Gelatina , 6 bytes

ṙỤċṢȧṢ

Experimente online! ou verifique todos os casos de teste .

Como funciona

ṙỤċṢȧṢ  Main link. Argument: A (list)

 Ụ      Grade up; return the indices of A, sorted by their corresponding values.
ṛ       Rotate A by each index, yielding the list of all rotations.
   Ṣ    Yield A, sorted.
  ċ     Count the number of times sorted(A) appears in the rotations.
        This gives 0 if the list isn't driftsortable.
    ȧṢ  Logical AND with sorted(A); replaces a positive count with the sorted list.

1
Ah, 19 bytes de UTF8.
rsaxvc

11
O Jelly possui uma página de código personalizada que codifica cada um dos 256 caracteres que entende como bytes únicos. (É de 16 bytes com UTF-8 aliás.)
Dennis

3
@ Dennis: você deve copiar / colar isso em todos os seus envios de Jelly para impedir que nós (ou seja, aqueles que não sabiam disso antes) façam os mesmos comentários? ;)
Olivier Dulac

18

Ruby, 33

->a{a.any?{a.sort==a.rotate!}&&a}

a.any?dispara até uma vez para cada elemento da matriz, exceto que para (e retorna verdadeiro) assim que a matriz for alterada para um estado classificado. Se isso acontecer, retornamos a matriz mutada. Caso contrário, retornamos o valor falso que any?retorna.


1
Isso é super inteligente, principalmente a rotação no local. Bom trabalho!
Alex A.

Infelizmente, minha própria resposta Ruby foi superada. +1
Value Ink

3
Ah, sim, a velha técnica "classifique até você saber se é possível classificá-la".
precisa saber é o seguinte

14

Python 2, 51 bytes

lambda l:sorted(l)*(map(cmp,l[-1:]+l,l).count(1)<3)

Não se incomoda em girar. Em vez disso, classifica a lista e, em seguida, verifica se o original é classificável por desvio, verificando se há no máximo uma diminuição entre os elementos consecutivos da lista ciclificada. A contagem é <3porque mappreenche a lista mais curta Noneno final, adicionando uma diminuição falsa.


2
[1, 3, 2, 4]só tem uma diminuição entre os elementos consecutivos, mas não é selecionável à deriva.
21416 Neil

1
@ Neil Oh atirar.
Xnor

@ Neil Eu acho que isso corrige. Você poderia dar uma olhada?
Xnor

10
Aw nós <3também
Fund Monica's Lawsuit

Não posso dizer que sou especialista em Python, mas parece razoável supor que <3é para evitar ter que girar a lista com precisão.
Neil

10

Pitão, 9 bytes

*SQ}SQ.:+

Explicação:

           - Q = eval(input())
         + -    Q+Q
       .:  -   sublists(^)
   }       -  V in ^
    SQ     -   sorted(Q)
*SQ        - ^ * sorted(Q) (return sorted(Q) if ^ True)

Experimente aqui!

Ou use uma suíte de testes!


1
Eu acho que você quer dizer substrings (sublists) para .:. Combinações incluiriam elementos não contíguos.
Xnor

6

Matlab, 61 47 41 bytes

Obrigado @Suever por -6 bytes!

@(a)sort(a)+0*min(strfind([a,a],sort(a)))

Se strfind([a,a],sort(a))tentar encontrar o vetor de entrada classificado como uma 'subcadeia' do não classificado, esse foi anexado a si mesmo. Se verdadeiro, a entrada é passível de derivação e obtemos um vetor de comprimento 2; caso contrário, obtemos um vetor vazio. minapenas transforma isso em um número / vetor vazio. Adicionar o vetor classificado a 0 apenas o exibe, adicionando-o a um vetor vazio gera um erro.


A verificação de substring [2, 3]não identifica uma sub -lista de [12, 34]?
Xnor 21/04

Sim, cada matriz inteira também pode ser interpretada como sequência, onde cada número é tratado como um caractere, independentemente do tamanho do número.
flawr

@ flawr Minha interpretação é que strfindpode funcionar diretamente com números, não apenas com caracteres (mesmo que isso não esteja documentado). Se os números estivessem sendo interpretados como caracteres, eles seriam limitados a 65535(tente por exemplo +char(1e5))
Luis Mendo

@LuisMendo Você está certo, ele até funciona com números de ponto flutuante. Observe que os números acima de 65535 serão exibidos apenas como um espaço quando considerados como parte de uma sequência.
flawr

5

Julia, 71 66 52 bytes

x->(y=sort(x))∈[circshift(x,i)for i=1:endof(x)]&&y

Esta é uma função anônima que aceita uma matriz e retorna uma matriz ou um booleano. Para chamá-lo, atribua-o a uma variável.

Para uma matriz de entrada x , construímos o conjunto de todas as rotações de x e verificamos se a versão classificada x é um elemento dessa lista. Se for, retornamos x classificados, caso contrário, retornamos false.

Economizou 19 bytes graças a Dennis!


4

Pip , 15 + 1 = 17 16 bytes

Ugh, as outras línguas do golfe estão soprando isso fora da água. No entanto, desde que eu já escrevi ...

L#gI$<gPBPOgYgy

Recebe entrada como argumentos de linha de comando separados por espaço. Requer -pou outro sinalizador de formatação de matriz para exibir o resultado de forma legível e não concatenada. O caso false gera uma sequência vazia, visível em virtude da nova linha à direita.

                 Implicit: g is array of cmdline args; y is empty string
L#g              Loop len(g) times:
         POg       Pop the first item from g
      gPB          Push it onto the back of g
    $<             Fold on < (true if g is now sorted)
   I        Yg     If true, yank g into y
              y  Autoprint y

4

JavaScript (ES6), 72 70 65 bytes

a=>a.map(y=>{c+=x>y;x=y},x=a.slice(c=-1))|c<1&&a.sort((a,b)=>a-b)

Retorna 0em caso de falha. Anterior 85 83 versão de 80-byte evitado chamando sort:

a=>a.map((y,i)=>{x>y&&(c++,j=i);x=y},x=a.slice(c=-1))|c<1&&a.splice(j).concat(a)

Editar: salvou 2 bytes inicializando cem -1vez de 0. Economizou 5 bytes alternando de reducepara map, suspiro ...


Veja a edição;)
Conor O'Brien

A chamada para classificar números está incorreta. Verifique a amostra [10, 2, 3, 4, 7].
precisa saber é o seguinte

Este código também failes 3 testes: [1], [0, 0, 0, 0, 0, 0, 0]e [75, 230, 30, 42, 50].
precisa saber é o seguinte

@ Qwertiy Desculpe pela sortsupervisão, que causou a terceira falha no teste. As outras duas falhas de teste foram causadas por mim jogando golfe demais; Eu voltei para a versão anterior.
Neil


3

Boneco de neve 1.0.2 , 27 bytes

((}#AsO|##aC,as|aLNdE`aR*))

Essa é uma sub-rotina que recebe as entradas e saídas do permavar atual.

Experimente online!

((                       ))  subroutine
  }                          set our active variables b, e, and g:
                              .[a] *[b] .[c]
                              .[d]      *[e]    (* represents an active variable)
                              .[f] *[g] .[h]
   #                         store the input in variable b
    AsO                      sort in-place
       |                     swap b with g; now sorted input is in g
        ##                   store the input again in b and e
          aC                 concat; now the input doubled is in b and e is empty
            ,                swap e/g; now b has 2*input and e has sorted input
             as              split 2*input on sort(input) and store result in g
               |             bring the result up to b (we no longer care about g)
                aLNdE        take length and decrement; now we have 0 in b if the
                               array is not driftsortable and 1 if it is
                     `aR     repeat e (the sorted array) b times:
                               if b is 0 (nondriftsortable), returns [] (falsy)
                               otherwise (b=1), returns sorted array unchanged
                        *    put this back into the permavar

3

MATL, 13 12 10 9 bytes

SGthyXfa*

A mesma idéia que a resposta de @ flawr, onde sequestramos strfind( Xf) para encontrar a versão classificada da entrada na concatenação de duas cópias da entrada.

Experimente Online!

Explicação

        % Implicitly get input
S       % Sort the input
Gth     % Explicitly grab the input again and concatenate with itself
y       % Copy the sorted version from the bottom of the stack
Xf      % Look for the sorted version as a subset
a       % Gives a 1 if there were matches and 0 otherwise
*       % Multiply by the sorted array. Yields all zeros for no match and the
        % sorted array when a match was found
        % Implicitly display the stack contents

1
Você não pode remover g? Ou substituir ngpora
Luis Mendo

@LuisMendo Não é possível substituir por apenas um nporque npoderia ser> 1. a definitivamente funciona. Imaginei que havia uma maneira melhor. Obrigado!
Suever

3

Julia, 33 bytes

x->sum(diff([x;x]).<0)<3&&sort(x)

Experimente online!

Como funciona

Isso concatena a matriz x consigo e conta o número de pares que estão fora de ordem, ou seja, o número de sub-matrizes contíguas [a, b] para as quais b - a <0 . Se c é o número de pares não ordenados de x em si et é 1 se o último elemento de x for maior que o primeiro, sumretornará 2c + t .

A matriz x é selecionável em derivação iff (c, t) = (1, 0) ( x deve ser girado para o valor menor do único par não ordenado), (c, t) = (0, 1) ( x é classificado) ou (c, t) = (0, 0) ( x é classificado e todos os seus elementos são iguais), o que é verdadeiro se 2c + t <3 .


3

Javascript ES6, 48 45 43 caracteres

x=>~(x+[,x]).indexOf(x.sort((a,b)=>a-b))&&x

Teste:

f=x=>~(x+[,x]).indexOf(x.sort((a,b)=>a-b))&&x
;`[1] => [1]
[5, 0, 5] => [0, 5, 5]
[3, 2, 1] => false
[0, 9, 3] => false
[1, 2, 3, 4] => [1, 2, 3, 4]
[4, 1, 2, 3] => [1, 2, 3, 4]
[0, 2, 0, 2] => false
[5, 3, 9, 2, 6, 7] => false
[0, 0, 0, 0, 0, 0, 0] => [0, 0, 0, 0, 0, 0, 0]
[75, 230, 30, 42, 50] => [30, 42, 50, 75, 230]
[255, 255, 200, 200, 203] => [200, 200, 203, 255, 255]`
.split`
`.map(t => t.replace(/^(.*) => (.*)$/, "f($1)+'' == $2")).every(eval)

Eu acho que você pode salvar dois bytes usando (x+[,x])e outro byte usando em ~vez de 1+em sua condição.
21416 Neil

@ user6188402, sim, obrigado.
Qwertiy

2

Braquilog , 39 bytes

l:0re:?{[0:L],!L.|rh$(L,?h-1=:L:1&.}.o.

Eu realmente preciso adicionar um argumento opcional para $( - circular permute left para permutar mais de uma vez ... isso teria sido 13 bytes. Isso aguardará após a implementação de um novo transpiler estável no Prolog.

Explicação

l:0re                                     I = a number between 0 and the length of Input
     :?{[0:L],!L.|rh$(L,?h-1=:L:1&.}      All this mess is simply circular permutating the
                                          input I times
                                    .o.   Unify the Output with that circular permutation
                                          if it is sorted, else try another value of I

2

Ruby, 47 bytes

Função recursiva. Retorna nilse a matriz de entrada não puder ser alterada.

f=->a,i=0{a.sort==a ?a:a[i+=1]?f[a.rotate,i]:p}

2

CJam, 17 13 bytes

Agradecimentos a Dennis por salvar 4 bytes.

{_$\_+1$#)g*}

Um bloco (função) sem nome que pega e retorna uma lista.

Suíte de teste.

Explicação

Isso essencialmente usa a observação do xnor de que a lista classificada aparece duas vezes a lista original, se a sua deriva classificável:

_$   e# Duplicate input and sort.
\_+  e# Get other copy and append to itself.
1$   e# Copy sorted list.
#    e# Find first position of sorted list in twice the original,
     e# of -1 if it's not found.
)g   e# Increment and take signum to map to 0 or 1.
*    e# Repeat sorted array that many times to turn it into an empty
     e# array if the input was not drift sortable.

@ Dennis oh, parece que criamos isso independentemente. Obrigado embora. :)
Martin Ender

2

C ++ 14, 242 caracteres

#include<iostream>
#include<vector>
#include<algorithm>
#define b v.begin()
using namespace std;int main(){vector<int>v;int x,n=0;for(;cin>>x;++n)v.push_back(x);for(x=n;x--;rotate(b,b+1,b+n))if(is_sorted(b,b+n)){for(x:v)cout<<x<<' ';return 0;}}

Se eu não puder deixar a saída em branco, 252 caracteres http://ideone.com/HAzJ5V

#include<iostream>
#include<vector>
#include<algorithm>
#define b v.begin()
using namespace std;int main(){vector<int>v;int x,n=0;for(;cin>>x;++n)v.push_back(x);for(x=n;x--;rotate(b,b+1,b+n))if(is_sorted(b,b+n)){for(x:v)cout<<x<<' ';return 0;}cout<<'-';}

Versão ungolfed http://ideone.com/Dsbs8W

#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;

#define b v.begin()

int main()
{
  vector <int> v;
  int x, n=0;

  for(;cin>>x;++n)
    v.push_back(x);

  for(x=n;x--;rotate(b,b+1,b+n))
    if(is_sorted(b,b+n))
    {
      for(x:v) cout<<x<<' ';
      return 0;
    }

  cout << '-';
}

PS: Baseado na ideia de @ MichelfrancisBustillos .


2

Java 7, 207 bytes

int[]D(int[]i){int x,z;z=x=-1;int[]d=new int[i.length];while(++x<i.length)if(i[x]>i[(x+1)%i.length])if(z<0)z=(x+1)%i.length;else return null;if(z<0)z=0;x=-1;while(++x<d.length)d[x]=i[z++%i.length];return d;}

Teste detalhado aqui

// driftsort in ascending-order
int[] D(int[]i)
{
    int x = -1,z = -1;
    int[] d = new int[i.length];

    while ((++x) < i.length)
    {
        if (i[x] > i[(x+1)%i.length])
        {
            if(z < 0) z = (x+1)%i.length;
            else return null; // not driftsortable
        }
    }

    if(z < 0) z = 0;
    x = -1;
    while ((++x) < d.length)
    {
        d[x] = i[(z++)%i.length];
    }

    return d;
}

2

Java 175

imprime a saída como valores separados por espaço ou imprime fpara um valor de falsey.

void d(int[]a){String s;for(int v,w,x=-1,y,z=a.length;++x<z;){v=a[x];s=""+v;for(y=0;++y<z;v=w){w=a[(x+y)%z];if(v>w){s="f";break;}s+=" "+w;}if(y==z)break;}System.out.print(s);}

passa por todas as combinações da matriz de números inteiros até encontrar a sequência válida ou ficar sem combinações. a matriz não é modificada, mas a sequência derivada de variações é armazenada como uma sequência delimitada por espaço.

um pouco mais legível:

void driftsort(int[]array){
    String str;
    for(int previous,current,x=-1,y,len=array.length;++x<len;){
        previous=array[x];
        s=""+previous;
        for(y=0;++y<len;previous=current){
            current=array[(y+x)%len];
            if(previous>current){
                str="false";
                break;
            }
            str+=" "+current;
        }
        if(y==len)break;
    }
    System.out.print(str);
}

experimente online


2

C, 105 bytes

i,s;main(c,v)char**v;{c--;while(i++<c)if(atoi(v[i])>atoi(v[i%c+1]))c*=!s,s=i;while(--i)puts(v[s++%c+1]);}

Isso aceita os números inteiros de entrada como argumentos separados da linha de comando e imprime a lista de saída como um número inteiro por linha.

Se a lista não for selecionável por derivação, o programa será encerrado prematuramente devido a uma exceção de ponto flutuante; portanto, sua saída vazia representa uma lista vazia.

Verificação

$ gcc -o driftsort driftsort.c 2>&-
$ ./driftsort 1 | cat
1
$ ./driftsort 5 0 5 | cat
0
5
5
$ ./driftsort 3 2 1 | cat
$ ./driftsort 0 9 3 | cat
$ ./driftsort 1 2 3 4 | cat
1
2
3
4
$ ./driftsort 4 1 2 3 | cat
1
2
3
4
$ ./driftsort 0 2 0 2 | cat
$ ./driftsort 5 3 9 2 6 7 | cat
$ ./driftsort 0 0 0 0 0 0 0 | cat
0
0
0
0
0
0
0
$ ./driftsort 75 230 30 42 50 | cat
30
42
50
75
230
$ ./driftsort 255 255 200 200 203 | cat
200
200
203
255
255

2

Ruby, 28

->a{(a*2*?,)[a.sort!*?,]&&a}

Retorna a matriz classificada ou nil(que é um valor falso) se a entrada não puder ser classificada como derivada.


2

Python, 53 bytes

s,N=sorted,lambda x:s(x)*(str(s(x))[1:-1]in str(x+x))

Se você quiser testar isso, acesse https://www.repl.it/languages/python3 e copie e cole:

s,N=sorted,lambda x:s(x)*(str(s(x))[1:-1]in str(x+x))
print(N([1,2,3,4,5,0]))

Como funciona:

  • sé uma variável que armazena a sortedfunção python que classifica listas
  • N é a função principal
  • A lista de entrada classificada: s(x)é multiplicada pelo fato de a lista ser ou não derivadastr(s(x))[1:-1]in str(x+x) (graças a @xnor)
    • Isso funciona porque [1,2,3,4]*falseresulta em uma lista vazia[]
    • e [1,2,3,4]*trueresulta em[1,2,3,4]

1
No Python 2, você pode reduzi-lo lambda x,s=sorted:(`s(x)`[1:-1]in`x+x`)*s(x)para 44 bytes.
Dennis

1

Python, 83 bytes

def f(l):g=sorted(l);return g if any(l[x:]+l[:x]==g for x in range(len(l)))else 1>2

Isso ficou envergonhado pelas outras respostas python, mas eu também poderia postá-lo de qualquer maneira. Eu realmente não gosto do

range(len(l)))

parte. Existe uma maneira mais rápida de percorrer a lista?


1
Não é muito, mas l.append(l.pop(0))or g==l for _ in leconomiza um byte na abordagem de alcance de len. Usar um lambdasalvaria 14 bytes adicionais.
Dennis

1

MATLAB / oitava, 118 bytes

function r(a)
i=0
while (~issorted(a) && i<length(a))
    a=a([2:end 1]),i=i+1
end
if issorted(a)
    a
else
    0
end

2
Eu acho que você já pode salvar alguns bytes escrevendo tudo em uma linha e usando input(''). Evite também espaços e parênteses desnecessários! E você pode novamente lançar alguns bytes definindo primeiro f=@issorted.
flawr

1

PowerShell v2 +, 87 80 bytes

param($a)0..($a.length-1)|%{if($a[$_-1]-gt$a[$_]){$c--}};(0,($a|sort))[++$c-ge0]

Percorre a lista de entrada $a, verificando cada elemento em pares (incluindo o último e o primeiro) para ver se há mais de um par decrescente. Se o par em particular está diminuindo, diminuímos $c. Produz a lista classificada ou um elemento único 0, com base no valor de $cno final. Se mais de um par "ruim" estiver presente, ++$cainda será negativo; caso contrário, será pelo menos 0; portanto, o segundo elemento do pseudo-ternário será escolhido ($a|sort ).

Vejo que o xnor fez algo semelhante , mas criei isso de forma independente.


1

Fator, 47 bytes

[ dup dup append [ natural-sort ] dip subseq? ]

junte a sequência a ela mesma e verifique se a representação ordenada do original é uma subsequência.


1
Isso soa como um haiku filosófica: dup dup append \\ natural sort \\ dip subseq?Mesmo se encaixa no padrão 4-4-3 :)
Akiiino

@Akiiino: as línguas sem pontos D são tão poéticas.
gato

1

C ++, 313 359 370 bytes

Grito enorme para @Qwertiy por fazer isso funcionar e me ensinar alguns ótimos métodos de golfe!

Golfe:

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main(){vector<int> v;int x,c=0,s=0,y;while(cin>>x)v.push_back(x);do if(rotate(v.begin(),v.begin()+1,v.end()),c++,is_sorted(v.begin(),v.end()))s=1;while(!s&c<=v.size());if(s)for(y=0;y<v.size();y++)cout<<v[y]<<" ";else cout<<"False";}

Ungolfed:

#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;

int main(){
  vector <int> v;
  int x, c=0, s=0, y;

  while(cin>>x)
    v.push_back(x);

  do 
    if (
      rotate(v.begin(),v.begin()+1,v.end()),
      c++,
      is_sorted(v.begin(),v.end())
    ) s = 1;
  while(!s & c <= v.size());

  if (s)
    for(y=0; y<v.size(); y++)
      cout<<v[y]<<" ";
  else
    cout<<"False";
}

1
Golfe não é apenas remover espaços. using namespace std;é 20 caracteres quando std::6 vezes é 30. bool s = False;- por que não =0? Você pode largar return 0;. Por que os colchetes estão aqui !s&&(c<=v.size())? Figura chaves e sem vírgulas ...
Qwertiy

Uau, obrigada! Muitas coisas (como std::e return 0;) se tornaram um hábito nas aulas de programação. Eu realmente preciso começar a verificar meus programas melhor.
Michelfrancis Bustillos

1
Também há um conjunto de bugs. Por que você lê até zero e coloca esse zero nos dados? Por que você produz em tamanho inclusive? Por que Truee em Falsevez de truee false. ideone.com/kVTI25 - sua versão, ideone.com/y8s44A - corrigida e preparada para a versão de golfe.
precisa saber é o seguinte

Mais uma vez obrigado! Caping Truee Falseé de Python. Eu nem sabia que você poderia escrever ifassim!
Michelfrancis Bustillos

1
E muito mais reduzido: ideone.com/Dsbs8W e ideone.com/HAzJ5V (<s> 255 </s> 252 caracteres). C ++ 14 usado para loop foreach.
precisa saber é o seguinte

1

Mathcad, TBD

insira a descrição da imagem aqui

No Mathcad, 0 (escalar) == falso.

A contagem de bytes (equivalente) é TBD até o método de contagem acordado. Aproximadamente 52 bytes usando uma equivalência de teclado byte = operador / símbolo.


1

Mathematica 55 50 61 58 bytes

Com 3 bytes salvos, graças a Martin Büttner.

Minhas tentativas anteriores não passaram em todo o caso de teste. Eu precisava adicionar Unionpara evitar repetições na lista que foram inseridas em ordem.

Join@Union@Cases[NestList[RotateRight,#,Length@#],Sort@#]&

Testes

Join@Union@Cases[NestList[RotateRight,#,Length@#],Sort@#]&/@
{{1},{5,0,5},{3,2,1},{0,9,3},{1,2,3,4},{4,1,2,3},{0,2,0,2},{5,3,9,2,6,7},
{0,0,0,0,0,0,0},{75,230,30,42,50},{255,255,200,200,203}}

{{1}, {0, 5, 5}, {}, {}, {1, 2, 3, 4}, {1, 2, 3, 4}, {}, {}, {0, 0, 0, 0, 0, 0, 0}, {30, 42, 50, 75, 230}, {200, 200, 203, 255, 255}}


Explicação

Gire à direita a lista de entrada de 1 para nvezes, onde nestá o comprimento da lista de entrada. Se a lista de entrada classificada estiver entre as listas rotacionadas de saída, retorne-a; caso contrário, retorne uma lista vazia.


@ MartinBüttner, sua sugestão falhou em alguns dos casos de teste, especificamente, nos 3,4,7,8.
22816

@DavidC Ah, caramba, você está certo, eu misturei o comportamento de @@e /@em listas vazias. Join@@ainda deve ser mais curto do que Flatten@embora.
22816 Martin Ender

1

PHP, 98 bytes

Gera uma saída 1se for variável, senão nada

$a=$argv[1];$b=$a;sort($a);foreach($a as $v){echo($a===$b?1:'');array_unshift($b, array_pop($b));}
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.