Збільшення масиву


44

Враховуючи непорожній масив додатних цілих чисел, "збільшуємо" його один раз так:

  • Якщо всі елементи масиву рівні, додайте a 1до кінця масиву. Наприклад:

    [1] -> [1, 1]
    [2] -> [2, 1]
    [1, 1] -> [1, 1, 1]
    [3, 3, 3, 3, 3] -> [3, 3, 3, 3, 3, 1]
    
  • В іншому випадку збільште перший елемент масиву, який є мінімальним значенням масиву. Наприклад:

    [1, 2] -> [2, 2]
    [2, 1] -> [2, 2]
    [3, 1, 1] -> [3, 2, 1] -> [3, 2, 2] -> [3, 3, 2] -> [3, 3, 3]
    [3, 4, 9, 3] -> [4, 4, 9, 3] -> [4, 4, 9, 4] -> [5, 4, 9, 4] -> [5, 5, 9, 4] -> ...
    

(Кожен ->представляє один приріст, який повинен виконувати всі ваші програми.)

Виведіть отриманий посилений масив.

Виграє найкоротший код у байтах.


Чи вважається 0 додатним цілим числом
Downgoat

20
@Downgoat 0 не завжди позитивний на PPCG. Якщо дозволено 0, термін буде "негативним"
ETHproductions

Відповіді:


13

Желе , 8 7 байт

‘;ṀỤḢṬ+

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

Як це працює

‘;ṀỤḢṬ+  Main link. Argument: A

‘        Increment all elements of A.
  Ṁ      Yield the maximum of A.
 ;       Concatenate both results. Note that the appended maximum will be the 
         minimum of the resulting array if and only if all elements of A are equal.
   Ụ     Grade up; yield the indices of the resulting array, sorted by their
         corresponding values in that array.
    Ḣ    Head; extract the first index, which is the index of the first occurrence
         of the minimum. For an array of equal elements, this will be the index
         of the appended maximum.
     Ṭ   Untruth; for index i, yield an array of i-1 zeroes, followed by a 1.
      +  Add this array to A, incrementing the minimum or appending a 1.

11

Python 3, 62 53 51 50 байт

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

def F(a):a+=1//len({*a})*[0];a[a.index(min(a))]+=1

Спробуйте на repl.it!

-9 байт, дякуючи Лінн за те, що вони помітили, що, оскільки масив буде мати додатні цілі числа, я можу додати "0" до кінця масиву і збільшити його.

Окреме спасибі mbomb007 для гри в гольф , len(set(a))щоб len({*a})і Денніс для floordiv трюку!


Хм. Msgstr "Вивести результуючий масив". Чи кваліфікується це?
Yytsi

Я не можу повністю пригадати де, але я пам’ятаю, що бачив мета-пост, що зміна заданого списку на місці дозволена за замовчуванням. Я буду шукати його @TuukkaX
FlipTack

@TuukkaX Я не зовсім впевнений. Це здається нормальним, але я відкладу мета-консенсус щодо зміни масивів на місці, якщо такий є.
Захоплення Кальвіна

1
У Python 3 ви можете len({*L})<2встановити, чи всі елементи списку рівні.
mbomb007

1
a+=1//len({*a})*[0]повинен зберегти байт.
Денніс

9

JavaScript (ES6), 61 байт

a=>new Set(a).size>1?++a[a.indexOf(Math.min(...a))]:a.push(1)

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

Фрагмент тесту

Інші спроби

Ось кілька альтернативних способів вирішити, чи має масив більше одного унікального вводу:

a=>a.some(x=>x-a[0])?++a[a.indexOf(Math.min(...a))]:a.push(1)
a=>a.some(x=>x-m,m=Math.min(...a))?++a[a.indexOf(m)]:a.push(1)

Обидва somes можуть бути замінені findтакож. .sortбуде коротше для знаходження мінімуму, якщо сортування за замовчуванням не було лексикографічним (чому, JS, чому?):

a=>new Set(a).size>1?++a[a.indexOf(a.sort()[0])]:a.push(1)
// Instead we have to do:
a=>new Set(a).size>1?++a[a.indexOf(a.sort((x,y)=>x-y)[0])]:a.push(1)

