Страницы

Поиск по вопросам

понедельник, 30 декабря 2019 г.

Последовательное чередование символов в строке

#python #linux #perl


Строки разной произвольной длины, различные символы. Как выполнить сдвиг символов
строки на один символ и  последовательно перебрать все варианты, чтобы на выходе из
строки 1a2b3c получить:

1a2b3c
a2b3c1
2b3c1a
b3c1a2
3c1a2b
c1a2b3


Требуется включить подобный скрипт в трубе в терминале средствами Unix ToolBox, Python,
Perl. 
    


Ответы

Ответ 1



На Питоне: import collections dq = collections.deque("1a2b3c") for __ in range(len(dq)): print("".join(dq)) dq.rotate(-1) Вывод: 1a2b3c a2b3c1 2b3c1a b3c1a2 3c1a2b c1a2b3 Объяснение: Объекты типа deque (double queue - двойная очередь, очередь с двумя концами) имеют метод rotate() (вращай), который делает точно то, что вы хотите, когда его параметр -1. (Положительные числа - вращение вправо, отрицательные - вращение влево.) Так что dq содержит одиночные символы заданной строки, нужно их перед печатей превратить в строку ("".join()).

Ответ 2



s = "1a2b3c" for _ in range(len(s)): print(s) s = s[1:] + s[0] 1a2b3c a2b3c1 2b3c1a b3c1a2 3c1a2b c1a2b3

Ответ 3



val = '1a2b3c' [ val[i:len(val)]+val[0:i] for i in range(len(val))] ['1a2b3c', 'a2b3c1', '2b3c1a', 'b3c1a2', '3c1a2b', 'c1a2b3']

Ответ 4



#!/usr/bin/perl use Modern::Perl; my @chars = qw(1 a 2 b 3 c); # OR # my $s = '1a2b3c' # или из любого источника; # my @chars = split //, $s; while(1) { say @chars; push @chars, shift @chars; }

Ответ 5



use strict; use warnings; my $str = '1a2b3c'; my $len = length($str) -1; for(0..$len){ $str =~ s/(.)(.{$len})/$2$1/; print "$str\n"; } a2b3c1 2b3c1a b3c1a2 3c1a2b c1a2b3 1a2b3c

Ответ 6



Bash: echo "a1b2c3" | xargs -i@ bash -c 'seq $(($(expr length @-))) | sed -z "s/[0-9]*\n/@/g;s/$/\n/" | grep -oE .{$(($(expr length @-)))}' Работает не совсем корректно: a1b2c3a 1b2c3a1 b2c3a1b 2c3a1b2 c3a1b2c 3a1b2c3

Ответ 7



Oldscool style :) #!/usr/bin/perl $chars = '1a2b3c'; my @chars = split(//,$chars); $\="\n"; foreach $i (@chars){ print @chars; push @chars, shift @chars; }

Ответ 8



Еще вариант Perl => С использованием функции substr(): #!/usr/bin/perl $chars = '1a2b3c'; $\="\n"; for (my $i=0;$i

Ответ 9



Perl с использованием regex (уже было но можно попроще): #!/usr/bin/perl $chars = '1a2b3c'; $\="\n"; for (my $i=0;$i

Ответ 10



Python: s = "1a2b3c" for i in range(len(s)): s=print(s) or s[1:]+s[:1] Или одной строкой: print([(s[i+1:len(s)]+s[0:i+1]) for i in range(len(s))])

Комментариев нет:

Отправить комментарий