Eingang:
- Eine ganze Zahl
n
im Bereich2 <= n <= 10
- Eine Liste positiver Ganzzahlen
Ausgabe:
Konvertieren Sie die Ganzzahlen in ihre Binärdarstellung (ohne führende Nullen) und fügen Sie sie alle zusammen.
Bestimmen Sie dann alle binären Teilzeichenfolgen, die einen 'binären Zaun' bilden, indem Sie die n
Anzahl der Zaunpfosten verwenden. Die Abstände (Nullen) zwischen den einzelnen Zaunpfosten sind irrelevant (mindestens 1), die Zaunpfosten selbst sollten jedoch alle gleich breit sein.
Hier die regulären Ausdrücke, mit denen die binären Teilzeichenfolgen übereinstimmen sollten n
:
n Regex to match to be a 'binary fence' Some examples
2 ^(1+)0+\1$ 101; 1100011; 1110111;
3 ^(1+)0+\10+\1$ 10101; 1000101; 110011011;
4 ^(1+)0+\10+\10+\1$ 1010101; 110110011011; 11110111100001111001111;
etc. etc. You get the point
Mit Blick auf die n=4
Beispiele:
1010101
^ ^ ^ ^ All fence posts have a width of one 1
^ ^ ^ with one or more 0s in between them
110110011011
^^ ^^ ^^ ^^ All fence posts have a width of two 1s
^ ^^ ^ with one or more 0s in between them
11110111100001111001111
^^^^ ^^^^ ^^^^ ^^^^ All fence posts have a width of four 1s
^ ^^^^ ^^ with one or more 0s in between them
Wir geben dann die Zahlen aus, die Binärziffern der Übereinstimmungen "Binärzäune" verwenden.
Beispiel:
Input: n=4
,L=[85,77,71]
Die binäre Darstellung dieser zusammengefügten Ganzzahlen lautet:
1010101 1001101 1000111
(HINWEIS: Die Leerzeichen werden nur zur Verdeutlichung des Beispiels hinzugefügt.)
Da n=4
wir nach Teilzeichenfolgen suchen, die mit dem regulären Ausdruck übereinstimmen, können wir (1+)0+\10+\10+\1
in diesem Fall zwei finden:
1010101
(at position (1010101) 1001101 1000111
); und 11001101100011
(an Position 101010(1 1001101 100011)1
)
Der erste Binärzaun verwendet nur Binärziffern von 85
und der zweite Binärzaun verwendet Binärziffern von allen drei Ganzzahlen. Die Ausgabe in diesem Fall wäre also:
[[85],[85,77,71]]
Herausforderungsregeln:
- Obwohl es auch im obigen Beispiel erwähnt wird, ist der letzte Satz wichtig: Wir geben die Zahlen aus, für die Binärziffern in der Teilzeichenfolge 'Binärzaun' verwendet werden.
- I / O ist flexibel. Die Eingabe kann eine Liste / ein Array / ein Datenstrom von ganzen Zahlen, eine durch Leerzeichen / Komma / Zeilenvorschub getrennte Zeichenfolge usw. sein. Die Ausgabe kann eine 2D-Ganzzahlliste, eine einzelne durch Trennzeichen getrennte Zeichenfolge, eine Zeichenfolgenliste oder eine in STDOUT gedruckte neue Zeile usw. sein. Alles liegt bei Ihnen, aber geben Sie bitte an, was Sie in Ihrer Antwort verwendet haben.
- Die Ausgabereihenfolge der Liste selbst ist irrelevant, aber die Ausgabe jeder inneren Liste erfolgt natürlich in derselben Reihenfolge wie die der Eingabeliste. So ist mit dem obigen Beispiel auch
[[85,77,71],[85]]
eine gültige Ausgabe, ist es aber[[85],[77,85,71]]
nicht. - Wie Sie vielleicht bereits aus dem Beispiel (the
85
) bemerkt haben , können Binärziffern mehrfach verwendet werden. - Die regulären Ausdrücke sollten vollständig mit der Teilzeichenfolge übereinstimmen. Also
110101
oder010101
nicht immer eine gültige "binäre Zäune" (10101
ist jedoch iffn=3
). - Die Elemente in der Ausgabeliste sind nicht eindeutig, nur die Binärpositionen der 'Binärzäune' sind eindeutig. Wenn mehrere 'binäre Zäune' mit derselben (denselben) Ganzzahl (en) erstellt werden können, fügen wir sie der Ausgabeliste mehrfach hinzu.
Zum Beispiel:n=2
,L=[109, 45]
(binär1101101 101101
) kann diese 'binary fence' Teilform:11011
(in Position(11011)01 101101
);101
(an der Position1(101)101 101101
);11011
(an der Position110(1101 1)01101
);101
(an der Position1101(101) 101101
);11011
(an der Position110110(1 1011)01
);101
(an der Position1101101 (101)101
);101
(an Position1101101 101(101)
), so wäre die Ausgabe[[109],[109],[109,45],[109],[109,45],[45],[45]]
.
Ein weiteres Beispiel:n=2
,L=[8127]
(binär1111110111111
) kann diese 'binary fence' Teilform:1111110111111
(in Position(1111110111111)
);11111011111
(an der Position1(11111011111)1
);111101111
(an der Position11(111101111)11
);1110111
(an der Position111(1110111)111
);11011
(an der Position1111(11011)1111
);101
(an Position11111(101)11111
), so wäre die Ausgabe[[8127],[8127],[8127],[8127],[8127],[8127]]
. - Wenn keine gültige Ausgabe möglich ist, können Sie eine leere Liste oder eine andere Art von Falsey Ausgang zurückkehren (
null
,false
, wirft einen Fehler, usw. Auch hier Ihr Anruf).
Allgemeine Regeln:
- Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
Lassen Sie sich von Code-Golf-Sprachen nicht davon abhalten, Antworten mit Nicht-Codegolf-Sprachen zu veröffentlichen. Versuchen Sie, für jede Programmiersprache eine möglichst kurze Antwort zu finden. - Für Ihre Antwort gelten Standardregeln. Daher dürfen Sie STDIN / STDOUT, Funktionen / Methoden mit den richtigen Parametern und vollständige Programme vom Rückgabetyp verwenden. Ihr Anruf.
- Standardlücken sind verboten.
- Fügen Sie nach Möglichkeit einen Link mit einem Test für Ihren Code hinzu (z. B. TIO ).
- Außerdem wird dringend empfohlen, eine Erklärung für Ihre Antwort hinzuzufügen.
Testfälle:
Input: Output
(the binary below the output are added as clarification,
where the parenthesis indicate the substring matching the regex):
4, [85,77,71] [[85],[85,77,71]]
(1010101) 1001101 1000111; 101010(1 1001101 100011)1
2, [109,45] [[109],[109],[109,45],[109],[109,45],[45],[45]]
(11011)01 101101; 1(101)101 101101; 110(1101 1)01101; 1101(101) 101101; 110110(1 1011)01; 1101101 (101)101; 1101101 101(101)
3, [990,1,3,3023,15,21] [[990,1,3,3023],[990,1,3,3023],[1,3,3023],[21]]
(1111011110 1 11 1)01111001111 1111 10101; 11110(11110 1 11 101111)001111 1111 10101; 1111011110 (1 11 101111001111) 1111 10101; 1111011110 1 11 101111001111 1111 (10101)
2, [1,2,3,4,5,6,7,8,9,10] [[1,2,3],[2,3],[4,5],[5],[5,6,7],[6,7],[6,7],[8,9],[9],[10]]
(1 10 11) 100 101 110 111 1000 1001 1010; 1 (10 1)1 100 101 110 111 1000 1001 1010; 1 10 11 (100 1)01 110 111 1000 1001 1010; 1 10 11 100 (101) 110 111 1000 1001 1010; 1 10 11 100 10(1 110 111) 1000 1001 1010; 1 10 11 100 101 (110 11)1 1000 1001 1010; 1 10 11 100 101 1(10 1)11 1000 1001 1010; 1 10 11 100 101 110 111 (1000 1)001 1010; 1 10 11 100 101 110 111 1000 (1001) 1010; 1 10 11 100 101 110 111 1000 1001 (101)0
3, [1,2,3,4,5,6,7,8,9,10] [[4,5],[8,9]]
1 10 11 (100 101 )110 111 1000 1001 1010; 1 10 11 100 101 110 111 (1000 1001) 1010
10, [1,2,3,4,5,6,7,8,9,10] []
No binary fences are possible for this input
6, [445873,2075] [[445873,2075],[445873,2075],[445873,2075]]
(1101100110110110001 1)00000011011; 110(1100110110110001 100000011)011; 1101100(110110110001 100000011011)
2, [8127] [[8127],[8127],[8127],[8127],[8127],[8127]]
(1111110111111); 1(11111011111)1; 11(111101111)11; 111(1110111)111; 1111(11011)1111; 11111(101)11111
2, [10,10] [[10],[10,10],[10]]
(101)0 1010; 10(10 1)010; 1010 (101)0
4, [10,10,10] [[10,10],[10,10,10],[10,10]]
(1010 101)0 1010; 10(10 1010 1)010; 1010 (1010 101)0
[1,2,3]
für Testfall 4? Ich sehe den Zaun(1 10 11)
2, [10, 10]
die zur Folge soll , [[10],[10,10],[10]]
wenn ich die Herausforderung correctl.y verstehen