Schreiben Sie ein Programm oder eine Funktion, um die folgende Ausgabe in der richtigen Reihenfolge zu erzeugen.
EDIT: Die Symbole sind nicht mathematisch! Die Zahlen stellen nur eindeutige Daten dar und die +
und -
können zwei beliebige Symbole sein.
Nehmen Sie einen nicht negativen ganzzahligen Eingang n. Die erste Zeile ist immer -
, auch für n = 0.
- Wenn die aktuelle Zeile ist
-
, ist die nächste Zeile1+2+ ... (n-1)+n-
- n = 4:
-
=>1+2+3+4-
- n = 4:
- Wenn die letzte Ganzzahl gleich n ist, entfernen Sie alle Ganzzahlen vom Ende, auf die unmittelbar a folgt
-
, und ändern Sie die letzte+
in a-
- n = 4:
1-2+3-4-
=>1-2-
- BEARBEITEN: Wenn die Zeichenfolge voll ist (alle Ganzzahlen von 1 bis n sind enthalten), entfernen Sie alle Ganzzahlen vom Ende, auf die a folgt
-
, bis Sie eine Ganzzahl gefolgt von a erreichen+
. Lassen Sie diese Ganzzahl, aber ändern Sie die folgenden+
in a-
- Entfernen , entfernen , ändern Sie mit dem gleichen Beispiel wie unmittelbar oben (das nicht folgt
-
) . ändert sich nicht, seit wir bei aufhören . Ergebnis:4-
3-
2+
2-
1-
2
1-2-
- n = 4:
- Wenn die letzte Ganzzahl kleiner als n ist, hängen Sie die verbleibenden Ganzzahlen
+
nach jeder mit einem an, mit Ausnahme der letzten Ganzzahl, an die eine Ganzzahl-
angehängt werden soll- n = 4:
1+2-
=>1+2-3+4-
- BEARBEITEN: Wenn die aktuelle Zeichenfolge nicht voll ist (nicht alle Ganzzahlen von 1 bis n enthält), addieren Sie jede Ganzzahl, die noch nicht in aufsteigender Reihenfolge enthalten ist, bis zu n-1 mit einem
+
nach jeder und fügen Sie dann die letzte Ganzzahl n hinzu, die folgt durch eine-
- Wenn die aktuelle Zeile lautet
1-
, hängen Sie an2+
, fügen Sie3+
n-1 hinzu, wenn n = 4 ist. Dann anhängen4-
. Ergebnis:1-2+3+4-
- n = 4:
- Wenn die aktuelle Zeile alle Ganzzahlen enthält und auf jede unmittelbar a folgt
-
, beenden Sie den Code- n = 4:
1-2-3-4-
=> ENDE
- n = 4:
In keiner Zeile dürfen führende oder nachfolgende Leerzeichen vorhanden sein. Zwischen jeder Zeile muss ein Zeilenumbruch liegen. In der letzten Zeile kann ein Zeilenumbruch auftreten oder nicht.
BEARBEITEN: Sie sollten Ihren Code bis zu mindestens n = 10 testen (über 1000 Ausgabezeilen, damit ich ihn hier nicht einfügen kann). Jede Zahl, die nicht dazu führt, dass Ihrem Code die Ressourcen ausgehen, sollte (irgendwann!) Die richtige Ausgabe liefern, aber Sie müssen nicht auf das Ende des Universums warten!
Dies ist Code-Golf , also gewinnt der kürzeste Code in Bytes!
Eingabe n = 0:
-
Eingabe n = 1:
-
1-
Eingabe n = 2:
-
1+2-
1-
1-2-
Eingabe n = 4:
-
1+2+3+4-
1+2+3-
1+2+3-4-
1+2-
1+2-3+4-
1+2-3-
1+2-3-4-
1-
1-2+3+4-
1-2+3-
1-2+3-4-
1-2-
1-2-3+4-
1-2-3-
1-2-3-4-
s*=<condition>
Python 2 ,
136141133 BytesProbieren Sie es online aus!
Das erste
-
(un) überraschenderweise fügte dem Code ein paar Bytes hinzu.quelle
-
Zeilen.Python 2 ,
150164159154146118 Bytes115112 BytesProbieren Sie es online aus!
Edit: Ups! Es muss auch für Zahlen größer als 4 funktionieren ... dann abplatzen ... bis mir klar wurde, dass ich es überlegt und 28 Bytes gespart habe ... und dann 6 weitere über kleine Golfplätze.
quelle
Pyth, 23 Bytes
Demonstration
Die Basis dieses Programms ist die Feststellung, dass
-
die Plus- und Minus-Sequenz außer der Anfangssequenz der Standardsequenz von Kombinationen von+
und-
mit Ersetzung entspricht, wobei alle nachgestellten Zeichen+
entfernt werden.Erläuterung:
quelle
Python 2 , 73 Bytes
Probieren Sie es online aus!
quelle
Haskell , 70 Bytes
Probieren Sie es online aus!
quelle
Python 3 , 305 Bytes
Probieren Sie es online aus!
quelle
<tab><space>
wenn<space><space>
die gleiche Anzahl von Bytes wäre? Ich denke, wenn Sie die kleinen Einrückungen mit<space>
und die größeren<tab>
damit machen würden, würden Sie vielleicht ein Byte sparen ...q[-1]
zu verkürzenq[0]
. Übrigens: Das Mischen von Tabulatoren und Leerzeichen funktioniert in Python 3 nicht, daher gibt der aktuelle Code einen Fehler aus.