Motivation : Manchmal muss man wissen, wo man sich in einer Saite befindet. Sie möchten in der Lage sein, einen beliebigen Teil einer Zeichenfolge zu betrachten und so weit wie möglich genau zu wissen, wo Sie sich befinden.
Herausforderung : Schreiben Sie ein Programm, um einen Maßband mit einer bestimmten Länge auszugeben . Ein Maßband beschreibt seine Länge so oft wie möglich über seine eigene Länge.
Regeln :
- Ihr Programm muss einen positiven Ganzzahlparameter für die Gesamtlänge der Maßbandzeichenfolge verwenden
- Für jede zusammenhängende Folge von Ziffern in der Ausgabe müssen diese Ziffern die Länge der Ausgabe genau wiedergeben - einschließlich !
- Die Längen werden vom Anfang der Zeichenfolge bis zum Ende jeder Zahl gemessen
- In der Zeichenfolge sollten so viele Längenangaben wie möglich enthalten sein
- Vermeiden Sie Mehrdeutigkeiten. Trennzeichen können verwendet werden, um zu vermeiden, dass Zahlen nebeneinander stehen, dh
12
zwölf, nicht eins, zwei. - Die Zeichenfolge muss am Ende immer genau ihre Gesamtlänge ohne nachfolgende Trennzeichen angeben
- Möglicherweise benötigen Sie mehrere Trennzeichen, um die Längen genau zu halten. Hier ist beispielsweise eine Maßband-Zeichenfolge der Länge 4:
1--4
Unverbindliche / erschöpfende Beispiele:
- Maßband der Länge 1:
1
- Maßband mit Länge 2:
-2
- Maßband der Länge 3:
1-3
- Maßband der Länge 4:
1--4
oder-2-4
(beide melden die Länge so oft wie möglich, dh zweimal, und enden mit der korrekten Gesamtlänge) - Maßband Länge 10:
1-3-5-7-10
- Maßband mit der Länge 11:
1-3-5-7--11
oder1-3-5--8-11
oder1-3--6-8-11
oder1--4-6-8-11
oder-2-4-6-8-11
(alle haben so viele Längen wie möglich und enden mit der Gesamtlänge der Saite)
-
, und Sie müssen so viele Längenmarkierungen wie möglich in der Zeichenfolge haben.0
.Antworten:
Python,
50484746 BytesErläuterung
Ziemlich einfache rekursive Lambda-Lösung
Unsere Basisfälle sind 1 und 0, die abgedeckt werden,
"1"*x
da wir sonst die Zeichenfolge von-x
with erhalten`-x`
und dem Ergebnis des Aufrufs der Funktionlen(`-x`)
less voranstellen .quelle
-x
?Mathematica,
67.57BytesVielen Dank an Martin Ender für die Freigabe von 10 Bytes!
Unbenannte Funktion, die ein nichtnegatives ganzzahliges Argument verwendet und eine Zeichenfolge zurückgibt. Ziemlich genau der offensichtliche rekursive Algorithmus: Stellen Sie sicher, dass die Zeichenfolge mit der Eingabenummer endet, die mit einem vorangestellt ist
"-"
, und rufen Sie die Funktion dann erneut mit auf#0
.Die Implementierung des Algorithmus macht aber auch Golfspaß.
""["1"][[#]]
bezeichnet das#
dritte Argument des Ausdrucks""["1"]
: Das dritte Argument ist der Kopf""
und das dritte Argument ist das sichtbare Argument"1"
, das die Grundfälle der Rekursion liefert. Wenn#
1 überschritten wird, wird""["1"][[#]]
eine Fehlermeldung ausgegeben und die Funktion bleibt unverändert. Aber dann/._@__:>
ist es eine Regel, die jede unbewertete Funktion übernimmt und in den nächsten Ausdruck umwandelt, der der rekursive Aufruf der ursprünglichen Funktion ist.Ursprüngliche Einreichung:
quelle
""["1"][[#]]/._@__:>#0[#-1-IntegerLength@#]<>ToString@-#&
spart ein Byte durch Vermeiden vonIf
und eine Reihe von Bytes durch Vermeiden vonIntegerString
und"-"<>
._@__
ist böse MagieJavaScript (ES6), 49 Byte
quelle
f
Pyth, 23 Bytes
Hat die rekursive Lösung offenbar aus der Antwort des Weizen-Assistenten gestohlen . Außerdem glaube ich, dass dies nicht richtig golfen wird.
Probieren Sie es hier aus!
quelle
Perl 6 , 43 Bytes
Erläuterung:
So wird beispielsweise für Eingabe 10 die Sequenz
(-10, -7, -5, -3, -1)
und daraus die Zeichenfolge-1-3-5-7-10
und daraus die endgültige Zeichenfolge generiert1-3-5-7-10
.Probieren Sie es online aus .
quelle