Herausforderung
Die Herausforderung besteht darin, einen Code zu schreiben, der eine positive Ganzzahl 'n' als Eingabe verwendet und alle möglichen Arten anzeigt, wie die Zahlen von 1 - n mit einem positiven oder negativen Vorzeichen dazwischen geschrieben werden können, so dass ihre Summe gleich ist gleich Null. Bitte denken Sie daran, dass Sie nur Addition oder Subtraktion verwenden dürfen.
Wenn die Eingabe beispielsweise 3 ist, gibt es zwei Möglichkeiten, die Summe zu 0 zu machen:
1+2-3=0
-1-2+3=0
Beachten Sie, dass die Zahlen von 1 bis n (in diesem Fall 3) geordnet sind. Wie aus dem Beispiel hervorgeht, kann das Vorzeichen der ersten Zahl auch negativ sein. Seien Sie also vorsichtig.
Nun, 3 war ziemlich einfach. Lassen Sie uns alle Möglichkeiten auflisten, wenn wir die Zahl 7 betrachten.
1+2-3+4-5-6+7=0
1+2-3-4+5+6-7=0
1-2+3+4-5+6-7=0
1-2-3-4-5+6+7=0
-1+2+3+4+5-6-7=0
-1+2-3-4+5-6+7=0
-1-2+3+4-5-6+7=0
-1-2+3-4+5+6-7=0
Hier haben wir also insgesamt 8 Möglichkeiten.
Eingabe und Ausgabe
Wie bereits erwähnt, wäre die Eingabe eine positive ganze Zahl . Ihre Ausgabe sollte alle möglichen Arten enthalten, in denen die Zahlen eine Summe von Null ergeben. Falls dies nicht möglich ist , können Sie alles ausgeben, was Sie möchten.
Außerdem können Sie die Ausgabe in einem beliebigen Format drucken Sie möchten . Aber es sollte verständlich sein . Beispielsweise können Sie es wie in dem obigen Beispiel drucken. Oder Sie drucken einfach die Zeichen der Zahlen in der angegebenen Reihenfolge. Andernfalls können Sie auch '0' und '1' in der angegebenen Reihenfolge ausgeben, wobei '0' ein negatives Vorzeichen und '1' ein positives Vorzeichen anzeigt (oder umgekehrt).
Sie können beispielsweise 1 + 2-3 = 0 darstellen, indem Sie Folgendes verwenden:
1+2-3=0
1+2-3
[1,2,-3]
++-
110
001
Der Einfachheit halber würde ich jedoch empfehlen, eines der ersten drei Formate zu verwenden. Sie können davon ausgehen, dass alle Eingaben gültig sind.
Beispiele
7 ->
1+2-3+4-5-6+7=0
1+2-3-4+5+6-7=0
1-2+3+4-5+6-7=0
1-2-3-4-5+6+7=0
-1+2+3+4+5-6-7=0
-1+2-3-4+5-6+7=0
-1-2+3+4-5-6+7=0
-1-2+3-4+5+6-7=0
4 ->
1-2-3+4=0
-1+2+3-4=0
2 -> -
8 ->
1+2+3+4-5-6-7+8=0
1+2+3-4+5-6+7-8=0
1+2-3+4+5+6-7-8=0
1+2-3-4-5-6+7+8=0
1-2+3-4-5+6-7+8=0
1-2-3+4+5-6-7+8=0
1-2-3+4-5+6+7-8=0
-1+2+3-4+5-6-7+8=0
-1+2+3-4-5+6+7-8=0
-1+2-3+4+5-6+7-8=0
-1-2+3+4+5+6-7-8=0
-1-2+3-4-5-6+7+8=0
-1-2-3+4-5+6-7+8=0
-1-2-3-4+5+6+7-8=0
Wertung
Das ist Code-Golf , also gewinnt der kürzeste Code!
quelle
+
alsN
und-
als darstellen-N
, oder geht das zu weit? (zB3
->[[-3,-3,3], [3,3,-3]]
)0
und1
Option, aber mitN
und-N
(siehe meine Bearbeitung oben)Antworten:
Haskell , 42 Bytes
Probieren Sie es online!
quelle
0==
?Gelee , 9 Bytes
Probieren Sie es online!
Exp
Gelee , 9 Bytes
Jonathan Allans Vorschlag, eine Liste von Zeichen auszugeben.
Probieren Sie es online!
quelle
,Nṗæ.ÐḟR
?n
.N
und-N
Ausgabe, die ich vorgeschlagen habe, wurde erlaubt, so dass ein Byte gespeichert :) (muss nur das Format in der Antwort erwähnen)Python 2 , 62 Bytes
Probieren Sie es online!
Mr. Xcoder sparte 4 Bytes mit einer raffinierten Verwendung von markierten Argumenten.
quelle
*l
anstelle vonl=[]
Perl,
3736 Bytesquelle
-n
und<<<
wenn Sie ersetzen$_
mitpop
. Es verbessert nicht wirklich Ihre Punktzahl, aber es macht den allgemeinen Ausdruck kürzer;)05AB1E , 11 Bytes
Probieren Sie es online!
Das Ausgabeformat für zB Eingabe
3
ist:Das heißt,
-1-2+3, 1+2-3
.quelle
Wolfram Language (Mathematica) , 36 Byte
Probieren Sie es online!
quelle
Schale , 10 Bytes
Probieren Sie es online!
Erläuterung
Nicht zu kompliziert.
quelle
Python 3 , 105 Bytes
Probieren Sie es online!
quelle
Schnell , 116 Bytes
Probieren Sie es online!
Erläuterung
quelle
Python 2 , 91 Bytes
Probieren Sie es online!
Gibt eine Liste mit befriedigenden Listen zurück (z. B. f (3) = [[- 1, -2,3], [1,2, -3]])
quelle
APL (Dyalog) , 38 Bytes
Probieren Sie es online!
quelle
Pyth , 13 Bytes
Probieren Sie es hier aus!
quelle
C (gcc) , 171 Bytes
Probieren Sie es online! Verwendet
0
für negative und2
für positive Vorzeichen.quelle
Sauber , 79 Bytes
Probieren Sie es online!
quelle
Python 3 + Anzahl,
104103 BytesDie Ausgabe ist [-1, 1] entsprechend dem Vorzeichen.
quelle
if
für -1 ByteJavaScript (ES6),
6961 Bytes8 Bytes gespart, indem k entfernt wurde , wie von @Neil vorgeschlagen
Druckt alle Lösungen mit alert () .
Testfälle
Verwenden Sie console.log () anstelle von alert (), um die Benutzerfreundlichkeit zu verbessern .
Code-Snippet anzeigen
quelle
k
? Etwa so:f=(n,o='')=>n?['+','-'].map(c=>f(n-1,c+n+o)):eval(o)||alert(o)
Netzhaut , 73 Bytes
Probieren Sie es online! Erläuterung:
Konvertieren Sie die Eingabe in Unary.
Konvertieren Sie die Nummer in eine Liste mit
=
vordefinierten Nummern.Ersetzen Sie die Zeilen
=
nacheinander durch beide-
und+
und duplizieren Sie die Anzahl der Zeilen jedes Mal.Zählen Sie getrennt die Anzahl der
_
s nach-
s und+
s. Dies summiert die negativen und positiven Zahlen.Behalten Sie nur die Zeilen bei, in denen sich die
-
Buchstaben s und+
s aufheben.Löschen Sie die Zählungen.
In Dezimalzahl konvertieren.
quelle
Perl 6 , 43 Bytes
Try it
Gibt eine Folge von Listen zurück
Erweitert:
1..$_ X* 1,-1
⇒(1, -1, 2, -2)
(…).rotor(2)
⇒((1, -1), (2, -2))
[X] …
⇒((1, 2), (1, -2), (-1, 2), (-1, -2))
quelle
J ,
35-30Bytes-5 Bytes dank FrownyFrog!
Probieren Sie es online!
Original:
J , 35 Bytes
Wie es funktioniert
Ich multipliziere die Liste 1..n mit allen möglichen Listen der Koeffizienten 1 / -1 und finde diejenigen, die sich zu Null addieren.
Probieren Sie es online!
Als Alternative habe ich ein explizites Verb ausprobiert, wobei ich das kartesische Produkt von +/- verwendete:
J , 37 Bytes
{(<"1@,.-)
findet die kartesischen Produkte zum Beispiel:Schade, dass es das Ergebnis boxt, also habe ich einige Bytes ausgegeben, um die Werte zu entpacken
Probieren Sie es online!
quelle