Gire el arte ASCII en 45 grados

21

Su tarea es tomar una imagen artística ASCII y hacerla girar en el sentido de las agujas del reloj 45 grados y escalarla en un factor de 2 . La escala proviene del uso de un patrón de celosía que introduce espacio entre los personajes.

Para explicarlo visualmente, un 3×3 bloque se procesará así:

123
456
789

se convierte

  1
 4 2
7 5 3
 8 6
  9

Los personajes no se transformarán, por lo que los cuadros se verán extraños después de la rotación:

+-+
| |
+-+

se convierte

  +
 | -
+   +
 - |
  +

Para explicar el proceso más explícitamente, la salida consiste en un patrón de retícula de diamante donde la fila superior corresponde al carácter superior izquierdo de la entrada, la siguiente fila corresponde a los vecinos derecho e inferior, la siguiente fila son esos vecinos, y así sucesivamente hasta que todos los personajes se hayan colocado en la red.

Ejemplos

           FISHKISSFISHKIS               
       SFISHKISSFISHKISSFISH            F
    ISHK   ISSFISHKISSFISHKISS         FI
  SHKISS   FISHKISSFISHKISSFISS       FIS
HKISSFISHKISSFISHKISSFISHKISSFISH    KISS
  FISHKISSFISHKISSFISHKISSFISHKISS  FISHK
      SSFISHKISSFISHKISSFISHKISSFISHKISSF
  ISHKISSFISHKISSFISHKISSFISHKISSF  ISHKI
SSFISHKISSFISHKISSFISHKISSFISHKIS    SFIS
  HKISSFISHKISSFISHKISSFISHKISS       FIS
    HKISSFISHKISSFISHKISSFISHK         IS
       SFISHKISSFISHKISSFISH            K
         ISSFISHKISSFISHK                

Fuente

