Stampa incrociata di due stringhe


9

Dato un insieme di due corde garantite per avere la stessa lunghezza, stampa la loro croce .

La croce di due stringhe si ottiene come segue.

  1. Produce il secondo carattere della seconda stringa, quindi il primo carattere della prima stringa.
  2. Produce il primo carattere della seconda stringa, quindi il secondo carattere della prima stringa.
  3. Elimina il primo carattere di ogni stringa.
  4. Se le stringhe hanno più di un carattere ciascuna, tornare al passaggio 1.

Ad esempio, se le due stringhe sono

Truck
Tower

la croce è

oTTrwroueuwcrcek

come illustrato nel diagramma seguente.

diagramma

Ogni colore rappresenta una diversa iterazione dell'incrocio. I numeri mostrano gli indici del personaggio corrispondente nell'output.


Non dovresti accettare una risposta fino a quando almeno una settimana è trascorsa, potrebbe essere battuta in qualsiasi momento.
Pavel,

@Phoenix ok, lo terrò a mente la prossima volta (questa è stata la mia prima domanda su questo scambio di pile)
K Split X

Risposte:


6

Gelatina , 10 8 byte

żṚj@¥2\U

Provalo online!

Come funziona

żṚ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.

Wow, questo è piuttosto sorprendente
K Split X

Spiegazione, per favore?
Shaggy,

@Shaggy Ho modificato la mia risposta.
Dennis,



3

Haskell , 44 38 byte

Cancellato 44 è ancora 44

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

Leggermente meno golfato / forse un po 'più leggibile:

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

1
Curiosità: almeno sul mio browser, barrato 44 non è più 44 nell'intestazione: o
HyperNeutrino,


0

C ++ 14, 115 112 byte

Come lambda senza nome, i parametri dovrebbero essere come 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 utilizzo:

#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);
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.