Incrementa una matrice


44

Dato un array non vuoto di numeri interi positivi, "incrementalo" una volta come segue:

  • Se tutti gli elementi dell'array sono uguali, aggiungere 1a alla fine dell'array. Per esempio:

    [1] -> [1, 1]
    [2] -> [2, 1]
    [1, 1] -> [1, 1, 1]
    [3, 3, 3, 3, 3] -> [3, 3, 3, 3, 3, 1]
    
  • Altrimenti, incrementa il primo elemento dell'array che è il valore minimo dell'array. Per esempio:

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

(Ciascuno ->rappresenta un incremento, che è tutto ciò che il tuo programma deve fare.)

Emette l'array incrementato risultante.

Vince il codice più breve in byte.


Conta 0 come numero intero positivo
Downgoat,

20
@Downgoat 0 non è mai positivo su PPCG. Se fosse consentito 0, il termine sarebbe "non negativo"
ETHproductions

Risposte:


13

Gelatina , 8 7 byte

‘;ṀỤḢṬ+

Provalo online! o verifica tutti i casi di test .

Come funziona

‘;ṀỤḢṬ+  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 byte

Funzione che modifica l'elenco passato ad esso ( consentito da meta ).

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

Prova su repl.it!

-9 byte grazie a Lynn per aver individuato che, poiché l'array sarà composto da numeri interi positivi, posso aggiungere '0' alla fine dell'array e farlo incrementare.

Un ringraziamento speciale a mbomb007 per il golf len(set(a))a len({*a}), e Dennis per il trucco floordiv!


Hmm. Msgstr "Invia l'array incrementato risultante". Questo si qualifica?
Yytsi,

Non riesco a ricordare dove, ma ricordo di aver visto un meta post in cui la modifica di un determinato elenco in atto è consentita per impostazione predefinita. Lo cercherò @TuukkaX
FlipTack il

@TuukkaX Non ne sono del tutto sicuro. Sembra ok ma rimanderò al meta consenso sulla modifica degli array in atto, se ce n'è uno.
Calvin's Hobbies,

1
In Python 3, puoi usare len({*L})<2per trovare se tutti gli elementi di un elenco sono uguali.
mbomb007,

1
a+=1//len({*a})*[0]dovrebbe salvare un byte.
Dennis,

9

JavaScript (ES6), 61 byte

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

Emette modificando il suo argomento . Non riesco a trovare un modo per determinare se un array ha un solo elemento univoco in meno di 17 byte, ma i suggerimenti sono ben accetti.

Test snippet

Altri tentativi

Ecco alcuni modi alternativi per decidere se l'array ha più di un input univoco:

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)

Entrambi somepossono essere sostituiti con find. .sortsarebbe più breve per trovare il minimo, se l'ordinamento predefinito non fosse lessicografico (perché, JS, perché?):

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)

Ho provato la ricorsione per trovare il minimo, ma è risultato molto più lungo:

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

Ed ecco una soluzione basata su stringhe che all'inizio sembrava una buona idea: (l'input è dato in formato array in una stringa, ad es. "[1,2,3]")

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

L'uso di a.find (n => n == Math.min (... a)) è più breve?
Downgoat,

@Downgoat Non sono sicuro di come lo userei, poiché restituisce l'articolo anziché l'indice
ETHproductions

si> _> whoops, mi mancava il tuo ++ e non mi rendevo conto che avevi bisogno di un riferimento
Downgoat,

7

Mathematica, 70 57 55 byte

Praticamente tutto il miglioramento è dovuto a Martin Ender, che mi prende a calci negli approcci di pattern matching! Anche JHM ha trovato essenzialmente la stessa soluzione essenzialmente allo stesso tempo. (il conteggio dei byte utilizza la codifica ASCII)

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