Я спробував рекурсію, щоб знайти мінімум, але це виявилося довше:

f=(a,n=1,q=a.indexOf(n))=>~q?a.some(x=>x-n)?++a[q]:a.push(1):f(a,n+1)

І ось рядочне рішення, яке спочатку здавалося гарною ідеєю: (введення подається у форматі масиву в рядку, наприклад "[1,2,3]")

a=>a.replace(m=/(\d+),(?!\1)/.test(a)?Math.min(...eval(a)):']',+m+1||",1]")

Чи використання a.find (n => n == Math.min (... a)) коротше?
Пуховик

@Downgoat Я не впевнений, як би я це використовував, оскільки він повертає елемент, а не індекс
ETHproductions

так> _> ой, я пропустив ваш ++ і не зрозумів, що вам потрібна посилання
Пуховик

7

Математика, 70 57 55 байт

Практично все поліпшення пов'язане з Мартіном Ендером, який б'є мою дупу при підході до узорної форми! Також JHM придумав фактично те саме рішення, по суті, в той же час. (підрахунок байтів використовує кодування ASCII)

±{p:x_ ..}:={p,1};±{x___,y_,z___}/;y≤x~Min~z:={x,y+1,z}

Визначає функцію, що ±бере один аргумент списку. Якщо цей аргумент списку містить деяку кількість копій одного і того ж елемента (виявлений x_..і названий p), виведіть список із 1доданим. В іншому випадку, якщо аргумент цього списку має спеціальний елемент yxтим, що раніше був нульовим або більше елементів y, а zпісля - нульовим або кількома елементами y), який є щонайменше мінімумом інших елементів, тоді виведіть список із цим yзбільшенням. Будь-який примірник мінімального елемента списку буде узгоджений y, але, на щастя, Mathematica обирає перший, з якого діяти.


Оскільки ±2-байтний символ, ваш код довжиною 59 байт. Також має бути пробіл між x_і ..тому, що Mathematica інтерпретує x_..як x_. .(що видає помилки). Крім того, форма інфіксації Min( x~Min~z) зробить цей 2 байт коротшим (що робить це рішення ідентичним моєму: p ...) Welp ви можете взяти кредит, оскільки моя редакція пізніше, ніж ваша ....
JungHwan Min

Так, Мартін Ендер все-таки отримує більшу частину моєї заслуги. Чому дорівнює ± два байти?
Грег Мартін

@GregMartin ±в UTF-8 ( Mathematica використовує UTF-8 за замовчуванням; спробуйте $CharacterEncoding) - двобайтовий символ (U + 00B1).
JungHwan Min

@JHM UTF-8 не є кодуванням символів за замовчуванням у Windows. Mathematica може читати вихідні файли на однобайтовій кодовій сторінці, що включає ±.
Мартін Ендер

1
@ASimmons Моя свіжа установка Mathematica у Windows, яка $CharacterEncodingвстановила значення WindowsANSICP1252 (достатня сумісність з ISO 8859-1 для ±і ·може бути використана для одного байта).
Мартін Ендер

7

C ++ 14, 178 176 174 155 142 135 байт

подання

#include<list>
#include<algorithm>
[](auto&l){auto e=end(l),b=begin(l);l.size()^count(b,e,*b)?++*min_element(b,e):(l.push_back(1),0);};

виклик

std::list<int> s = {4, 4, 9, 4};

//invoke like this
auto i = [](auto&l){auto e=end(l),b=begin(l);l.size()^count(b,e,*b)?++*min_element(b,e):(l.push_back(1),0);};
i(s);

//or like that
[](auto&l){auto e=end(l),b=begin(l);l.size()^count(b,e,*b)?++*min_element(b,e):(l.push_back(1),0);}(s);

неозорий

#include <list>
#include <algorithm>
#include <iostream>
using namespace std;

void i(list<int>& l) {
    auto e = l.end(), b = l.begin();

    if (l.size() == count(b, e, l.front())) {
        l.push_back(1);
    } else {
        ++*min_element(b, e);
    }
}

int main() {
    list<int> s = {4, 4, 9, 4};

    //invoke like this
    i(s);

    for (auto o:s)
        std::cout << o << ' ';
    std::cout << std::endl;
}