Se convierte

     H
      K S
       I H I
      F S K S
 S     I S I H S
  S I   S F S K F
   F S   H I S   I
  H I H   K S     S F
   K S K S I H     H I
    I H I S S K   I K S
   H S K S F S I F S I H
    K S I S I F S I S S K
     I F S F S I S S F S I
      S I S I H S F H I F S
     S S S F S K H I K S I S
      F F H I H I K S I H S F
       I I K S K S I H S K H I
      I S S I H I S S K S I K S
       S H H S K S F S I F S I H
        S K K S I S I F S I S S K
         F I I F S F S I S S F S I
          I S S I S I H S F H I F S
           S S S S F S K H I K S I
            H F F H I H I K S I H S
             K I I K S K S I H S K H
              I S S I H I S S K S I
               S H H S K S F S I F S
                S K K S I S I F S I S
                 F I I F S F S I S S
                  I S S I S I H S F S
                   S S S S F S K H I
                    H F F H I H I K S
                     K I I K S K S I H
                        S S I H I S S
                         H H S K S F S
                            K S I S I
                                 S F S
                                      H F K F F F
                                       K I I I I
                                      I I S S S
                                       S S H S
                                      S H S K
                                       F K F
                                      F I I
                                       I S
                                      I S
                                       S
                                      K

      _,,ddF"""Ybb,,_      
    ,d@#@#@#@g,   `"Yb,    
  ,d#@#V``V@#@#b      "b,  
 d@#@#I    I@#@8        "b 
d@#@#@#A..A@#@#P         `b
8#@#@#@#@#@#@8"           8
8@#@#@#@#@#@J             8
8#@#@#@#@#P               8
Y@#@#@#@#P    ,db,       ,P
 Y@#@#@#@)    @DWB      aP 
  "Y#@#@#b    `69'    aP"  
    "Y@#@#g,,     _,dP"    
      `""YBBgggddP""'       

Fuente

Se convierte

     d d ,
    8 @ @ d ,
   8 # # # # d _
  8 @ @ @ @ @ @ ,
 Y # # # # # # # ,
  @ @ @ @ @ I V @ d
 Y # # # # #   ` # d
  @ @ @ @ @ A   ` @ F
 " # # # # # .   V # "
  Y @ @ @ @ @ .   @ @ "
   # # # # # # A I # g "
  " @ @ @ @ @ @ @ @ @ , Y
   Y # # # # # # # # #   b
    @ @ @ P P @ @ @ @ b   b
   ` # # )     J 8 # 8     ,
    " @ b         " P     ` ,
     " #                   " _
      Y g                   Y
       B ,     ,             b
        B ,   @ d             ,
         g   ` D b           "
          g   6 W ,           b
           g   9 B             ,
            d   '             "
             d                 b
              P _             `
               " ,             b
                " d           8
                 ' P a       8
                    " P a , 8
                       " P P

                             ...,?77??!~~~~!???77?<~....
                        ..?7`                           `7!..
                    .,=`          ..~7^`   I                  ?1.
       ........  ..^            ?`  ..?7!1 .               ...??7
      .        .7`        .,777.. .I.    . .!          .,7!
      ..     .?         .^      .l   ?i. . .`       .,^
       b    .!        .= .?7???7~.     .>r .      .=
       .,.?4         , .^         1        `     4...
        J   ^         ,            5       `         ?<.
       .%.7;         .`     .,     .;                   .=.
       .+^ .,       .%      MML     F       .,             ?,
        P   ,,      J      .MMN     F        6               4.
        l    d,    ,       .MMM!   .t        ..               ,,
        ,    JMa..`         MMM`   .         .!                .;
         r   .M#            .M#   .%  .      .~                 .,
       dMMMNJ..!                 .P7!  .>    .         .         ,,
       .WMMMMMm  ?^..       ..,?! ..    ..   ,  Z7`        `?^..  ,,
          ?THB3       ?77?!        .Yr  .   .!   ?,              ?^C
            ?,                   .,^.` .%  .^      5.
              7,          .....?7     .^  ,`        ?.
                `<.                 .= .`'           1
                ....dn... ... ...,7..J=!7,           .,
             ..=     G.,7  ..,o..  .?    J.           F
           .J.  .^ ,,,t  ,^        ?^.  .^  `?~.      F
          r %J. $    5r J             ,r.1      .=.  .%
          r .77=?4.    ``,     l ., 1  .. <.       4.,
          .$..    .X..   .n..  ., J. r .`  J.       `'
        .?`  .5        `` .%   .% .' L.'    t
        ,. ..1JL          .,   J .$.?`      .
                1.          .=` ` .J7??7<.. .;
                 JS..    ..^      L        7.:
                   `> ..       J.  4.
                    +   r `t   r ~=..G.
                    =   $  ,.  J
                    2   r   t  .;
              .,7!  r   t`7~..  j..
              j   7~L...$=.?7r   r ;?1.
               8.      .=    j ..,^   ..
              r        G              .
            .,7,        j,           .>=.
         .J??,  `T....... %             ..
      ..^     <.  ~.    ,.             .D
    .?`        1   L     .7.........?Ti..l
   ,`           L  .    .%    .`!       `j,
 .^             .  ..   .`   .^  .?7!?7+. 1
.`              .  .`..`7.  .^  ,`      .i.;
.7<..........~<<3?7!`    4. r  `          G%
                          J.` .!           %
                            JiJ           .`
                              .1.         J
                                 ?1.     .'
                                     7<..%

Fuente

Se convierte

                                                      . .
                                                     .   .
                                                      .   .
                                                     b     .
                                                    .       .
                                                     ,       .
                                                  . J .       .
                                                 . %   ?       .
                                                  + .   4 . .
                                                 P ^ 7     ! ? .
                                                l     ; ^       7 .
                                               ,     .           ` .
                                            d         ,             ^ .
                                           . M r     ,                 ,
                                            W M       ,                 =
                                             M M     d                   ` .
                                              M N   J ,                     .
                                             ? M J . M                       ?
                                              T M . M a           , .         7
                                               H M . # .             = .       ` .
                                              ? B m !   .     . . , .   ^ .       .
                                               , 3       ` , J % `   ^ .   ,       .
                                                                        ?   7       ,
                                               7     ?                   7   7       ?
                                      r .       ,     ^                   ?   7       7
                                 .   r   J .           .                   ?   . ?     7
                                , ? .   % . .   `       .                   ?   . ` .   ?
                                 . ` $ . J   = . <                     .     7 .     .   ?
                                      . 7 .     . .                 . M ,     ~ l .   ~   !
                                   .   . 7   .   .       ?         . M M       .   I . 7   ~
                                    . .   = $ ^   .       7         M M L           . . ^   ~
                                     1 5   ?       d       7       M M N       1       ? `   ~
                                      J     4   ,   n       ?     . M M             ?   7     ~
                                       L     .   , G .       !     M M !       5     i   !     !
                                            .     , . .         .   # `       .       .   1     ?
       . .                             1     X   5 t , .   .     .             ;     .   .   I   ?
      . ` ^ , .                         .     .   r   7     .     ,           F       > .   .     ?
       7     ` ? .                     J       .         .   .     ?       . F         r   .       7
        <       ` .                     S         ` J ,   .   .     ! . . . t             . !       7
         .         ^ .         .         .         `   ^ . .   .       P %               . `         ?
          .           J       j ,       ` .     `   ,     .     ?     . 7               `             <
           .           ? .       7       >       ` .       , .   7 .   . !             `               ~
            .           ? , r 8   !     +           n       o .     , .     .                           .
             .           , 7   .       =   .       . .       . .     ^ Y                                 .
              .             ,     7   2     .     . % .       . ,     . r   .         .                   .
               .         <         ~ r         .   ,             7     `     >         ,                   .
                .         . `       L       r   .         l       . .       .         6       4 .
                 .       1   T       .     $     ^ .     .       . . = . . . .       .         . = .       `
                  .           .       .   r   `     =   . , .   ? ? J   ^ %         . .         .   ,       7
                   ~     L   ~ .       . t     t     ` J %   ,   ^   = .           . !           .   ^ .     !
                    <   .     . .     . $ `   ,             J     .   ! `         . ~                   ,     .
                     < .     L   .   G = = 7   .       ` . . . 1       7 ' , . . ,               ?       7     .
                      3     .     .       . ~ t     J     $ '     ,     ,   ` ^ !                 <       ! .
                       ?   .       . j     ? .     r .   . .   r   r . J                           .         .
                        7 . .       . ,     7 .   J     L J ? L   . . ^ .           Z                         . ?
                         ! `       ,         r   .   ~     7 ` . . . 1               7             .           ? 1
                          ` .       . %     j     ;   = 4   ?   ' `                 ? `             =           ? .
                             .   . .             j     . .   ?       <   `           ,               .           7
                              ` . % 7         .   .     .     7       .   ?
                               7 `   .         . r .     G     <     J     ~         5               ?
                                .     .         ,         .     .     .     .         .     .         ,
                               4       .         ^ ;             .   t               ?
                                .       .           ?               .       .         .               4
                               J   . . . .           1           7 .         =       1                 .
                                . r ^ ^ ` .           .           . ;         .     .                 ,
                                 `       ! .         .             :                 ,         `       ,
                                J           .     . . .                       4     F           ?     .
                                 i . ` , .   .     >                           . . F             ^     ;
                                  J !   ` ?   ?     =                         ` , %               .   .
                                 .         7   T     .                         '                   .   ,
                                  1         !   i . .                                                 ,
                                   .         ?   . D .                                                 ,
                                              7   .                                                 ? ,
                                   ?           + ` l                                                 ^ ,
                                    1           . j                                                   C
                                     .         .   ,
                                                i 1
                                                 .
                                      7         G ;
                                       <         %
                                        .     . %
                                         . . J `
                                          % '

Reglas y notas

  • La entrada y la salida pueden estar en cualquier formato conveniente y codificación de caracteres siempre que sea compatible con todos los caracteres ASCII imprimibles (U + 0020 - U + 007E, LF)
  • Puede suponer que la entrada contiene solo caracteres ASCII imprimibles (definidos anteriormente)
  • Debes soportar arte de hasta 100×100 caracteres.
  • Puede suponer que la entrada está rellenada a la derecha, como una cuadrícula rectangular perfecta de caracteres.
    • 100×100
  • Use el espacio ASCII para alinear y espaciar los caracteres.
  • Los caracteres pueden estar sobrealimentados (o incluso debajo) en cualquier dirección, siempre que el resultado esté correctamente alineado.

¡Feliz golf!

Carne de res
fuente
55
Pobre Sonic, solo quería vivir D:
Benjamin Urquhart
es posible que desee utilizar caracteres de ancho completo para que después de rotar todavía tenga una forma bastante cuadrada ¿ Mostrar caracteres en una cuadrícula cuadrada? , Convertir caracteres de ancho completo a caracteres de ancho medio (perl, regex, japonés)
phuclv
Posible engaño ?
Shaggy
@Shaggy Diría que solo está relacionado, pero sí, eso tiene muchas similitudes con seguridad. La única diferencia sustancial es que este desafío requiere espacio en la salida. En otras noticias, eres impresionantemente bueno para encontrar engañados.
Beefster
Si eso fuera cierto, ¡habría encontrado ese desafío mientras este todavía estaba en el Sanbox! Me tropecé con él completamente por accidente mientras buscaba una idea desafiante que tenía y al instante recordé la tuya.
Shaggy

Respuestas:

18

Carbón , 2 bytes

↘A

Pruébalo en línea! El enlace es a la versión detallada del código. Toma la entrada como un literal de cadena delimitado por una nueva línea o como una matriz de cadenas. Explicación: lee la entrada y la emite en la dirección diagonal deseada. Versión que acepta una lista de líneas terminadas en línea en blanco de STDIN:

WS⊞υι↘υ

Pruébalo en línea! El enlace es a la versión detallada del código.

Neil
fuente
Guau. La herramienta adecuada para el trabajo.
connectyourcharger
10

Lienzo , 6 bytes.

/⤢ *\⤢

Pruébalo aquí!

/        pad each line with one less space than the previous
 ⤢       transpose the object
   *     place a space between every character
    \    pad each line with one more space than the previous
     ⤢   transpose the object back

Ejemplo:

123
456
789
/:
  123
 456
789
⤢:
  7
 48
159
26 
3  
 *:
    7
  4 8
1 5 9
2 6  
3    
\:
    7    
   4 8   
  1 5 9  
   2 6   
    3    
⤢:


  1  
 4 2 
7 5 3
 8 6 
  9  


dzaima
fuente
¿Su código y explicación no utilizan barras diferentes?
Adám
@ Adám, generalmente ASCII-fy las explicaciones para que se alineen mejor
dzaima
6

Python 3.8 (prelanzamiento) , 104 bytes

lambda a:[" "*abs(l+~i)+" ".join(a[i-j][j]for j in range(i+1)if j<l>i-j)for i in range((l:=len(a))*2-1)]

Pruébalo en línea!

-5 bytes gracias a los ovs (Python 3.8 cosas)

Hiperneutrino
fuente
1
5 bytes más corto en Python 3,8
ovs
@ovs wait 3.8 está fuera? : o asignación en línea. me gusta esto. ¡Gracias!
HyperNeutrino
2

J , 56 45 bytes

-11 bytes gracias a FrownyFrog!

-@}:@(i.@-@#,#\@{.)|."_1+/@${."1|.@,@,.&' '/.

Pruébalo en línea!

Galen Ivanov
fuente
aquí hay 45
FrownyFrog
@FrownyFrog ¡Gracias! ¡Brillante como siempre!
Galen Ivanov
1

05AB1E , 18 12 bytes

RāRú€Sζðýāú»

Puerto de @dzaima 's respuesta lienzo , así que asegúrese de que le upvote !!

Entrada como una lista de líneas.

Pruébalo en línea.

Explicación:

R             # Reverse the (implicit) input-list
 ā            # Push a list in the range [1, length of input-list],
              # without popping the list itself
  R           # Reverse this list to [length, 1]
   ú          # Pad the reversed input-list with that many leading spaces
    S        # Split each string on spaces
      ζ       # Zip/transpose; swapping rows/columns, with space default as filler
       ðý     # Join each inner character-list by spaces
         ā    # Push a list in the range [1, length of this string-list],
              # without popping the list itself
          ú   # Pad the list of strings with that many leading spaces
           »  # Join the string-list by newlines (and output the result implicitly)

Respuesta original de 18 17 bytes:

g2IεNFR]JŽE5SΛ

Entrada como una lista de líneas.

Pruébalo en línea.

Explicación:

g     # Get the length of each line of the (implicit) input
       # (assumes they are all padded with spaces to make them of equal length)
  2.ý  # Intersperse this list with 2 (i.e. [3,3,3] becomes [3,2,3,2,3])
Iε     # Map the strings in the input to:
  NF   #  Loop the 0-based index amount of times:
    R  #   And reverse the current string that many times
 ]J    # After the loop and map: join the strings to a single string
ŽE5S   # Push compressed integer 3575, converted to a list of digits: [3,5,7,5]
Λ      # Use the canvas with these three options (which is output immediately by default)

Ver este consejo 05AB1E mío (sección Cómo comprimir grandes números enteros? ) Para entender por qué ŽE5es 3575.

Puede encontrar más información sobre el lienzo incorporado 05AB1E en este consejo mío.

El lienzo incorporado toma tres parámetros:

  • una
  • si
  • do[0,7]+×8

En este desafío uso las siguientes opciones:

do[3,5 5,7 7,5 5][,,↖↙]

     S
      
   ↙↖   
        
↙↖      ↖↙
     
  .   
    .

si

una37 725 521

Kevin Cruijssen
fuente
0

JavaScript (ES6), 102 bytes

f=
s=>(z=[...Array(100)],o=z.map(v=>z.map(_=>" ")),s.map((r,y)=>r.map((c,x)=>o[y+x][s.length+~y+x]=c)),o)

Pruébalo en línea!

Entrada y salida como lista de listas.

Explicación:

Crea una cuadrícula de espacios de 100x100. Luego recorre la entrada, configurando la entrada apropiada en la cuadrícula. El índice del carácter a configurar se calcula comox' = length of input - 1 + y + x yy' = y + x .

El resultado devuelto es una lista de listas de 100x100, con la salida en la esquina superior izquierda.

Birjolaxew
fuente
0

C # (compilador interactivo de Visual C #) , 153 bytes

z=>{var m=new char[100,100];var s=z.Split('\n');var l=s[0].Length;for(int x=0;x<l-1;x++)for(int y=0;y<s.GetLength(0);y++)m[x+y,l+~y+x]=s[y][x];return m;}

Pruébalo en línea!

Pide una cadena y devuelve una matriz 2D de caracteres 100 x 100.

Intenté usar LINQ / Collections, pero finalmente me di por vencido.

Qapples
fuente
0

Wolfram Language (Mathematica) , 79 bytes

SparseArray[100+{#2+#,#2-#}&@@#&/@Range@100~Tuples~2->Flatten@#,{301,301}," "]&

Pruébalo en línea!

La entrada debe rellenarse exactamente como 100x100. La salida es una matriz de 301x301. El resultado de la rotación sónica (con el formato adecuado):

Resultado sónico

Keyu Gan
fuente