#title: Garter Sheet (plain python)

#Write header:
print(';!knitout-2')
print(';;Machine: Kniterate')
print(';;Carriers: 1 2 3 4 5 6')

#Parameters:
min = 1 #needle number of left edge
max = 20 #needle number of right edge
rows = 20 #number of rows to knit
carrier = "3" #carrier name

# ---- set up initial loops and yarn carrier ----
#Bring in carrier:
print(f"in {carrier}")

#On Kniterate machines, carriers start on the left,
#so will start tucking onto needles left-to-right,
#and will be sure to tuck the leftmost needle in the first pass:
for n in range(min, max+1, 1):
	#tuck alternating needles, making sure to do the left edge:
	if (n - min) % 2 == 0:
		print(f"tuck + f{n} {carrier}")
#now, moving right-to-left, tuck the needles that were not tucked on the first pass:
for n in range(max, min-1, -1):
	if (n - min) % 2 != 0:
		print(f"tuck - f{n} {carrier}")

#knit three plain rows to allow cast-on stitches to relax:
# three isn't set in stone here -- it's just convenient
# for this example code to have the carrier end up on the right.
for n in range(min, max+1, 1):
	print(f"knit + f{n} {carrier}")
for n in range(max, min-1, -1):
	print(f"knit - f{n} {carrier}")
for n in range(min, max+1, 1):
	print(f"knit + f{n} {carrier}")

# ---- garter sheet ----
#Create a garter (alternating all-front-knits and all-back-knits rows) sheet:
for r in range(0, rows+1, 1):
	if r % 2 == 0:
		#knit even rows as left-going, front-knits rows:
		for n in range(max, min-1, -1):
			print(f"knit - f{n} {carrier}")
	else:
		#knit odd rows as right-going, back-knits rows:
		#move loops to back bed:
		for n in range(min, max+1, 1):
			print(f"xfer f{n} b{n}")
		#right-going, back-knits row:
		for n in range(min, max+1, 1):
			print(f"knit + b{n} {carrier}")
		#return loops to front bed:
		for n in range(min, max+1, 1):
			print(f"xfer b{n} f{n}")

# ---- take carrier out and drop remaining loops ----
#Send carrier back to its parking location:
print(f"out {carrier}")

#drop loops:
for n in range(min, max+1, 1):
	print(f"drop f{n}")
