@useers

Как сделать вывод массива со сдвигом?

Есть байтовый массив, к примеру:

[aa,bb,cc,dd,ee,ff,gg,hh,ii,jj,kk,ll,mm,nn,oo,pp,qq,rr,ss,tt,uu,vv,ww,xx,yy,zz,00,11,22,33,44,55,66,77,88,99,00]

Нужно вывести каждую строку массива c определенной длиной, сдвигаясь влево на одну позицию.
На Python2 есть рабочее решение (правда пример со строкой, но это не важно):
def show(text, maximum):
	text = '' * maximum + text
	for i in range(len(text)):
		a = text[i:i+maximum]                                		
	        print a    	    

text = 'aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz0011223344556677889900'

show(text, 30)

Вывод:
aabbccddeeffgghhiijjkkllmmnnoo
abbccddeeffgghhiijjkkllmmnnoop
bbccddeeffgghhiijjkkllmmnnoopp
bccddeeffgghhiijjkkllmmnnooppq
ccddeeffgghhiijjkkllmmnnooppqq
cddeeffgghhiijjkkllmmnnooppqqr
ddeeffgghhiijjkkllmmnnooppqqrr
deeffgghhiijjkkllmmnnooppqqrrs
eeffgghhiijjkkllmmnnooppqqrrss
effgghhiijjkkllmmnnooppqqrrsst
ffgghhiijjkkllmmnnooppqqrrsstt
fgghhiijjkkllmmnnooppqqrrssttu
gghhiijjkkllmmnnooppqqrrssttuu
ghhiijjkkllmmnnooppqqrrssttuuv
hhiijjkkllmmnnooppqqrrssttuuvv
hiijjkkllmmnnooppqqrrssttuuvvw
iijjkkllmmnnooppqqrrssttuuvvww
ijjkkllmmnnooppqqrrssttuuvvwwx
jjkkllmmnnooppqqrrssttuuvvwwxx
jkkllmmnnooppqqrrssttuuvvwwxxy
kkllmmnnooppqqrrssttuuvvwwxxyy
kllmmnnooppqqrrssttuuvvwwxxyyz
llmmnnooppqqrrssttuuvvwwxxyyzz
lmmnnooppqqrrssttuuvvwwxxyyzz0
mmnnooppqqrrssttuuvvwwxxyyzz00
mnnooppqqrrssttuuvvwwxxyyzz001
nnooppqqrrssttuuvvwwxxyyzz0011
nooppqqrrssttuuvvwwxxyyzz00112
ooppqqrrssttuuvvwwxxyyzz001122
oppqqrrssttuuvvwwxxyyzz0011223
ppqqrrssttuuvvwwxxyyzz00112233
pqqrrssttuuvvwwxxyyzz001122334
qqrrssttuuvvwwxxyyzz0011223344
qrrssttuuvvwwxxyyzz00112233445
rrssttuuvvwwxxyyzz001122334455
rssttuuvvwwxxyyzz0011223344556
ssttuuvvwwxxyyzz00112233445566
sttuuvvwwxxyyzz001122334455667
ttuuvvwwxxyyzz0011223344556677
tuuvvwwxxyyzz00112233445566778
uuvvwwxxyyzz001122334455667788
uvvwwxxyyzz0011223344556677889
vvwwxxyyzz00112233445566778899
vwwxxyyzz001122334455667788990
wwxxyyzz0011223344556677889900

Как сделать такое в Go (и со строкой и с байтовым массивом) ?
  • Вопрос задан
  • 145 просмотров
Решения вопроса 1
@falconandy
1. Строка text = '' * maximum + text выглядит бесполезной - для чего пустую строку пытаться реплицировать?
2. Выхлоп вашего скрипта (на Python 3, но это не должно вроде влиять) отличается от вами приведенного. Не хватает укорачивания строк:
...
wxxyyzz0011223344556677889900
xxyyzz0011223344556677889900
xyyzz0011223344556677889900
yyzz0011223344556677889900
yzz0011223344556677889900
zz0011223344556677889900
z0011223344556677889900
0011223344556677889900
011223344556677889900
11223344556677889900
1223344556677889900
223344556677889900
23344556677889900
3344556677889900
344556677889900
44556677889900
4556677889900
556677889900
56677889900
6677889900
677889900
77889900
7889900
889900
89900
9900
900
00
0

3. Для текущей версии аналог на Go:
package main

func main() {
	text := "aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz0011223344556677889900"
	show(text, 30)
}

func show(text string, maximum int) {
	for i := range text {
		if i+maximum < len(text) {
			println(text[i : i+maximum])
		} else {
			println(text[i:])
		}
	}
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы