Skip to content

Instantly share code, notes, and snippets.

@Joseph-Bake
Last active March 8, 2020 11:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Joseph-Bake/9842fa6512c26fb0006c15bd30850ee8 to your computer and use it in GitHub Desktop.
Save Joseph-Bake/9842fa6512c26fb0006c15bd30850ee8 to your computer and use it in GitHub Desktop.
Zig-Zag Number
#ある数より前のリストl1から選ぶよ
#ある数より後ろのリストはl2だよ
def choose_l1(l1,l2,zigzaglist):
global zigzagnum,write_flag
#前のリストがなかったら終わるよ
if l1==[]:
if l2==[]:
zigzagnum +=1
return 1
else:
return 0
#前のリストがあったらその中から数をとってきてその数の前後でリストを分けるよ
for i in range(len(l1)):
ll1 = l1[:i]
ll2 = l1[i+1:]+l2
zigzaglist_temp = zigzaglist + [l1[i]]
#とってきた数より後ろのリストはl2とがっちゃんこして次は後ろのリストから選ぶよ
flag = choose_l2(ll1,ll2,zigzaglist_temp)
if flag and write_flag:
print(zigzaglist_temp)
else:
pass
#ある数より後ろのリストl2から選ぶよ
#ある数より前のリストはl1だよ
def choose_l2(l1,l2,zigzaglist):
global zigzagnum,write_flag
#後ろのリストがなかったら終わるよ
if l2==[]:
if l1==[]:
zigzagnum +=1
return 1
else:
return 0
#後ろのリストがあったらその中から数をとってきてその数の前後でリストを分けるよ
for i in range(len(l2)):
ll1 = l1+l2[:i]
ll2 = l2[i+1:]
zigzaglist_temp = zigzaglist + [l2[i]]
#とってきた数より前のリストはl1とがっちゃんこして次は前のリストから選ぶよ
flag = choose_l1(ll1,ll2,zigzaglist_temp)
if flag and write_flag:
print(zigzaglist_temp)
else:
pass
#Alt_nの計算をするよ
def zigzag(n):
global zigzagnum,write_flag
if n==0 or n==1 or n==2:
return 1
l = list(range(1,n+1))
zigzagnum = 0
#ある数を選んでその前と後ろでリストを分けて後ろのリストから選ぶよ
#ここでchoose_l2からchoose_l1と変えたらたぶんRAlt_nが計算できるよ
for i in range(n):
l1 = l[:i]
l2 = l[i+1:]
zigzaglist = [l[i]]
flag = choose_l2(l1,l2,zigzaglist)
return zigzagnum
#リストを列挙するよ :1
# しないよ :0
write_flag = 0
#Alt_nまで計算するよ
n = 11
for i in range(n+1):
print('Alt_', i , ':', zigzag(i))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment