Wir haben bereits eine klappbare Nummer definiert hier .
Aber jetzt werden wir eine Super Folding Number definieren. Eine Super Folding-Zahl ist eine Zahl, die, wenn sie genügend oft gefaltet wird, irgendwann eine Zahl weniger als eine Zweierpotenz erreicht. Die Faltmethode unterscheidet sich geringfügig von der Frage nach der Faltnummer.
Der Faltalgorithmus lautet wie folgt:
Nehmen Sie die binäre Darstellung
zB 5882
1011011111010
Verschüttete es in drei Partitionen. Erste Hälfte, letzte Hälfte und mittlere Ziffer (wenn es eine ungerade Anzahl von Ziffern hat)
101101 1 111010
Wenn die mittlere Ziffer Null ist, kann diese Zahl nicht gefaltet werden
Die zweite Hälfte umkehren und die erste Hälfte überlagern
010111 101101
Fügen Sie die Ziffern hinzu
111212
- Wenn das Ergebnis 2s enthält, kann die Zahl nicht gefaltet werden, andernfalls ist die neue Zahl das Ergebnis des Faltalgorithmus.
Eine Zahl ist eine Super-Faltnummer, wenn sie zu einer fortlaufenden Folge von Einsen gefaltet werden kann. (Alle Faltnummern sind auch Super-Faltnummern)
Ihre Aufgabe ist es, Code zu schreiben, der eine Zahl aufnimmt und einen wahrheitsgemäßen Wert ausgibt, wenn die Zahl eine Super-Folding-Zahl ist und ansonsten falsch ist. Sie werden nach der Größe Ihres Programms bewertet.
Beispiele
5200
In Binär konvertieren:
1010001010000
Halbieren:
101000 1 010000
Die Mitte ist eine, also überlagern wir die Hälften:
000010
101000
Fügte sie hinzu:
101010
Keine Zweien, also fahren wir fort. In zwei Hälften teilen:
101 010
Falten:
010
101
111
Das Ergebnis ist 111
(7 in Dezimalzahl), dies ist also eine Super-Faltzahl.
Testfälle
Die ersten 100 Super Folding Numbers sind:
[1, 2, 3, 6, 7, 8, 10, 12, 15, 20, 22, 28, 31, 34, 38, 42, 48, 52, 56, 63, 74, 78, 90, 104, 108, 120, 127, 128, 130, 132, 142, 150, 160, 170, 178, 192, 204, 212, 232, 240, 255, 272, 274, 276, 286, 310, 336, 346, 370, 400, 412, 436, 472, 496, 511, 516, 518, 524, 542, 558, 580, 598, 614, 640, 642, 648, 666, 682, 704, 722, 738, 772, 796, 812, 852, 868, 896, 920, 936, 976, 992, 1023, 1060, 1062, 1068, 1086, 1134, 1188, 1206, 1254, 1312, 1314, 1320, 1338, 1386, 1440, 1458, 1506, 1572, 1596]
3
wieder in die Testfälle geschlichen, wenn ich mich nicht irre ? Ich kann nicht sehen, wie es gefaltet werden kann, da es sich aufteilt1 1
und sofort ein gibt2
. Oder sagen Sie, dass es auch zählt, es nullmal zu falten?Antworten:
Hier ist mein erster Schuss beim Code Golf:
Python 3, 167 Bytes
167 Bytes, wenn Tabulatoren oder einzelne Leerzeichen zum Einrücken verwendet werden
Bearbeiten: Dank der Hilfe aller unten wurde der obige Code von einer ursprünglichen Größe von 232 Bytes reduziert!
quelle
:
s entfernen0
und1
stattTrue
und zurückgebenFalse
.Java 7, 202 Bytes
Es war ein wenig mühsam, die alte Faltfunktion rekursiv zu machen, aber hier ist sie. Es ist hässlich wie Sünde, um ehrlich zu sein. Ich muss am Morgen einen Blick darauf werfen, ob ich weiter Golf spielen kann, da ich es im Moment kaum ertragen kann, es mir anzusehen.
Mit Zeilenumbrüchen:
quelle
CJam ,
4744 BytesProbieren Sie es online aus! oder generieren Sie eine Liste von Super-Faltnummern bis zu einer bestimmten Nummer.
Golfversuche sind hier zu sehen .
Der Code gliedert sich in folgende Phasen:
BEARBEITEN: Diese Version verwendet mehr oder weniger einen De Morgan's Law- Ansatz zur vorherigen Version.
* Das Problem beim Laufen auf Singletons ist, dass wir nach dem Slice mit einer leeren Zeichenfolge hängen bleiben.
** Wenn eine Binärzahl super faltbar ist, ist ihr Spiegelbild (bei Bedarf mit führenden Nullen). Dies spart ein Byte gegenüber der rechten Hälfte.
quelle
JavaScript, 149 Bytes
Definiert eine rekursive Funktion.
Erläuterung:
quelle
m=l>>1
,/2/.test(n)
,n.slice(l-m)
(Oder die umgekehrte Zeichenfolge Scheibe). Ich denke, wenn Sie die Fehler- und Erfolgsfälle wechseln, können Sie verwenden/0/.test(n)?f(...):1
.JavaScript (ES6),
113109108 ByteFormatiert und kommentiert
Demo
quelle
Perl,
7170 BytesBeinhaltet +1 für
-p
Geben Sie die Nummer auf STDIN an
superfolding.pl
::quelle
Python 2, 151 Bytes
ideone
Eine doppelt rekursive Funktion, die eine Ganzzahl annimmt
n
und0
oder zurückgibt1
.Eine Variable
r
wird beibehalten, um sowohl das Ergebnis der Faltung zu ermöglichen als auch um zu wissen, ob wir derzeit: eine Ganzzahl haben (nur die erste); eine neue Binärzeichenfolge haben, um zu versuchen, zu falten (äußere); oder falten (innen).Beim ersten Durchgang
n
ist und eine Ganzzahl, die<''
in Python 2 enthalten ist. Die Rekursion beginnt also mit der Umwandlung in eine Binärzeichenfolge.Die nächste Ausführung hat
r=''
und so wird der Test{'1'}==set(n)
ausgeführt, um nach einer fortlaufenden Zeichenfolge von1
s zu suchen (die RHS kann nicht so sein,{n}
wie wir diesen Punkt später mit übergeben müssen,r=''
und eine leere,n
wenn dies ein Wörterbuch wäre, das nicht gleich ist{'1'}
, eine Menge).Wenn dies nicht erfüllt ist, werden die Kriterien für das innere Ende getestet (auch wenn dies nicht erforderlich ist): Wenn
n in'1'
es sich um True handelt, wennn
es sich um eine leere oder eine einzelne Zeichenfolge handelt1
, wird eine neue äußere Rekursion gestartetr
, indem die dann gefaltete binäre Zeichenfolge in platziert wirdn
und''
inr
. Das Literal2
wird zum Ergebnis dieses Funktionsaufrufs hinzugefügt, damit kein Durchfall zum nächsten Teil (rechts von einer Logikor
) möglich ist, der später korrigiert wird.Wenn dies kein wahrheitsgemäßer Wert ist (alle Ganzzahlen ungleich Null sind in Python wahrheitsgetreu), werden die Rekursionskriterien für den äußeren Schwanz getestet:
n!=0
Schließt den Fall mit einer Mitte aus0
und die beiden äußeren Zeichen werden getestet, zu denen sie2
durch die Zeichenfolgenverkettung nicht summieren'11'!=n[0]+n[-1]
. wenn diese beide wahr halten die äußeren Bits werden aus ausrangiertenn
mitn[1:-1]
, und dann ein1
angehängt an ,r
wenn gibt es eine an der Außenseite sonst a0
ist, mit der Tatsache , dass'1'>'0'
in Python mitmax(n[0],n[-1])
.Schließlich wird die Addition
2
bei jeder inneren Rekursion mit korrigiert%2
.quelle
PHP, 113 Bytes
Beendet mit Fehler (Code
1
), wenn das Argument nicht superfaltend ist, Code0
sonst. Laufen Sie mit-r
.Die Eingabe
0
gibt true (Code0
) zurück.Nervenzusammenbruch
quelle
PHP, 197 Bytes
Erweitert
Wahre Werte <10000
quelle