Ciągi z przeplotem

34

Wyzwanie polega na napisaniu programu lub funkcji, która, gdy otrzyma dwa ciągi o równej długości, zamienia każdy inny znak i wyświetla / zwraca otrzymane ciągi w dowolnej kolejności.

Przykłady

"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"

Zasady

  • Ciągi będą zawierać tylko znaki ASCII (32-126).
  • Ciągi będą zawsze tej samej długości i nigdy nie będą puste.
  • Możesz zaakceptować dane wejściowe w dowolnym odpowiednim formacie: oddzielne parametry, elementy w tablicy, oddzielone jedną lub kilkoma znakami nowej linii, nawet połączone. Jedynym ograniczeniem jest to, że jeden ciąg musi w pełni się przed innymi (np a1\nb2\nc3za "abc", "123"to nieważne).
  • Dane wyjściowe mogą być w dowolnej kolejności (tzn. Możesz rozpocząć zamianę od pierwszego lub drugiego znaku) i w dowolnym prawidłowym formacie wymienionym powyżej. (Tablica 2-elementowa, oddzielona znakiem nowego wiersza, połączona itp.)

Punktacja

To jest , więc wygrywa najkrótszy kod w bajtach dla każdego języka.

ETHprodukcje
źródło
11
+1 dla DrMcMoylex. : D
DJMcMayhem
3
Anagramy „Dowrgnab” do „Downgrab” (͡ ° ͜ʖ ͡ °)
Mama Fun Roll
Należy wyraźnie zaznaczyć, że reguła „w dowolnej kolejności” oznacza, że ​​zamiana może zaczynać się od pierwszego znaku lub drugiego.
DLosc
@DrMcMoylex Weź kod, przykład golfa . Jeśli zamieniamy zaczynając od drugiego znaku, otrzymujemy: c o d f , g o l e . Począwszy od pierwszego znaku: g o l e, c o d f.
DLosc

Odpowiedzi:

14

Haskell, 37 bajtów

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

Zipuje dwa ciągi, na przemian zamieniając znaki, a następnie rozpina je.

37-bajtowa rekurencyjna alternatywa:

(a:b)?(c:d)=a:d?b
e?_=e
a%b=(a?b,b?a)
xnor
źródło
9

Python, 42 bajty z golfem we / wy

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

Zamienia każdą inną postać z dwóch list. Pobiera na wejściu dwie listy znaków i wysyła je poprzez ich modyfikację .

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

daje

['c', 'a', 't'] ['d', 'o', 'g']
['c', 'o', 't'] ['d', 'a', 'g']
xnor
źródło
1
To sprytne. Czy uważasz, że formaty wejścia / wyjścia są zbyt elastyczne?
ETHproductions
@ETHproductions Nie jestem pewien, może być w większości specyficzne dla Pythona, że ​​listami można manipulować znacznie bardziej niż napisami.
xnor
8

Vim, 18 , 17 bajtów

qqyljvPkvPll@qq@q

Wypróbuj online!

Używa interpretera V ze względu na kompatybilność wsteczną. Dane wejściowe są w tym formacie:

string1
string2

Wyjaśnienie:

 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
DJMcMayhem
źródło
Wytnij dwie litery, używając xzamiast, yla następnie jus Pzamiast drugiej vP:lqqxjvPkPll@qq@q
Hauleth
@lukasz Na początku próbowałem, ale z jakiegokolwiek powodu uruchamia to zbyt wiele razy i zamienia ostatnie litery, gdy nie powinno.
Przyjrzę
Działa dla mnie v.tryitonline.net/…
Hauleth
1
@ ŁukaszNiemier Ten link ma ten sam kod, co napisałem. Nacisnąłeś [save]przycisk? Tak czy inaczej, to nie działa dla mnie . Prawdziwym powodem jest to, że kiedy jesteś xostatnim znakiem w linii, przesuwa on kursor w lewo, zaburzając miejsce zamiany.
DJMcMayhem
6

Haskell, 41 bajtów

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

Zwraca parę z ciągami znaków. Przykład użycia: ( (unzip.).(#) ) "Hello," "world!"-> ("Hollo!","werld,").

Proste podejście rekurencyjne: weź pierwszy znak każdego ciągu jako parę i dołącz wywołanie rekurencyjne z zamienionymi (resztą) ciągami. unziptworzy parę list z listy par.

nimi
źródło
6

05AB1E , 11 10 bajtów

øvyNFÀ}})ø

Wypróbuj online!

Wyjaśnienie

input = ["code", "golf"]użyty jako przykład.

ø             # 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']
Emigna
źródło
5

Perl, 48 bajtów

Liczba bajtów zawiera 47 bajtów kodu i -pflagi.

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

