Um zu überprüfen, ob eine Liste nicht negativer Ganzzahlen ausgeglichen ist , kann man sich vorstellen, die entsprechenden Gewichte auf eine Tafel zu setzen und dann zu versuchen, die Tafel auf einem Pivot so auszugleichen, dass die zusammengefassten relativen Gewichte links und rechts vom Pivot gleich sind. Das relative Gewicht ergibt sich durch Multiplikation des Gewichts mit dem Abstand zum Drehpunkt (siehe Gesetz des Hebels ).
(Quelle: Wikipedia )
Dieses Bild entspricht einer Liste [100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5]
. Diese Liste ist ausgeglichen, da die 5
einen Abstand von 20 zum Drehpunkt hat, die 100
einen Abstand von 1 und 5*20 = 100 = 100*1
.
Beispiele
3 1 5 7
#########
^
In diesem Fall befindet sich der Pivot direkt unter dem 5
, der 3
Abstand 2 hat und der 1
und 7
Abstand 1. Also addieren sich beide Seiten links und rechts des Pivots 7
( 3*2 + 1*1
links und 7*1
rechts) und daher ist die Liste [3, 1, 5, 7]
ausgeglichen.
Beachten Sie jedoch, dass der Pivot nicht unter einem der Listenelemente platziert werden muss, sondern auch zwischen zwei Listenelementen platziert werden kann:
6 3 1
#######
^
In diesem Fall werden die Entfernungen 0.5, 1.5, 2.5, ...
und so weiter. Diese Liste ist auch deshalb ausgewogen 6*0.5 = 3 = 3*0.5 + 1*1.5
.
Der Drehpunkt kann nur genau unter einer Zahl oder genau in der Mitte zwischen zwei Zahlen platziert werden und nicht z. B. bei zwei Dritteln zwischen zwei Zahlen.
Aufgabe
Wenn Sie eine Liste nicht negativer Ganzzahlen in einem angemessenen Format haben, geben Sie einen truthy
Wert aus, wenn die Liste ausgeglichen werden kann, und einen anderen falsy
Wert.
Sie können davon ausgehen, dass die Eingabeliste mindestens zwei Elemente enthält und mindestens ein Element ungleich Null ist.
Dies ist eine Code-Golf- Herausforderung, daher gewinnt die Antwort mit der geringsten Anzahl von Bytes in jeder Sprache.
Wahrheits-Testfälle
[1, 0]
[3, 1, 5, 7]
[6, 3, 1]
[100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5]
[10, 4, 3, 0, 2, 0, 5]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[7, 7, 7, 7]
Falsy Testcases
[1, 2]
[3, 6, 5, 1, 12]
[0, 0, 2, 0, 1, 0]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[6, 3, 2, 4, 0, 1, 2, 3]
[4, 0, 0, 2, 3, 5, 2, 0, 1, 2, 3, 0, 0, 1, 2, 4, 3, 1, 3, 0, 0, 2]
[100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5]
Viele verwandte Herausforderungen wurden gefunden, während diese Herausforderung im Sandkasten lag : Ist es eine ausgeglichene Zahl? , Equilibrium Index einer Sequenz , Gleichgewicht ein Satz von Gewichten auf einer Wippe , Wörter Balancing , Will ich umkippen? und wohin gehört der Pivot?
You can assume that the input list contains at least two elements and that at least one element is non-zero.
Antworten:
Pyth,
1210 BytesProbieren Sie es online aus
2 Bytes gespart dank Mr. Xcoder und Erik the Outgolfer.
Erläuterung
quelle
y
anstelle von*2
!%ys*VQUQs
Wolfram Language (Mathematica) , 36 Byte
Dies ist ein Massenschwerpunktproblem in einem Koordinatensystem mit dem Ursprung an einem der Punkte, und Sie bestimmen dann, ob der CM auf einen Gitterpunkt fällt, bei dem die Gitterbreite = 1/2 ist.
Probieren Sie es online!
quelle
05AB1E , 6 Bytes
Probieren Sie es online!
Wie?
quelle
[1,1]
(sollte wahr sein). Es scheint, dass die implizite Verdopplung nicht wirklich vorhanden ist.Gelee , 6 Bytes
Probieren Sie es online!
Sieht so aus, als hätte Leaky Nun auf das Sinnlose hingewiesen.
Verwendung des Pyth-Ansatzes von Mnemonic.
Gibt eine positive Ganzzahl (wahr) oder Null (falsch) zurück.
quelle
LḶ
stattdessen verwendet (obwohl es für alle Testfälle gelingen würde ). EDIT: Oh, jetzt, wo ich wieder darüber nachdenke, scheint es so ... ( b | a | b | a + b duh)R , 34 Bytes
Probieren Sie es online!
Nimmt die Eingabe als Vektor. Ports mnemonic Antwort . Gibt eine
1x1
Matrix zurück.quelle
Japt , 10 Bytes
Probieren Sie es online!
Erläuterung:
1
Kehrt zurück für Wahres,0
für Falsches.quelle
Python 2 , 41 Bytes
Die Ausgabe erfolgt über den Exit-Code, daher ist 0 wahr und 1 falsch.
Probieren Sie es online!
quelle
Julia ,
3127 Bytes4 Bytes gespart dank @Dennis
Probieren Sie es online!
quelle
Ruby , 47 Bytes
2 Bytes gespart dank Mr. Xcoder
Probieren Sie es online!
quelle
C,
140137 BytesProbieren Sie es online!
quelle
Python 3 , 51 Bytes
Probieren Sie es online!
quelle
Perl 6 , 23 Bytes
Probier es aus
Verwendet den Algorithmus aus verschiedenen anderen Einträgen.
Erweitert:
quelle
Japt,
11108 BytesUrsprünglich inspiriert von der Lösung von Mnemonic
Versuch es
13 Bytes gespart dank ETHproductions.Erläuterung
Implizite Eingabe eines Arrays
U
. Reduzieren Sie durch Addition (x
) und multiplizieren Sie dabei jedes Element mit seinem auf 0 basierenden Index (*
). Überprüfen Sie, ob das Ergebnis gleichmäßigv
durch die Summe der ursprünglichen Eingabe (Ux
) teilbar ist ( ), wobei jedes Element mit 0,5 (*½
) multipliziert wird .quelle
m* x*2 vUx
. Ich frage mich daher, obm* x*2
es noch weiter reduziert werden kann ...x*
und überprüfe, ob es durchUx*½
:) teilbar istXY{X*Y}
)C # , 71 Bytes
Golf gespielt
Ungolfed
Vollständiger Code
Releases
71 bytes
- Anfangslösung.Anmerkungen
Möglicherweise habe ich mir die Dennis Python 2-Lösung "ausgeliehen" oder nicht ...
quelle
Haskell , 39 Bytes
Probieren Sie es online!
quelle
APL (Dyalog) , 15 Bytes
Probieren Sie es online!
Sieht für mich sehr ungolfisch aus ...
quelle
Python 2 ,
7875 Bytesdanke an herr xcoder für -3 bytes
Probieren Sie es online!
quelle
0 in
. Auch keine Notwendigkeit für die0
inrange(0,len(l)*2)
..Julia 0,6 , 25 Bytes
Probieren Sie es online!
quelle
PHP ,
139128 BytesProbieren Sie es online!
die
dank manassehkatzquelle
die(1)
und zudie(0)
speichern, indem Sie den Exit-Code anstelle einer gedruckten Zeichenfolge verwenden.Schnell , 76 Bytes
Probieren Sie es online!
quelle
Perl 5 , 55 + 1 (
a
) = 56 BytesProbieren Sie es online!
quelle