ASCII Art Code Generator

9

Ich habe ein Programm, das formatierten Brainfuck-Code generiert. Ich führe mein Programm aus

./example "S"

und die Ausgabe ist

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

welches S in Brainfuck druckt.

Ihr Ziel ist es, ein Programm zu schreiben, das eine Zeichenfolge als Eingabe akzeptiert und Quellcode in einer anderen Sprache ausgibt, die diese Zeichenfolge druckt.

  • Der von Ihrem Programm ausgegebene Quellcode muss so formatiert sein, dass er die Zeichenfolge in ASCII-Grafik darstellt (horizontal und nicht vertikal gedruckt).
  • Der Quellcode kann die Zeichenfolge nicht enthalten (er kann jedoch Buchstaben enthalten, die in der Zeichenfolge vorkommen, nur nicht nacheinander).

Andernfalls,

Bitte benennen Sie Ihre Einreichung mit der Sprache, in der sie geschrieben wurde, der Sprache, in der sie ausgegeben wird, und der Gesamtgröße in Bytes. Bitte geben Sie die Ausgabe Ihres Programms an, wenn Sie die Zeichenfolge UNCOPYRIGHTABLE eingeben.

Vielen Dank!

Oder von
quelle
1
Muss das Programm alle druckbaren ASCII-Zeichen oder nur Großbuchstaben verarbeiten? Was ist mit Leerraum?
r3mainer
@squeamishossifrage Nur Großbuchstaben. Leerzeichen sind vorzuziehen, aber mir ist klar, dass die Zeichenfolge "" möglicherweise nicht darstellbar ist, daher ist sie optional.
Orby

Antworten:

3

C -> Brainfuck 556 Bytes

Ausschluss unnötiger Leerzeichen. Ich könnte leicht weitere hundert speichern, indem ich die Schriftdaten d[]von hex in eine Zeichenfolge in Anführungszeichen ändere.

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
  );

}

Dies verwendet eine Taschenrechnerschriftart (für niedrige Entropie nur ein Byte pro Buchstabe) und einen sehr naiven Brainfuck-Compiler, der von https://codegolf.stackexchange.com/a/35801/15599 inspiriert ist (außer ich verwende Plus statt Minus) Die erste forSchleife kompiliert den Text in adie Zeichenfolge bund berechnet anhand der 13-stelligen magischen Hexadezimalzahl (alle Zeichen sind 5-8 Striche) die Anzahl der Striche, die zum Zeichnen des formatierten Codes erforderlich sind.

Angesichts der Gesamtprogrammlänge und der Strichzahl wird die Anzahl der Zeichen pro Strich berechnet (dies kann sehr klein sein, wenn die Zeichen gleich oder in aufsteigender Reihenfolge sind, und sehr groß, wenn die Zeichen in absteigender Reihenfolge sind.)

Der größte Teil des restlichen Programms widmet sich der Entscheidung, ob Leerzeichen oder einer der Striche gedruckt werden müssen. Befindet sich der Cursor über einem Strichquadrat, wird die Funktion fmit der Nummer dieses Strichs als Argument aufgerufen. Es gibt ein Leerzeichen zurück, wenn dieser Strich für den aktuellen Buchstaben nicht erforderlich ist, oder ein Zeichen aus dem Programm, wenn dies der Fall ist. Da die Anzahl der Zeichen, die zum Vervollständigen der ASCII-Grafik erforderlich sind, möglicherweise größer ist als die Zeichen im Programm, wird gelegentlich ein Leerzeichen eingefügt, daher die Berechnung b[i * v/u].

Die Schrift enthält vier Einzelstriche und vier Doppelstriche, die wie folgt nummeriert sind und je nach Buchstabe entweder vorhanden oder nicht vorhanden sind.

 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 

Ausgabe

Test unter http://copy.sh/brainfuck/

ABC

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

DEF

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

GHIJK

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

LMNOP

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

QRSTU

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

VWXYZ

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

KOPIERBAR