Uruchom z -pi -Eflag. Oczekuj każdego łańcucha w innym wierszu:

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

Objaśnienia :

-p: przechwytuj dane wejściowe $_i drukuje je na końcu. (aby pobrać i wydrukować pierwszy ciąg)
<>: uzyskaj wiersz danych wejściowych. (aby uzyskać drugi ciąg).
=~: Zastosować regex <>: s%%%geer, gdzie dzięki rzwracana jest zmodyfikowany ciąg (a następnie drukowane dzięki say).
Wyrażenie regularne:
.\K(.)znajduje dwa znaki i zastępuje drugi wynikiem oceny tego kodu "s/.{$-[0]}\\K(.)/$1/;\$1":
Pierwsza część s/.{$-[0]}\\K(.)/$1/stosuje wyrażenie regularne do $_: .{$-[0]}pomija pierwsze znaki, aby dostać się do tego samego punktu, co wyrażenie regularne (ponieważ $-[0]zawiera indeks pierwszej grupy przechwytywania, czyli w takim przypadku indeks znaków do zastąpienia), a następnie przechwytujemy znak za pomocą(.)i zamień go na znak regex zewnętrzny ( $1). A potem dodajemy, $1więc wynikiem "s/.{$-[0]}\\K(.)/$1/;\$1"jest postać, którą złapaliśmy w wewnętrznym wyrażeniu regularnym.
Być może zauważyłeś, że $1odnoszą się one do znaku, który chcemy zastąpić w obu ciągach (czyli dwóch różnych znakach), dlatego gramy z /eemodyfikatorem wyrażenia regularnego, który ocenia prawą stronę wyrażenia dwa razy: pierwszy zastąpi tylko to, $1co jest poprzedzone przez \.

Dada
źródło
5

Python, 55 bajtów

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

Krajanie na plastry!

58 bajtów:

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

64 bajty:

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

Rekurencyjnie gromadzi znaki dwóch ciągów do si t, i wysyła ich parę na końcu. Zmiana odbywa się poprzez przełączanie ciągów wejściowych każdego połączenia rekurencyjnego. Wyjście łańcucha rozdzielanego spacjami miało tę samą długość:

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

To wąsko pokonało inną strategię rekurencyjną polegającą na naprzemiennym pobieraniu znaków z każdego ciągu, przy czym każdy z dwóch możliwych ciągów był pierwszy. (65 bajtów)

g=lambda a,b:a and a[0]+g(b[1:],a[1:])
lambda a,b:(g(a,b),g(b,a))
xnor
źródło
4

MATL , 11 10 9 8 bajtów

Dzięki produktom ETH za 1 bajt off!

"@X@YS&h

Wejście znajduje się tablica 2D zawierające dwa ciągi, takich jak: ['Halloween'; 'Challenge']. Łańcuchy wyjściowe są w odwrotnej kolejności.

Wypróbuj online!

Wyjaśnienie

        % 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

Stara wersja: 9 bajtów

tZyP:1&YS

Wyjaśnienie

        % 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
Luis Mendo
źródło
@ETHproductions Tak! Dziękuję Ci!
Luis Mendo
4

Galaretka , 5 bajtów

żṚż¥/

Dane wejściowe są osobnymi argumentami, dane wyjściowe są konkatenowane.

Wypróbuj online! lub zweryfikuj wszystkie przypadki testowe .

Jak to działa

żṚż¥/  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 Ṛż¥.
Dennis
źródło
4

Galaretka , 9 8 6 bajtów

Dzięki Dennis za oszczędność 2 bajtów!

Zṙ"J$Z

Używa kodowania Jelly .

Wypróbuj online!

Adnan
źródło
Możesz użyć ṙ"J$zamiast Ėṙ@/€. Oddzielenie łańcucha nie jest również wymagane, więc możesz upuścić Y.
Dennis
@Dennis Ahh, to fajnie. Dzięki! :)
Adnan
3

V , 12 bajtów

lòyljvPkvPll

Wypróbuj online!

Nic ciekawego, tylko bezpośredni port mojej odpowiedzi vima, abym mógł konkurować z (ale nie pokonałem) 05AB1E.

DJMcMayhem
źródło
3

Pyke, 9 bajtów