Це вперше я граю в гольф, допомогу цінують.

EDIT: забув згадати, що вам потрібно принаймні скласти його -std=c++11 -std=c++14

EDIT2: Я зрозумів, що можу залишити місце у включеному #include <list>

EDIT3: збережено ще два байти заміною l.begin()наbegin(l)

EDIT4: врятував ще 19 (!) Байтів завдяки @Quentin (дивіться його коментар)

EDIT5: Квентін поголив ще 13 байт, дякую!

EDIT6: як TuukkaX вказував, неназваних лямбда / функцій вистачає, тому я видалив auto i=в поточному рахунку


5
Я не можу вам допомогти з C ++, але можу сказати: Ласкаво просимо до PPCG!
Згарб

1
Я думаю, вам не потрібні пробіли у #includeрядках.
Крістіан Сіверс

О, дякую, я щойно зрозумів це :)
Неоп

1
Заміна функції на лямбда ( auto i=[](auto&l){...};) зберігає один байт (більше, якщо рахувати тип повернення, який ви забули;)), використовуючи ^ замість ==та замінюючи операнди, зберігається інший. std::listІтератори, безумовно, є std::класами, тому ви можете відмовитися std::від обох std::countі std::min_elementзавдяки ADL (-10). l.front()також є *b(-7). Я закінчую 120-байт auto i=[](auto&l){auto e=end(l),b=begin(l);l.size()^count(b,e,*b)?void(++*find(b,e,*min_element(b,e))):l.push_back(1);};:)
Квентін

1
Поки ми знаходимося в цьому, документаціяstd::min_element стверджує, що він повертає перший найменший елемент, тож find()зайвий, це 11 байт. У умовному використанні пари круглих дужок та оператора комами для примусового правого виразу до intє коротшим, ніж ліве ліве voidна 2 байти. Це призводить до auto i=[](auto&l){auto e=end(l),b=begin(l);l.size()^count(b,e,*b)?++*min_element(b,e):(l.push_back(1),0);};, 142 байти :)
Квентін

6

05AB1E , 21 20 16 байт

Збережено 4 байти завдяки Аднану .

DÙgi0¸«}ÐWksgÝQ+

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

Пояснення

                      # input = [3,2,1] used as example
D                     # duplicate input
 Ùgi                  # if all elements are equal
    0¸«}              # append 0
        Ð             # triplicate list
                      # STACK: [3,2,1], [3,2,1], [3,2,1]
         Wk           # index of minimum element
                      # STACK: [3,2,1], [3,2,1], 2
           s          # swap top 2 elements of stack
                      # STACK: [3,2,1], 2, [3,2,1]
            g         # length of list
                      # STACK: [3,2,1], 2, 3
             Ý        # range [0 ... length]
                      # STACK: [3,2,1], 2, [0,1,2,3]
              Q       # equal
                      # STACK: [3,2,1], [0,0,1,0]
               +      # add
                      # OUTPUT: [3,2,2]

Я думаю, що це DÙgi0¸«}ÐWksgÝQ+також працює.
Аднан

@Adnan: ааа, хороша ідея використання ÝQз k. Дякую!
Емінья

5

Скретч, 25 34 блоки + 7 6 байт

Програма

Приймає введення як попередньо визначений масив цілих чисел. Зауважте, що масиви є 1-індексованими в Scratch.

У Python це виглядатиме так: (Зауважте, що на відміну від Scratch, Python є 0-індексованим)

lowval = 0
hival = 0
n = 1
for i in range(len(input)):
    if(input[i] < input[lowval]):
        lowval = i
    if(input[i] > input[hival]):
        hival = i
    # No increment statement needed because python.
if(lowval == hival):
    input.append(1)
else:
    input[lowval] += 1
print(input)

Коментарі про гольф, будь ласка?
OldBunny2800

чому ти оголошуєш фвалом?
Крістоф

Мені здається, що Scratch - це просто Python у простому тексті з кольорами ...
Стюі Гріффін

І 1-індексовані масиви та відсутність заяв elif!
OldBunny2800

1
Добрий момент @Christoph! Це було частиною більш ранньої версії, яка вийшла з гольфу. Редагування.
OldBunny2800