Bei den meisten Zeichenfolgen mit Buchstaben in zufälliger Reihenfolge (nicht aufsteigend) ist die Buchstabengröße viel größer und die Buchstaben sehen viel besser aus. Leider werden die Dateigrößen ziemlich groß. Ich kann hier nicht das vollständige Wort UCOPYRIGHTABLE hochladen. COPYABLE ist ungefähr das längste Wort, das mir erlaubt ist.

        + +++++++++ +++++++++++                         + +++++++++ +++++++++++                         ++ ++++++++ +++++++++++                                                                         +++ +.+++++ +++++++.+.+                                                                                                                         ++++ ++++.+ +++++++++++            
       +                                               +                       +                       +                       +                                               +                       +                       +                       +                                               +                                               +                                   
       +                                               +                       +                       +                       +                       +                       +                       +                       +                       +                                               +                                               +                                   
       +                                               +                       +                                               +                       +                       +                       +                       +                       +                                               +                                               +                                   
       +                                               +                       +                       +                       +                       +                       +                       +                       +                       +                                               +                                               +                                   
       +                                               +                                               +                       +                       +                       +                       +                       +                       +                                               +                                               +                                   
       +                                               +                       +                       +                       +                       +                       +                       +                       +                       +                                               +                                               +                                   
       +                                                                       +                       +                       +                       +                       +                       +                       +                       +                                               +                                               +                                   
       +                                               +                       +                       +                       +                       +                       +                       +                       +                       +                                               +                                               +                                   
                                                       +                       +                       +                       +                       +                       +                       +                       +                       +                                               +                                               +                                   
       +                                               +                       +                       +                       +                       +                       +                       +                       +                       +                                               +                                                                                   
       +                                               +                       +                       +                       +                       +                       +                       +                       +                       +                                               +                                               +                                   
                                                                                                        +++++++++ + +++++++++++                         ++++++++++  +++++++++++                         +++++++++++  ++++++++++                         +++++++++++ + +++++++++                                                                         ++++++++++. +. ++++++++            
       +                                               +                       .                       +                                                                       +                       +                       +                       +                       +                       +                       +                       +                                   
       +                                               +                                               +                                                                       +                       +                       +                       +                       +                       +                       +                       +                                   
       +                                               +                       +                       +                                                                       +                       +                       +                       +                       +                       +                       +                       +                                   
                                                       +                       +                       +                                                                       +                       +                       +                       +                       +                       +                       +                       +                                   
       +                                               +                       +                       +                                                                       +                       +                       +                       +                       +                       +                       +                                                           
       +                                               +                       +                       +                                                                       +                       +                       +                       +                       +                       +                       +                       +                                   
       +                                               +                       +                       +                                                                       +                       +                       +                       +                       +                       +                                               +                                   
       +                                               +                       +                       +                                                                       +                       +                       +                       +                       +                       +                       +                       +                                   
       +                                               +                       +                       +                                                                       +                       +                       +                       +                       +                                               +                       +                                   
       +                                               +                       +                       +                                                                       +                       +                       +                       +                       +                       +                       +                       +                                   
       +                                               +                       +                       +                                                                       +                       +                       +                       +                                               +                       +                       +                                   
        +++++++++++ +++++++ +++                         +++++++++++ ++++++++ ++                                                                         +++++++++++ +++++++++ +                                                                         +++++++++++ ++++++++++                          +++++++++++ +++++++++++                          ++++++++++ ++++++++++.            
Level River St.
quelle
8

Perl → Befunge, 868 Bytes

OK, ich werde den Ball ins Rollen bringen. Dies könnte ein bisschen mehr Golf gespielt werden, aber mein Kopf fängt an zu schmerzen ...

$_=" 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?'':' @',$/}

Beispiele:

Die kürzeren Beispiele können in Online-Dolmetscher wie diesen kopiert werden , aber UNCOPYRIGHTABLE scheint zu einem Programm zu führen, das für alle Online-Dolmetscher zu lang ist.

$ 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   >^   ^<   ^ >^>>>  >^>>>> >^>>>> 

Hinweis:

Das @Zeichen am Ende der ersten Ausgabezeile weist Befunge an, die Ausführung zu beenden. Ohne sie würde das Programm das gleiche Wort für immer wiederholen.

r3mainer
quelle
Ich mag die ASCII-Schriftart :)
Orby
3

C → Brainfuck, 855 Bytes

Einige Zeilenumbrüche wurden hinzugefügt, um die Lesbarkeit zu verbessern. Beachten Sie, dass Kleinbuchstaben und Symbole fehlerhaft sind. Testen Sie die Ausgabe hier .

#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);}}

Beispiele

Auf einem Terminal sieht es viel besser aus :(

$ ./art ABCDEFGHI

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

 $ ./art JKLMNOPQR

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

$ ./art STUVWXYZ

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

Und schlussendlich,

$ ./art UNCOPYRIGHTABLE

 +[  >+  <    +   ++]>    .>>>   >>>>>   >>  >>  >>>>>    >>>>    >+++   [[  -<  ]>>--]   <+.>   >>>>>   >>      >-[+>+ 
 <[  +<  ]>   ]  >+  ++  .>  >>  >>  >>  >+  ++  [[  -<    ]>    >-  -]  <+  +.    >>    >>  >>  >>  >>  >>      >>     
 >+  ++  [ [- <  ]>      >-  -]  <+  ++  .>  >>  >>  >>    >>    -[      +[  +<    ]>    >+  ]<  +.  >>  >>      >>     
 >>  >>  + [> +  <+      ++  ]>  --  --   +.>>   >>  >>    >>    >>      >>>>>>    >>    +[>+<+  +++++   +]      >.>>>  
 >>  -[  + [> -  --      <<  ]>  +]>-+     +.    >>>>>     >>    >> >-[  +[>---    <<    ]>+]>-  +++.>   >>      >>>>>  
 >>  >>  > >> >  +[      >+  <+  ++        ]>    --  --    ++    +.  >>  -[  +>    +<    [+  <]  >]  >+  .>      >>     
 >>  >>  >   >>  >>  >>  >>  >>  >>        >-    [+  >+    <[    +<  ]>  ]>  ++    .>    >>  >>  >>  >>  >>      >>     
  >>>>   >    >   >+[>    +<++   ++        ++    +]  >+   ++.>    >-[+   [>  --    -<    <]  >+  ]>-.>   >>>>>>  >>>>>> 
Oder von
quelle