Definisce una funzione ±che accetta un argomento dell'elenco. Se tale argomento dell'elenco contiene un numero di copie dello stesso elemento (rilevato da x_..e denominato p), quindi restituire l'elenco con un 1allegato. Altrimenti, se quell'argomento dell'elenco ha un elemento speciale y(con xlo zero o più elementi prima ye zlo zero o più elementi dopo y) che è al massimo il minimo degli altri elementi, quindi genera l'elenco con quello yincrementato. Ogni istanza dell'elemento minimo dell'elenco verrà confrontata y, ma per fortuna Mathematica sceglie il primo su cui agire.


Poiché ±è un carattere a 2 byte, il codice è lungo 59 byte. Inoltre, ci deve essere uno spazio tra x_e ..perché Mathematica interpreta x_..come x_. .(che genera errori). Inoltre, la forma infix di Min( x~Min~z) renderebbe questi 2 byte più brevi (il che rende questa soluzione identica a una delle mie: p ...) Aiutami a prenderti il ​​merito perché la mia modifica era successiva alla tua ....
JungHwan Min

No, Martin Ender ottiene comunque la maggior parte del mio credito. Perché è ± due byte?
Greg Martin,

@GregMartin ±in UTF-8 ( Mathematica utilizza UTF-8 per impostazione predefinita; provare $CharacterEncoding) è un carattere a due byte (U + 00B1).
JungHwan Min

@JHM UTF-8 non è la codifica dei caratteri predefinita su Windows. Mathematica può leggere i file sorgente in una tabella codici a byte singolo che include ±.
Martin Ender,

1
@ASimmons La mia nuova installazione di Mathematica su Windows, $CharacterEncodingimpostata su WindowsANSICP1252 (che è sufficientemente compatibile con ISO 8859-1 per ±e ·utilizzabile per un singolo byte).
Martin Ender,

7

C ++ 14, 178 176 174 155 142 135 byte

presentazione

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

invocazione

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

ungolfed

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

Questa è la prima volta che gioco a golf, l'aiuto è apprezzato.

EDIT: ho dimenticato di dire che devi compilarlo con almeno -std=c++11 -std=c++14

EDIT2: mi sono reso conto che posso tralasciare lo spazio tra gli include #include <list>

EDIT3: salvato altri due byte sostituendo l.begin()conbegin(l)

EDIT4: salvato altri 19 (!) Byte grazie a @Quentin (vedi il suo commento)

EDIT5: Quentin si è rasato altri 13 byte, grazie!

EDIT6: come sottolineato da TuukkaX, le agnas / funzioni auto i=anonime sono sufficienti, quindi ho rimosso il bytecount


5
Non posso aiutarti con C ++, ma posso dire: benvenuto in PPCG!
Zgarb,

1
Penso che non ti servano gli spazi nelle #includelinee.
Christian Sievers,

Oh, grazie, me ne sono appena reso conto :)
Neop

1
Sostituendo la funzione con un lambda ( auto i=[](auto&l){...};) si salva un byte (di più se contiamo il tipo di ritorno che hai dimenticato;)), usando ^ invece ==e scambiando gli operandi ne salva un altro. std::listGli iteratori sono certamente delle std::classi, quindi puoi abbandonare std::entrambi std::counte std::min_elementgrazie ad ADL (-10). l.front()è anche *b(-7). Finisco con un 120 byte 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);};:)
Quentin

1
Mentre ci siamo, la documentazione perstd::min_element afferma che restituisce il primo elemento più piccolo, quindi find()è superfluo, cioè 11 byte. Nel condizionale, l'uso di una coppia di parentesi e dell'operatore virgola per forzare l'espressione giusta intè più breve del cast di quello sinistro voiddi 2 byte. Questo porta a 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 byte :)
Quentin

6

05AB1E , 21 20 16 byte

Salvati 4 byte grazie ad Adnan .

DÙgi0¸«}ÐWksgÝQ+

Provalo online!

Spiegazione

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

Penso che funzioni DÙgi0¸«}ÐWksgÝQ+anche.
Adnan,