4

J, 25 22 байти

(+~:*[=<./)@,0#~1=#@~.

Оцінюється за анонімним дієсловом. Спробуйте в Інтернеті!

Пояснення

(+~:*[=<./)@,0#~1=#@~.  Input is y.
                  #@    Is the length of
                    ~.   deduplicated y
                1=       equal to 1?
            ,0#~        Append that many 0s to y (one or none).
(         )@            Call the result z and apply this verb to it:
      =                  take the bit array of equality
     [                   between z
       <./               and its minimum element,
    *                    multiply that element-wise by
  ~:                     the bit array of first occurrences in z
 +                       and add the result to z.

3

MATL , 16 байт

t&=?1h}t2#X<wQw(

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

Як це працює

t         % Take input implicitly. Duplicate
&=        % Matrix of all pairwise equality comparisons
?         % If all comparisons were true
  1h      %   Append 1 to the original copy ofthe array
}         % Else
  t       %   Duplicate array
  2#X<    %   Push minimum and index of its first occurrence
  wQw     %   Swap, increment, swap (adds 1 to the minimum)
  (       %   Assign the incremented minimum to that position
          % End if implicitly. Display implicitly

3

Математика, 56 байт

±{b:a_ ..}:={b,1};±a_:=a/.{p___,b:Min@a,q___}:>{p,b+1,q}

Використовується названа функція ±. Використовує кодування ISO8859-1

Альтернативні рішення (58 байт)

±{b:a_ ..}:={b,1};±{p___,b_,q___}/;b<=p~Min~q:={p,b+1,q}
(* @GregMartin and I both independently came up with this above solution *)

±{b:a_ ..}:={b,1};±a:{p___,b_,q___}/;b==Min@a:={p,b+1,q}

Використання

±{1, 1}

{1, 1, 1}

±{3, 4, 5}

{4, 4, 5}


3

Haskell, 71 70 62 байт

f(a:b)|(x,y:z)<-span=<<(<).minimum$a:b++[0|all(a==)b]=x++y+1‌​:z

@Zgarb врятував 8 байт, дякую!

Коли я почав, я сподівався на елегантну хитрість зав'язування вузлів, але шлях @ Згарба настільки ж дивовижний.


Деяка перебудова, 62 байти:f(a:b)|(x,y:z)<-span=<<(<).minimum$a:b++[0|all(a==)b]=x++y+1:z
Згарб

@Zgarb Просто вау!
Крістіан Сіверс

Тьфу, мій мозок не вдається вивести тип для
монадного

@Angs Монада є (->)r, яка застосовується до типу є (->)r a = r->a. Тоді з типів return:: a->r->aта (>>=)::(r->a)->(a->r->b)->(r->b)їх реалізації очевидно (смій я це сказати?) Очевидно: return=constі m>>=f = \r->f(m r)r. Останнє саме те, що потрібно, щоб висловити щось на зразок span(predicate_depending_on l)l, згадуючи lлише один раз. Тепер мені потрібно запам'ятати його лише тоді, коли мені це потрібно.
Крістіан Сіверс

@Angs Цей трюк та багато іншого ви можете знайти в нашій колекції порад для гольфу Haskell .
Згарб

3

C #, 123 121 120 79 77 байт

using System.Linq;l=>{if(l.All(o=>o==l[0]))l.Add(0);l[l.IndexOf(l.Min())]++;}

Змінює аргумент, переданий функції.

Дякуємо Cyoce за збереження 3 байтів! -> !Anyдо All, +=1до ++.

Дякуємо TheLethalCoder за економію колосальних 43 байт! -> Видалений код підпису методу. Вибрані дужки навколо списку параметрів.


Ви могли б замінити !l.Any(o=>o!=l[0]))з l.All(o=>o==l[0])?
Cyoce

@Cyoce Це дійсно так. Я думав про те саме, але написав Anyзамість Allі був у думці, що це не працює: D Спасибі!
Yytsi

2
У C # немає ++?
Cyoce

Ви можете компілювати до, Action<List<int>>щоб видалити весь код підпису методу
TheLethalCoder

1
@Stefan Хм. Я також бачив, як багато людей скидають потрібні usings C #, тому не вірю, що законно відмовлятися using System.Linq. Якщо я не побачу явного твердження, що говорить, що це не потрібно, я буду залишатися при цьому. Дякую за пропозицію, хоча! :)
Yytsi

2

Perl 6 , 46 байт

{.[[==]($_)??.elems!!.first(*==.min,:k)]++;$_}

(змінює вхідний масив і повертає його)

Розширено:

{     # bare block lambda with implicit parameter 「$_」

  .[      # use the following as an index into the array

      [==]( $_ )    # reduce the array with 「&infix:<==>」

    ??              # if they are equal

      .elems        # the value past the end ( 「.end+1」 would also work )

    !!              # else

      .first(       # find the first value
        * == .min,  # where the element is equal to the minimum
        :k          # return the key rather than the value
      )

  ]++;              # increment it ( auto vivifies if it doesn't exist )

  $_                # return the modified array
}


2

Желе, 9 байт

;1µ‘i¦E?Ṃ

Завдяки Деннісу за -2 байти.

На корпусі повинно бути не менше 30 символів; ти ввійшов ....


Якщо у вас є додаткові символи для введення в організм, завжди варто пояснити код, який допомагає всім зрозуміти його і робить відповідь цікавішою :)
Alfie Goodacre

