Cordas entrelaçadas


34

Seu desafio é escrever um programa ou função que, quando recebidas duas cadeias de comprimento igual, troque todos os outros caracteres e produza / retorne as cadeias resultantes em qualquer ordem.

Exemplos

"Hello," "world!" --> "Hollo!" "werld,"
"code" "golf" --> "codf" "gole"
"happy" "angry" --> "hnpry" "aagpy"
"qwerty" "dvorak" --> "qvertk" "dworay"
"1, 2, 3" "a, b, c" --> "1, b, 3" "a, 2, c"
"3.141592653589" "2.718281828459" --> "3.111291623489" "2.748582858559"
"DJMcMayhem" "trichoplax" --> "DrMcMoylex" "tJichapham"
"Doorknob" "Downgoat" --> "Doonkoot" "Dowrgnab"
"Halloween" "Challenge" --> "Hhlloeegn" "Caallwnee"

Regras

  • As seqüências conterão apenas caracteres ASCII (32-126).
  • As strings sempre terão o mesmo comprimento e nunca estarão vazias.
  • Você pode aceitar entrada em qualquer formato adequado: parâmetros separados, itens em uma matriz, separados por uma ou mais novas linhas, até concatenadas. A única restrição é que uma string deve vir completamente antes da outra (por exemplo, a1\nb2\nc3para "abc", "123"é inválida).
  • A saída pode estar em qualquer ordem (ou seja, você pode começar a trocar do primeiro ou do segundo caractere) e em qualquer formato válido mencionado acima. (Matriz de dois itens, separada por nova linha (s), concatenada etc.)

Pontuação

Isso é , portanto o código mais curto em bytes para cada idioma vence.


11
+1 para DrMcMoylex. : D
DJMcMayhem

3
Anagramas de "Dowrgnab" para "Downgrab" (͡ ° ͜ʖ ͡ °)
Mama Fun Roll

Você deve indicar explicitamente que a regra "em qualquer ordem" significa que a troca pode começar a partir do primeiro caractere ou do segundo.
DLosc

@DrMcMoylex Pegue o código, exemplo de golfe . Se trocar a partir de segunda personagem, temos: c o d f , g o l e . A partir do primeiro caractere: g o l e, c o d f.
DLosc

Respostas:


14

Haskell, 37 bytes

l=(,):flip(,):l
(unzip.).zipWith3($)l

Fecha as duas seqüências de caracteres, alternando alternadamente os caracteres e as descompacta.

Uma alternativa recursiva de 37 bytes:

(a:b)?(c:d)=a:d?b
e?_=e
a%b=(a?b,b?a)

9

Python, 42 bytes com golfe de E / S

def f(a,b):a[1::2],b[1::2]=b[1::2],a[1::2]

Troca todos os outros caracteres das duas listas. Toma como entrada duas listas de caracteres e saídas modificando-os .

l=list('cat')
m=list('dog')    
print l,m

def f(a,b):a[1::2],b[1::2]=b[1::2],a[1::2]

f(l,m)
print l,m

['c', 'a', 't'] ['d', 'o', 'g']
['c', 'o', 't'] ['d', 'a', 'g']

1
Isso é esperto. Você vê os formatos de entrada / saída muito flexíveis?
ETHproductions

@ETHproductions Não tenho certeza, pode ser principalmente específico do Python que as listas sejam tão manipuláveis ​​quanto as strings.
Xnor

8

Vim, 18 , 17 bytes

qqyljvPkvPll@qq@q

Experimente online!

Isso usa o intérprete V devido à compatibilidade com versões anteriores. A entrada vem neste formato:

string1
string2

Explicação:

 qq                 " Start recording in register 'q'
   yl               " Yank one letter
     j              " Move down a row
      vP            " Swap the yanked letter and the letter under the cursor
        k           " Move back up a row
         vP         " Swap the yanked letter and the letter under the cursor
           ll       " Move two letters to the right. This will throw an error once we're done
             @q     " Call macro 'q' recursively
               q    " Stop recording.
                @q  " Start the recursive loop

Cortar duas letras, utilizando xem vez de yle, em seguida, molho P, em vez de segundo vP:lqqxjvPkPll@qq@q
Hauleth

@lukasz Eu tentei isso inicialmente, mas por qualquer motivo, ele executa muitas vezes e troca as últimas letras quando não deveria. Vou dar uma olhada nisso um pouco mais
DJMcMayhem


