Betrachten Sie ein Array von Ganzzahlen:
[1, 0, 9, 1, 3, 8]
Es gibt viele Möglichkeiten, diese Liste in aufeinanderfolgende Unterlisten zu unterteilen. Hier sind drei:
A: [[1, 0, 9], [1, 3, 8]]
B: [[1], [0, 9], [1, 3], [8]]
C: [[1, 0], [9, 1], [3, 8]]
Wir werden eine Partition Y aufrufen und eine andere Partition X verfeinern, wenn X von Y erhalten werden kann, indem einige seiner Unterlisten wieder zusammengefügt werden.
Dies B
ist eine Verfeinerung von A
: Wenn wir die ersten beiden und die letzten beiden Unterlisten wieder zusammenfügen, erhalten wir A
. Aber es C
ist keine Verfeinerung von A
: Wir müssten das 9
und das aufteilen, um uns davon 1
zu erholen A
. Außerdem ist jede Partition eine triviale Verfeinerung ihrer selbst.
Beachten Sie, dass wir zu keinem Zeitpunkt Unterlisten oder Elemente neu anordnen dürfen.
Die Herausforderung
Bei zwei gegebenen Partitionen (Listen von Listen von ganzen Zahlen) X
und Y
bestimmen Sie, ob Y
eine Verfeinerung von X
.
Sie können davon ausgehen, dass die Partitionen nur ganze Zahlen von 0
bis 9
einschließlich enthalten. Sie dürfen das nicht annehmen X
und Y
sind Partitionen derselben Liste (wenn dies nicht der Fall ist, sind sie auch keine Verfeinerungen voneinander). X
und / oder Y
leer sein, aber niemals leere Unterlisten enthalten.
Sie können ein Programm oder eine Funktion schreiben, indem Sie eine Eingabe über STDIN (oder die nächstgelegene Alternative), ein Befehlszeilenargument oder ein Funktionsargument vornehmen und das Ergebnis über STDOUT (oder die nächstgelegene Alternative), einen Funktionsrückgabewert oder einen Funktionsparameter (out) ausgeben.
Die Eingabe kann in einem beliebigen geeigneten Zeichenfolge- oder Listenformat erfolgen. Da es sich bei den Elementen nur um einstellige Ganzzahlen handelt, können Sie ein Trennzeichen in den Unterlisten weglassen, aber sicherstellen, dass führende 0
s möglich sind. Sie können wählen, X
und Y
in umgekehrter Reihenfolge zu nehmen .
Die Ausgabe sollte wahr sein, wenn Y
es sich um eine Verfeinerung handelt, X
und ansonsten falsch .
Ihr Code muss in der Lage sein, jeden der folgenden Testfälle in 1 Sekunde auf einem vernünftigen Desktop-Computer zu lösen. (Dies ist lediglich eine Überprüfung der geistigen Gesundheit, um einfache Brute-Force-Lösungen zu vermeiden.)
Dies ist Codegolf, daher gewinnt die kürzeste Antwort (in Bytes).
Testfälle
Jeder Testfall steht in einer eigenen Zeile, geschrieben als X Y
. Ich verwende die Array-Notation im GolfScript / CJam-Stil, um etwas horizontalen Platz zu sparen:
Wahrheit:
[] []
[[0]] [[0]]
[[1 0 9 1 3 8]] [[1 0 9] [1 3 8]]
[[1 0 9 1 3 8]] [[1 0 9 1 3] [8]]
[[1 0 9 1 3 8]] [[1] [0] [9] [1] [3] [8]]
[[1 0 9] [1 3 8]] [[1 0 9] [1 3 8]]
[[1 0 9] [1 3 8]] [[1] [0 9] [1 3] [8]]
[[9 8 8 5 8 2 7] [5] [1 4] [2 0 0 6 0 8 4 2 6 4 2 3 7 8 7 3 9 5 7 9 8 2 9 5] [3 9 8] [7 1 4 9 7 4 5 9] [3 3 3] [9 0 7 8] [3 9 4 7 2 7 8 0 3 0] [8 2 2 7 3 9 3 2] [2 9 0 8 5 4 1 8 5 5 6 2 0 9 2 7 7 9 2 7] [3 6] [1 2 7 7 4 4 2 9]] [[9 8] [8] [5 8 2] [7] [5] [1 4] [2] [0 0 6] [0] [8 4 2] [6 4] [2] [3] [7 8] [7 3] [9] [5 7 9] [8 2] [9 5] [3] [9 8] [7 1 4] [9 7] [4 5 9] [3 3] [3] [9 0] [7 8] [3] [9] [4] [7 2] [7 8] [0] [3 0] [8 2] [2] [7 3] [9 3] [2] [2] [9] [0] [8 5 4] [1 8] [5 5] [6] [2 0] [9] [2] [7 7 9] [2 7] [3 6] [1 2] [7 7] [4 4 2] [9]]
Falsch:
[[0]] []
[[0]] [[1]]
[[1 0 9]] [[1 0 9] [1 3 8]]
[[1 0 9] [1 3 8]] [[1 0 9 1 3 8]]
[[1 0 9] [1 3 8]] [[1 0 9]]
[[1 0 9] [1 3 8]] [[1 0] [9]]
[[1 0 9] [1 3 8]] [[1 0] [9 1] [3 8]]
[[1] [0 9] [1 3] [8]] [[1 0 9] [1 3 8]]
[[9 8 8 5 8 2 7] [5] [1 4] [2 0 0 6 0 8 4 2 6 4 2 3 7 8 7 3 9 5 7 9 8 2 9 5] [3 9 8] [7 1 4 9 7 4 5 9] [3 3 3] [9 0 7 8] [3 9 4 7 2 7 8 0 3 0] [8 2 2 7 3 9 3 2] [2 9 0 8 5 4 1 8 5 5 6 2 0 9 2 7 7 9 2 7] [3 6] [1 2 7 7 4 4 2 9]] [[9 8] [8] [5 8 2] [7] [5 1] [4] [2] [0 0 6] [0] [8 4 2] [6 4] [2] [3] [7 8] [7 3] [9] [5 7 9] [8 2] [9 5] [3] [9 8] [7 1 4] [9 7] [4 5 9] [3 3] [3] [9 0] [7 8] [3] [9] [4] [7 2] [7 8] [0] [3 0] [8 2] [2] [7 3] [9 3] [2] [2] [9] [0] [8 5 4] [1 8] [5 5] [6] [2 0] [9] [2] [7 7 9] [2 7] [3 6] [1 2] [7 7] [4 4 2] [9]]
Bestenlisten
Hier ist ein Stack-Snippet, um sowohl eine reguläre Rangliste als auch eine Übersicht der Gewinner nach Sprache zu generieren.
Um sicherzustellen, dass Ihre Antwort angezeigt wird, beginnen Sie Ihre Antwort mit einer Überschrift. Verwenden Sie dazu die folgende Markdown-Vorlage:
# Language Name, N bytes
Wo N
ist die Größe Ihres Beitrags? Wenn Sie Ihre Punktzahl verbessern, können Sie alte Punkte in der Überschrift behalten, indem Sie sie durchstreichen. Zum Beispiel:
# Ruby, <s>104</s> <s>101</s> 96 bytes
<script>site = 'meta.codegolf'; postID = 5314; isAnswer = true; QUESTION_ID = 51719</script><script src='https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js'></script><script>jQuery(function(){var u='https://api.stackexchange.com/2.2/';if(isAnswer)u+='answers/'+postID+'?order=asc&sort=creation&site='+site+'&filter=!GeEyUcJFJeRCD';else u+='questions/'+postID+'?order=asc&sort=creation&site='+site+'&filter=!GeEyUcJFJO6t)';jQuery.get(u,function(b){function d(s){return jQuery('<textarea>').html(s).text()};function r(l){return new RegExp('<pre class="snippet-code-'+l+'\\b[^>]*><code>([\\s\\S]*?)</code></pre>')};b=b.items[0].body;var j=r('js').exec(b),c=r('css').exec(b),h=r('html').exec(b);if(c!==null)jQuery('head').append(jQuery('<style>').text(d(c[1])));if (h!==null)jQuery('body').append(d(h[1]));if(j!==null)jQuery('body').append(jQuery('<script>').text(d(j[1])))})})</script>
[[[1 0 9] [1 3 8]] [[1] [0 9] [1 3] [8]]]
oder[["109" "138"] ["1" "09" "13" "8"]]
wäre ein akzeptables Eingabeformat?