ASCII 아트 코드 생성기


9

포맷 된 Brainfuck 코드를 생성하는 프로그램이 있습니다. 내 프로그램을 실행

./example "S"

출력은

 +[>+
<
 +++
    ]
>--.

Brainfuck에서 S를 인쇄합니다.

목표는 문자열을 입력으로 받아들이고 해당 문자열을 인쇄하는 다른 언어로 소스 코드를 출력하는 프로그램을 작성하는 것입니다.

  • 프로그램이 출력하는 소스 코드는 ASCII 아트 (수직이 아닌 수평으로 인쇄 됨)로 문자열을 나타내는 방식으로 포맷되어야합니다.
  • 소스 코드는 문자열을 포함 할 수 없습니다 (단, 문자열에서 발생하는 문자는 순차적이 아닌 문자를 포함 할 수 있음)

그렇지 않으면,

작성된 언어, 출력 언어 및 총 크기 (바이트)로 제출 제목을 지정하십시오. UNCOPYRIGHTABLE 문자열을 입력 할 때 프로그램 출력을 포함 시키십시오.

감사!


1
프로그램이 인쇄 가능한 모든 ASCII 문자 또는 대문자 만 처리해야합니까? 공백은 어떻습니까?
r3mainer

@squeamishossifrage 그냥 대문자입니다. 공백이 바람직하지만 문자열 ""은 (는) 표현하기가 불가능하므로 선택 사항입니다.
Orby

답변:


3

C-> Brainfuck 556 바이트

불필요한 공백 제외. 글꼴 데이터 d[]를 16 진수에서 따옴표로 묶은 문자열 로 변경하여 쉽게 백을 절약 할 수 있습니다 .

i,j,s,t,u,v,w,h;
char a[99],b[9999],k,d[]={0x6F,0x3B,0x5A,0xD5,0x7A,0x6A,0x5B,0x2F,0xD0,0x57,0xA1,0x1B,0xCF,0x4F,0x5F,0x6E,0x6D,0x4E,0x79,0x3A,0x1F,0x95,0x9F,0xA6,0x3D,0x76};
f(int z){
  return d[a[j-1-t%(2*w*j)/w/2]-65]>>z&1?z=b[i*v/u],b[i++*v/u]=' ',z:' ';
}

main(){
  for(scanf("%s",a);a[j];i++)a[j]-k?k++,b[i]='+':(b[i]='.',t+=(0xE7572B70967DB>>(a[j]*2-130)&3)+5,j++);

  s=i/t+2;
  u=t*(s-1);
  v=i;
  i=0;

  w=2*s;h=2*s+1;
  for(t=2*w*h*j;t--;)putchar(
    t%(2*w*j)? 
      t/2/w/j%s?

        t%s||!(t/4%s)?' ':f(t/s%4/2+t/2/w/j/s*2|7*(t/s%4==2))  
      :(
        (t%s)&&(t/s+1&2)?f(4+t/2/w/j/s):' '
      )
    :10  //newline
  );

}

이것은 계산기 글꼴 (낮은 엔트로피의 경우 문자 당 1 바이트)과 https://codegolf.stackexchange.com/a/35801/15599에서 영감을 얻은 매우 순수한 Brainfuck 컴파일러를 사용합니다 (빼기 대신 플러스를 사용하는 것을 제외하고). first for루프는 텍스트를 a문자열로 컴파일하고 b13 자리 16 진수 마법 번호를 사용하여 형식이 지정된 코드를 그리는 데 필요한 스트로크 수를 계산합니다 (모든 문자는 5-8 스트로크).

총 프로그램 길이와 획 수를 고려하면 획당 문자 수를 계산합니다 (문자가 같거나 오름차순이면 문자 수가 매우 작고 문자가 내림차순이면 매우 클 수 있음).

나머지 프로그램의 대부분은 공백 또는 스트로크 중 하나를 인쇄해야하는지 결정하는 데 전념합니다. 커서가 획 사각형 위에 있으면 f해당 획 수를 인수로 사용하여 함수 가 호출됩니다. 현재 문자에 ​​해당 획이 필요하지 않은 경우 공백을 반환하거나 필요한 경우 프로그램의 문자를 반환합니다. ASCII 아트를 완성하는 데 필요한 문자 수가 프로그램의 문자보다 많을 수 있으므로 공백이 삽입되어 계산 b[i * v/u]됩니다.

글꼴에는 글자에 따라 4 개의 단일 스트로크와 4 개의 이중 스트로크가 있으며, 다음과 같이 번호가 매겨집니다.

 6666 6666
