Skip to main content
2 of 4
fix typo mentioned by @StanStrum
dzaima
  • 20.3k
  • 2
  • 41
  • 75

Unfurl a string

Given a square string, produce all the output for the string at every stage of unfurling.

The string must unfurl in a clockwise direction one quarter turn at a time.

Examples

Input:

A

Output:

A

Input:

DC
AB

Output:

DC
AB

  D
ABC

ABCD

Input:

GFE
HID
ABC

Output:

GFE
HID
ABC

   HG
   IF
ABCDE

     IH
ABCDEFG

       I
ABCDEFGH

ABCDEFGHI

Input:

JIHG
KPOF
LMNE
ABCD

Output:

JIHG
KPOF
LMNE
ABCD

    LKJ
    MPI
    NOH
ABCDEFG

       NML
       OPK
ABCDEFGHIJ

          ON
          PM
ABCDEFGHIJKL

            PO
ABCDEFGHIJKLMN

              P
ABCDEFGHIJKLMNO

ABCDEFGHIJKLMNOP

Rules

This is so the shortest code in bytes wins.

  • Any reasonable format can be used for I/O assuming it is consistent.
  • Spaces must be used to pad the top lines of the output.
  • Must be able to handle input of all printable characters (including space: \x20-\x7e):
 !"#$%&'()*+,-./0123456789:;?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
  • Leading/trailing whitespace is allowed.
  • You can assume the string will always be a square.
  • All standard loopholes are forbidden.

Inspiration: Write a square program that outputs the number of times it has been “unrolled”.

Dom Hastings
  • 24.4k
  • 4
  • 56
  • 93