Impressão cruzada de duas cordas


9

Dado um conjunto de duas cordas que garantem o mesmo comprimento, imprima a cruz .

O cruzamento de duas cordas é obtido da seguinte maneira.

  1. Rendimento o segundo caractere da segunda seqüência e, em seguida, o primeiro caractere da primeira seqüência.
  2. Rendimento o primeiro caractere da segunda seqüência e, em seguida, o segundo caractere da primeira seqüência.
  3. Descarte o primeiro caractere de cada sequência.
  4. Se as seqüências tiverem mais de um caractere cada, volte para a etapa 1.

Por exemplo, se as duas strings forem

Truck
Tower

a cruz é

oTTrwroueuwcrcek

conforme ilustrado no diagrama a seguir.

diagrama

Cada cor representa uma iteração diferente do cruzamento. Os números mostram os índices do caractere correspondente na saída.


Você não deve aceitar uma resposta até que pelo menos uma semana tenha passado, ela poderá ser vencida a qualquer momento.
Pavel

@Phoenix bem, eu vou manter isso em mente na próxima vez (esta foi a minha primeira pergunta sobre este Stackexchange)
K Dividir X

Respostas:


6

Geléia , 10 8 bytes

żṚj@¥2\U

Experimente online!

Como funciona

żṚj@¥2\U  Main link. Arguments: s, t (strings)

          Arguments:    "Truck", Tower"
ż         Ziphwith; create all pairs of corresponding characters.
          Return value: ["TT", "ro", "uw", "ce", "kr"].
     2\   Reduce each pair of adjacent strings by the quicklink to the left.
    ¥       Combine the two links to the left into a dyadic chain.
 Ṛ            Reverse the left string.
  j@          Join the second string, using the previous result as separator.
          Map:          "TT", "ro" -> join("ro", "TT") -> "rTTo"
                        "ro", "uw" -> join("uw", "or") -> "uorw"
                        etc.
          Return value: ["rTTo", "uorw", "cwue", "kecr"]
       U  Upend; reverse each string.
          Return value: ["oTTr", "wrou", "euwc", "rcek"]
          (implicit) Flatten and print.

Uau, isso é incrível
K Split X

Explicação, por favor?
Shaggy

@ Shaggy eu editei minha resposta.
Dennis



3

Haskell , 44 38 bytes

Riscado 44 ainda é 44

[_]#_=""
(a:b)#(x:y)=y!!0:a:x:b!!0:b#y

Um pouco menos golfe / talvez um pouco mais legível:

[_]      # [_]      = ""
(a:b:bs) # (x:y:ys) = y:a:x:b:((b:bs) # (y:ys))

11
Curiosidade: Pelo menos no meu navegador, o 44 riscado não é mais o 44 no cabeçalho: o
HyperNeutrino 30/17


0

C ++ 14, 115 112 bytes

Como lambda sem nome, os parâmetros devem ser como std::string:

#define P putchar(
[](auto A,auto B){for(int i=0;++i<A.size()&&i<B.size();P B[i]),P A[i-1]),P B[i-1]),P A[i]));}

Ungolfed e uso:

#include<iostream>
#include<string>

using namespace std;

#define P putchar(
auto f=
[](auto A,auto B){
 for(int i=0;
     ++i<A.size() && i<B.size();
     P B[i]),
     P A[i-1]),
     P B[i-1]),
     P A[i]));
}
;

int main(){
 string A="Truck",B="Tower";
 f(A,B);
}
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.