2

Mathematica, 53 байти 57 байт 59 байт

If[Equal@@#,#~Join~{1},x=#;x[[#~FirstPosition~Min@#]]++;x]&

7
Це 57 байт. і є 3-байтними символами. Крім того, ваш код не працює, оскільки {##,1}частина означає, що вхід є окремими цілими числами (тобто f[1, 2, 3]), але x=#частина означає, що вхід є List(тобто f[{1, 2, 3}]). Швидке виправлення було б змінити , x=#щоб x={#}і приймати сирі цілі числа в якості вхідних даних, що робить ваш код довжиною 59 байт.
JungHwan Min

Гарний улов! Я не усвідомлював різниці між байтами та кількістю символів, я просто побачив цю пропозицію і зрозумів, що вона є дійсною. Здається, є багато відповідей, які дають кількість символів, але якщо я збережу їх у Блокноті ++, я отримаю більшу кількість байтів (наприклад, відповідь Jelly). Я бачу, що у вашій відповіді вказано кодування, є де б ви не рекомендували мені дізнатися про це?
ngenisis

1
Я думаю, ти маєш на увазі Equal@#, хоча #==##коротше.
Мартін Ендер

Ти правий. Я вніс зміни на @JHM, щоб прийняти кілька аргументів, а не список, але не поширював зміни скрізь. Я повернувся до прийняття списку, оскільки це більше відповідає запиту.
ngenisis

2

R , 72 66 65 байт

"if"(any((x=scan())-x[1]),"[<-"(x,u<-which.min(x),1+x[u]),c(x,1))

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

Збільшення виконується за допомогою which.minякого повертається перша відповідність. "[<-"дозволяє замінити значення і повертає модифікований вектор в одному виклику функції.

-7 байт завдяки Джузеппе!



@Giuseppe Я спробував isTRUE і isFALSE з sd це не гольфіст :(
JayCe

хе, 65 байт заміни !=на -!
Джузеппе

@ Giuseppe звичайно!
JayCe

1

Рубін, 46 байт

->a{a.uniq.size<2?a<<1:a[a.index(a.min)]+=1;a}

Я відчуваю, що є кращий спосіб перевірити, чи всі елементи однакові a.uniq.size<2, але я лінивий, щоб це знайти.


6
a.uniq[1]буде правдою, якщо є чіткі значення.
гістократ

Ви можете зберегти байт, перетворившись a[a.index(a.min)]наa[a.index a.min]
Cyoce

1

Октава, 69 67 64 байт

Насправді це було коротше, щоб зробити цю функцію повною іменем, ніж використання обох inputта disp.

Збережено 3 байти завдяки Луїсу.

function x=f(x)
[a,b]=min(x);if any(x-a),x(b)++;else x=[x,1];end

Стара відповідь, не використовуючи функцію:

[a,b]=min(x=input(''));if any(x-a),x(b)++;else x(end+1)=1;end;disp(x)

1

R, 97 байт

if(all((a=scan())==a[1])){a=c(a,1)}else{while(!all(a==a[1])){a[which(a==min(a))][1]=min(a)+1}};a

Шкода, що sytax x=+1не існує в R!

Безголівки:

if(all((a=scan())==a[1]))
{
    a=c(a,1)
}
else
{
    while(!all(a==a[1]))
    {
        a[which(a==min(a))][1]=min(a)+1
    }
a

1

TI-Basic, 53 байти

If min(not(ΔList(Ans
Then
Ans->L1
cumSum(1 or Ans
min(Ans+ᴇ9(L1≠min(L1
L1(Ans)+1->L1(Ans
Else
augment(Ans,{1
End

1

Матлаб, 83 , 77 , 71 байт

function a=x(a)
if~nnz(a-a(1));a=[a,1];else[~,I]=min(a);a(I)=a(I)+1;end

Я відносно новий в коді гольфу, тому будь ласка, будь ласка! Я намагався використовувати анонімні функції, але googling каже, що ви не можете використовувати if / else оператори та matlab не має потрійних операторів, тому це найкраще, що я відчував, що міг зробити.

Редагувати: виправлено та скорочено (вдвічі!) Завдяки stewie-griffin.


Ласкаво просимо до PPCG! У цьому коді є деякі недоліки. sum(a)/length(a)==a(1)не гарантує, що всі елементи рівні, це лише показує, що середнє значення дорівнює a(1). Більш простий спосіб це було б mean(a)==a(1). numelє на один байт коротше length, але, оскільки ви знаєте, що всі значення є позитивними, ви можете використовувати nnzяке ще коротше (воно все одно не дасть правильного результату в цьому виклику, але воно принаймні коротше: P). Якщо ви приймаєте min(a)виклик перед циклом, ви можете використовувати обидва виходи з нього і перевірити, чи allелементи aдорівнюють min(a).
Стюі Гріффін

Ти правий! вона виходить з ладу, коли середнє значення дорівнює числу в першому елементі. Я думаю, що мій новий є правильним, хоча і також коротшим. Логіка полягає в тому, що якщо решта елементів не дорівнює першому елементу, a (a ~ = a (1)) повертає решта елементів, які за визначенням перевищують 0 в не однаковому масиві. Тоді підрахунок, а не, повинен дати правильну логіку, я думаю. Якщо це все-таки неправильно, будь ласка, дайте мені знати, що я кодую лише кілька років, і у мене ще довгі шляху.
Оуен Морган

~nnz(a(a~=a(1)))просто ~nnz(a-a(1)). Крім того, вам не потрібні дужки. if ~nnz(a-a(1));a=[a,1];else[~,I]=min(a);a(I)=a(I)+1;end. Це має бути на 5 байт коротше (зверніть увагу: я не перевіряв його).
Стюі Гріффін

Ви можете зберегти 3 байти, скориставшись range(a)замістьnnz(a-a(1))
MattWH

@boboquack, цей код перевіряє, чи кількість елементів у aдорівнює рівню найменшого значення у цьому векторі. Вектор a = [3 4 6]призведе до true, а вектор a = [4 4 6]призведе до false. Не думаю, що тут буде корисно ...?
Стюі Гріффін

1

Clojure, 112 100 байт

На жаль, min-keyповертає останній індекс найменшого індексу, а не перший. Це працює для цілих входів та коротших масивів, ніж 10 ^ 9 елементів;)

Редагувати: визначення анонімної функції, використовуючи (apply = a)замість (= 1(count(set a))).

(fn[a](if(apply = a)(conj a 1)(update a(apply min-key #(+(nth a %)(* % 1e-9))(range(count a)))inc)))

Оригінал:

(defn f[a](if(= 1(count(set a)))(conj a 1)(update a(apply min-key #(+(nth a %)(* % 1e-9))(range(count a)))inc)))

Менш вибагливий 134-байтовий розчин перевертає вектор перед оновленням, а потім знову повертає його назад:

(defn f[a](if(= 1(count(set a)))(conj a 1)(let[r #(vec(reverse %))a(r a)](r(update a(apply min-key #(nth a %)(range(count a)))inc)))))

1

Java 8, 85 + 38 = 123 байт

Порожнеча лямбда, що приймає List<Integer>(вихід мутується). Кількість байтів включає лямбда та необхідний імпорт.

import static java.util.Collections.*;

l->{if(min(l)==max(l))l.add(0);int i=0,n;while((n=l.get(i))>min(l))i++;l.set(i,n+1);}

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

Це майже схоже на Python при імпорті цих методів ...


1

MATLAB, 66 53 байти

if(range(a))[~,b]=min(a);a(b)=a(b)+1;else;a=[a 1];end

Вихід:

Ініціалізувати:

a = [3 2]

Послідовні виконання:

[3 2] -> [3 3] -> [3 3 1] -> [3 3 2] -> [3 3 3] -> [3 3 3 1] ...

2
Ви не можете жорстко кодувати входи, вам потрібно буде зробити щось на кшталт @(x) ….
ბიმო

1

SmileBASIC 3, 101 байт

Визначає функцію оператора, I Aде Aзнаходиться наш цілий масив чисел. Вихід досягається зміною вхідних даних (оскільки масиви є посиланнями.)

DEF I A
M=MIN(A)IF M==MAX(A)THEN PUSH A,1RETURN
FOR C=0TO LEN(A)IF M==A[C]THEN INC A[C]BREAK
NEXT
END

Ви можете зберегти 2 байти, замінивши BREAKна M=0, тому що Aне може містити 0так M==A[C], ніколи не буде правдою.
12Me21

1

SmileBASIC, 77 байт

DEF I A
IF MIN(A)==MAX(A)THEN PUSH A,0
WHILE A[I]>MAX(A)I=I+1WEND
INC A[I]END

0

Pyth, 16 байт

?tl{QXxQhSQQ1+Q1

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

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

Як це працює

?tl{QXxQhSQQ1+Q1  Program. Input: Q
?                 If:
  l                The length
   {Q              of Q deduplicated
 t                 - 1
                   is non-zero:
     X     Q1       Increment in Q at index:
      xQ             Index in Q of
        h            the first element
         SQ          of Q sorted (minimum)
                  else:
             +     Append
               1   1
              Q    to Q
                   Implicitly print                    

0

Haskell, 93 байти

f z|and$(==)<$>z<*>z=z++[1]|1>0=z#minimum z where(x:z)#m|x==m=x+1:z;(x:z)#m|1>0=x:z#m;[]#_=[]

Безголівки:

incrementArray :: [Int] -> [Int]
incrementArray xs | and [x == y | x <- xs, y <- xs] = xs ++ [1]
                  | otherwise = g xs (minimum xs)
     where g (x:xs) m | x == m = (x + 1):xs
           g (x:xs) m | otherwise = x:g xs m
           g [] _ = []

Початкова спроба, спробує придумати щось більш складне пізніше.


1
Чому б не зробити окрему функцію замість використання where?
Майкл Клейн

0

Диво , 44 байти

@[dp1unq#0?:=#[:0(iO f\min#0)#0+1f]#0?++#0 1

Це не те, що я мав на увазі, коли я робив цю мову ... Це буквально гірше, ніж Perl з точки зору читабельності!

Використання:

(@[dp1unq#0?:=#[:0(iO f\min#0)#0+1f]#0?++#0 1])[3 4 9 3]

Пояснення

Більше читати:

@[
  dp 1 unq #0
    ? set #[
            get 0 (iO f\ min #0) #0
            + 1 f
           ] #0
    ? con #0 1
 ]

В основному перевіряє, якщо випадання 1 елемента з унікальної підмножини аргументу робить список порожнім. Якщо ні, то збільшуємо мінімум масиву. В іншому випадку ми просто приєднуємо 1 до аргументу.


0

Котлін, 75 байт

fun a(s:MutableList<Int>){if(s.toSet().size<2)s+=0;s[s.indexOf(s.min())]++}

Змінює аргумент функції.

Чорт ти сильний набравши! :MutableList<Int>припадає на 17 байт. Я не думаю, що існує рішення, на якому можна зробити висновок про тип, на жаль.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.