1
@ ŁukaszNiemier Esse link tem o mesmo código que eu postei. Você apertou o [save]botão? De qualquer maneira, não está funcionando para mim . A verdadeira razão disso é que, quando você é xo último caractere da linha, ele move o cursor para a esquerda, atrapalhando o posicionamento da troca.
DJMcMayhem

6

Haskell, 41 bytes

(a:b)#(c:d)=(a,c):d#b
_#_=[]
(unzip.).(#)

Retorna um par com as strings. Exemplo de uso: ( (unzip.).(#) ) "Hello," "world!"-> ("Hollo!","werld,").

Abordagem recursiva simples: pegue o primeiro caractere de cada string como um par e acrescente uma chamada recursiva com as (restantes) strings trocadas. unzipfaz um par de listas fora da lista de pares.


6

05AB1E , 11 10 bytes

øvyNFÀ}})ø

Experimente online!

Explicação

input = ["code", "golf"]usado como exemplo.

ø             # zip strings into list of pairs
              # STACK: ['cg', 'oo', 'dl', 'ef']
 vy           # for each pair
   NFÀ        # rotate left index times
      }}      # end-if, end-loop
              # STACK: 'cg, 'oo', 'dl', 'fe'
        )ø    # wrap in list and zip
              # OUTPUT: ['codf', 'gole']

5

Perl, 48 bytes

Bytecount inclui 47 bytes de código e -psinalizador.

say<>=~s%.\K(.)%"s/.{$-[0]}\\K(.)/$1/;\$1"%geer

Corra com -pe -Esinalize. Espere cada sequência em uma linha diferente:

perl -pE 'say<>=~s%.\K(.)%"s/.{$-[0]}\\K(.)/$1/;\$1"%geer' <<< "Hello
World"

Explicações :

-p: captura entrada $_e imprime no final. (para obter e imprimir a primeira string)
<>: obtenha uma linha de entrada. (para obter a segunda string).
=~: Aplicar uma expressão regular a <>: s%%%geer, onde graças ao ra cadeia modificada é devolvido (e, em seguida, impresso graças a say).
O regex:
.\K(.)localiza dois caracteres e substitui o segundo pelo resultado da avaliação deste código "s/.{$-[0]}\\K(.)/$1/;\$1":
A primeira parte s/.{$-[0]}\\K(.)/$1/aplica um regex para $_: .{$-[0]}ignora os primeiros caracteres para chegar ao mesmo ponto que o regex externo (já que $-[0]contém o índice do primeiro grupo de captura; nesse caso, o índice dos caracteres a serem substituídos) e, em seguida, capturamos um caractere com(.)e substitua-o pelo caractere do regex externo ( $1). E então adicionamos $1o resultado de Você deve ter notado que se refere ao personagem que queremos substituir nas duas strings (dois caracteres diferentes), então brincamos com o modificador da regex que avalia o lado direito da regex duas vezes: o primeiro substituirá apenas o que não é precedido pelo ."s/.{$-[0]}\\K(.)/$1/;\$1" é o personagem que capturamos no regex interno.
$1/ee$1\


5

Python, 55 bytes

lambda a,b:[(-~len(a)/2*s)[::len(a)+1]for s in a+b,b+a]

Fatiamento!

58 bytes:

def f(a,b):n=len(a);print[(s*n)[:n*n:n+1]for s in a+b,b+a]

64 bytes:

f=lambda a,b,s='',t='':a and f(b[1:],a[1:],s+a[0],t+b[0])or[s,t]

Recursivamente acumula os caracteres das duas seqüências em se t, e gera o par deles no final. A alternância é feita alternando as cadeias de entrada a cada chamada recursiva. A saída de uma sequência separada por espaço tinha o mesmo comprimento:

lambda a,b,s='',t=' ':a and f(b[1:],a[1:],s+a[0],t+b[0])or s+t

Isso venceu por pouco uma estratégia recursiva diferente de pegar caracteres alternadamente de cada corda, com cada uma das duas cordas possíveis como a primeira. (65 bytes)

g=lambda a,b:a and a[0]+g(b[1:],a[1:])
lambda a,b:(g(a,b),g(b,a))

4

MATL , 11 10 9 8 bytes

Graças à ETHproductions por 1 byte de desconto!

"@X@YS&h