@Adnan: Aah, bella idea usare ÝQcon k. Grazie!
Emigna,

5

Scratch, 25 34 blocchi + 7 6 byte

Programma

Accetta l'input come una matrice predefinita di numeri interi. Si noti che le matrici sono 1-indicizzate in Scratch.

In Python, questo sarebbe simile al seguente: (Nota che a differenza di Scratch, Python è indicizzato 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)

Commenti sul golf per favore?
OldBunny2800,

perché dichiari fval?
Christoph,

Mi sembra che Scratch sia solo Python in chiaro con colori ...
Stewie Griffin,

E array con 1 indice e nessuna dichiarazione elif!
OldBunny2800,

1
Buon punto @Christoph! Faceva parte di una versione precedente che era stata eliminata. La modifica.
OldBunny2800,

4

J, 25 22 byte

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

Valuta un verbo anonimo. Provalo online!

Spiegazione

(+~:*[=<./)@,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 byte

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

Provalo online! Oppure verifica tutti i casi di test

Come funziona

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

Mathematica, 56 byte

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

Utilizza la funzione denominata ±. Utilizza la codifica ISO8859-1

Soluzioni alternative (58 byte)

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

uso

±{1, 1}

{1, 1, 1}

±{3, 4, 5}

{4, 4, 5}


3

Haskell, 71 70 62 byte

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

@Zgarb ha salvato 8 byte, grazie!

Quando ho iniziato, ho sperato in qualche inganno elegante, ma il modo di @ Zgarb è altrettanto sorprendente.


Alcune ristrutturazioni, 62 byte:f(a:b)|(x,y:z)<-span=<<(<).minimum$a:b++[0|all(a==)b]=x++y+1:z
Zgarb,

@Zgarb Solo wow!
Christian Sievers,

Ugh, il mio cervello non riesce a dedurre il tipo per l'istanza di funzioni della monade
Angs

@Angs La Monade è (->)r, che si applica a un tipo (->)r a = r->a. Quindi dai tipi return:: a->r->ae la (>>=)::(r->a)->(a->r->b)->(r->b)loro implementazione è (oserei dire?) Ovvio: return=conste m>>=f = \r->f(m r)r. Quest'ultimo è esattamente ciò che è necessario per esprimere qualcosa di simile span(predicate_depending_on l)lcitando luna sola volta. Ora ho solo bisogno di ricordarlo quando ne ho bisogno.
Christian Sievers,

@Angs Puoi trovare questo trucco, e molti altri, nella nostra raccolta di suggerimenti per il golf Haskell .
Zgarb,

3

C #, 123 121 120 79 77 byte

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

Modifica l'argomento passato alla funzione.

Grazie a Cyoce per aver salvato 3 byte! -> !Anya All, +=1a ++.

Grazie a TheLethalCoder per il salvataggio di ben 43 byte! -> Codice firma metodo rimosso. Parentesi rimossa attorno all'elenco dei parametri.


potresti sostituirlo !l.Any(o=>o!=l[0]))con l.All(o=>o==l[0])?
Cyoce,

@Cyoce Lo fa davvero. Ho pensato alla stessa cosa, ma ho scritto Anyinvece Alled era nel pensiero, che non funziona: D Grazie!
Yytsi,

2
C # non ha ++?
Cyoce,

È possibile compilare in un Action<List<int>>per rimuovere tutto il codice della firma del metodo
TheLethalCoder

1
@Stefan Hmm. Ho anche visto molte persone rilasciare i messaggi necessari usingcon C #, quindi non mi fido che sia legale abbandonare using System.Linq. Se non vedo una dichiarazione esplicita che dice che non è necessario, rimarrò con questo. Grazie per il suggerimento però! :)
Yytsi,

2

Perl 6 , 46 byte

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

(modifica la matrice di input e la restituisce)

Allargato:

