Sie geben Karten mit den Bezeichnungen 0 bis 9 nacheinander aus einem Stapel und bilden Stapel, die bei 0 beginnen und um 1 aufwärts zählen.
- Wenn Sie eine 0 austeilen, legen Sie diese auf den Tisch, um einen neuen Stapel zu beginnen.
- Wenn Sie eine andere Karte austeilen, stapeln Sie sie auf eine Karte, die genau einen niedrigeren Wert hat und diese verdeckt. Wenn es keine solche Karte gibt, kann das Deck nicht gestapelt werden.
Bestimmen Sie bei einem gegebenen Stapel, ob er gestapelt werden kann, wenn die angegebene Reihenfolge eingehalten wird. Entscheiden Sie gleichermaßen anhand einer Liste von Ziffern, ob sie in disjunkte Untersequenzen für jedes Formular unterteilt werden können0,1,..,k
Beispiel
Nimm das Deck 0012312425
. Die ersten beiden Karten sind 0
, also gehen sie auf den Tisch:
Stacks: 00
Deck: 12312425
Als nächstes beschäftigen wir uns mit einem 1
, was weitergeht 0
, egal welches:
1
Stacks: 00
Deck: 2312425
Wir geben dann ein Oben-Auf 2
-Platziertes 1
und das 3
Oben-Auf -Platzierte aus.
3
2
1
Stacks: 00
Deck: 12425
Als nächstes wird die 1
, 2
und oben auf dem ersten Stapel und platziert 4
oben auf dem zweiten.
4
3
22
11
Stacks: 00
Deck: 25
Jetzt müssen wir einen platzieren 2
, aber es gibt keinen 1
Stapel auf beiden. Dieses Deck war also nicht stapelbar.
Eingabe: Eine nicht leere Liste von Ziffern 0-9 oder eine Folge davon. Sie können nicht davon ausgehen, dass 0 immer in der Eingabe sein wird.
Ausgabe : Einer von zwei unterschiedlichen konsistenten Werten, einer für stapelbare Sequenzen und einer für nicht stapelbare
Testfälle:
Stapelbar:
0
01
01234
00011122234567890
012031
0120304511627328390
Nicht stapelbar:
1
021
0001111
0012312425
012301210
000112223
Der Einfachheit halber als Listen:
[0]
[0, 1]
[0, 1, 2, 3, 4]
[0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 4, 5, 6, 7, 8, 9, 0]
[0, 1, 2, 0, 3, 1]
[0, 1, 2, 0, 3, 0, 4, 5, 1, 1, 6, 2, 7, 3, 2, 8, 3, 9, 0]
[1]
[0, 2, 1]
[0, 0, 0, 1, 1, 1, 1]
[0, 0, 1, 2, 3, 1, 2, 4, 2, 5]
[0, 1, 2, 3, 0, 1, 2, 1, 0]
[0, 0, 0, 1, 1, 2, 2, 2, 3]
Gruppiert:
[[0], [0, 1], [0, 1, 2, 3, 4], [0, 0, 0, 1, 1, 1, 2, 2, 2, 3], [0, 1, 2, 0, 3, 1], [0, 1, 2, 0, 3, 0, 4, 5, 1, 1, 6, 2, 7, 3, 2, 8, 3, 9, 0]]
[[1], [0, 2, 1], [0, 0, 0, 1, 1, 1, 1], [0, 0, 1, 2, 3, 1, 2, 4, 2, 5]]
Bestenliste:
var QUESTION_ID=144201,OVERRIDE_USER=20260;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/144201/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>
int a[99]
in C1
bis10
Antworten:
Python 2 ,
4543 Bytes-2 Bytes dank @TFeld
Probieren Sie es online!
quelle
Haskell , 55 Bytes
Eine anonyme Funktion, die eine Liste von Ganzzahlen aufnimmt und a zurückgibt
Bool
.Verbrauch:
(all(<1).foldr(?)[]) [0,1,2,3,4]
.Probieren Sie es online!
Wie es funktioniert
foldr(?)[]
Faltet das Listenargument mit von rechts nach links?
, beginnend mit einer leeren Liste. Das Ergebnis ist die Liste der Nummern in der Liste, die nicht über eine vorherige Nummer passen.all(<1)
testet, ob die einzigen Zahlen, die nicht über eine vorherige Zahl passen, Nullen sind.m?l
Stellt eine Nummerm
einer Listel
nicht passender Nummern voran . Wennm+1
es bereits in der Liste ist, kann es jetzt entfernt werden, wenn es oben drauf passtm
.(p,r)<-span(/=m+1)l
Teilt die Listel
in zwei Teilep
undr
in der ersten Instanz der Nummerm+1
. Wenn es keine gibt, ist der rechte Teilr
leer.m:p++drop 1r
gehtm
den geteilten Teilen voran . Wennr
es nicht leer ist, muss es mit beginnenm+1
, was durch entfernt wirddrop 1
.quelle
?
rekursiv auszudehnen, habe aber die gleiche Länge .Data.List.delete
Schale , 9 Bytes
Probieren Sie es online!
Rückgabe
1
für stapelbare Decks und0
für nicht stapelbare Decks.Es sieht so aus, als hätte Ørjan Johansen in seiner Haskell-Antwort bereits den gleichen Algorithmus gefunden, aber in Husk ist dies offensichtlich viel prägnanter.
Erläuterung
Wir lösen das Problem von einer anderen Seite: Drehen Sie das Deck um und machen Sie absteigende Stapel. Wenn nach dem Durchlaufen des gesamten Decks alle Stapel eine 0 oben haben, ist das Deck stapelbar.
quelle
Jelly ,
1511 BytesProbieren Sie es online!
quelle
‘Ṭ€+\I>0FṀ
immer funktionieren?C (gcc)
7473 BytesErfordert, dass das Eingabearray das Ende mit -1 markiert. Anwendungsbeispiel:
quelle
return r
?Netzhaut , 42 Bytes
Probieren Sie es online!
Erläuterung
Dies sortiert die Ziffern stabil danach, wie oft dieselbe Ziffer zuvor vorgekommen ist. Tatsächlich werden dadurch die verschiedenen Teilsequenzen der Kandidaten zusammengestellt. Die resultierende Zeichenfolge hat zuerst das erste Vorkommen jeder Ziffer und dann das zweite Vorkommen jeder Ziffer und so weiter. In einer stapelbaren Eingabe sieht das Ergebnis so aus
0123...0123...0123...
, als würde jeder dieser Teilstrings an einer beliebigen Stelle enden.Es ist am einfachsten festzustellen, ob die Eingabe ein solches Muster hat.
Wir ersetzen jede Ziffer n durch ns
1
, gefolgt von einem Komma, um einzelne Ziffern zu trennen.Schließlich verwenden wir eine Vorwärtsreferenz, um fortlaufend ansteigende Ziffernfolgen abzugleichen. Wir versuchen, die gesamte Zeichenfolge abzugleichen, indem wir entweder ein einzelnes Komma (das eine 0 darstellt , die einen neuen Lauf startet) oder die vorherige
1
Ziffer, der eine zusätzliche vorangestellt ist, abgleichen. Dies funktioniert nur, wenn die aktuelle Ziffer die Nachfolge der vorherigen Ziffer ist.quelle
TI-Basic (Serie 83), 25 Byte (49 Zeichen)
Wie es funktioniert
Nimmt Eingaben als Liste auf
Ans
. Ansonsten Ausgänge1
für stapelbare Eingänge0
.Für jeden
I
,cumSum(Ans=I)
berechnet eine Liste der Anzahl der Male ,I
in jedem Anfangssegment aufgetreten ist, somin(cumSum(Ans=I)≤cumSum(Ans=I-1))
ist nur ein , wenn an jeder Position haben wir gesehen ,I-1
zumindest so oft wieI
. Der Gesamtausdruck ist,1
wann immer dies für jedes zutrifftI
.quelle
JavaScript (ES6),
614540 BytesÜbernimmt die Eingabe als Liste.
Testfälle
Code-Snippet anzeigen
Wie?
Für jeden Wert 0 ... 9 verfolgen wir die Anzahl der verfügbaren Stapel, wobei die vorhergehende Karte oben liegt. Diese Zähler werden in a [-9] bis a [0] gespeichert , wobei a [] das ursprüngliche Eingabearray ist. Der einzige Zähler, der mit den Eingabedaten kollidiert, ist eine [0] , aber das interessiert uns nicht wirklich, da 1) Karten mit der Bezeichnung 0 immer zulässig sind und ohnehin separat verarbeitet werden müssen und 2) der Eingabewert eine [0] ist ] wird verarbeitet, bevor eine Aktualisierung möglich ist.
quelle
MATL , 16 Bytes
Die Eingabe ist ein Array von Zahlen.
Der Code wird
1
in STDOUT ausgegeben, wenn die Eingabe stapelbar ist, oder wird mit einem Fehler und einer leeren Ausgabe in STDOUT beendet, wenn die Eingabe nicht stapelbar ist.Probieren Sie es online!
quelle
Netzhaut , 110 Bytes
Probieren Sie es online! Link enthält Testfälle. Ich bekomme nicht oft zu verwenden
$16
...quelle
Mathematica, 80 Bytes
quelle
Python 2 ,
6961554746 BytesProbieren Sie es online!
Ausgabe ist
error
/no error
.quelle
R 88 Bytes
Probieren Sie es online!
Funktion, die einen R-Vektor annimmt; kehrt
TRUE
für stapelbar undFALSE
für nicht stapelbar zurück.Erläuterung:
quelle
Nim, 133 Bytes
1
ob es funktioniert;0
wenn nicht.Musste ein paar unkonventionelle Dinge erledigen, um mit der Veränderlichkeit von Variablen in for-Schleifen umzugehen, na ja.
quelle
Haskell ,
7775 BytesProbieren Sie es online! Verbrauch:
g.reverse $ [0,1,2]
. GibtTrue
für stapelbare Eingaben undFalse
sonstiges zurück.Dies ist eine rekursive Lösung, die eine gegebene Liste von hinten nach vorne durchläuft. Es setzt die Beobachtung um, dass
r
und letzte Elementx
ist stapelbar , wennr
ist stapelbar und entwederx
Null oder beidex-1
erscheint inr
undr
mitx-1
entfernt wird auch stapelbar.quelle
Java 8,
168150142 BytesGibt zurück
0
/1
ob es korrekt stapelbar ist oder nicht.Erläuterung:
Probieren Sie es hier aus.
quelle
C 248 Bytes
Hinweis: Um den Rückgabestatus zu drucken, geben Sie "echo $ status" in das Terminal ein
Rückgabestatus 0: Nicht stapelbar
Rückgabestatus 1: Stapelbar
Erläuterung: Inkrementiert das Array-Element mit dem Index, der der aktuell höchsten Stelle im Stapel entspricht. Anschließend prüft das Programm, ob dieses gerade inkrementierte Array-Element größer als das vorhergehende Element ist. Wenn ja, wird 0 zurückgegeben. Andernfalls gibt das Programm, wenn es ans Ende des Arrays gelangt, 1 zurück.
quelle
Gelee , 15 Bytes
Eine monadische Verknüpfung, die eine Liste nicht negativer Ganzzahlen erstellt und zurückgibt,
0
wenn sie stapelbar oder1
nicht stapelbar ist.Probieren Sie es online!
Wie?
quelle
Japt , 16 Bytes
Online testen! Ausgänge
false
für stapelbar,true
für nicht stapelbar.Erläuterung
quelle
05AB1E , 25 Bytes
Die Herausforderung sieht nicht allzu schwierig aus, ist aber in 05AB1E ziemlich schwierig (zumindest für mich ..)
Ausgaben,
0
wenn stapelbar und1
wenn nicht stapelbar.Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle
Java 8, 87 Bytes
Anstatt die Stapel aufzubauen, berechne ich einfach, ob ein Element auf den vorherigen Elementen nicht stapelbar ist, und gebe 0 zurück, wenn ein nicht stapelbares Element angetroffen wird. Wenn ich das Ende erreiche, ist der gesamte String stapelbar und 1 wird zurückgegeben:
Probieren Sie es online!
Erläuterung:
quelle