Driftsort масив


25

Driftsort - це простий спосіб "сортувати" масив. Він працює шляхом "ковзання" або "обертання" елементів в масиві, поки масив не буде відсортований або поки масив не вдасться сортувати.

Давайте пройдемо два приклади. Спочатку розглянемо масив [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]

І сортується! Таким чином, масив [10, 2, 3, 4, 7]є дрейфуючим. Ось усі обертання масиву, для наочності:

[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]

Розглянемо тепер масив [5, 3, 9, 2, 6, 7]. Подивіться на його обертання:

[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]

Жоден з цих масивів не відсортований, тому масив [5, 3, 9, 2, 6, 7]не є дрейфуючим.


Завдання З огляду на непорожній масив / список цілих чисел як вхід до програми / функції, впроваджуйте driftsort на вхід і виводьте його, або виведіть значення фальси ( або порожній масив / список), якщо його неможливо перенести. Цілі числа пов'язані з вашими мовами max / min, але це має бути принаймні 255 для max та 0 для min.

Ви можете використовувати вбудовані методи сортування, але не вбудований, який вирішує проблему.

Це , тому найкоротша програма в байтах.

Тестові справи

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
Простий спосіб перевірити, чи є список, який можна змінити, чи sorted(l)це суміжний підпис l+l.
xnor

Просто для уточнення: Якщо наша мова підтримує негативні цілі числа, вони можуть виникати на вході, так?
Денніс

@Dennis це правильно.
Conor O'Brien

Чи не слід це називати shiftsort?
Філіп Хаглунд

@FilipHaglund Я думав про те, щоб викликати це, але це може спричинити плутанину з shiftоперацією, яка видаляє перший елемент масиву.
Conor O'Brien

Відповіді:


9

Желе , 6 байт

ṙỤċṢȧṢ

Спробуйте в Інтернеті! або перевірити всі тестові випадки .

Як це працює

ṙỤċṢȧṢ  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
Ахем, 19 байт UTF8.
rsaxvc

11
У Jelly є спеціальна кодова сторінка, що кодує кожен із 256 символів, які він розуміє як один байт. (Це 16 байт з UTF-8 btw.)
Денніс

3
@Dennis: ви повинні скопіювати / вставити це у всі ваші подання Jelly, щоб запобігти нам (тобто тим, хто цього не знав раніше) робити такі самі коментарі? ;)
Олів’є Дулак

18

Рубі, 33

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

a.any?спрацьовує до одного разу для кожного елемента масиву, за винятком того, що він зупиняється (і повертає істинне), як тільки масив було вимкнено у відсортований стан. Якщо це станеться, ми повертаємо мутований масив. Інакше ми повертаємо помилкове значення, яке any?повертається.


1
Це дуже розумно, особливо на місці обертання. Хороша робота!
Олексій А.

На жаль, моя власна відповідь Рубі була подолана. +1
Чорнило цінності

3
Ага так, стара "сортуйте її, поки ви не зможете сказати, чи можна її сортувати".
corsiKa

14

Python 2, 51 байт

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

Не турбує обертання. Натомість сортує список, а потім бачить, чи оригінал сортується за дрейфом, перевіряючи, чи є щонайменше одне зменшення серед послідовних елементів циклізованого списку. Підрахунок пояснюється <3тим, що mapвнизу Noneдодається коротший список , додаючи підроблене зменшення.


2
[1, 3, 2, 4]спостерігається лише одне зменшення серед послідовних елементів, але це не можна відсортувати.
Ніл

1
@Neil О стріляй.
xnor

@Neil Я думаю, що це виправляється. Не могли б ви поглянути?
xnor

10
Ау ми і <3ви
фонд позову Моніки

Я не можу сказати, що я експерт в Python, але це здається розумним, якщо припустити, що <3потрібно уникати точного повороту списку.
Ніл


6

Матлаб, 61 47 41 байт

Дякую @Suever за -6 байт!

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