{     # 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

Gelatina, 9 byte

;1µ‘i¦E?Ṃ

Grazie a Dennis per i -2 byte.

Il corpo deve contenere almeno 30 caratteri; sei entrato ... .


Se hai caratteri extra da inserire nel corpo, vale sempre la pena spiegare il codice, che aiuta tutti a capirlo e rende la risposta più interessante :)
Alfie Goodacre

2

Mathematica, 53 byte 57 byte 59 byte

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

7
Sono 57 byte. e sono caratteri a 3 byte. Inoltre, il codice non funziona perché la {##,1}parte implica che l'input è numeri interi separati (ovvero f[1, 2, 3]) ma la x=#parte implica che l'input è un List(ovvero f[{1, 2, 3}]). Una soluzione rapida sarebbe quella di cambiare x=#a x={#}ed accettare interi crudi come input, rendendo il codice lungo 59 byte.
JungHwan Min

Buona pesca! Non ho realizzato la distinzione tra byte e numero di caratteri, ho appena visto questo suggerimento e ho pensato che fosse valido. Sembra che ci siano molte risposte che danno il conteggio dei caratteri, ma se le salvo in Notepad ++ ottengo un conteggio di byte più alto (ad esempio la risposta Jelly). Vedo che la tua risposta specifica una codifica, c'è un posto che mi consiglieresti di conoscere?
ngenisi,

1
Penso che intendi Equal@#, anche se #==##è più breve.
Martin Ender,

Hai ragione. Ho apportato una modifica per @JHM per accettare più argomenti anziché un elenco, ma non ho propagato la modifica ovunque. Sono tornato ad accettare un elenco poiché è più in linea con il prompt.
ngenesi,

2

R , 72 66 65 byte

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

Provalo online!

L'incremento viene effettuato utilizzando which.minquale restituisce la prima corrispondenza. "[<-"consente di sostituire il valore e restituisce il vettore modificato in una chiamata di funzione.

-7 byte grazie a Giuseppe!



@Giuseppe Ho provato isTRUE e isFALSE con sd non è più golfista :(
JayCe

eh, 65 byte in sostituzione !=con -!
Giuseppe

@Giuseppe ovviamente!
JayCe,

1

Rubino, 46 ​​byte

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

Sento che c'è un modo migliore per verificare se tutti gli elementi sono uguali a.uniq.size<2, ma sono troppo pigro per trovarlo.


6
a.uniq[1]sarà vero se ci sono valori distinti.
istocratico

Puoi salvare un byte trasformandolo a[a.index(a.min)]ina[a.index a.min]
Cyoce

1

Ottava, 69 67 64 byte

In realtà è stato più breve rendere questa una funzione denominata completa rispetto all'uso di entrambi inpute disp.

Salvato 3 byte grazie a Luis.

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

Vecchia risposta, non utilizzando una funzione:

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

1

R, 97 byte

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

Peccato che la sintassi x=+1non esista in R!

Ungolfed:

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 byte

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

Matlab, 83 , 77 , 71 byte

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

Sono relativamente nuovo al codice golf, quindi per favore sii gentile! Ho provato a usare funzioni anonime ma googling dice che non puoi usare le istruzioni / else e matlab non ha operatori ternari, quindi questo è il migliore che ho sentito di poter fare.

Modifica: corretto e ridotto (due volte!) Grazie a Stewie-Griffin.


Benvenuti in PPCG! Ci sono alcuni difetti in questo codice. sum(a)/length(a)==a(1)non garantisce che tutti gli elementi siano uguali, mostra solo che la media è uguale a a(1). Un modo più semplice per farlo sarebbe mean(a)==a(1). numelè un byte più corto di length, ma poiché sai che tutti i valori sono positivi, puoi usare quello nnzche è ancora più breve (non darebbe comunque il risultato corretto in questa sfida, ma è almeno più breve: P). Se si prende la min(a)chiamata davanti al loop, è possibile utilizzare entrambe le uscite e verificare che gli allelementi asiano uguali a min(a).
Stewie Griffin,

Hai ragione! fallisce quando la media è uguale al numero nel primo elemento. Penso che il mio nuovo sia corretto e anche più breve. La logica è che se gli elementi rimanenti non sono uguali al primo elemento, a (a ~ = a (1)) restituisce gli elementi rimanenti che per definizione è maggiore di 0 in un array non uguale. Quindi contare e non dovrebbe dare la logica corretta penso. Se è ancora sbagliato, per favore fatemelo sapere, sto scrivendo codice da alcuni anni e ho ancora molto da fare.
Owen Morgan,

~nnz(a(a~=a(1)))è semplicemente ~nnz(a-a(1)). Inoltre, non hai bisogno delle parentesi. if ~nnz(a-a(1));a=[a,1];else[~,I]=min(a);a(I)=a(I)+1;end. Questo dovrebbe essere più corto di 5 byte (nota: non l'ho provato).
Stewie Griffin,

Puoi salvare 3 byte usando range(a)invece dinnz(a-a(1))
MattWH il

@boboquack, quel codice controlla se il numero di elementi in aè uguale al valore più basso in quel vettore. Un vettore a = [3 4 6]si tradurrà in true, e un vettore a = [4 4 6]si tradurrà in false. Non penso che sarà utile qui ...?
Stewie Griffin,

1

Clojure, 112 100 byte

Purtroppo min-keyrestituisce l'ultimo indice dell'indice più piccolo, non il primo. Funziona con input di numeri interi e array più corti di 10 ^ 9 elementi;)

Modifica: definizione di una funzione anonima, utilizzando (apply = a)invece di (= 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)))