3    7    2
3    7    2
3    7    2
3    7    2
 5555 5555
1    7    0
1    7    0
1    7    0
1    7    0
 4444 4444 

산출

http://copy.sh/brainfuck/ 에서 테스트 하십시오.

알파벳

 + ++ +++                                ++++ + ++
+         +         +
+         +         +                   +
+                   +                   +
+         +         +
 ++++ + ++           +++  ++++
+                   +         +         +
+         +                   +         +
+         +         +                   +
+         +         +         +
                     ++++ + ++           ++.  +.+.

방어

 + ++ ++ +           ++++  +++           ++ + ++++
          +         +                   +
     +    +                             +
     +    +         +                   +
          +         +                   +
                     ++ + +++            ++++ + ++
     +    +         +
     +    +         +                   +
     +              +                   +
     +    +         +
 ++++ + ++           ++.  +.+.

지작

 + + +++                         ++  +++         +++  ++
+               +       +           +                               +
+               +       +           +                   +
+               +       +           +                   +           +
                  ++ +++                                         + + +++
+       +       +                   +           +       +           +   +
+               +       +           +           +       +           +
+       +       +       +           +           +                   +   +
 +++ + +                         ++. +.          +.+ .+.

LMNOP

                 + + +++         + + +++         + + +++         + + +++
+                   +   +       +       +       +               +       +
+               +   +           +       +       +       +       +
+               +   +   +       +               +       +       +       +
                                                                 + + +++
+               +   +   +       +       +               +       +
+       +       +       +       +       +       +       +
+       +       +   +   +               +       +       +       +
 + . +.+                                         . + .+.

QRSTU

 + + +++         +++ +++         +++ ++
+       +       +       +       +               +               +       +
+       +       +       +       +               +               +
+       +       +       +       +               +               +       +
 +++ +++                         + + +++         +++ +++
        +       +                       +       +               +
        +       +                       +       +               +       +
        +       +                       +       +               +       +
                                 +++  ++         +++ .+.         +.+ .+.

VWXYZ

                                                                + + +++
   +   +       +   +   +               +       +       +               +
   +   +       +   +   +           +           +       +               +
   +   +       +   +   +           +           +       +               +
                                +++ +++         + + +++         +++ ++
   +   +       +   +   +       +   +                   +       +
   +           +   +   +       +   +                   +       +
   +   +           +   +       +   +                   +       +
+++ + +         +++ +++                         ++  .+.         +.+ .+.

복사 가능

임의의 순서로 문자가있는 대부분의 문자열 (오름차순이 아님)은 문자 크기가 훨씬 크고 문자가 훨씬 좋아 보입니다. 불행히도 파일 크기는 상당히 커집니다. 여기에 전체 단어 UCOPYRIGHTABLE을 업로드 할 수 없습니다. COPYABLE은 허용되는 가장 긴 단어입니다.

        + +++++++++ +++++++++++                         + +++++++++ +++++++++++                         ++ ++++++++ +++++++++++                                                                         +++ +.+++++ +++++++.+.+                                                                                                                         ++++ ++++.+ +++++++++++            
       +                                               +                       +                       +                       +                                               +                       +                       +                       +                                               +                                               +                                   
       +                                               +                       +                       +                       +                       +                       +                       +                       +                       +                                               +                                               +                                   
       +                                               +                       +                                               +                       +                       +                       +                       +                       +                                               +                                               +                                   
       +                                               +                       +                       +                       +                       +                       +                       +                       +                       +                                               +                                               +                                   
       +                                               +                                               +                       +                       +                       +                       +                       +                       +                                               +                                               +                                   
       +                                               +                       +                       +                       +                       +                       +                       +                       +                       +                                               +                                               +                                   
       +                                                                       +                       +                       +                       +                       +                       +                       +                       +                                               +                                               +                                   
       +                                               +                       +                       +                       +                       +                       +                       +                       +                       +                                               +                                               +                                   
                                                       +                       +                       +                       +                       +                       +                       +                       +                       +                                               +                                               +                                   
       +                                               +                       +                       +                       +                       +                       +                       +                       +                       +                                               +                                                                                   
       +                                               +                       +                       +                       +                       +                       +                       +                       +                       +                                               +                                               +                                   
                                                                                                        +++++++++ + +++++++++++                         ++++++++++  +++++++++++                         +++++++++++  ++++++++++                         +++++++++++ + +++++++++                                                                         ++++++++++. +. ++++++++            
       +                                               +                       .                       +                                                                       +                       +                       +                       +                       +                       +                       +                       +                                   
       +                                               +                                               +                                                                       +                       +                       +                       +                       +                       +                       +                       +                                   
       +                                               +                       +                       +                                                                       +                       +                       +                       +                       +                       +                       +                       +                                   
                                                       +                       +                       +                                                                       +                       +                       +                       +                       +                       +                       +                       +                                   
       +                                               +                       +                       +                                                                       +                       +                       +                       +                       +                       +                       +                                                           
       +                                               +                       +                       +                                                                       +                       +                       +                       +                       +                       +                       +                       +                                   
       +                                               +                       +                       +                                                                       +                       +                       +                       +                       +                       +                                               +                                   
       +                                               +                       +                       +                                                                       +                       +                       +                       +                       +                       +                       +                       +                                   
       +                                               +                       +                       +                                                                       +                       +                       +                       +                       +                                               +                       +                                   
       +                                               +                       +                       +                                                                       +                       +                       +                       +                       +                       +                       +                       +                                   
       +                                               +                       +                       +                                                                       +                       +                       +                       +                                               +                       +                       +                                   
        +++++++++++ +++++++ +++                         +++++++++++ ++++++++ ++                                                                         +++++++++++ +++++++++ +                                                                         +++++++++++ ++++++++++                          +++++++++++ +++++++++++                          ++++++++++ ++++++++++.            

