Code Golf:Sierpinski的三角形

Lir*_*una 37 language-agnostic code-golf rosetta-stone

挑战

最短的代码,按字符计数输出由以下ASCII三角形构成的Sierpinski三次N次迭代的ASCII表示:

 /\
/__\
Run Code Online (Sandbox Code Playgroud)

输入是一个正数.

测试用例

Input:
    2
Output:
       /\
      /__\
     /\  /\
    /__\/__\
Run Code Online (Sandbox Code Playgroud)
Input:
    3
Output:
           /\
          /__\
         /\  /\
        /__\/__\
       /\      /\
      /__\    /__\
     /\  /\  /\  /\
    /__\/__\/__\/__\
Run Code Online (Sandbox Code Playgroud)
Input:
    5
Output:
                                   /\
                                  /__\
                                 /\  /\
                                /__\/__\
                               /\      /\
                              /__\    /__\
                             /\  /\  /\  /\
                            /__\/__\/__\/__\
                           /\              /\
                          /__\            /__\
                         /\  /\          /\  /\
                        /__\/__\        /__\/__\
                       /\      /\      /\      /\
                      /__\    /__\    /__\    /__\
                     /\  /\  /\  /\  /\  /\  /\  /\
                    /__\/__\/__\/__\/__\/__\/__\/__\
                   /\                              /\
                  /__\                            /__\
                 /\  /\                          /\  /\
                /__\/__\                        /__\/__\
               /\      /\                      /\      /\
              /__\    /__\                    /__\    /__\
             /\  /\  /\  /\                  /\  /\  /\  /\
            /__\/__\/__\/__\                /__\/__\/__\/__\
           /\              /\              /\              /\
          /__\            /__\            /__\            /__\
         /\  /\          /\  /\          /\  /\          /\  /\
        /__\/__\        /__\/__\        /__\/__\        /__\/__\
       /\      /\      /\      /\      /\      /\      /\      /\
      /__\    /__\    /__\    /__\    /__\    /__\    /__\    /__\
     /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\
    /__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\/__\
Run Code Online (Sandbox Code Playgroud)

代码计数包括输入/​​输出(即完整程序).

eph*_*ent 27

Ĵ

46个字符,从标准输入读取.