Якщо strfind([a,a],sort(a))намагається знайти відсортований вхідний вектор як "підрядку" несортованого, він додається до себе. Якщо це правда, то вхід може бути перенесеним за межі, і ми отримаємо вектор довжиною 2, якщо ні, то отримаємо порожній вектор. minпросто перетворює це на вектор / порожній вектор. Додавання відсортованого вектора до 0 просто відображає його, додаючи його до порожнього вектора, видає помилку.


Чи перевіряє підрядок підрядок, що [2, 3]не є підспілом [12, 34]?
xnor

Так, кожен цілий масив може також інтерпретуватися як рядок, де кожне число трактується як один символ, незалежно від того, наскільки велике число.
flawr

@flawr Моя інтерпретація полягає в тому, що strfindможна працювати безпосередньо з числами, а не тільки з символами (навіть якщо це не документально). Якби цифри інтерпретувались як символи, вони були б обмежені 65535(спробуйте, наприклад +char(1e5))
Луїс Мендо

@LuisMendo Ви маєте рацію, це навіть працює з числами з плаваючою комою. Зауважте, що цифри вище 65535 просто відображатимуться як пробіл, якщо розглядатись як частина рядка.
flawr

5

Джулія, 71 66 52 байт

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

Це анонімна функція, яка приймає масив і повертає масив або булеве значення. Щоб викликати його, призначте його змінній.

Для масиву введення x ми побудуємо набір усіх обертів x і перевіримо, чи відсортована версія x є елементом цього списку. Якщо це так, ми повертаємо x відсортовано, інакше повертаємо хибні.

Збережено 19 байт завдяки Деннісу!


4

Піп , 15 + 1 = 17 16 байт

Фу, інші мови для гольфу видувають це з води. Однак, оскільки я це вже написав ...

L#gI$<gPBPOgYgy

Вводить дані як аргументи командного рядка, розділені пробілом. Потрібен -pчи інший прапор форматування масиву для відображення результату розбірливо, а не з'єднаного. У помилковому регістрі виводиться порожній рядок, який видно завдяки новому рядку.

                 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 байт

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

Повертається 0при відмові. Попередня 85 83 80-байтна версія уникала дзвінків 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)

Редагувати: збережено 2 байти шляхом ініціалізації cдо, -1а не 0. Збережено 5 байтів, переключившись reduceна map, зітхнути ...


Дивіться правку;)
Conor O'Brien

Виклик для сортування за номерами невірний. Перевірте на зразку [10, 2, 3, 4, 7].
Qwertiy

Цей код також failes 3 тестів: [1], [0, 0, 0, 0, 0, 0, 0]і [75, 230, 30, 42, 50].
Qwertiy

@Qwertiy Вибачте за sortнедогляд, який спричинив третю помилку тесту. Інші два тести провали були спричинені мною над-гольфу; Я повернувся до попередньої версії.
Ніл


3

Сніговик 1.0.2 , 27 байт

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

Це підпрограма, яка приймає вхід і виводить поточну permavar.

Спробуйте в Інтернеті!

((                       ))  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 байт

SGthyXfa*

Та сама ідея, що і у відповіді @ flawr, де ми захопимо strfind( Xf), щоб знайти відсортовану версію введення в межах конкатенації двох копій вводу.

Спробуйте в Інтернеті!

Пояснення

        % 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
Ви не можете видалити g? Або замінити ngнаa
Луїс Мендо

@LuisMendo Неможливо замінити лише тим, nщо nможе бути> 1. a Однозначно працює, хоча. Я зрозумів, що є кращий спосіб. Спасибі!
Suever

3

Джулія, 33 байти

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

Спробуйте в Інтернеті!

Як це працює

Це з'єднує масив x із собою і підраховує кількість пар, які вийшли з ладу, тобто кількість суміжних підмаришків [a, b], для яких b - a <0 . Якщо c - кількість не упорядкованих пар x себе, а t дорівнює 1, якщо останній елемент x більший за його перший, sumповернеться 2c + t .

