Herausforderung
Suchen Sie anhand einer Liste positiver Ganzzahlen, ob es eine Permutation gibt, bei der von jeder Ganzzahl bis zu einem Bit benötigt wird, und 1
erstellen Sie eine Binärzahl, die aus allen s besteht.
Die Anzahl der Bits in der resultierenden Binärzahl entspricht dem höchsten MSB in der Liste der ganzen Zahlen.
Ausgabe
Ihr Code muss einen Wert für " truthy / falsey" ausgeben oder zurückgeben, der angibt, ob eine solche Permutation vorhanden ist.
Beispiele
Wahrheit:
Mit der Liste [4, 5, 2]
und ihrer binären Darstellung [100, 101, 10]
können wir das dritte, erste und zweite Bit verwenden, um Folgendes zu erstellen 111
:
4 -> 100 -> 100 -> 1
5 -> 101 -> 101 -> 1
2 -> 010 -> 010 -> 1
Result 111
In der Liste [3, 3, 3]
sind für alle Zahlen sowohl das erste als auch das zweite Bit als gesetzt 1
, sodass wir uns eine Nummer aussuchen können, die noch übrig ist:
3 -> 11 -> 11 -> 1
3 -> 11 -> 11 -> 1
3 -> 11 -> 11 ->
Result 11
Falsey:
In der Liste [4, 6, 2]
ist für keine der Zahlen das erste Bit gesetzt 1
, sodass die Binärzahl nicht erstellt werden kann:
4 -> 100
6 -> 110
2 -> 010
Mit der Liste [1, 7, 1]
ist nur für eine der Nummern das zweite und dritte Bit festgelegt 1
, und die Nummer kann nicht erstellt werden:
1 -> 001
7 -> 111
1 -> 001
Wenn die maximale Anzahl der gesetzten Bits die Anzahl der ganzen Zahlen überschreitet, kann die Ergebnisnummer natürlich nie erstellt werden.
Testfälle
Wahrheit:
[1]
[1, 2]
[3, 3]
[3, 3, 3]
[4, 5, 2]
[1, 1, 1, 1]
[15, 15, 15, 15]
[52, 114, 61, 19, 73, 54, 83, 29]
[231, 92, 39, 210, 187, 101, 78, 39]
Falsey:
[2]
[2, 2]
[4, 6, 2]
[1, 7, 1]
[15, 15, 15]
[1, 15, 3, 1]
[13, 83, 86, 29, 8, 87, 26, 21]
[154, 19, 141, 28, 27, 6, 18, 137]
Regeln
Standardlücken sind verboten. Da dies Codegolf ist , gewinnt der kürzeste Einstieg!
Antworten:
Jelly , 11 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
J , 30 Bytes
Alles Lob geht an meinen Kollegen Marshall .
Unbenannte implizite Präfixfunktion.
Probieren Sie es online!
(
@
Ist Funktionszusammensetzung)#:
Antibase-2|:
transponieren(
…)^:2
Wenden Sie die folgende Funktion zweimal an:1-
Boolesche Negation>./
das Maximum@
des$
Achslängen{.
nimm (mit Nullen auffüllend) aus|:
das transponierte Argument+./ .*
"verrückte Determinantenmagie" *[:
nicht einhaken (no-op - dient dazu, den vorherigen Teil mit dem Rest zusammenzusetzen)* In Marshalls Worten.
quelle
JavaScript (ES6),
104...9383 BytesRückgabe
0
oder1
.Testfälle
Code-Snippet anzeigen
Methode
Wenn das Eingangsarray A = [a 0 , a 1 , ..., a N-1 ] ist , suchen wir nach einer Permutation [a p [0] , a p [1] , ..., a p [N- 1] ] von A und einer ganzen Zahl x ≤ N, so dass:
Formatiert und kommentiert
quelle
Schale , 14 Bytes
Probieren Sie es online!
Erläuterung
quelle
05AB1E ,
232220 Bytes-1 Byte dank Mr.Xcoder
Wahr: 1, Falsch: 0
Probieren Sie es online!
Erklärungen:
quelle
Wolfram Language (Mathematica) , 65 Byte
Probieren Sie es online!
Erläuterung
Wir beginnen mit der Konvertierung aller Eingaben in Binärlisten.
Dann füllen wir alle diese Listen mit Nullen links auf, um das Array rechteckig zu machen. Das Ergebnis wird
n
für später gespeichert .Yay, Brute Force, lassen Sie uns alle möglichen Permutationen der Eingabe erhalten.
Dies liefert die Spur für jede Permutation, dh die Summe der diagonalen Elemente in der Permutation. Mit anderen Worten, wir addieren das MSB von der ersten Zahl, das neben dem MSB von der zweiten Zahl und so weiter. Wenn die Permutation gültig ist, sind alle 1 und es gibt so viele 1 s als die größte Eingangsnummer breit ist.
Wir erhalten die maximale Ablaufverfolgung, da die Ablaufverfolgung niemals mehr als die einer gültigen Permutation sein kann.
Die rechte Seite ist nur eine Golfversion von
Length @ First @ n
, dh sie erhält die Breite des rechteckigen Arrays und damit die Breite der größten Eingangszahl. Wir wollen sicherstellen, dass die Spur einer Permutation dieser entspricht.quelle
PHP,
255243160 Bytes-12 Bytes, hat die Sortierung
-83 Bytes (!) Dank Titus entfernt
Probieren Sie es online!
Druckt 1 für wahr, nichts für falsch.
Originalversion ungolfed:
quelle
function f($a,$v=NULL,$b=[]){($v=$v??(1<<log(max($a),2)+1)-1)||die("1");if($p=array_pop($a))while($p-=$i)($b[$i=1<<log($p,2)]|$v<$i)||f($a,$v-$i,[$i=>1]+$b);}
true
:die("1")
→die(!0)
.Lua 5,2, 85 Bytes
Dies setzt x auf eine Funktion, die eine variable Anzahl von Eingaben akzeptiert (voraussichtlich 32-Bit-Ganzzahlen) und auf stdout entweder "true" oder "false" druckt.
Verwendung:
quelle
[1,15,3,1]
scheint zurückzukehren ,true
anstattfalse
zum Beispiel. Hier ist Ihr Code, der Online-Compiler von TIO. Die anderen beiden fehlgeschlagenen Testfälle sind[1,7,1]
und[15,15,15]
. Alle anderen Testfälle liefern die korrekten Ergebnisse.PHP, 121 Bytes
Probieren Sie es online aus .
Nervenzusammenbruch
quelle
J , 49 Bytes
Muss ich auch das 'g =.' Zählen? Ich bin bereit, es hinzuzufügen.
Diesmal ein langes explizites Verb. Ich habe einen stillschweigenden für denselben Algorithmus ausprobiert, aber es stellte sich heraus, dass er noch länger und hässlicher war. Weit weg von Adáms Lösung.
Erklärung: (y ist das richtige Argument der Funktion)
Probieren Sie es online!
quelle
Python 3 ,
126120 Bytes6 Bytes durch Mr. Xcoder eingespart
Probieren Sie es online!
quelle
[0]+[...]
Ist das nicht sinnlos?any(g(x[:i]+x[i+1:],n-1)for i in range(len(x))if x[i]&2**n)
sollte ausreichen.Gelee , 17 Bytes
Ein monadischer Link, der eine Liste von Zahlen
1
aufnimmt und (wahrheitsgemäß) oder0
(falsch) zurückgibt.Probieren Sie es online!
Bei TIO wird dies für den längsten der Testfälle unterbrochen.
Wie?
quelle
R ,
247 Bytes221 BytesProbieren Sie es online!
Ungolfed-Version
Ich erkannte, dass die Prüfung ohne Zeilen mit den
drop=F
Argumenten unnötig war . Auch einige lästige Leerzeichen entfernt.quelle
PHP, 152 Bytes
Gibt nichts für falsch, 1 für wahr aus.
Ungolfed:
quelle
Gelee , 17 Bytes
Testsuite.
quelle
C 79 Bytes
quelle
try it online
Link wäre hilfreich.[1, 7, 1]
sollte false zurückgeben und[52, 114, 61, 19, 73, 54, 83, 29]
true zurückgeben