Die Herausforderung
Sie erhalten:
- eine nicht leere, unsortierte Liste h positiver Ganzzahlen (der Heuhaufen)
- eine positive ganze Zahl n (die Nadel)
Ihre Aufgabe ist es, die Liste aller eindeutigen Dezimalverkettungen von Permutationen von h zurückzugeben, deren Binärdarstellung die Binärdarstellung von n enthält .
Beispiele
h = [1, 2, 3]
n = 65Es gibt nur eine passende Verkettung, die erwartete Ausgabe ist also
[321]
.h = [1, 2, 3]
n = 7Dieses Mal gibt es drei Verkettungen, die das binäre Muster 111 enthalten . Die erwartete Ausgabe ist
[123, 231, 312]
.h = [12, 3]
n = 7Es sind nur zwei Permutationen verfügbar und beide stimmen überein. Die erwartete Ausgabe ist
[123, 312]
.h = [1, 2, 2]
n = 15Die einzige übereinstimmende Verkettung ist 122 ( 1111010 im Binärformat, das 1111 enthält ), die erwartete Ausgabe ist also
[122]
. Beachten Sie, dass zwei Permutationen tatsächlich zu 122 führen, aber Sie nicht ausgeben dürfen[122, 122]
.
Erläuterungen und Regeln
- Sie können die Nadel als Ganzzahl (
65
), als Zeichenfolge für einen Dezimalwert ("65"
) oder als Zeichenfolge für einen Binärwert ("1000001"
) verwenden. - Sie können den Heuhaufen als natives Array / Objekt / Satz von Ganzzahlen (
[11,12,13]
), als natives Array / Objekt / Satz von Zeichenfolgen, die Dezimalwerte (["11","12","13"]
) darstellen, oder als durch Trennzeichen getrennte Zeichenfolge von Dezimalwerten ("11 12 13"
oder"11,12,13"
) betrachten. Sie können sich auch für eine Variante mit Arrays von Ziffern (wie[[1,1],[1,2],[1,3]]
) entscheiden. - Die Ausgabe muss einem der oben beschriebenen Formate für den Heuhaufen entsprechen, muss jedoch nicht dasselbe sein.
- Sie dürfen keine Heuschober verarbeiten, deren höchste dezimale Verkettung größer ist als die höchste darstellbare ganze Zahl ohne Vorzeichen in Ihrer Sprache.
- Abgesehen davon sollte Ihr Code theoretisch jede Eingabe unterstützen - vorausgesetzt, er hat genügend Zeit und Speicherplatz.
- Das ist
SPARTA!Code-Golf , so gewinnt die kürzeste Antwort in Bytes!
Testfälle
Haystack | Needle | Output
---------------------+----------+-----------------------------------
[ 1, 2, 3 ] | 65 | [ 321 ]
[ 1, 2, 3 ] | 7 | [ 123, 231, 312 ]
[ 12, 3 ] | 7 | [ 123, 312 ]
[ 1, 2, 2 ] | 15 | [ 122 ]
[ 1, 2 ] | 7 | []
[ 12, 34, 56 ] | 21 | [ 125634, 341256, 345612, 563412 ]
[ 1, 2, 3, 4, 5 ] | 511 | [ 53241 ]
[ 1, 3, 5, 7, 9 ] | 593 | [ 37519, 51793, 75913, 75931 ]
[ 11, 12, 13, 14 ] | 12141311 | [ 12141311 ]
[ 1, 2, 1, 2, 1, 2 ] | 1015 | [ 221112 ]
quelle
set([(1, 2, 2)])
. Ist es gültig oder soll ich es loswerdenset
?["12","3"]
und["1","23"]
sind zwei verschiedene Heuhaufen.Antworten:
05AB1E ,
108 BytesNimmt die Nadel als Binärdatei, um 1 Byte zu sparen.
-2 Bytes dank Emigna
Probieren Sie es online!
quelle
Python 2, 90 Bytes
-3 Bytes dank @ Gábor Fekete
Probieren Sie es online aus
Wird als Eingabearray von Zeichenfolgen verwendet, die Ints aus Heu und Zeichenfolge darstellen und Needle in Binärdarstellung darstellen
quelle
{...}
stattset(...)
3 Bytes sparen.H=['1'], N='0'
.Java 10,
320312305297292 BytesEingabe als List & Binary-String, Ausgabe als Strings in New-Lines.
Erläuterung:
Probieren Sie es hier aus.
quelle
l->n->{...
nachvoid p(...
wie das Lambda ist die Antwort auf die Eingabeaufforderung und die Funktion erforderlich ist , Setup für die Lambda - Arbeit. Konsens über "Funktionsausdrücke" ist so etwas wie "Der letzte" Ausdruck "Ihrer Übermittlung kann ein" Funktionsausdruck "sein, wenn er beim Speichern in einer Variablen die Anforderungen einer Funktionsantwort" IIRC "erfüllt. Aber das ist nur ein Formatierungsproblem, und zwar ein subjektives.void
weil sie kürzer als ein zweites Lambda und das Vielfache war.apply
. Ich habe es nicht auf diese Antwort überprüft (dhvoid p(List l,int k)
& 2xp(l,0)
versus(l,k)->
& 2xp.apply(l,0)
). Hmm .. zweite scheint in diesem Fall 1 Byte kürzer zu sein. Aber Sie sagen, Regeln besagen, dass Sie nur eine Lambda-Methode haben dürfen? Immer noch ein bisschen verwirrt, warum es das letzte sein muss. Persönlich schreibe ich immer meine Antworten in dieser Reihenfolge:imports; class-fields; main-method/lambda; other methods
.imports;helper methods;lambda
void p(List l,int k)
& 2xf(l,0);
versusf=(l,p)->
& 2xp.apply(l,0);
(was bedeutet, dass die aktuelle Version 1 Byte kürzer ist). Bei der Bestellung bleibe ich einfach dabei, da ich dies bei all meinen Antworten getan habe, und es ist auch für mich persönlich sinnvoll, mit der Hauptmethode in der Erklärung und dann mit der (den) Hilfsmethode (n) zu beginnen, wenn es gibt welchef=(lambda)
in Java machen, es istjava.util.function.BiConsumer<List,Integer>f=(l,p)->{...}
Japt ,
1514131210 BytesNimmt den Heuhaufen als Array von Ganzzahlen und die Nadel als Binärzeichenfolge. Gibt ein Array von Ganzzahlzeichenfolgen aus.
Versuch es
Erläuterung
quelle
®¬nÃ
Speichert ein Byte im Mapping. (Ich würde auchâ
in die Mitte des Programms gehen, um die Sekunde loszuwerden.Ã
Speichert keine Bytes, aber es ist ein bisschen effizienter und sieht etwas besser aus.)â
war eine schnelle Lösung, als Arnauld darauf hinwies, dass ich vergessen hatte, die Duplikate aus dem endgültigen Array zu entfernen, aber Sie haben Recht, das Entfernen der Duplikate vor dem Ausführen des Filters wäre effizienter.Ruby ,
6159 BytesProbieren Sie es online!
Cooles Feature des Tages: Ich wusste nicht, dass ich die Binärdarstellung eines Strings mit einer Zahl ausgeben kann.
Beispiel:
quelle
JavaScript (ES6), 140 Byte
Nimmt Nadel als binäre Zeichenfolge.
Code-Snippet anzeigen
quelle
Brachylog , 15 Bytes
Probieren Sie es online!
Erläuterung
quelle
Mathematica,
170 bis156 BytesEingang
Ausgabe
quelle
v[#2, 2]
.CJam,
23222119 BytesDies ist ein Block, der Eingaben
n h
auf dem Stapel entgegennimmt und die Ausgabe als Array auf dem Stapel belässt.Erläuterung:
quelle
R, 114 Bytes
Verwendet eine Reihe von Paketen.
pryr::f()
Erstellt automatisch eine Funktion, wobeip
eine Zeichenfolge des zu suchenden Binärmusters undx
ein Vektor mit der anderen Eingabe als Eingabe verwendet werden.combinat::permn
erstellt alle Permutationen vonx
.R.utils::intToBin
ist eine nette und wortreiche Version, um eine Zahl (oder Zeichendarstellung einer Zahl) in eine Binärzahl umzuwandeln, die bereits als Zeichen gespeichert ist. Wenden Sie dies also auf alle Permutationen an und geben Sie sie aus, wenn die Binärzeichenfolgep
in der Binärversion der Verkettung enthalten ist. Es wird ein expliziter Zeilenumbruch ausgegeben, da sonst die Ausgabe erfolgen würde12 56 3456 34 1234 56 1234 12 56
.plyr
'sl_ply
wird verwendet, um die Ausgabe einer Nullliste neben der regulären Ausgabe zu unterdrücken. Wenn die Ausgabe so erlaubt ist:Dann können wir einige Bytes sparen, indem wir
lapply
stattdessen verwenden:108 Bytes:
Wenn die Ausgabe so erlaubt ist:Dann können wir es noch kürzer machen:
101 Bytes:
Nicht erlaubt.quelle
Perl 6 , 69 Bytes
quelle