Масив x є переносним iff (c, t) = (1, 0) ( x необхідно повернути на менше значення єдиної не упорядкованої пари), (c, t) = (0, 1) ( x відсортовано) або (c, t) = (0, 0) ( x сортується, і всі його елементи рівні), що є правдою iff 2c + t <3 .


3

Javascript ES6, 48 45 43 символів

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

Тест:

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)

Я думаю, ви можете зберегти два байти, використовуючи, (x+[,x])а подальший байт, використовуючи ~замість 1+свого стану.
Ніл

@ user6188402, так, дякую
Qwertiy

2

Брахілог , 39 байт

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

Мені дійсно потрібно додати необов'язковий аргумент, щоб $( - circular permute leftпереставляти не раз ... це було б 13 байт. Це буде чекати після впровадження нового стабільного транспілятора в Prolog.

Пояснення

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

Рубін, 47 байт

Рекурсивна функція. Повертається, nilякщо вхідний масив неможливо змінити.

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

2

CJam, 17 13 байт

Завдяки Деннісу за збереження 4 байт

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

Безіменний блок (функція), який приймає та повертає список.

Тестовий набір.

Пояснення

Це, по суті, використовує спостереження xnor, що відсортований список відображається удвічі більше від початкового списку, якщо його дрейфова сортована:

_$   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, схоже, ми це придумали самостійно. Спасибі, хоча. :)
Мартін Ендер

2

C ++ 14, 242 символів

#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;}}

Якщо я не можу залишити вихід порожнім, 252 символи 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<<'-';}

Невикористана версія 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: На основі ідеї @ MichelfrancisBustillos .


2

Java 7, 207 байт

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;}

Детальну спробу тут

// 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

виводить вихід у вигляді розділених пробілом значень або друкує fзначення фальси.

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);}

проходить всі комбінації масиву цілих чисел, поки не знайде дійсну послідовність або не вичерпається комбінація. масив не змінюється, але натомість послідовність, перенесена дрейфом, зберігається у вигляді рядка з обмеженим пробілом.

трохи читабельніше:

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);
}

спробуйте в Інтернеті


2

C, 105 байт

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]);}

Це приймає цілі числа вхідних даних як окремі аргументи командного рядка і друкує вихідний список як одне ціле число на рядок.

Якщо список не може бути змінено з програми, програма перестає передчасно через виняток з плаваючою комою, тому його порожній вихід представляє порожній список.

Перевірка

$ 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

Рубі, 28

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

Повертає або відсортований масив, або nil(що є хибним значенням), якщо вхід не сортується за дрейфом.


2

Пітон, 53 байти

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

Якщо ви хочете перевірити цю голову на https://www.repl.it/languages/python3 та скопіюйте це:

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

Як це працює:

  • s- змінна, що зберігає функцію sortedpython, яка сортує списки
  • N є основною функцією
  • s(x)Сортований список вхідних даних: множиться на те, чи перелік можна змінювати str(s(x))[1:-1]in str(x+x)(завдяки @xnor)
    • Це працює, тому що [1,2,3,4]*falseвиходить порожній список[]
    • і [1,2,3,4]*trueрезультати в[1,2,3,4]

1
У Python 2 ви можете скоротити це до lambda x,s=sorted:(`s(x)`[1:-1]in`x+x`)*s(x)44 байт.
Денніс

1

Пітон, 83 байти

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

Це стало соромно за допомогою інших відповідей пітона, але я все-таки можу це зробити. Мені дуже не подобається

range(len(l)))

частина. Чи є більш швидкий спосіб повторити список?


1
Це не так багато, але l.append(l.pop(0))or g==l for _ in lекономить байт над підходом до діапазону. Використання lambdaзнаряддя врятує 14 додаткових байтів.
Денніс

1

