Bei einem nicht leeren Array positiver Ganzzahlen "erhöhen" Sie es einmal wie folgt:
Wenn alle Array-Elemente gleich sind, fügen Sie ein
1
an das Ende des Arrays an. Zum Beispiel:[1] -> [1, 1] [2] -> [2, 1] [1, 1] -> [1, 1, 1] [3, 3, 3, 3, 3] -> [3, 3, 3, 3, 3, 1]
Anderenfalls erhöhen Sie das erste Element im Array, das der Mindestwert des Arrays ist. Zum Beispiel:
[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] -> ...
(Jedes ->
stellt ein Inkrement dar, was alles ist, was Ihr Programm tun muss.)
Das resultierende inkrementierte Array ausgeben.
Der kürzeste Code in Bytes gewinnt.
code-golf
number
arithmetic
array-manipulation
integer
Calvins Hobbys
quelle
quelle
Antworten:
Gelee ,
87 BytesProbieren Sie es online! oder überprüfen Sie alle Testfälle .
Wie es funktioniert
quelle
Python 3,
62535150 BytesFunktion, die die übergebene Liste ändert ( von Meta erlaubt ).
Versuchen Sie es mit repl.it!
-9 Bytes dank Lynn für das Erkennen, dass, da das Array positive ganze Zahlen enthält, ich '0' an das Ende des Arrays anhängen und dieses inkrementieren kann.
Besonderer Dank geht an mbomb007 für Golf spielen
len(set(a))
auflen({*a})
, und Dennis für die floordiv Trick!quelle
len({*L})<2
feststellen, ob alle Elemente einer Liste gleich sind.a+=1//len({*a})*[0]
sollte ein Byte speichern.JavaScript (ES6), 61 Byte
Ausgabe durch Ändern des Arguments . Ich kann nicht feststellen, ob ein Array nur ein einziges Element in weniger als 17 Bytes enthält, aber Vorschläge sind willkommen.
Testschnipsel
Code-Snippet anzeigen
Andere Versuche
Hier einige alternative Möglichkeiten, um zu entscheiden, ob das Array mehr als eine eindeutige Eingabe enthält:
Beide
some
s können auch durch ersetzt werdenfind
..sort
wäre kürzer, um das Minimum zu finden, wenn die Standardsortierung nicht lexikografisch wäre (warum, JS, warum?):Ich habe versucht, durch Rekursion das Minimum zu finden, aber es hat sich als viel länger herausgestellt:
Und hier ist eine stringbasierte Lösung, die auf den ersten Blick eine gute Idee zu sein schien: (Die Eingabe erfolgt im Array-Format in einem String, z. B.
"[1,2,3]"
)quelle
Mathematica,
705755 BytesPraktisch die ganze Verbesserung ist Martin Ender zu verdanken, der mir bei Pattern Matching-Ansätzen in den Hintern tritt! Auch JHM hat im Wesentlichen zur gleichen Zeit die gleiche Lösung gefunden. (Byteanzahl verwendet ASCII-Codierung)
Definiert eine Funktion
±
mit einem Listenargument. Wenn dieses Listenargument eine bestimmte Anzahl von Kopien desselben Elements enthält (erkannt vonx_..
und benanntp
), geben Sie die Liste mit einem1
Anhang aus. Wenn andernfalls dieses Listenargument ein spezielles Element enthälty
(wobeix
es sich um das Nullelement oder die mehreren Elemente davory
undz
das Nullelement oder die mehreren Elemente danach handelty
), das höchstens das Minimum der anderen Elemente ist, wird die Liste mit diesemy
Inkrement ausgegeben . Jede Instanz des minimalen Elements in der Liste wird von abgeglicheny
, aber glücklicherweise wählt Mathematica die erste, auf die reagiert werden soll.quelle
±
es sich um ein 2-Byte-Zeichen handelt, ist Ihr Code 59 Byte lang. Außerdem muss zwischenx_
und ein Leerzeichen stehen,..
da Mathematicax_..
als interpretiertx_. .
(was Fehler auslöst). Plus, die Infix FormMin
(x~Min~z
würde) macht dieses 2 Bytes kürzer (die diese Lösung identisch mit einem von mir macht: p ...) Welp Sie den Kredit nehmen , weil mein bearbeiten später als Sie war ....±
in UTF-8 ( Mathematica verwendet standardmäßig UTF-8; try$CharacterEncoding
) ist ein Zwei-Byte-Zeichen (U + 00B1).±
.$CharacterEncoding
fürWindowsANSI
die CP1252 festgelegt wurde (die mit ISO 8859-1 ausreichend kompatibel ist±
und·
für ein einzelnes Byte verwendet werden kann).C ++ 14,
178 176 174 155 142135 BytesEinreichung
Aufruf
ungolfed
Dies ist mein erstes Mal Golf zu spielen, Hilfe wird geschätzt.
EDIT: habe vergessen zu erwähnen, dass du es mit mindestens kompilieren musst
-std=c++11
-std=c++14
EDIT2: Mir wurde klar, dass ich den Platz in den Includes weglassen kann
#include <list>
EDIT3: sparte zwei weitere Bytes durch Ersetzen
l.begin()
durchbegin(l)
EDIT4: speicherte dank @Quentin weitere 19 (!) Bytes (siehe seinen Kommentar)
EDIT5: Quentin hat 13 weitere Bytes rasiert, danke!
EDIT6: Wie TuukkaX hervorhob, genügen unbenannte Lambdas / Funktionen, so dass ich das
auto i=
im bytecount entferntequelle
#include
Zeilen.auto i=[](auto&l){...};
) spart ein Byte (mehr, wenn wir den von Ihnen vergessenen Rückgabetyp zählen;)). Durch Verwenden von^
anstelle von==
und Vertauschen der Operanden wird ein anderes Byte gespeichert.std::list
‚s Iteratoren sicher sindstd::
Klassen, so dass Sie fallen könnenstd::
sowohl vonstd::count
undstd::min_element
dank ADL (-10).l.front()
ist auch*b
(-7). Ich lande mit einem 120-Byteauto 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);};
:)std::min_element
, dass es das erste kleinste Element zurückgibt. Dasfind()
ist also überflüssig, das sind 11 Byte. In der Bedingung ist die Verwendung eines Klammerpaars und des Komma-Operators zum Erzwingen des rechten Ausdrucksint
kürzer als das Umwandeln des linken Ausdrucks invoid
2 Bytes. Dies führt zuauto 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 Bytes :)05AB1E ,
212016 Bytes4 Bytes gespart dank Adnan .
Probieren Sie es online!
Erläuterung
quelle
DÙgi0¸«}ÐWksgÝQ+
funktioniert auch.ÝQ
mitk
. Vielen Dank!Scratch,
2534 Blöcke +76 BytesÜbernimmt die Eingabe als vordefiniertes Array von Ganzzahlen. Beachten Sie, dass Arrays in Scratch 1-indiziert sind.
In Python würde dies so aussehen: (Beachten Sie, dass Python im Gegensatz zu Scratch 0-indiziert ist.)
quelle
J,
2522 BytesWertet zu einem anonymen Verb aus. Probieren Sie es online!
Erläuterung
quelle
MATL , 16 Bytes
Probieren Sie es online! Oder überprüfen Sie alle Testfälle
Wie es funktioniert
quelle
Mathematica, 56 Bytes
Verwendet die benannte Funktion
±
. Verwendet ISO8859-1-CodierungAlternative Lösungen (58 Bytes)
Verwendungszweck
quelle
Haskell,
71 7062 Bytes@Zgarb 8 Bytes gespeichert, danke!
Als ich anfing, hoffte ich auf einen eleganten Trick, aber @ Zgarbs Weg ist genauso erstaunlich.
quelle
f(a:b)|(x,y:z)<-span=<<(<).minimum$a:b++[0|all(a==)b]=x++y+1:z
(->)r
, welche auf einen Typ angewendet wird(->)r a = r->a
. Dann ist aus den Typenreturn:: a->r->a
und(>>=)::(r->a)->(a->r->b)->(r->b)
deren Umsetzung (darf ich es sagen?) Klar:return=const
undm>>=f = \r->f(m r)r
. Letzteres ist genau das, was benötigt wird, um etwas auszudrücken,span(predicate_depending_on l)l
während esl
nur einmal erwähnt wird. Jetzt muss ich mich nur noch daran erinnern, wenn ich es brauche.C #,
1231211207977 BytesÄndert das an die Funktion übergebene Argument.
Vielen Dank an Cyoce für das Speichern von 3 Bytes! ->
!Any
zuAll
,+=1
zu++
.Vielen Dank an TheLethalCoder für die Einsparung von satten 43 Bytes! -> Methodensignaturcode entfernt. Klammern um die Parameterliste entfernt.
quelle
!l.Any(o=>o!=l[0]))
mitl.All(o=>o==l[0])
?Any
stattdessenAll
und war der Meinung, dass es nicht geht: D Danke!++
?Action<List<int>>
um den gesamten Methodensignaturcode zu entfernenusing
s mit C # fallen ließen, daher vertraue ich nicht darauf, dass es legal ist, abzufallenusing System.Linq
. Sofern ich keine explizite Aussage sehe, die besagt, dass dies nicht notwendig ist, werde ich dabei bleiben. Vielen Dank für den Vorschlag! :)Perl 6 , 46 Bytes
(Ändert das Eingabe-Array und gibt es zurück.)
Erweitert:
quelle
Gelee, 9 Bytes
Danke an Dennis für die -2 Bytes.
Der Text muss mindestens 30 Zeichen lang sein. du kamst herein ... .
quelle
Mathematica,
53 Bytes57 Bytes59 Bytesquelle
〚
und〛
sind 3-Byte-Zeichen. Außerdem funktioniert Ihr Code nicht, da der{##,1}
Teil impliziert, dass die Eingabe separate Ganzzahlen (dhf[1, 2, 3]
) ist, derx=#
Teil jedoch impliziert, dass die Eingabe einList
(dhf[{1, 2, 3}]
) ist. Eine schnelle Lösung wäre zu ändernx=#
zux={#}
und rohe ganze Zahlen als Eingabe zu akzeptieren, Code 59 Bytes lang zu machen.Equal@#
, obwohl#==##
es kürzer ist.R ,
72 6665 BytesProbieren Sie es online!
Das Inkrementieren erfolgt mit,
which.min
wodurch die erste Übereinstimmung zurückgegeben wird."[<-"
Ermöglicht das Ersetzen des Werts und gibt den geänderten Vektor in einem Funktionsaufruf zurück.-7 Bytes dank Giuseppe!
quelle
!=
mit-
!Ruby, 46 Bytes
Ich habe das Gefühl, dass es eine bessere Möglichkeit gibt, zu überprüfen, ob alle Elemente gleich sind
a.uniq.size<2
, aber ich bin zu faul, um sie zu finden.quelle
a.uniq[1]
wird wahr sein, wenn es unterschiedliche Werte gibt.a[a.index(a.min)]
a[a.index a.min]
Oktave,
696764 BytesEs war tatsächlich kürzer, dies zu einer vollständigen benannten Funktion zu machen, als beide
input
und zu verwendendisp
.3 Bytes gespart dank Luis.
Alte Antwort ohne Verwendung einer Funktion:
quelle
R 97 Bytes
Schade, dass die Synthax
x=+1
in R nicht existiert!Ungolfed:
quelle
TI-Basic, 53 Bytes
quelle
Matlab,
83,77, 71 BytesIch bin relativ neu im Code Golf, sei also bitte nett! Ich habe versucht, anonyme Funktionen zu verwenden, aber Googeln besagt, dass Sie nicht verwenden können, wenn / else-Anweisungen und matlab keine ternären Operatoren haben. Dies ist also das Beste, was ich tun konnte.
Edit: Korrigiert und verkürzt (zweimal!) Dank Stewie-Griffin.
quelle
sum(a)/length(a)==a(1)
garantiert nicht, dass alle Elemente gleich sind, es zeigt nur, dass der Durchschnitt gleich ista(1)
. Ein einfacherer Weg, dies zu tun, wäremean(a)==a(1)
.numel
ist ein Byte kürzer alslength
, aber da Sie wissen, dass alle Werte positiv sind, können Sie verwenden,nnz
was noch kürzer ist (es würde bei dieser Herausforderung immer noch nicht das richtige Ergebnis liefern, aber es ist mindestens kürzer: P). Wenn Sie denmin(a)
Anruf vor der Schleife annehmen , können Sie beide Ausgänge verwenden und prüfen, ob dieall
Elemente vona
gleich sindmin(a)
.~nnz(a(a~=a(1)))
ist einfach~nnz(a-a(1))
. Außerdem benötigen Sie keine Klammern.if ~nnz(a-a(1));a=[a,1];else[~,I]=min(a);a(I)=a(I)+1;end
. Dies sollte 5 Bytes kürzer sein (Hinweis: Ich habe es nicht getestet).range(a)
anstelle vonnnz(a-a(1))
a
gleich dem niedrigsten Wert in diesem Vektor ist. Ein Vektora = [3 4 6]
führt zutrue
und ein Vektora = [4 4 6]
führt zufalse
. Ich denke nicht, dass das hier nützlich sein wird ...?Clojure,
112100 BytesLeider wird
min-key
der letzte Index des kleinsten Index zurückgegeben, nicht der erste. Dies funktioniert für Integer-Eingaben und kürzere Arrays als 10 ^ 9 Elemente;)Bearbeiten: Definieren einer anonymen Funktion mit
(apply = a)
anstelle von(= 1(count(set a)))
.Original:
Eine weniger hackige 134-Byte-Lösung kehrt den Vektor vor dem Aktualisieren um und kehrt ihn dann wieder zurück:
quelle
Java 8, 85 + 38 = 123 Bytes
Void Lambda Taking a
List<Integer>
(Ausgang ist mutierter Eingang). Die Byteanzahl umfasst Lambda und den erforderlichen Import.Probieren Sie es online
Das sieht fast aus wie Python mit diesen Methodenimporten ...
quelle
MATLAB,
6653 BytesAusgabe:
Initialisieren:
Aufeinanderfolgende Läufe:
quelle
@(x) …
.SmileBASIC 3, 101 Bytes
Definiert eine Anweisungsfunktion,
I A
bei derA
es sich um unser ganzzahliges Zahlenarray handelt. Die Ausgabe erfolgt durch Ändern der Eingabe (da Arrays Referenzen sind.)quelle
BREAK
mitM=0
, weilA
nicht enthalten kann ,0
soM==A[C]
wird nie der Fall sein.SmileBASIC, 77 Bytes
quelle
Pyth, 16 Bytes
Ein Programm, das eine Liste eingibt und das Ergebnis druckt.
Testsuite
Wie es funktioniert
quelle
Haskell, 93 Bytes
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:
Der erste Versuch wird später versuchen, etwas Raffinierteres zu finden.
quelle
where
?Wunder , 44 Bytes
Dies ist nicht das, was ich gedacht habe, als ich diese Sprache geschrieben habe ... Es ist buchstäblich schlechter als Perl in Bezug auf die Lesbarkeit!
Verwendungszweck:
Erläuterung
Besser lesbar:
Prüft grundsätzlich, ob das Löschen von 1 Element aus der eindeutigen Teilmenge des Arguments die Liste leer macht. Wenn nicht, erhöhen wir das Minimum des Arrays. Ansonsten verketten wir einfach 1 mit dem Argument.
quelle
Kotlin, 75 Bytes
Ändert das Funktionsargument.
Verdammt du starkes Tippen!
:MutableList<Int>
allein 17 Bytes. Ich glaube nicht, dass es eine Lösung gibt, aus der man leider auf den Typ schließen kann.quelle