Aufgabe
Ersetzen Sie bei einem gegebenen Array positiver Ganzzahlen jedes Element durch die Parität der Summe der anderen Elemente. Das Array enthält garantiert mindestens 2 Elemente.
Definition
- Parität: ob eine Zahl gerade oder ungerade ist.
Beispiel
Für das Array [1,2,3,1]
:
- Ersetzen Sie
1
durch die Parität von2+3+1
, dheven
. - Ersetzen Sie
2
durch die Parität von1+3+1
, dhodd
. - Ersetzen Sie
3
durch die Parität von1+2+1
, dheven
. - Ersetzen Sie
1
durch die Parität von1+2+3
, dheven
.
Ausgabe: [even, odd, even, even]
Eingang
Ein Array mit einer positiven Ganzzahl.
Sie können es als ein geeignetes Array oder als eine durch Zeilenumbrüche getrennte Zeichenfolge positiver Ganzzahlen betrachten.
Sie können davon ausgehen, dass das Array und die darin enthaltenen Werte innerhalb der in Ihrer Sprache verfügbaren Bearbeitungsmöglichkeiten liegen.
Ausgabe
Ein Array von zwei konsistenten Werten , von denen einer repräsentiert odd
, einer repräsentiert even
.
Sie können es als durch Zeilenvorschub getrennte Zeichenfolge der beiden Werte ausgeben.
Testfälle
Eingänge:
[1, 2, 3, 1]
[1, 2, 3, 2, 1]
[2, 2]
[100, 1001]
Ausgänge:
[even, odd, even, even]
[even, odd, even, odd, even]
[even, even]
[odd, even]
Hinweis: Sie können auch andere konsistente Werte als odd
und auswählen even
.
Wertung
Das ist Code-Golf . Kürzeste Antwort in Bytes gewinnt.
Es gilt die Standardlücke .
quelle
_SḂ
JavaScript (ES6),
38 3632 BytesVerwendet
0
für gerade und1
für ungerade.Prüfung
quelle
c-b&1
anstelle von(c-b)%2
eval(a.join`+`)
übera.reduce((x,y)=>x+y)
. Das ist klugHaskell, 20 Bytes
Verwendet
True
für ungerade undFalse
für gerade Werte.Probieren Sie es online!
Subtrahieren Sie jedes Element von der Summe der Liste und testen Sie, ob es ungerade ist.
f
wandte sich an pointfree hat 20 Bytes auch:map=<<(odd.).(-).sum
.quelle
MATL ,
5, 4 BytesProbieren Sie es online!
Ein Byte gespart dank Dennis!
Dies ergibt '1' für ungerade und '0' für gerade. Erläuterung:
quelle
Alice ,
3128 BytesProbieren Sie es online!
Das Eingabeformat spielt keine Rolle, solange die ganzen Zahlen getrennt sind. Das Ausgabeformat ist zeilenweise getrennt.
Das Layout ist wahrscheinlich immer noch nicht optimal, aber ich habe noch keinen Weg gefunden, dies weiter zu verkürzen.
Erläuterung
quelle
Pyth,
76 Bytes-1 Byte dank @KZhang
Ausgänge 1 für ungerade, 2 für gerade.
Versuch es!
Erläuterung
quelle
%_2
in eine GCD änderni2_
, können Sie sogard
implizit den Code in ändernmi2-sQ
und so ein Byte sparen. Die Ausgänge werden auf 2 für gerade und 1 für ungerade geändert.05AB1E (Legacy) ,
43 BytesProbieren Sie es online!
quelle
D
, da die Eingabe implizit ist.Python 2 ,
3331 Bytes-2 Bytes dank Leaky Nun
Probieren Sie es online!
quelle
sum(x)-z&1
anstelle von(sum(x)-z)%2
sum(x,z)%2
würde auch funktionierenR, 21 Bytes
Liest die Liste von stdin und gibt 0 für gerade, 1 für ungerade zurück. bindet die Eingabe an die Variable
n
innerhalb des Aufrufs,sum
anstatt sie außerhalb aufzurufen, dhn=scan();(sum(n)-n)%%2
Probieren Sie es online!
quelle
Mathematica, 13 Bytes
oder
quelle
Clojure, 30 Bytes
Subtrahiert nacheinander alle Werte von jedem Wert, z. B. bei Eingabe ist
[a b c d]
der 2. berechnete Wertb - a - b - c - d
=-(a + c + d)
. Die Ausgabe erfolgtfalse
für gerade undtrue
für ungerade.Sie können aber auch
+
jeden nachfolgenden Term zweimal verwenden und berechnen, damit die Parität nicht beeinträchtigt wird.quelle
CJam , 10 Bytes
Dies ist ein anonymer Block (Funktion), der die Eingabe vom Stapel nimmt und durch die Ausgabe ersetzt.
Probieren Sie es online!
Erläuterung
Betrachten Sie die Eingabe
[1 2 3 1]
.quelle
J , 6 Bytes
Probieren Sie es online!
quelle
APL (Dyalog Unicode) ,
197 BytesGolf 12 Bytes dank @ Adám
Probieren Sie es online!
quelle
Japt , 7 Bytes
Probieren Sie es online!
Erläuterung
quelle
Perl 5, 31 Bytes
Ausgänge
1
für ungerade und0
gerade.quelle
perldoc perlsub
"Die Signatur ist Teil des Rumpfs einer Unterroutine. Normalerweise ist der Rumpf einer Unterroutine einfach ein geschweifter Codeblock."sub
ohne ihn zu brechen.sub
, z. B. nachsort
odergrep
oder als Argument für ein anderes Unterprogramm. Fragen Sie nach Code Golf Meta .sub
nur dann ohne , wenn sie in einer prototypisierten Funktion verwendet wird (sort
undgrep
mehr oder weniger prototypisiert sind). Ansonsten ist dassub
aber erforderlich. Trotzdemsub
ist es nicht wirklich interessant , 3 Bytes durch Weglassen zu spielen .Clojure (Skript), 36 Byte
Die Ausgabe erfolgt
true
für ungerade undfalse
für gerade. Sowohl Ausgabe als auch Eingabe sind Sequenzen.quelle
PHP, 50 Bytes
Online-Versionen
1 für ungerade, 0 für gerade
Ausgabe als String getrennt mit
_
PHP, 72 Bytes
Ausgabe als Array verwenden
array_map
quelle
?:0
es tut nichts.foreach($_GET as$v)echo array_sum($_GET)-$v&1,_;
C
6862 Bytes1 für ungerade, 0 für gerade
Ausführlicher Online-Test
quelle
Retina ,
4038 BytesProbieren Sie es online! Ausgänge 1 für ungerade und 0 für gerade. Erläuterung: Die ersten beiden Zeilen duplizieren die Eingabe einmal für jede Zahl in der Eingabe, jedoch ohne das Element selbst. Dadurch wird eine zusätzliche Leerzeile erstellt, die dann gelöscht wird. Die Eingabe wird dann von dezimal nach unär konvertiert, die Leerzeichen werden gelöscht und die Parität berechnet. Die gerade Parität wird dann in Null umgewandelt und die Ergebnisse zu einer Zeile zusammengefasst. Bearbeiten: 2 Bytes dank @FryAmTheEggman gespeichert. Ich habe einige andere Versionen ausprobiert, die konzeptionell ansprechender sind, aber viel zu viele Bytes benötigen, um ausgedrückt zu werden:
Ändert alle Eingaben in ihre Parität und kippt dann alle ihre Paritäten, wenn die Summe eine ungerade Parität aufweist.
Summiert ein Duplikat der Eingabe, nimmt dann die Parität von allem und invertiert dann die Paritäten, wenn die Summe ungerade ist, und löscht dann die Summe erneut.
quelle
;
s-Rücken in Leerzeichen umzuwandeln . Wenn Sie das;
am Anfang setzen, können Sie ein Byte speichern, indem Sie es sofort löschen, anstatt es in eine 0 umzuwandeln.Ohm , 4 Bytes
Probieren Sie es online!
Grundsätzlich antwortet ein direkter Port der MATL und 05AB1E . Verwendet
true
für gerade undfalse
für ungerade.quelle
k, 9 Bytes
Die Ausgabe ist ein
1
fürodd
und ein0
für gerade. Probieren Sie es online aus.In Pseudocode konvertiert wäre es:
quelle
Scala , 19 Bytes
Probieren Sie es online!
quelle
Brain-Flak ,
946866 BytesProbieren Sie es online!
Dies scheint ein wenig lang für die Aufgabe. Es könnte einen bequemeren Weg geben, dies zu tun.
Erläuterung
Zuerst berechnen wir die Summe des Stapels mit:
Dann durchlaufen wir den gesamten Stapel und addieren dieses Ergebnis zu jedem Element und bestimmen die Paarigkeit
Dies verwendet einen ziemlich coolen Mod 2-Algorithmus, den ich mir für diese Herausforderung ausgedacht habe.
Dadurch wird eine 1 unter die Eingangsdekremente gedrückt, bis der Eingang bei jeder Ausführung
1-n
der zuvor eingegebenen 1 Null erreicht. Anschließend wird der Eingang entfernt.quelle
Wise ,
5452 BytesProbieren Sie es online!
Erläuterung
Dieser Code wäre viel kürzer, wenn nicht so viele Bytes erforderlich wären, um die beiden obersten Elemente auszutauschen. Der aktuelle Datensatz ist
Dies macht leider den größten Teil des Codes aus.
Zuerst nehmen wir die XOR-Summe des Stapels
Wir XOREN dies dann mit jedem Element und dem Element, dessen letztes Bit auf Null gesetzt wurde
quelle
Java ,
8178 Bytes3 Bytes dank Kevin Cruissen
Probieren Sie es online!
Ändert das Array an Ort und Stelle.
quelle
void f(int[]a){int s=0,i=a.length;for(int x:a)s+=x;for(;i-->0;a[i]=s-a[i]&1);}
AWK , 64 Bytes
Probieren Sie es online!
Gibt a
0
für gerade Summen und aus1
ungerade durch Zeilenumbrüche getrennte Summen aus. Das einzige, was nicht ganz selbstverständlich war, war die Platzierung derprint
Befehl in die Leiste zu stellenfor
"Inkrement" -Schritt einzufügen. Ich habe ein paar "clevere" Möglichkeiten zum Drucken ausprobiert, aber sie haben keine Bytes gespeichert.Nur zum Kichern, wenn Sie keine Zeilenumbrüche wollen:
Das hat die gleiche Anzahl von Bytes wie oben, ist aber etwas stumpfer.
quelle
Schnell - 55 Bytes
Schliesslich schlägt C! Auch 0 für gerade, 1 für ungerade
Eine Funktion mit Verwendung:
g(a: [1,2,3,2,1] // => 0 1 0 1 0
Hör zu!
quelle
(x-y)%2
mitx-y&1
Axiom, 45 Bytes
keine Prüfung auf Eingabetyp, mögliche Neuberechnung der Summe "a" jedes Elements ... testet
quelle
Julia 1.0 , 17 Bytes
Probieren Sie es online!
quelle