MATLAB / Octave, 118 байт

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
Я думаю, ви вже можете зберегти деякі байти, записавши все в один рядок і використовуючи input(''). Також уникайте зайвих пробілів і дужок! І ви можете знову пропустити кілька байт, попередньо визначившись f=@issorted.
flawr

1

PowerShell v2 +, 87 80 байт

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

$aПерегляньте список введення , перевіривши кожен парний елемент (включаючи останній і перший), щоб побачити, чи є більше однієї спадної пари. Якщо конкретна пара зменшується, ми зменшуємо $c. Виводить або відсортований список, або окремий елемент 0, виходячи зі значення $cв кінці. Якщо є більше однієї «поганої» пари, то ++$cвсе одно буде негативним, інакше буде, принаймні 0, тому другий елемент псевдотерміналу обраний ( $a|sort).

Я бачу, що xnor зробив щось подібне , але я придумав це самостійно.


1

Фактор, 47 байт

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

приєднайте послідовність до себе, а потім перевірте, чи відсортований перегляд оригіналу є подальшим.


1
Це звучить як філософський хайку: dup dup append \\ natural sort \\ dip subseq?навіть підходить до шаблону 4-4-3 :)
Akiiino

@Akiiino: Мови без точки зору настільки поетичні.
кіт

1

C ++, 313 359 370 байт

Величезний крик на @Qwertiy за те, що я працюю та навчаю мене чудовим методам гольфу!

Гольф:

#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";}

Безголівки:

#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
Гольф - це не просто видалення простору. using namespace std;це 20 символів, коли std::6 разів - 30. bool s = False;- чому б і ні =0? Можна кинути return 0;. Чому дужки тут !s&&(c<=v.size())?
Фігурні

Нічого, дякую! Багато матеріалу (як std::і return 0;) стає звичкою з програмуванням класів. Мені дійсно потрібно краще перевірити свої програми.
Michelfrancis Bustillos

1
Також є набір помилок. Чому ви читаєте до нуля і вводите цей нуль у дані? Чому ви виводите на розмір включно? Чому Trueі Falseзамість trueі false. ideone.com/kVTI25 - Ваша версія, ideone.com/y8s44A - фіксований та підготовлений для гольфу версія.
Qwertiy

Ще раз дякую вам! Капінг Trueі Falseродом з Python. Я навіть не знав, що ти можеш написати ifтак!
Michelfrancis Bustillos

1
І набагато скорочене: ideone.com/Dsbs8W та гольф ideone.com/HAzJ5V (<s> 255 </s> 252 символи). Використовується C ++ 14 для петлі foreach.
Qwertiy

1

Mathcad, TBD

enter image description here

У Mathcad 0 (скалярний) == false.

(Еквівалентне) число байтів - це TBD, поки не буде погоджено метод підрахунку. Приблизно 52 байти, використовуючи еквівалентність клавіатури байт = оператор / символ.


1

Mathematica 55 50 61 58 байт

З 3 байтами збережено завдяки Мартіну Бюттнеру.

Мої попередні спроби не пройшли всю тестову справу. Мені потрібно було додати, Unionщоб уникнути повторень у списку, які були введені в порядку.

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

Тести

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}}


Пояснення

Праворуч поверніть вхідний список від 1 до 1 nразів, де nдовжина списку вводу. Якщо відсортований вхідний список входить до списків, що повертаються на виході, поверніть його; інакше повернути порожній список.


@ MartinBüttner, Ваша пропозиція не вдалася в деяких тестових випадках, зокрема, # 3,4,7,8.
DavidC

@DavidC Ах, чорт, ти маєш рацію, я змішав поведінку @@та /@в порожніх списках. Join@@все одно має бути коротшим, ніж Flatten@все-таки.
Мартін Ендер

1

PHP, 98 байт

Виводить a, 1якщо можна переносити, інакше нічого

$a=$argv[1];$b=$a;sort($a);foreach($a as $v){echo($a===$b?1:'');array_unshift($b, array_pop($b));}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.