(,.~,~[,.~' '$~#,#)^:(<:".1!:1]3)' /\',:'/__\'

\n总是划分句子,这使得它无法适应S 3(只有54个字符可以玩).S 4在162处有点大,所以我将它填充以适应.偶然的,/\是一个合法的副词.☺

               /\
              i=:3
             /\  /\
            %r=:1!:1
           /\      /\
          t=:]    [r+i
         /\  /\  /\  /\
        b=:' /\',:'/__\'
       /\              /\
      i=:1            -".t
     /\  /\          /\  /\
    h=:(' '$        ~#,#),.]
   /\      /\      /\      /\
  s=:(    h^:1    ,d=:    ,.~)
 /\  /\  /\  /\  /\  /\  /\  /\
(,,&(10{a.)"1[s^:(-i)b)(1!:2)(4)

  • 哇,那里有两个困倦的表情符号(`〜,~`)和一个微笑的表情符号!(`=]`).这太可爱了! (8认同)
  • 这是60个字符.挑战要求完整的计划. (5认同)

mob*_*mob 24

对不起,我来晚了.这是基于A. Rex的Perl解决方案:

                           &I                               
                          ;for                              
                         $x  (2                             
                        ..<>){$E                            
                       .=      $E                           
                      ;my$    y;3*                          
                     33  +3  **  3;                         
                    s".+"$y.=$n.$&x2                        
                   ,$              E.                       
                  $&.$            E"ge                      
                 ;;  $_          .=  $y                     
                }print;;        sub I{($                    
               E,      $n      ,$      F,                   
              $B,$    U)=(    $",$    /,qw                  
             (/   \   _  ))  ;$  _=  $E  .$                 
            F.$B.$E.$n.$F.$U.$U.$B};33333333                
Run Code Online (Sandbox Code Playgroud)

  • 我打算为golfscript做这个,但我没有足够的角色 (4认同)

Joh*_*ooy 20

Golfscript - 46

' /\ /__\ '4/{).+: ;.{ \ ++}%\{.+}%+~ ]}@~(*n*
Run Code Online (Sandbox Code Playgroud)

Golfscript - 47

' /\ /__\ '4/): ;{  +: ;.{ \ ++}%\{.+}%+}@~(*n*
Run Code Online (Sandbox Code Playgroud)

Golfscript - 48

' ': '/\ /__\\'+4/{2 *: ;.{ \ ++}%\{.+}%+}@~(*n*
Run Code Online (Sandbox Code Playgroud)

Golfscript - 51

~' ': '/\ /__\\'+4/\(,{;2 *: ;.{ \ ++}%\{.+}%+}%;n*
Run Code Online (Sandbox Code Playgroud)

与我的较短python(和ruby)答案相同的算法

Golfscript - 78

2\~(?,{-1*}$1: ;{"  ":$*. 2base.{[$$+' /\ ']=}%n+@@{[$$+"/__\\"]=}%n .2*^: ;}%
Run Code Online (Sandbox Code Playgroud)

与我更长的python解决方案相同的算法

这个有重要的新线

2\~(?,{-1*}$1: ;{"  ":
*. 2base.{[
2*' /\ ']=}%n+@@{[
2*"/__\\"]=}%n .2*^: ;}%
Run Code Online (Sandbox Code Playgroud)


小智 16

去吧,273个字符

package main
import(f"fmt";"os";s"strconv";)func main(){var
t=[2]string{" /\\ ","/__\\"};
n,_:=s.Atoi(os.Args[1]);a:=1;N:=a<<uint(n);for
N>0{N-=2;for
k:=0;k<2;k++{for
j:=0;j<N;j++{f.Print(" ")}b:=a;for
b>0{o:=t[k];if
b&1==0{o="    "}f.Print(o);b>>=1}f.Print("\n")}a^=a*2}}
Run Code Online (Sandbox Code Playgroud)

空白是重要的.

未经宣传gofmt sierpinski-3.go | perl -p -e's/\t/ /g':

package main

import (
    "fmt";
    "os";
    "strconv";
)

func main() {
    var t = [2]string{" /\\ ", "/__\\"};
    n, _ := strconv.Atoi(os.Args[1]);
    a := 1;
    N := a << uint(n);
    for N > 0 {
        N -= 2;
        for k := 0; k < 2; k++ {
            for j := 0; j < N; j++ {
                fmt.Print(" ")
            }
            b := a;
            for b > 0 {
                o := t[k];
                if b&1 == 0 {
                    o = "    "
                }
                fmt.Print(o);
                b >>= 1;
            }
            fmt.Print("\n");
        }
        a ^= a * 2;
    }
}
Run Code Online (Sandbox Code Playgroud)

我在这里得到了一个很好的提示.

  • 我猜"Go"并不是"高尔夫语言"的缩写 (5认同)
  • 我不知道Turbo Pascal,但是Go`x:= 1`是`var x int = 1`的缩写,而`y:="moo"`是`var y string ="moo"`的缩写.它从变量中拉出类型. (5认同)

Joh*_*ooy 10

Python - 102

a=" /\ ","/__\\"
j=' '
for n in~-input()*j:j+=j;a=[j+x+j for x in a]+[x*2for x in a]
print"\n".join(a)
Run Code Online (Sandbox Code Playgroud)

Python - 105

a=" /\ ","/__\\"
j=' '
for n in(input()-1)*j:j+=j;a=[j+x+j for x in a]+[x+x for x in a]
print"\n".join(a)
Run Code Online (Sandbox Code Playgroud)

Python - 109

a=" /\ ","/__\\"
for n in range(1,input()):j=' '*2**n;a=[j+x+j for x in a]+[x+x for x in a]
print"\n".join(a)
Run Code Online (Sandbox Code Playgroud)

Python2.6 - 120

N=1<<input()
a=1
while N:
 N-=2
 for s in" /\ ","/__\\":print' '*N+bin(a)[2:].replace('0',' '*4).replace('1',s)
 a=a^a*2
Run Code Online (Sandbox Code Playgroud)


A. *_*Rex 9

Perl,82杆

此版本不再打印尾随换行符.只需要第一个换行符:

$_=' /\ 
/__\\';
for$x(2..<>){
my$y;
$".=$";
s#.+#$y.=$/.$&x2,$".$&.$"#ge;
$_.=$y
}
print
Run Code Online (Sandbox Code Playgroud)

如果允许命令行开关,那么通过传统的Perl高尔夫球得分,这是77 + 3杆(第一个换行是字面的):

#!perl -p
$\=' /\ 
/__\\';
$y="",
$".=$",
$\=~s#.+#$y.=$/.$&x2,$".$&.$"#ge,
$\.=$y
for 2..$_
Run Code Online (Sandbox Code Playgroud)

如果您发现改进,请随时编辑我的答案.


com*_*orm 8

Haskell,153 149 137 125 118 112个字符:

使用尾递归:

(%)=zipWith(++)
p="  ":p
g t _ 1=t
g t s(n+1)=g(s%t%s++t%t)(s%s)n
main=interact$unlines.g[" /\\ ","/__\\"]p.read
Run Code Online (Sandbox Code Playgroud)

早期版本,@ 118个字符:

(%)=zipWith(++)
f 1=[" /\\ ","/__\\"]
f(n+1)=s%t%s++t%t where t=f n;s=replicate(2^n)' ':s
main=interact$unlines.f.read
Run Code Online (Sandbox Code Playgroud)

使用(刚刚弃用!)n + k模式保存了4个字符.

我喜欢它是如何在压缩形式的中途可读.

编辑:老主

main=do{n<-getLine;putStr$unlines$f$read n}
Run Code Online (Sandbox Code Playgroud)


eph*_*ent 7

Perl的

删除换行符时为94个字符.

$c=2**<>;$\=$/;for$a(0..--$c){print$"x($c-$a&~1),
map$_*2&~$a?$"x4:$a&1?'/__\\':' /\ ',0..$a/2}
Run Code Online (Sandbox Code Playgroud)


Joh*_*ooy 7

红宝石 - 85

a=' /\ ','/__\\'
j=' '
2.upto(gets.to_i){j+=j;a=a.map{|x|j+x+j}+a.map{|x|x+x}}
puts a
Run Code Online (Sandbox Code Playgroud)


101个字符- /\改性从罗塞塔代码溶液

(a=2**gets.to_i).times{|y|puts" "*(a-y-1)+(0..y).map{|x|~y&x>0?'  ':y%2>0?x%2>0?'_\\':'/_':'/\\'}*''}
Run Code Online (Sandbox Code Playgroud)