Gire a arte ASCII em 45 graus

21

Sua tarefa é pegar uma imagem artística ASCII e produzi-la girada no sentido horário 45 graus e dimensionada por um fator de 2 . A escala vem do uso de um padrão de treliça que introduz espaço entre os caracteres.

Para explicá-lo visualmente, um 3×3 bloco seria processado como assim:

123
456
789

torna-se

  1
 4 2
7 5 3
 8 6
  9

Os caracteres não serão transformados, portanto, as caixas parecerão estranhas após a rotação:

+-+
| |
+-+

torna-se

  +
 | -
+   +
 - |
  +

Para explicar o processo mais explicitamente, a saída consiste em um padrão de treliça de diamante em que a linha superior corresponde ao caractere superior esquerdo da entrada, a próxima linha corresponde aos vizinhos direito e abaixo, a próxima linha é esses vizinhos e assim por diante até que todos os caracteres tenham sido colocados na treliça.

Exemplos

           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                

Fonte

Torna-se

     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""'       

Fonte

Torna-se

     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<..%

Fonte

Torna-se

                                                      . .
                                                     .   .
                                                      .   .
                                                     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 `
                                          % '

Regras e Notas

  • A entrada e a saída podem estar em qualquer formato conveniente e codificação de caracteres, desde que sejam compatíveis com todos os caracteres ASCII imprimíveis (U + 0020 - U + 007E, LF)
  • Você pode assumir que a entrada contém apenas caracteres ASCII imprimíveis (definidos acima)
  • 100×100
  • Você pode supor que a entrada é preenchida com o botão direito, como uma grade retangular perfeita de caracteres.
    • 100×100
  • Use o espaço ASCII para alinhar e espaçar caracteres.
  • Os caracteres podem ficar em excesso (ou mesmo em excesso) em qualquer direção, desde que o resultado esteja alinhado corretamente.

Golfe feliz!

Beefster
fonte
5
Pobre Sonic, ele só queria viver D:
Benjamin Urquhart
convém usar caracteres de largura total para que, depois de girar, ele ainda tenha uma forma bastante quadrada. Exibir caracteres em uma grade quadrada? , Convertendo caracteres de largura total em caracteres de meia largura (perl, regex, japonês)
phuclv 03/04
Possível idiota ?
Shaggy
@ Shaggy, eu diria que apenas relacionado, mas sim, isso tem muitas semelhanças, com certeza. A única diferença substancial é que esse desafio requer preenchimento de espaço na saída. Em outras notícias, você é impressionantemente bom em encontrar bobagens.
Beefster
Se isso fosse verdade, eu teria encontrado esse desafio enquanto este ainda estava na Sanbox! Eu tropecei completamente por acidente enquanto procurava por uma idéia idiota de desafio que eu tinha e me lembrei instantaneamente da sua.
Shaggy

Respostas:

18

Carvão , 2 bytes

↘A

Experimente online! Link é a versão detalhada do código. Recebe a entrada como uma única string literal delimitada por nova linha ou como uma matriz de strings. Explicação: lê a entrada e a produz na direção diagonal desejada. Versão que aceita uma lista terminada de linhas em branco de STDIN:

WS⊞υι↘υ

Experimente online! Link é a versão detalhada do código.

Neil
fonte
Uau. A ferramenta certa para o trabalho.
connectyourcharger 12/11
10

Tela , 6 bytes

/⤢ *\⤢

Experimente aqui!

/        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

Exemplo:

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
fonte
Seu código e explicação não estão usando barras diferentes?
Adám 02/04
@ Adám Eu normalmente ASCII-fy as explicações para eles se alinharem melhor
dzaima
6

Python 3.8 (pré-lançamento) , 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)]

Experimente online!

-5 bytes graças ao ovs (coisas do Python 3.8)

HyperNeutrino
fonte
1
5 bytes mais curtos no Python 3.8
ovs
@ovs wait 3.8 saiu? : o atribuição em linha. eu gosto disso. obrigado!
HyperNeutrino 03/04
2

J , 56 45 bytes

-11 bytes graças ao FrownyFrog!

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

Experimente online!

Galen Ivanov
fonte
aqui está 45
FrownyFrog
@FrownyFrog Obrigado! Brilhante como sempre!
Galen Ivanov
1

05AB1E , 18 12 bytes

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

Porto de @dzaima 's Canvas , por isso não deixe de votar nele !!

Insira como uma lista de linhas.

Experimente online.

Explicação:

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)

Resposta original de 18 17 bytes:

g2IεNFR]JŽE5SΛ

Insira como uma lista de linhas.

Experimente online.

Explicação:

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)

Veja este 05AB1E ponta do meu (seção Como comprimir grandes inteiros? ) Para entender por que ŽE5é3575 .

Mais algumas informações sobre o 05AB1E Canvas embutido podem ser encontradas nesta dica.

O Canvas integrado usa três parâmetros:

  • uma
  • b
  • c[0,7]+×8

Neste desafio, eu uso as seguintes opções:

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

     S
      
   ↙↖   
        
↙↖      ↖↙
     
  .   
    .

b

uma372521

Kevin Cruijssen
fonte
0

Geléia , 26 bytes

JU’;ZJ$x@€⁶ðżµUŒDUṙLN‘ƊṚK€

Experimente online!

Nick Kennedy
fonte
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)

Experimente online!

Entrada e saída como lista de listas.

Explicação:

Cria uma grade de espaços 100x100. Em seguida, percorre a entrada, configurando a entrada apropriada na grade. O índice do caractere a ser definido é calculado como x' = length of input - 1 + y + xey' = y + x .

O resultado retornado é uma lista de 100x100 de listas, com a saída no canto superior esquerdo.

Birjolaxew
fonte
0

Ruby , 94 bytes

->l{w=(2..y=l.size+b=l[z=0].size).map{' '*y};l.map{|r|b.times{|x|w[x+z][b+~z+x]=r[x]};z+=1};w}

Experimente online!

GB
fonte
0

C # (compilador interativo do 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;}

Experimente online!

Solicita uma string e retorna um array 2D de 100 x 100.

Tentei usar o LINQ / Collections, mas acabei desistindo.

Qapples
fonte
0

Wolfram Language (Mathematica) , 79 bytes

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

Experimente online!

A entrada deve ser preenchida exatamente como 100x100. A saída é uma matriz de 301x301. O resultado da rotação sônica (com formatação adequada):

Resultado sonoro

Keyu Gan
fonte