,Fo2%I_(,

Wypróbuj tutaj!

          - o = 0
,         -   transpose(input)
 F     (  -  for i in ^:
  o2%     -    (o++ %2)
     I_   -   if ^: i = reverse(i)
        , - transpose(^)
niebieski
źródło
3

JavaScript (ES6), 51 54

Edytuj 3 bajty zapisane thx @Neil

Funkcja z tablicą wejścia / wyjścia

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

Jeszcze mi się podoba, ale jest 55 (2 ciągi wejściowe, tablica wyjściowa)

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

Test

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>

edc65
źródło
replaceoszczędza 3 bajty: p=>p.map((w,i)=>w.replace(/./g,(c,j)=>a[i+j&1][j])).
Neil,
2

Pyth, 8 bajtów

C.e_FbkC

Wypróbuj online: demonstracja

Transponuje słowa, odwraca czasy bieżących indeksów każdej pary liter, transponuje ponownie.

Jakube
źródło
2

JavaScript (ES6), 55 bajtów

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

Chciałem zrobić coś sprytnego, używając wyrażenia regularnego do zamiany alternatywnych znaków, ale ostatecznie zajęło to 67 57 bajtów:

a=>a.map((s,i)=>a[+!i].replace(/.(.?)/g,(_,c,j)=>s[j]+c))
Neil
źródło
Miły. Miałem f=([a,...A],[b,...B])=>a?[a+f(B,A)[0],b+f(A,B)[0]]:[""]taką samą długość.
ETHprodukcje
Miałem nadzieję, że zrobię dużo lepiej, ale nie ma mowy, tylko 1 mniej. Czas opublikować nierekurencyjną odpowiedź
edc65
@ edc65 Fajny pomysł w użyciu map, to ogoliłem 10 bajtów z mojej odpowiedzi wyrażenia regularnego . Ale wciąż za długo.
Neil,
2

Perl, 40 bajtów

Obejmuje +1 dla -n

Podaj ciągi jako linie na STDIN

interlace.pl
hello
world
^D

interlace.pl

#!/usr/bin/perl -n
s/./${1&$.+pos}[pos]=$&/seg}{print@0,@1
Ton Hospel
źródło
2

Java, 132 103 100 bajtów

Podziękowania dla Kevina Cruijssena za zasugerowanie zwrotu tablicy (między innymi ulepszeniami) i oszczędność 29 bajtów! Również Olivier Grégoire za 3 bajty!

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;}

Nazywany tak:

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

Wydajność:

Hollo,werld!

Wykorzystuje fakt, że dane wejściowe można zasadniczo sformatować w jakikolwiek sposób (w tym przypadku tablicę ciągów znaków oddzielonych przecinkiem), a także dość łagodne reguły wyjściowe.

Hypino
źródło
Cześć, masz oryginalny format wejściowy. Możesz jeszcze trochę zagrać w golfa: 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 bajty ) z wyjściem zwracanym zamiast drukowanym bezpośrednio. Przykładowe dane wejściowe System.out.println(c("Hello,world!".toCharArray(), 5));:; Przykład Wydajność: Hollo,werld!.
Kevin Cruijssen
To prawda, że ​​z jakiegoś powodu nie zastanawiałem się nad zwróceniem tablicy znaków. To wspaniale!
Hypino,
Wynik powinien być Hollo!werld,i nie Hollo,werld!(interpunkcja jest niepoprawna). Wierzę, że można to naprawić za pomocą wartości wejściowej 6 zamiast 5.
Olivier Grégoire,
Skoro rzucasz tsię char, dlaczego nie można zadeklarować to w pętli for bezpośrednio jako char? Zaoszczędziłbyś na tym kilka bajtów.
Olivier Grégoire,
Niestety nie możesz zadeklarować znaku w inicjalizatorze pętli, ale zainspirowałeś mnie do sprawdzenia, czy zadeklarowanie znaku osobno byłoby krótsze niż rzutowanie i rzeczywiście jest o 1 bajt.
Hypino,
1

C, 124 bajty

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);}

Zadzwoń z:

program.exe string1 string2

Długość łańcucha jest ograniczona do 98 znaków.

Steadybox
źródło
1

Oktawa , 64 61 bajtów

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

Anonimowa funkcja, która wprowadza tablicę znaków 2D z każdym ciągiem w wierszu i generuje dane wyjściowe w tym samym formacie.

Wypróbuj w Ideone .

Luis Mendo
źródło
1

Rakieta 208 bajtów

(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)))))

Nie golfowany:

(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
          ))))

Testowanie:

(f "abcdef" "123456")

Wydajność:

'("a2c4e6" "1b3d5f")

Powyżej jest wersja rekurencyjna.

Wersja iteracyjna:

(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))))

Nie golfowany:

(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)))))
rnso
źródło
1

PowerShell v2 +, 82 bajty

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

Wciąż gra w golfa ... Nie. Nie wydaje się, że gra w golfa w dół bez użycia wyrażenia regularnego jak inne odpowiedzi (boo na algorytmach kopiowania).

Więc bierzemy $ai $bjako łańcuchy, ustawiamy indeks $ina 0, rzutujemy $ajako char-array i wysyłamy go przez pętlę |%{...}. W każdej iteracji łączymy łańcuch znaków $ci $dindeksujemy w tablicy select-select (tzn. Tak, że zmienia się tam iz powrotem). Następnie wychodzimy $ci czekamy $d, a wyjście przez domniemane Write-Outputdzieje się po zakończeniu programu.