Originale:

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

Una soluzione meno caotica a 134 byte inverte il vettore prima di aggiornarlo e quindi ripristina nuovamente:

(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 byte

Vuoto lambda prendendo un List<Integer>(l'output è input mutato). Il conteggio dei byte include lambda e l'importazione richiesta.

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

Provalo online

Sembra quasi Python con quelle importazioni di metodi ...


1

MATLAB, 66 53 byte

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

Produzione:

Inizializzare:

a = [3 2]

Esecuzioni successive:

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

2
Non è possibile codificare gli input, è necessario fare qualcosa del genere @(x) ….
ბიმო

1

SmileBASIC 3, 101 byte

Definisce una funzione di istruzione in I Acui Aè la nostra matrice di numeri interi. L'output si ottiene modificando l'input (poiché le matrici sono riferimenti.)

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

È possibile salvare 2 byte sostituendoli BREAKcon M=0, perché Anon possono contenere, 0quindi M==A[C]non sarà mai vero.
Me21

1

SmileBASIC, 77 byte

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 byte

?tl{QXxQhSQQ1+Q1

Un programma che accetta l'inserimento di un elenco e stampa il risultato.

Suite di test

Come funziona

?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 byte

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;[]#_=[]

Ungolfed:

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

Il tentativo iniziale, proverà a trovare qualcosa di più sofisticato in seguito.


1
Perché non fare una funzione separata invece di usare where?
Michael Klein,

0

Meraviglia , 44 byte

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

Questo non è quello che avevo in mente quando ho creato questa lingua ... È letteralmente peggio del Perl in termini di leggibilità!

Uso:

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

Spiegazione

Più leggibile:

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

Fondamentalmente controlla se l'eliminazione di 1 elemento dal sottoinsieme univoco dell'argomento rende l'elenco vuoto. In caso contrario, incrementiamo il minimo dell'array. Altrimenti, concateniamo semplicemente 1 all'argomento.


0

Kotlin, 75 byte

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

Modifica l'argomento della funzione.

Accidenti a te che digiti forte! :MutableList<Int>rappresenta solo 17 byte. Non penso che ci sia una soluzione in cui il tipo possa essere dedotto, sfortunatamente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.