我正在尝试提出一种好的算法,以任意数量的字符使用破折号创建带有主要和次要凹槽的right handed DNA字符串的表示形式。
这是我目前所拥有的,使用776 #
:
######### ##########
######### ##########
######### ##########
######### ##########
########## ##########
########## ##########
###### ##########
## ##########
########## #
########## #####
########## #########
########## ##########
########## ##########
########## ##########
########## ##########
########## ##########
########## ##########
########## ##########
########## ##########
########## ##########
########### ##########
######### ##########
##### ##########
# ##########
########## ###
########## #######
########## ##########
########## ##########
########## ##########
########## ##########
########## ##########
########## ##########
########## ##########
########## ##########
########## ##########
########## ##########
########## ##########
########## ##########
####### ##########
#### #########
######### #
########## ###
########### #######
但是当我手动尝试通过复制/粘贴重复螺旋时,螺旋无法完全对齐。
具有与上面示例相同的宽度但又具有碱基对交叉键(如this image或下面的围巾图案)的解决方案也是可以接受的。
最佳答案
这个问题的关键是要认识到,您可以将螺旋上的每条链表示为正弦波的组合-一个代表周期部分,另一个代表进入页面的“深度”。通过这种方式对问题进行参数化设置后,就可以控制螺旋线的各个方面。下面的示例使用*
和#
来显示不同的线来说明该点。如果您选择的波长值与整数值不相称,您得到的结果将少于最佳结果-但是现在您可以使用输入来查找您认为最美观的表示形式。
from numpy import *
amp = 10
length = 100
wavelength = 20
omega = (2*pi)/wavelength
phi = wavelength*(0.5)
X = arange(1,length)
Y1 = round_(amp*(sin(omega*X) + 1))
Y2 = round_(amp*(sin(omega*X+phi) + 1))
offset = phi/2
Z1 = sin(omega*X + offset)
Z2 = sin(omega*X + phi + offset)
T1 = " ######### "
T2 = " ********* "
clen = len(T1)
H = zeros((length,amp*2+clen),dtype='str')
H[:,:] = " "
for n,(y1,y2,z1,z2) in enumerate(zip(Y1,Y2,Z1,Z2)):
H[n,y1:y1+clen] = list(T1)
H[n,y2:y2+clen] = list(T2)
# Overwrite if first helix is on top
if z1>z2: H[n,y1:y1+clen] = list(T1)
for line in H:
print "".join(line)
这些值给出:
********* #########
********* #########
********* #########
********* #########
********* #########
********* #########
********* #########
****** #########
#########
######### ****
######### *********
######### *********
######### *********
######### *********
######### *********
######### *********
######### *********
###### *********
*********
********* ####
********* #########
********* #########
********* #########
********* #########
********* #########
********* #########
********* #########
****** #########
#########
关于python - 双螺旋生成算法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10282693/