AdmBorkBork
źródło
1

Lithp , 120 znaków (+3 dla flagi -v1)

Podział linii na 2 dla czytelności:

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

Wymaga -v1flagi, run.jsponieważ niektóre funkcje nie są jeszcze częścią standardowej biblioteki.

Przykładowe użycie:

(
    (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!")))
)

Tego rodzaju podkreśla, że ​​nie spędziłem wystarczająco dużo czasu na standardowej bibliotece. Konieczność js-bridge/1dwukrotnego użycia i długiej formy wyrażenia regularnego, a także wywołanie mapy za pomocą invoke/*wszystkich tych elementów przyczynia się do tego, że jest to znacznie dłużej, niż trzeba.

Czas na więcej pracy nad moją standardową biblioteką.

Andrakis
źródło
1

PHP, 79 bajtów

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

Poprzednia wersja PHP, 82 bajtów

for(;$i<strlen(($a=$argv)[1]);$y.=$a[2-$i%2][$i++])$x.=$a[1+$i%2][$i];echo"$x $y";
Jörg Hülsermann
źródło
for(...)echo$a[1+$i%2][$i];echo" $y";(-2)
Tytus
budowanie komentarza Tytusa for(;$i<=strlen(($a=$argv)[1]);$y.=$a[2-$i%2][$i++])echo$a[1+$i%2][$i]??" $y";to kolejne -2, choć wymaga php 7
user59178,
@ user59178 ładne, ale potrzebujesz 1
bajta
czy ty? to działa dla mnie, po prostu dostajeszNotice: String offset cast occurred in Command line code on line 1
user59178
@ user59178 Tak, aby wydrukować pierwszą literę pierwszego słowa
Jörg Hülsermann
1

C, 54 52 bajtów

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

Zakłada, że ​​wyjście cma już pożądaną długość.

Stosowanie:

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

}

Jeśli nalegasz na utworzenie wyniku, oto 91-bajtowe rozwiązanie:

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

Stosowanie:

main(){
 char a[]="123456";
 char b[]="abcdef";
 puts(g(a,b));
}
Karl Napf
źródło
0

C, 150 bajtów

Użyłem typowych pominięć plików nagłówkowych oraz main()typu zwrotu i instrukcji return. Wyświetla ostrzeżenie, ale kompiluje się bez problemu. Użyłem także sztuczki specyficznej dla GCC, która pozwala na deklaracje tablicowe z wyrażeniami zmiennymi.

Program oczekuje ciągów z linii poleceń i jako taki, program powinien być uruchamiany z ./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);}

Lub bardziej czytelnie,

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);
}
James Murphy
źródło
0

Mathematica, 51 bajtów

Pobiera dane wejściowe jako tablicę dwóch tablic znaków, z danymi wyjściowymi w tym samym formacie. Funkcja po prostu konstruuje nową tablicę za pomocą operacji (mod 2).

Table[#[[Mod[j+i,2]+1,j]],{i,2},{j,Length@#[[1]]}]&
Greg Martin
źródło
0

QBasic 4.5, 172 bajty

Ojej, ten staje się bolesny z powodu starego QBasica ...

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)

Ciekawostka: używanie DEFSTRzaoszczędzonych bajtów więcej niż kosztuje, ponieważ teraz mogłem użyć Azamiast a$.

Steenbergh
źródło
0

QBIC , 112 bajtów

QBIC może usprawnić wiele elementów kotłowych QBasic, ale główny MID$silnik nadal musi zostać wykonany w QBasic, ponieważ QBIC nie ma funkcji podciągania. Mimo to oszczędza mi 60 bajtów.

;;_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|
Steenbergh
źródło
MIND$=> MIN$w tekście.
Nie to, że Charles
0

Java, 68 bajtów

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

Niegolfowany i testowany

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);
    }
  }
}
Olivier Grégoire
źródło
0

APL, 12

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

Objaśnienie: {...} definiuje funkcję, ⍵ jest właściwym argumentem. Ujęcie (↑) tworzy macierz z dwóch ciągów, a następnie obraca każdą kolumnę (⊖) n razy, gdzie n jest częścią w nawiasie (⍳⍴⊃⍵). Jest to zdefiniowane jako jota długości pierwszego argumentu. (Np .: długość = 5 ==> 1 2 3 4 5). Tak więc pierwsza kolumna jest obracana raz, druga dwa razy (powrót do pierwotnych pozycji), trzecia kolumna trzy razy itp.

Wypróbuj na tryapl.org

Moris Zucca
źródło