Inspiriert (mit der gestohlenen Erklärung) davon
Hintergrund
Angenommen, Sie haben zwei Listen A = [a_1, a_2, ..., a_n]
und B = [b_1, b_2, ..., b_n]
ganze Zahlen. Wir sagen, es A
ist potentiell teilbar durch, B
wenn es eine Permutation gibt B
, die es für alle a_i
teilbar macht . Das Problem ist dann: Ist es möglich, neu zu ordnen (dh zu permutieren), so dass es für alle teilbar ist ? Zum Beispiel, wenn Sie habenb_i
i
B
a_i
b_i
i
A = [6, 12, 8]
B = [3, 4, 6]
Dann wäre die Antwort True
, wie B
neu geordnet werden kann zu sein , B = [3, 6, 4]
und dann würden wir das haben a_1 / b_1 = 2
, a_2 / b_2 = 2
und a_3 / b_3 = 2
, von denen alle ganze Zahlen sind, so A
ist potentiell teilbar durch B
.
Als ein Beispiel, das ausgegeben werden sollte False
, könnten wir haben:
A = [10, 12, 6, 5, 21, 25]
B = [2, 7, 5, 3, 12, 3]
Der Grund dafür ist, False
dass wir die Reihenfolge nicht ändern können, B
da 25 und 5 eingegeben A
wurden, der einzige Teiler B
jedoch 5 wäre, sodass einer weggelassen würde.
Deine Aufgabe
Ihre Aufgabe ist es natürlich, festzustellen, ob zwei Listen (als Eingabe angegeben) möglicherweise teilbar sind. Sie können Eingaben auf jede akzeptierte Art und Weise vornehmen, wie dies auch bei Ausgaben der Fall ist.
Duplikate in den Listen sind möglich, und die einzigen Größenbeschränkungen für die Ganzzahlen sind Ihre Sprache. Alle Ganzzahlen in beiden Listen sind größer als 0 und beide Listen sind gleich groß.
Wie bei allen Entscheidungsproblemen müssen die Ausgabewerte 2 verschiedene Werte sein, die wahr und falsch darstellen.
Dies ist ein Code-Golf, also gewinnt der kürzeste Code!
Testfälle
Input, input => output
[6, 12, 8], [3, 4, 6] => True
[10, 5, 7], [1, 5, 100] => False
[14, 10053, 6, 9] [1,1,1,1] => True
[12] [7] => False
[0, 6, 19, 1, 3] [2, 3, 4, 5, 6] => undefined
quelle
Antworten:
Gelee , 5 Bytes
Gibt 0 für True , 1 für False zurück .
Probieren Sie es online!
Wie es funktioniert
quelle
Schale ,
765 Bytes2 Bytes dank @Zgarb gespart
Nimmt Argumente in umgekehrter Reihenfolge und kehrt
1
fürTrue
und0
für zurückFalse
.Probieren Sie es online!
Erläuterung
quelle
VΠMz¦P
sollte für 6 Bytes funktionieren.Mz
kann sein‡
.▼▲
statt▲▼
. Gute Idee auf jeden Fall!05AB1E , 7 Bytes
Eingabe: Nimmt die Listen B und A (umgekehrte Reihenfolge).
Ausgabe: 1, wenn wahr, 0, sonst
Probieren Sie es online!
Erklärungen:
quelle
MATL ,
876 Bytes1 Byte aus einer Idee von Dennis 'Jelly Antwort
Eingänge sind
B
dannA
. Die Ausgabe ist,0
ob teilbar oder1
nicht.Probieren Sie es online!
Erläuterung
quelle
Mathematica, 52 Bytes
danke @ngenisis für -5 Bytes
quelle
Cases
ist in der Regel kürzer:Cases[Permutations@#2,p_/;And@@IntegerQ/@(#/p)]!={}&
JavaScript (ES6),
67,63ByteGibt einen Booleschen Wert zurück.
Testfälle
Code-Snippet anzeigen
quelle
Haskell ,
7974686261 BytesProbieren Sie es online!
1 Byte dank @nimi gespeichert
quelle
f a=any((<1).sum.zipWith rem a).permutations
.R + kombiniert ,
696658 Bytes-3 Bytes dank Jarko Dubbeldam
Weitere -8 Bytes dank Jarko
Seltsamerweise verfügt R nicht über eine integrierte Funktion zum Erzeugen aller Permutationen. Gibt einen Booleschen Wert zurück.
Mit der zweiten Verbesserung von
any
Jarko wird die Liste außerdem zu einem Vektorlogical
mit einer Warnung gezwungen .Probieren Sie es online! (R-Geige)
quelle
Mathematica, 42 Bytes
quelle
Gelee , 7 Bytes
Probieren Sie es online!
Faktorielle Komplexität in der Länge der Liste.
quelle
any
eingebautes? TILPyth - 11 Bytes
Test Suite .
quelle
J, 27 Bytes
Probieren Sie es online!
Nimmt die erste Liste als linkes Argument und die zweite Liste als rechtes.
quelle
(|"1~e.~0*[)i.@!@#A.]
CJam,
2017 BytesTestversion
Funktion, die Array B als erstes Argument und Array A als zweites Argument verwendet. Beachten Sie, dass ich in der Testversion die Reihenfolge auf A und dann auf B ändere.
quelle
JavaScript (ES6), 100 Byte
Etwas ineffizient; ein extra
&
würde es beschleunigen.quelle
PHP
112 180178 BytesIch habe zu kurz gedacht.
Die anonyme Funktion verwendet zwei Arrays und kehrt
NULL
für falsch und1
für wahr zurück.Löst einen Fehler aus, wenn das zweite Array enthält
0
.Probieren Sie es online aus .
quelle
$f([6,5],[3,5])
.C (gcc) , 191 Bytes
Probieren Sie es online!
Verwendung:
f(int size, int size, int *a, int *b)
1
Gibt zurück, wenn teilbar,0
ansonsten. Siehe Anwendungsbeispiel für TIO.(Muss auf die harte Tour in C permutieren, das ist also kaum konkurrenzfähig)
quelle
Perl 6 , 38 Bytes
Eigentlich scheint die Antwort von @ nwellnhof zu gut lesbar zu sein, also habe ich mich daran gemacht, der feinen Perl-Tradition des Nur-Schreib-Codes zu folgen: -).
1 Byte gespeichert dank @nwellnhof.
Probieren Sie es online!
Was macht es: Es ist eine anonyme Funktion, die zwei Listenargumente akzeptiert. Wenn wir sagen
@^a
, meinen wir die erste, wenn@^b
es die zweite ist.(@^a,)
ist eine Liste, die die Liste enthält@^a
.@^b.permutations
ist die Liste aller Permutationen von@^b
. Der Operator "XZ %%" erstellt alle möglichen Paare dieser einen Liste auf der linken Seite und alle Permutationen auf der rechten Seite und verwendet den Operator "Z %%" für diese, der die standardmäßige "zip" -Operation unter Verwendung des Divisibilitätsoperators ist %%.Der
max
Operator gibt das größte Element der Liste an (in diesem Fall enthält die Liste die meisten ElementeTrue
). Wir reduzieren es dann mit dem logischen AND-Operator, um zu sehen, ob alle Elemente dieser "wahrsten" Liste wahr sind, und das ist das Ergebnis. Es ist eine fast exakte Kopie dessen, was @nwellnhof geschrieben hat, und verwendet nur obskure Operatoren, um Bytes zu entfernen.quelle
permutations
, es ist eindeutig viel zu lesbar;)[&&]
durchmin
, um ein weiteres Byte zu speichern.XZ%%
{all (@^a,)Z%%@^b.permutations.any}
möglichBrachylog , 6 Bytes
Probieren Sie es online!
Das Prädikat ist erfolgreich, wenn die beiden Listen möglicherweise teilbar sind, und schlägt fehl, wenn dies nicht der Fall ist.
quelle
Python 2 , 92 Bytes
Probieren Sie es online!
Ihre grundlegende Implementierung.
quelle
Python 2 , 90 Bytes
Probieren Sie es online!
quelle
Ruby , 56 Bytes
Probieren Sie es online!
Ziemlich einfach, nutzt die Tatsache aus, die
permutation
existiert.quelle
Scala, 60 Bytes
Golf gespielt:
Ungolfed:
quelle
Japt ,
1211 BytesAusgänge
true
oderfalse
.Probier es aus
Erläuterung
Implizite Eingabe von Arrays
U
&V
(A
&B
)Generieren Sie ein Array aller Permutationen von
V
.Überprüfen Sie, ob eines der Elemente (Sub-Arrays) true zurückgibt.
Überprüfen Sie, ob jedes Element im aktuellen Unterarray true zurückgibt, wenn es die folgende Funktion durchläuft, wobei
X
es sich um das aktuelle Element undY
den aktuellen Index handelt.Holen Sie sich das Element
U
bei IndexY
.Überprüfen Sie, ob es durch teilbar ist
X
.quelle