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)
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)
Joh*_*ooy 20
' /\ /__\ '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
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)
我在这里得到了一个很好的提示.
Joh*_*ooy 10
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)
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)
此版本不再打印尾随换行符.只需要第一个换行符:
$_=' /\
/__\\';
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)
如果您发现改进,请随时编辑我的答案.
使用尾递归:
(%)=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)
删除换行符时为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)
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)
/\改性从罗塞塔代码溶液
(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)