8

Perl → Befunge, 868 바이트

알았어. 공을 굴릴거야. 이것은 조금 더 골프를 칠 수 있지만 머리가 아프기 시작합니다 ...

$_=" f,j f,jjj f,lgdlH,b >llb ,l,b lb ,lb , f,j f j f >>l>,lb ,9vb >lb,Hlb,H>vb >999*+,
mg8Hg8Ha8c8g8Hgb8Hab8,8k/ 8Ha8Hi /H8HgH8g8k >H9ghgH9b 'bhbhgH9ghg9+gH9ga//
ma8Hg8Ha8c8ahgbhabhh /bhah VdhibHH9ghb >H9ghgH9abhbhgH*g9+g ii /b>l,^b // 
>H^>>Hned*angne ned* eneknabnn<b nangn idH*gned*gneb*>>,b *kngH5g*6 Adb><aha//b
H*g2HgH3a4Hg5Ha6c7gHHgb1Hab2+3H ib4Ha5Hg6kiHH7g8c, id1H iabHk3k4+g >+ ,^>^dd 7/ ib *k //b 
+1g+HgH+g+Hg+Ha+c+g,Hgb+kk >^+ki +Ha+Hg+HgH+g+cki'+ki ,gk+k>^gbHc^H 9*gb8+b//a
^<b ^>^ebe^'>^e >^e>>^a >^>> >^gd>^ke> >^b '>^e>>^g>^g e^ >^a >^~'i>^b i >2+^b >^b e>gHaV V >^gb>^bHHHHHH";
s/n/*H/g;s/m/H8g8HgH8/g;s/l/v>/g;s/k/Hb/g;s/j/f>,/g;s/i/\\/g;s/h/9H/g;s/g/bd/g;s/f/ve/g;s/e/>>>/g;s/d/ H/g;s/c/HaH/g;s/b/  /g;s/a/    /g;@f=split$/;
@s=split('',$ARGV[0]);foreach$r(0..6){for($i=0;$i<@s;$i++){print substr($f[$r],(ord($s[$i])-65)*6,6).$"}print$r?'':' @',$/}

예 :

짧은 예는 복사 붙여 넣기 같은 온라인 통역으로 할 수있다 이 하나 있지만, UNCOPYRIGHTABLE 나타납니다 핸들에 모든 온라인 통역을 위해 너무 긴 프로그램을 초래할 수 있습니다.

$ perl bf.pl ABCDEFGHI
 v>>>, v>>>>,  v>>>, v>>>>, v>>>>, v>>>>,  v>>>, v>   H  Hv>H,  @
H8   H 8H   H H8   H 8H   H 8H     8H     H8   H 8H   H   8H   
H8   H 8H   H H8     8H   H 8H     8H     H8     9H   H   9H   
>H^>>H *H>>>  H*     *H   H *H>>>  *H>>>  H* >>> *H>>>H   *H   
H*   H 2H   H H3     4H   H 5H     6H     H7   H HH   H   1H   
+1   H +H   H H+   H +H   H +H     +H     H+   H ,H   H   +H   
^<   ^ >^>>>   >>>^' >^>>>  >^>>>> >^      >^>>  >^   H  H>^H  


$ perl bf.pl JKLMNOPQR
   >v> v>   , v>,    v>   , v>   ,  v>>>, v>>>>,  v>>>  v>>>>,  @
    8, 8H  /  8H     8H\ /H 8H   H H8   H 8H   > H9   H 9H   H 
    9H 9H /   9H     9H V H 9H\  H H9   H 9H   > H9   H 9H   H 
    *H *H<    *H     *H   H *H \ H H*   H *H>>>  H*   H *H>>>  
    2+ 3H \   4H     5H   H 6H  \H H7   H 8H     H, \ H 1H \   
H   >^ +H  \  +H     +H   H +H   H H+   H +H     HH  \' +H  \  
 >>>>  >^   ' >^>>>> >^   H >^   H  >>>^  >^      >^~'\ >^   \ 


$ perl bf.pl STUVWXYZ
 v>>>  >>v>>, v>   , 9v   > v>  ,H v>  ,H >v   > 999*+,  @
H9   '   9H   9H   H H9   H 9H   H 9+   H H9   H     // 
H9       9H   9H   H H*   H 9+   H  \\ /   >v>,^    //  
 *>>,    *H   *H   H H5   H *6 A H   ><     9H     //   
    HH   3H   4+   H  >+ ,^ >^ H H  7/ \    *H    //    
,   HH   +H   >^   H   HH     H^H  9*   H   8+   //     
 >2+^    >^    >>>>    HH     V V  >^   H   >^   HHHHHH 


$ perl bf.pl UNCOPYRIGHTABLE
v>   , v>   ,  v>>>,  v>>>, v>>>>, >v   > v>>>>,  Hv>H,  v>>>, v>   H >>v>>,  v>>>, v>>>>, v>,    v>>>>,  @
9H   H 8H   H H8   H H8   H 8H   > H9   H 9H   H   8H   H8   H 8H   H   9H   H8   H 8H   H 8H     8H     
9H   H 9H\  H H8     H9   H 9H   >  >v>,^ 9H   H   9H   H8     9H   H   9H   H8   H 8H   H 9H     8H     
*H   H *H \ H H*     H*   H *H>>>    9H   *H>>>    *H   H* >>> *H>>>H   *H   >H^>>H *H>>>  *H     *H>>>  
4+   H 6H  \H H3     H7   H 8H       *H   1H \     1H   H7   H HH   H   3H   H*   H 2H   H 4H     5H     
>^   H +H   H H+   H H+   H +H       8+   +H  \    +H   H+   H ,H   H   +H   +1   H +H   H +H     +H     
 >>>>  >^   H  >>>^'  >>>^  >^       >^   >^   \  H>^H   >^>>  >^   H   >^   ^<   ^ >^>>>  >^>>>> >^>>>> 

노트 :

@첫 번째 출력 행 끝에 있는 문자는 Befunge에게 실행을 중지하도록 지시합니다. 그것 없이는, 프로그램은 계속 같은 단어를 계속 반복 할 것입니다.


나는 ASCII 글꼴을 좋아한다 :)
Orby

3

C → Brainfuck, 855 바이트

가독성을 높이기 위해 일부 줄 바꿈이 추가되었습니다. 소문자와 기호에 segfaults가 있습니다. 여기서 출력을 테스트 하십시오 .

#define p putchar
#define V(x) c=v[1][x]-65;
l[]={96,48,24,12,66,98,60,90,6,70,102,54,118,14,62,126},e[]={2863659686,
3937331886,1787332774,3937053358,4170115215,2291067023,1789692070,2863659690,
1646404134,1778384896,2864569258,4169697416,1145534458,1165457300,1789569702,
2291051182,1823124134,2863573678,1778804902,572662319,1789569706,648719018,
2943841348,2863033002,572680874,4164034831},a[]={36,36,24,34,30,26,29,36,20,20,
30,20,28,26,32,28,33,34,28,20,32,30,28,32,24,24},r,o,j,k,c,z;char*b[]={
"-[+>+<[+<]>]>+","-[+[>---<<]>+]>-","+[>+<+++++++]>",">+++[[-<]>>--]<",
"+[>+<+++]>----","+[>+<+++]>","-[+[+<]>>+]<+"};main(i,v)char**v;{for(;r<8;r++){
for(i=0;v[1][i];i++)for(o=0;o<8;o++){V(i)if((l[(e[c]>>(4*r))&15]>>o)&1){V(j)
if(k==a[c]){j++;k=0;}V(j)z=k-strlen(b[c/4]);if(z<0)p(b[c/4][k]);else{c=(c%4)-z;
!c?p(46):(c>0?p(43):p(62));}k++;}else p(32);}p(10);}}

터미널에서 훨씬 멋지게 보입니다.

$ ./art ABCDEFGHI

  -[+>   +<[+<    ]>]>   +.>>>   >>>>>>  >>>>>>   >>>>   >>  -[   +>+<  
 [+  <]  >]  >+  +.  >>  >>  >>  >>      >>      >>  >>  >>  >>    >>   
 -[  +>  +<  [+  <]      >]  >+  ++      .>      >>      >>  >>    -[   
 +>+<[+  <]>]>   ++      ++  .>  >>>>>   >>>>>   >>      >>>-[+    [>   
 ---<<]  >+]>-   .>      >>  >>  >>>>>   >>>-[   +[ >--  -<<]>+    ]>   
 -+  .>  >>  >>  >>      >-  [+  [>      --      -<  <]  >+  ]>    -+   
 +.  >>  >>  >>  >>  >>  -[  +[  >-      --      <<  ]>  +]  >-    ++   
 +.  >>  >>>>>    >>>>   >>>>>   +[>+<+  ++       ++++   ]>  .>   >>>>  

 $ ./art JKLMNOPQR

     +[  >+  <+  ++      ++  ++  ]    >   +.>>   >>+[>    +<++   +++++  
     ]>  ++  .>  >>      >>>>>>  >>   >  >+  [>  +<  ++  ++  ++  +]  >+ 
     ++  .> >>   ++      + [[ -  < ]> >  --  ]<  .>  >>  >>  >>  >>  >> 
     >>  +++     [[      - <] >  > -- ]  <+  .>  >>  >>  >>  >>  >+  ++ 
     [[  -<]     >>      - -] <  + +. >  >>  >>  >>>>>   >>  >>  >+++[  
     [-  <] >>   --      ]    <  + ++ .  >>  >>  >>      >>  >+  [>  +< 
 ++  +]  >-  --  -.      >    >  >   >>  >>  >>  >>      >> >>>  >>  +[ 
  >+<+   ++  ]>  ----+.  >    >  >    >   >>>>   >>       >>>>   >>  >> 

$ ./art STUVWXYZ

  +[>+   <+++]>  --  --  ++  .>  >    >  >>  >>  >>  >>  +[>+<+ 
 ++  ]>    --    --  ++  +.  >>  +    [  >+  <+  ++  ]>      .> 
 >>        >>    >>  >>  >>  >>  >    >  >>  >>  >>  +[     >+  
  <+++     ]>    +.  >>  >>  >>  > >> >   >>>>    >>>>     +[   
  >+<+     ++    ]>  ++  .>  >>  > >> >   >>>>     >>      >>   
     +[    >+    <+  ++  ]>  ++  + .> >  >>  >>    >>     >>    
 >>  >>    >>    >>  -[   +[+<   ]>>+]<  +.  >>    >>    >>     
  >>>>     -[     +[+<     ]>    >+  ]<  ++  .>    >>    >>>>>> 

그리고 마지막으로,

$ ./art UNCOPYRIGHTABLE

 +[  >+  <    +   ++]>    .>>>   >>>>>   >>  >>  >>>>>    >>>>    >+++   [[  -<  ]>>--]   <+.>   >>>>>   >>      >-[+>+ 
 <[  +<  ]>   ]  >+  ++  .>  >>  >>  >>  >+  ++  [[  -<    ]>    >-  -]  <+  +.    >>    >>  >>  >>  >>  >>      >>     
 >+  ++  [ [- <  ]>      >-  -]  <+  ++  .>  >>  >>  >>    >>    -[      +[  +<    ]>    >+  ]<  +.  >>  >>      >>     
 >>  >>  + [> +  <+      ++  ]>  --  --   +.>>   >>  >>    >>    >>      >>>>>>    >>    +[>+<+  +++++   +]      >.>>>  
 >>  -[  + [> -  --      <<  ]>  +]>-+     +.    >>>>>     >>    >> >-[  +[>---    <<    ]>+]>-  +++.>   >>      >>>>>  
 >>  >>  > >> >  +[      >+  <+  ++        ]>    --  --    ++    +.  >>  -[  +>    +<    [+  <]  >]  >+  .>      >>     
 >>  >>  >   >>  >>  >>  >>  >>  >>        >-    [+  >+    <[    +<  ]>  ]>  ++    .>    >>  >>  >>  >>  >>      >>     
  >>>>   >    >   >+[>    +<++   ++        ++    +]  >+   ++.>    >-[+   [>  --    -<    <]  >+  ]>-.>   >>>>>>  >>>>>> 
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.