Diese Frage ist von Kevin Cruijssens Frage inspiriert .
Jetzt, wo der Teppich ausgelegt ist, wollen wir ihn rollen. Ihre Aufgabe ist es, ein Programm zu schreiben, das eine Schnur nimmt und eine aus dieser Schnur hergestellte Spirale zurückgibt (die einen gerollten Teppich darstellt, von der Seite gesehen).
Das Verfahren für einen Schritt des Rollens des Teppichs ist das folgende. Es gibt ein Beispiel, um zu veranschaulichen, was ich meine. Beachten Sie, dass das Beispiel zum besseren Verständnis mit einem teilweise gerollten Teppich beginnt:
ac
rpet
- trenne den "Kopf" vom "Schwanz" des Teppichs: der Kopf ist das, was bisher gerollt wurde, der Schwanz ist das, was noch gerollt werden muss.
Head: ac Tail:
rp et
- Drehen Sie den Kopf um 90 ° im Uhrzeigersinn.
Rotated head: ra Tail (unchanged):
pc et
- wenn die Breite des neuen Kopfes (hier
2) kleiner oder gleich der Länge des Schwanzes ist (hier2)- Dann lege es oben auf den Schwanz
- Ansonsten wurde der Teppich (wie zu Beginn des Schritts) gerollt
New carpet: ra
pc
et
Wiederholen Sie den Vorgang so oft wie nötig.
Zwei Beispiele, die alle Schritte des Teppichrollens zeigen:
carpet
c
arpet
ac
rpet
ra
pc
et
0123456789
0
123456789
10
23456789
21
30
456789
432
501
6789
Einige Präzisionen:
- Sie müssen nicht alle Zwischenschritte anzeigen, sondern nur den gerollten Teppich (z. B. ist es perfekt, wenn Sie eine nicht iterative Methode zur Berechnung des Ergebnisses finden). Außerdem müssen Sie keine führenden Leerzeichen drucken. In den obigen Beispielen zeige ich sie nur zum Ausrichten von Elementen.
- Die Eingabe ist ein String, eine Liste / ein Array von Zeichen
- Die Ausgabe erfolgt als Standardausgabe oder als Datei.
- Die Eingabe ist nett: Die Länge beträgt mindestens 1 Zeichen und höchstens eine Konstante, die klein genug ist, um keine Probleme zu verursachen, aber Sie können diese Konstante nicht in Ihrem Programm verwenden. Der Inhalt der Zeichenfolge besteht nur aus netten Zeichen ([a-zA-Z0-9]), die nach Ihren Wünschen codiert werden.
- Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes. Lassen Sie sich von Code-Golf-Sprachen nicht davon abhalten, Antworten mit Nicht-Codegolf-Sprachen zu veröffentlichen. Versuchen Sie, für jede Programmiersprache eine möglichst kurze Antwort zu finden.
- Standardlücken sind verboten.
- Fügen Sie nach Möglichkeit einen Link mit einem Test für Ihren Code hinzu.
- Fügen Sie außerdem eine Erklärung für Ihre Antwort hinzu, wenn Sie der Meinung sind, dass dies erforderlich ist.
ProgrammingPuzzlesAndCodeGolf- Die endgültige Schwanzlänge größer als 1 hat mich gestolpert.
printin a verwenden kann lambda.