Eine Liste von Zahlen wird als monoton ansteigend (oder nicht absteigend) bezeichnet, wenn jedes Element größer oder gleich dem vorhergehenden Element ist.
Zum Beispiel 1, 1, 2, 4, 5, 5, 5, 8, 10, 11, 14, 14
steigt monoton.
Bei einer monoton ansteigenden Liste positiver Ganzzahlen mit einer willkürlichen Anzahl von leeren Stellen, die mit gekennzeichnet sind ?
, füllen Sie die leeren Stellen mit positiven Ganzzahlen aus, sodass so viele eindeutige Ganzzahlen wie möglich in der Liste vorhanden sind, sie jedoch monoton ansteigen.
Möglicherweise gibt es mehrere Möglichkeiten, dies zu erreichen. Jeder ist gültig.
Die resultierende Liste ausgeben.
Zum Beispiel , wenn die Eingabe ist
?, 1, ?, 1, 2, ?, 4, 5, 5, 5, ?, ?, ?, ?, 8, 10, 11, ?, 14, 14, ?, ?
Es ist garantiert, dass die Liste ohne die leeren Stellen monoton ansteigt
1, 1, 2, 4, 5, 5, 5, 8, 10, 11, 14, 14
und Ihre Aufgabe ist es, jedem positive Ganzzahlen zuzuweisen
?
, um die Anzahl der verschiedenen Ganzzahlen in der Liste zu maximieren, während sie nicht abnehmen.Eine Zuordnung, die nicht gültig ist, ist
1, 1, 1, 1, 2, 3, 4, 5, 5, 5, 5, 5, 5, 5, 8, 10, 11, 14, 14, 14, 14, 14
Denn während es nicht abnehmend ist, hat es nur eine einzige ganze Zahl mehr als die Eingabe, nämlich
3
.In diesem Beispiel ist es möglich, sechs eindeutige positive Ganzzahlen einzufügen und die Liste nicht zu verkleinern.
Einige mögliche Wege sind:1, 1, 1, 1, 2, 3, 4, 5, 5, 5, 6, 7, 8, 8, 8, 10, 11, 12, 14, 14, 15, 16 1, 1, 1, 1, 2, 3, 4, 5, 5, 5, 5, 6, 6, 7, 8, 10, 11, 13, 14, 14, 20, 200
Beides (und viele andere) wäre eine gültige Ausgabe.
Alle leeren Stellen müssen ausgefüllt werden.
Es gibt keine Obergrenze für Ganzzahlen, die eingefügt werden können. Es ist in Ordnung, wenn sehr große Ganzzahlen in wissenschaftlicher Notation gedruckt werden.
Null ist keine positive ganze Zahl und sollte niemals eingefügt werden.
Anstelle von ?
Ihnen jeden konsistenten Wert kann verwendet werden, die nicht eine positive ganze Zahl ist, wie 0
, -1
, null
, False
, oder ""
.
Der kürzeste Code in Bytes gewinnt.
Mehr Beispiele
[input]
[one possible output] (a "*" means it is the only possible output)
2, 4, 10
2, 4, 10 *
1, ?, 3
1, 2, 3 *
1, ?, 4
1, 2, 4
{empty list}
{empty list} *
8
8 *
?
42
?, ?, ?
271, 828, 1729
?, 1
1, 1 *
?, 2
1, 2 *
?, 3
1, 3
45, ?
45, 314159265359
1, ?, ?, ?, 1
1, 1, 1, 1, 1 *
3, ?, ?, ?, ?, 30
3, 7, 10, 23, 29, 30
1, ?, 2, ?, 3, ?, 4
1, 1, 2, 3, 3, 3, 4
1, ?, 3, ?, 5, ?, 7
1, 2, 3, 4, 5, 6, 7 *
1, ?, 3, ?, 5, ?, ?, 7
1, 2, 3, 4, 5, 6, 7, 7
1, ?, ?, ?, ?, 2, ?, ?, ?, ?, 4, ?, 4, ?, ?, 6
1, 1, 1, 1, 1, 2, 3, 4, 4, 4, 4, 4, 4, 5, 6, 6
98, ?, ?, ?, 102, ?, 104
98, 99, 100, 101, 102, 103, 104 *
quelle
Antworten:
Haskell , 41 Bytes
f
Nimmt eine Liste und gibt eine Liste zurück, wobei 0 für?
s steht.Grundsätzlich erste Scan-Liste von links, wobei die Nullen durch eins mehr als das vorherige Element (oder 0 am Anfang) ersetzt werden; Scannen Sie dann von rechts und reduzieren Sie zu große Elemente, um mit denen rechts übereinzustimmen.
Probieren Sie es online! (mit wrapper zum konvertieren
?
s.)quelle
Mathematica, 84 Bytes
Reine Funktion, die eine Liste als Argument verwendet, wobei die leeren Stellen mit
Null
(wie in{1, Null, Null, 2, Null}
) gekennzeichnet oder insgesamt (wie in{1, , , 2, }
) gelöscht werden , und eine geeignete Liste zurückgibt (in diesem Fall{1, 2, 2, 2, 3}
).Es stellte sich heraus, dass ich den gleichen Algorithmus wie in Ørjan Johansens Haskell-Antwort verwende : Ersetzen Sie zuerst jede
Null
durch eine Zahl mehr als die Zahl auf der linken Seite (//.{a___,b_,,c___}:>{a,b,b+1,c}
), und ersetzen Sie dann jede zu große Zahl durch die Zahl auf der rechten Seite (//.{a___,b_,c_,d___}/;b>c:>{a,c,c,d}
). Um möglicheNull
s am Anfang der Liste zu behandeln, müssen wir zunächst a0
({0,##}&@@#
) voranstellen , den Algorithmus ausführen und dann das initial0
(Rest
) löschen .Ja, ich habe
Null
stattdessenX
oder so etwas gewählt, um buchstäblich ein Byte im Code zu speichern (das, das sich sonst zwischen den Kommas von befinden würdeb_,,c___
).quelle
?, 2
. Ich vermute du würdest dann2, 2
statt des richtigen produzieren1, 2
.C 160
Dies wird niemals gewinnen, aber:
Die Liste wird von den Befehlszeilenargumenten übernommen.
quelle
05AB1E ,
312313 BytesDank Grimy 10 Bytes gespart
Probieren Sie es online!
Erläuterung
quelle
}}
können sein]
, 2 Bytes zu sparen; undõ-)R
kann sein)˜R
, ein zusätzliches Byte zu speichern.Pip ,
252321 BytesNimmt Eingaben als mehrere durch Leerzeichen getrennte Befehlszeilenargumente an. Gibt die Ergebnisliste mit einer Nummer pro Zeile aus. Probieren Sie es online! (Ich habe die Sache mit den mehrfachen Kommandozeilenargumenten durcheinandergebracht, weil es sehr schwierig wäre, 25 Argumente für TIO hinzuzufügen, aber es funktioniert auch so, wie es angekündigt wurde.)
Erläuterung
Wir fahren in zwei Durchgängen fort. Zunächst ersetzen wir jeden Lauf von
?
s in der Eingabe durch eine Sequenz, die mit der vorherigen Nummer in der Liste beginnt und jedes Mal um eins zunimmt:Dann durchlaufen wir noch einmal; Für jede Zahl geben wir das Minimum und alle Zahlen rechts davon aus. Dies senkt die zu hohen Zahlen, um die Monotonie aufrechtzuerhalten.
quelle
Python 2 mit NumPy, 163 Bytes
8 Bytes dank @wythagoras gespart
Nullen kennzeichneten leere Stellen
Mit Kommentaren besser lesbar:
quelle
if l[a]>l[b]:l[a]=l[b]
kann seinl[a]=min(l[a],l[b])
und dann kann es an der Linie davor sein. Dies bedeutet auch, dass die gesamte Zeile nach dem gesetzt werden kannwhile
. Und ich denkel=input()
undl=[1]+l
kann es auch seinl=[1]+input()
(Auch im Allgemeinen: Wenn Sie zwei Einrückungsstufen verwenden, können Sie in Python 2 ein Leerzeichen und einen Tabulator anstelle eines Leerzeichens und zweier Leerzeichen verwenden (siehe codegolf.stackexchange.com/a/58 ). )len(z)-i:f(z[i-1],z[i]);i+=1
wenn mit i = 1 begonnen wird.PHP,
9577716968 BytesNimmt Eingaben von Befehlszeilenargumenten entgegen und druckt eine durch Leerzeichen getrennte Liste. Laufen Sie mit
-nr
.Nervenzusammenbruch
$n
ist für jede Zeichenfolge als die leere Zeichenfolge und wahr"0"
.$n>0
ist wahr für positive Zahlen - und Zeichenketten, die sie enthalten.quelle
Perl 6 , 97 Bytes
Die Eingabe ist entweder eine Liste von Werten oder eine durch Leerzeichen getrennte Zeichenfolge,
?
in der die zu ersetzenden Werte angegeben werden.Die Ausgabe ist eine durch Leerzeichen getrennte Zeichenfolge mit einem nachgestellten Leerzeichen.
Versuch es
Erweitert:
quelle
$"
stattdessen' '
ein Byte rasieren. Funktioniert das hier?$!
. ($/
existiert, wird aber für$1
→$/[1]
und$<a>
→ verwendet$/{ qw< a > }
)JavaScript (ES6), 65 Byte
Weil ich nutzen wollte
reduceRight
. Erläuterung:map
Ersetzt jeden falschen Wert durch einen Wert mehr als den vorherigen, wirdreduceRight
von Ende an zurückgearbeitet und sichergestellt, dass kein Wert den folgenden Wert überschreitet.quelle
Q, 63 Bytes
{1_(|){if[y>min x;y-:1];x,y}/[(|){if[y=0;y:1+-1#x];x,y}/[0,x]]}
Im Wesentlichen derselbe Algorithmus wie bei Ørjan Johansens Haskell-Antwort .
Die Verwendung von min vs last wurde verwendet, um ein Byte zu speichern, da davon ausgegangen werden kann, dass das letzte Element das min-Element ist, wenn die Sortierung des Arrays absteigend ist.
quelle
TI-Basic (TI-84 Plus CE), 81 Byte
Ein einfacher Port von Ørjan Johansens Haskell-Antwort auf TI-Basic. Verwendet 0 als Nullwert. Übernimmt die Eingabe von L 1 .
Erläuterung:
quelle
Java 8,
199164 BytesÄndert das Eingabe-Array, anstatt ein neues zurückzugeben, um Bytes zu sparen.
Verwendet
0
anstelle von?
.Probieren Sie es online aus.
Erläuterung:
quelle
Python 2 ,
144124119 BytesProbieren Sie es online!
Verwendet
0
anstelle von?
quelle
b=filter(abs,l[n:])
gleichb=l[n:]
?JavaScript (ES6), 59
Eine Funktion mit einem Integer-Array als Eingabe. Die leeren Stellen sind mit gekennzeichnet
0
Prüfung
quelle
C # (.NET Core) , 182 Byte
Mit der gleichen Strategie wie Ørjan Johansen.
Verwendet 0 in der Eingabeliste, um die unbekannte Variable zu markieren.
Probieren Sie es online!
quelle
Perl 5
-p
, 99 BytesProbieren Sie es online!
quelle