Entrada é uma matriz 2D contendo as duas cadeias, tal como: ['Halloween'; 'Challenge']. As seqüências de saída estão na ordem inversa.

Experimente online!

Explicação

        % Input 2D array implicitly
"       % For each column
  @     %   Push current column
  X@    %   Push iteration index, starting at 1
  YS    %   Circularly shift the column by that amount
  &h    %   Concatenate horizontally with (concatenated) previous columns
        % End implicitly
        % Display implicitly

Versão antiga: 9 bytes

tZyP:1&YS

Explicação

        % Take input implicitly
t       % Duplicate 
        % STACK: ['Halloween'; 'Challenge'], ['Halloween'; 'Challenge']
Zy      % Size
        % STACK: ['Halloween'; 'Challenge'], [2 9]
P       % Flip array
        % STACK: ['Halloween'; 'Challenge'], [9 2]
:       % Range. Uses first element of the array as input
        % STACK: ['Halloween'; 'Challenge'], [1 2 3 4 5 6 7 8 9]
1&YS    % Circularly shift each column by those amounts respectively
        % STACK: [Caallwnee';'Hhlloeegn']
        % Display implicitly

@ETHproductions Sim! Obrigado!
Luis Mendo

4

Gelatina , 5 bytes

żṚż¥/

A entrada é como argumentos separados, a saída é concatenada.

Experimente online! ou verifique todos os casos de teste .

Como funciona

żṚż¥/  Main link. Left argument: s (string). Right argument: t (string)

ż      Zipwith; yield the array of pairs of corresponding characters of s and t.
   ¥   Combine the two links to the left into a dyadic chain:
 Ṛ         Reverse the chain's left argument.
  ż        Zip the result with the chain's right argument.
    /  Reduce the return value of the initial ż by the quicklink Ṛż¥.


3

V , 12 bytes

lòyljvPkvPll

Experimente online!

Nada muito interessante, apenas uma porta direta da minha resposta vim para que eu possa competir com (mas não vencer) 05AB1E.


3

Pyke, 9 bytes

,Fo2%I_(,

Experimente aqui!

          - o = 0
,         -   transpose(input)
 F     (  -  for i in ^:
  o2%     -    (o++ %2)
     I_   -   if ^: i = reverse(i)
        , - transpose(^)

3

JavaScript (ES6), 51 54

Editar 3 bytes salvos thx @Neil

Função com entrada / saída de array

p=>p.map((w,i)=>w.replace(/./g,(c,j)=>p[i+j&1][j]))

Eu gosto mais deste, mas é 55 (2 strings na entrada, array na saída)

(a,b)=>[...a].reduce(([p,q],c,i)=>[q+c,p+b[i]],['',''])

Teste

f=
p=>p.map((w,i)=>w.replace(/./g,(c,j)=>p[i+j&1][j]))

function go() {
  var a=A.value, b=B.value
  if (a.length == b.length)
    O.textContent = f([a,b]).join('\n')
  else
    O.textContent = '- different length -'
    
}

go()
<input id=A value='Hello,'><input id=B value='world!'>
<button onclick='go()'>go</button><pre id=O></pre>


replacepoupa 3 bytes: p=>p.map((w,i)=>w.replace(/./g,(c,j)=>a[i+j&1][j])).
Neil

2

Pitão, 8 bytes

C.e_FbkC

Experimente online: Demonstração

Transpõe as palavras, inverte cada par de letras 'índice atual' vezes, transpõe novamente.


2

JavaScript (ES6), 55 bytes

f=([c,...s],[d,...t],o="",p="")=>c?f(t,s,o+c,p+d):[o,p]

Eu queria fazer algo inteligente usando o regexp para substituir caracteres alternativos, mas isso acabou levando 67 57 bytes:

a=>a.map((s,i)=>a[+!i].replace(/.(.?)/g,(_,c,j)=>s[j]+c))

Agradável. Eu tinha f=([a,...A],[b,...B])=>a?[a+f(B,A)[0],b+f(A,B)[0]]:[""]o mesmo comprimento.
ETHproductions

Eu esperava fazer muito melhor, mas de jeito nenhum, apenas 1 a menos. Tempo para deixar um não recursiva resposta
edc65

@ edc65 Ótima idéia de usar map, ele raspou 10 bytes da minha resposta regexp. Ainda muito tempo.
Neil

2

Perl, 40 bytes

Inclui +1 para -n

Dê strings como linhas em STDIN

interlace.pl
hello
world
^D

interlace.pl

#!/usr/bin/perl -n
s/./${1&$.+pos}[pos]=$&/seg}{print@0,@1

2

Java, 132 103 100 bytes

Obrigado a Kevin Cruijssen por sugerir o retorno da matriz (entre outras melhorias) e salvar 29 bytes! Também Olivier Grégoire por 3 bytes!

char[]c(char[]s,int l){for(int o=l;o-->0;)if(o%2>0){char t=s[o];s[o]=s[l+o+1];s[l+o+1]=t;}return s;}

Chamado assim:

public static void main(String[] args) {
    System.out.println(c("Hello,world!".toCharArray(), 5)); // 5 is the length of each "String"
}

Saída:

Hollo,werld!

Aproveita o fato de que a entrada pode ser basicamente formatada de qualquer forma (neste caso, uma única matriz de caracteres de Strings que são delimitadas por vírgula) e também regras de saída bastante branda.


Olá, formato de entrada original que você chegou lá. Você pode jogar um pouco mais: char[]c(char[]s,int l){for(int o=l,t;o-->0;)if(l%2>0){t=s[l];s[l]=s[l+o+1];s[l+o+1]=(char)t;}return s;}( 103 bytes ) com a saída sendo retornada em vez de impressa diretamente. Exemplo de entrada System.out.println(c("Hello,world!".toCharArray(), 5));:; Exemplo de saída: Hollo,werld!.
9117 Kevin Crijssen #

É verdade que eu não tinha pensado em retornar a matriz de caracteres por algum motivo. Isso é ótimo!
Hypino #

O resultado deve ser Hollo!werld,e não Hollo,werld!(a pontuação está incorreta). Eu acredito que isso pode ser corrigido com um valor de entrada de 6 em vez de 5.
Olivier Grégoire

Desde que você lançou tpara char, por que não o declara diretamente no loop for como a char? Você pouparia alguns bytes ao fazê-lo.
Olivier Grégoire

Infelizmente, você não pode declarar o char dentro do inicializador de loop for, mas me inspirou a verificar se declarar o char separadamente seria menor que o elenco e, na verdade, é de 1 byte.
Hypino #

1

C, 124 bytes

main(c,v)char**v;{char a[99],b[99];for(c=0;v[1][c]^0;++c){a[c]=v[1+c%2][c];b[c]=v[2-c%2][c];}a[c]=0;b[c]=0;puts(a);puts(b);}

Ligue para:

program.exe string1 string2

O comprimento da string é limitado a 98 caracteres.


1

Oitava , 64 61 bytes

@(x)reshape(x((t=1:end)+(2*mod(t,2)-1).*(mod(t-1,4)>1)),2,[])

Função anônima que insere uma matriz de caracteres 2D com cada sequência em uma linha e produz a saída no mesmo formato.

Experimente em Ideone .


1

Raquete 208 bytes

(let((sl string->list)(ls list->string)(r reverse))(let p((s(sl s))(t(sl t))(u'())(v'())(g #t))(if(null? s)
(list(ls(r u))(ls(r v)))(p(cdr s)(cdr t)(cons(car(if g s t))u)(cons(car(if g t s))v)(if g #f #t)))))

Ungolfed:

(define (f s t)
  (let ((sl string->list)                ; create short names of fns
        (ls list->string)
        (r reverse))
    (let loop ((s (sl s))                ; convert string to lists
               (t (sl t))
               (u '())                   ; create empty new lists
               (v '())
               (g #t))                   ; a boolean flag
      (if (null? s)                      ; if done, return new lists converted back to strings
          (list (ls (r u))
                (ls (r v)))
          (loop (rest s)
                (rest t)                 ; keep adding chars to new lists alternately
                (cons (first (if g s t)) u) 
                (cons (first (if g t s)) v)
                (if g #f #t))            ; alternate the boolean flag
          ))))

Teste:

(f "abcdef" "123456")

Saída:

'("a2c4e6" "1b3d5f")

Acima é a versão recursiva.

Versão iterativa:

(let*((sl string->list)(ls list->string)(r reverse)(s(sl s))(t(sl t))(l'())(k'())(p(λ(a b g)(set! l(cons(if g a b)l))
(set! k(cons(if g b a)k)))))(for((i s)(j t)(n(in-naturals)))(p i j(if(= 0(modulo n 2)) #t #f)))(list(ls(r l))(ls(r k))))

Ungolfed:

(define (f s t)
  (let* ((sl string->list)              ; create short form of fn names
         (ls list->string)
         (r reverse)

         (s (sl s))                     ; convert strings to lists
         (t (sl t))

         (l '())                        ; create empty lists for new sequences
         (k '())

         (p (λ(a b g)                   ; fn to add chars to one or other list
              (set! l (cons (if g a b) l))
              (set! k (cons (if g b a) k)))))

    (for ((i s)(j t)(n (in-naturals)))  ; loop with both strings
          (p i j                        ; add to new lists alternately
             (if (= 0 (modulo n 2)) #t #f)))

    (list (ls (r l))                  ; convert reversed lists to strings
          (ls (r k)))))

1

PowerShell v2 +, 82 bytes

param($a,$b)$i=0;[char[]]$a|%{$c+=($_,$b[$i])[$i%2];$d+=($b[$i],$_)[$i++%2]};$c;$d

Ainda jogando golfe ... Não. Não consigo resolver isso sem usar um regex como outras respostas (vaia nos algoritmos de cópia).

Então, pegamos $ae $bcomo strings, definimos index $icomo 0, cast $acomo um chararray e enviamos através de um loop |%{...}. A cada iteração, concatenamos as cadeias de caracteres $ce $dindexamos em uma seleção de matriz (ou seja, para que alterne entre si). Então, deixamos $ce $dno gasoduto, e saída através implícita Write-Outputacontece na conclusão do programa.


1

Lit , 120 caracteres (+3 para o sinalizador -v1)

Linha dividida em 2 para facilitar a leitura:

#P::((invoke P "map" (js-bridge #W,I::(replace W (regex "." "g")
     (js-bridge #C,J::(index (index P (& (+ I J) 1)) J))))))

Requer a -v1bandeira pararun.js que algumas funções ainda não façam parte da biblioteca padrão.

Uso da amostra:

(
    (def f #P::((invoke P "map" (js-bridge #W,I::(replace W (regex "." "g")
                (js-bridge #C,J::(index (index P (& (+ I J) 1)) J)))))))
    (print (f (list "Hello," "world!")))
)

Esse tipo de destaque não passei tempo suficiente na biblioteca padrão. O uso de js-bridge/1duas vezes e a forma longa de expressão regular, bem como a invocação do mapa usando invoke/*todos contribuem para que isso seja muito mais longo do que o necessário.

Hora de trabalhar mais na minha biblioteca padrão, eu acho.


1

PHP, 79 bytes

for(;$i<=strlen(($a=$argv)[1]);$y.=$a[2-$i%2][$i++])echo$a[1+$i%2][+$i]??" $y";

Versão anterior PHP, 82 bytes

for(;$i<strlen(($a=$argv)[1]);$y.=$a[2-$i%2][$i++])$x.=$a[1+$i%2][$i];echo"$x $y";

for(...)echo$a[1+$i%2][$i];echo" $y";(-2)
Tito

a construção do comentário de Titus for(;$i<=strlen(($a=$argv)[1]);$y.=$a[2-$i%2][$i++])echo$a[1+$i%2][$i]??" $y";é mais -2, embora exija php 7 #
user59178 2/16

@ user59178 bom, mas você precisa de 1 Byte mais
Jörg Hülsermann

você? ele trabalha para mim, você é só pegar umNotice: String offset cast occurred in Command line code on line 1
user59178

@ user59178 Sim, para imprimir a primeira letra da primeira palavra
Jörg Hülsermann 02/11/16

1

C, 54 52 bytes

f(char*a,char*b,char*c){while(*c++=*a++,*c++=*b++);}

Assume a saída c já tenha o comprimento desejado.

Uso:

main(){
 char a[]="123456";
 char b[]="abcdef";
 char c[sizeof(a)+sizeof(b)-1];
 f(a,b,c);
 puts(c);

}

Se você insistir em criar a saída, aqui está uma solução de 91 bytes :

char*g(char*a,char*b){char*c=malloc(2*strlen(a)),*d=c;while(*c++=*a++,*c++=*b++);return d;}

Uso:

main(){
 char a[]="123456";
 char b[]="abcdef";
 puts(g(a,b));
}

0

C, 150 bytes

Eu usei as omissões típicas dos arquivos de cabeçalho e main()o tipo de retorno e a declaração de retorno. Ele lança um aviso, mas é compilado sem problemas. Também usei um truque específico do GCC que permite declarações de matriz com expressões variáveis.

O programa espera as seqüências de caracteres da linha de comando e, como tal, o programa deve ser executado com ./a.out string1 string2.

main(int a,char**v){int x=strlen(v[1]);char s[x],t[x],c;strcpy(s,v[1]);strcpy(t,v[2]);for(a=0;a<x;++a)if(a%2)c=s[a],s[a]=t[a],t[a]=c;puts(s),puts(t);}

Ou mais legível,

main(int a,char**v){
    int x=strlen(v[1]);
    char s[x],t[x],c;
    strcpy(s,v[1]);strcpy(t,v[2]);
    for(a=0;a<x;++a)
        if(a%2)c=s[a],s[a]=t[a],t[a]=c;
    puts(s),puts(t);
}

0

Mathematica, 51 bytes

Recebe a entrada como uma matriz de duas matrizes de caracteres, com saída no mesmo formato. A função simplesmente constrói a nova matriz usando uma operação (mod 2).

Table[#[[Mod[j+i,2]+1,j]],{i,2},{j,Length@#[[1]]}]&

0

QBasic 4.5, 172 bytes

Ouch, este fica doloroso com o velho QBasic ...

DEFSTR A-D:INPUT A,B
IF LEN(A)MOD 2=1 THEN A=A+" ":B=B+" "
FOR x=1 TO LEN(A) STEP 2
C=C+MID$(A,x,1)+MID$(B,x+1,1):D=D+MID$(B,x,1)+MID$(A,x+1,1):NEXT:?RTRIM$(C),RTRIM$(D)

Curiosidade: Usar DEFSTRmais bytes salvos do que custa, porque agora eu poderia usar em Avez de a$.


0

QBIC , 112 bytes

O QBIC pode otimizar grande parte do padrão do QBasic, mas o MID$mecanismo principal ainda precisa ser feito no QBasic porque o QBIC não possui uma função de substring. Ainda assim, me salva 60 bytes.

;;_LA|~a%2=1|A=A+@ | B=B+C][1,a,2|X=X+$MID$(A$,b,1)+MID$(B$,b+1,1):Y$=Y$+MID$(B$,b,1)+MID$(A$,b+1,1)|]?_tX|,_tY|

MIND$=> MIN$no texto.
Não que Charles seja o

0

Java, 68 bytes

(a,b)->{for(int i=a.length;--i>0;){char t=a[--i];a[i]=b[i];b[i]=t;}}

Ungolfed and testing

import java.util.Arrays;
import java.util.Collection;
import java.util.function.BiConsumer;

public class Main {

  static BiConsumer<char[], char[]> func = (left, right) -> {
      for (int i = left.length; --i > 0;) {
        char temp = left[--i];
        left[i] = right[i];
        right[i] = temp;
      }
    };

  public static void main(String[] args) {
    test("Hello,","world!", "Hollo!", "werld,");
    test("code", "golf", "codf", "gole");
    test("happy", "angry", "hnpry", "aagpy");
  }

  private static void test(String left, String right, String x, String y) {
    char[] leftChars = left.toCharArray();
    char[] rightChars = right.toCharArray();
    func.accept(leftChars, rightChars);
    Collection mixed = Arrays.asList(new String(leftChars), new String(rightChars));
    if (mixed.containsAll(Arrays.asList(x, y))) {
      System.out.println("OK");
    } else {
      System.out.printf("NOK: %s, %s -> %s%n", left, right, mixed);
    }
  }
}

0

APL, 12

{↓(⍳⍴⊃⍵)⊖↑⍵}

Explicação: {...} define uma função, ⍵ é o argumento correto. A tomada (↑) cria uma matriz com as duas cadeias e depois gira cada coluna (⊖) n vezes, onde n é a parte entre parênteses (⍳⍴⊃⍵). Isso é definido como o valor mínimo do comprimento do primeiro argumento. (Ex: comprimento = 5 ==> 1 2 3 4 5). Então a primeira coluna é girada uma vez, a segunda duas vezes (voltando às posições originais), a terceira coluna três vezes, etc ...

Experimente em tryapl.org

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.