สตริง Interlace


34

ความท้าทายของคุณคือการเขียนโปรแกรมหรือฟังก์ชั่นซึ่งเมื่อได้รับความยาวเท่ากันสองสายจะทำการสลับอักขระอื่น ๆ และเอาท์พุท / ส่งคืนสตริงผลลัพธ์ตามลำดับอย่างใดอย่างหนึ่ง

ตัวอย่าง

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

กฎระเบียบ

  • สตริงจะมีตัวอักษร ASCII เท่านั้น (32-126)
  • สตริงจะมีความยาวเท่ากันเสมอและจะไม่มีวันว่างเปล่า
  • คุณอาจยอมรับอินพุตในรูปแบบที่เหมาะสม: พารามิเตอร์แยกรายการในอาร์เรย์คั่นด้วยบรรทัดใหม่หนึ่งรายการขึ้นไปแม้จะต่อกัน ข้อ จำกัด เพียงอย่างเดียวคือหนึ่งสายจะต้องมาอย่างเต็มที่ก่อนที่อื่น ๆ (เช่นa1\nb2\nc3สำหรับการ"abc", "123"ไม่ถูกต้อง)
  • ผลลัพธ์อาจอยู่ในลำดับใด ๆ (เช่นคุณสามารถเริ่มต้นการแลกเปลี่ยนจากตัวแรกหรือตัวที่สอง) และในรูปแบบที่ถูกต้องดังกล่าวข้างต้น (อาเรย์ 2 รายการแยกจากกันโดยขึ้นบรรทัดใหม่เชื่อมต่อกัน ฯลฯ )

เกณฑ์การให้คะแนน

นี่คือดังนั้นโค้ดที่สั้นที่สุดเป็นไบต์สำหรับแต่ละภาษาจะชนะ


11
+1 DrMcMoylexสำหรับ : D
DJMcMayhem

3
"Dowrgnab" แอนนาแกรมถึง "Downgrab" (͡°͜ʖ͡°)
Mama Fun Roll

คุณควรชี้ให้เห็นอย่างชัดเจนว่ากฎ "ตามลำดับ" หมายความว่าการสลับสามารถเริ่มจากตัวอักษรตัวแรกหรือตัวที่สอง
DLosc

@DrMcMoylex ยกตัวอย่างรหัสกอล์ฟ ถ้าเราเริ่มต้นจากการสลับตัวอักษรสองเราได้รับ: C o d F , G oลิตรอี เริ่มจากตัวอักษรตัวแรก: g o l e, c o d f
DLosc

คำตอบ:


14

Haskell, 37 ไบต์

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

ซิปสองสตริงสลับอักขระแล้วสลับซิป

ทางเลือกแบบเรียกซ้ำ 37 ไบต์:

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

9

Python ขนาด 42 ไบต์พร้อมI / O golfing

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

สลับอักขระอื่น ๆ ของทั้งสองรายการ ใช้เวลาเป็น input สองรายการของตัวละครและเอาท์พุทโดยการปรับเปลี่ยนพวกเขา

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
นั่นฉลาด คุณเห็นรูปแบบอินพุต / เอาต์พุตที่ยืดหยุ่นเกินไปหรือไม่
ETHproductions

@ETHproductions ไม่แน่ใจว่าส่วนใหญ่จะเป็น Python แบบเฉพาะเจาะจงซึ่งรายการนั้นสามารถจัดการได้ดีกว่าสตริง
xnor

8

เป็นกลุ่ม, 18 , 17 ไบต์

qqyljvPkvPll@qq@q

ลองออนไลน์!

วิธีนี้ใช้ล่าม V เนื่องจากความเข้ากันได้ย้อนหลัง อินพุตมาในรูปแบบนี้:

string1
string2

คำอธิบาย:

 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

ตัดตัวอักษรสองตัวโดยใช้xแทนylแล้วก็ jus Pแทนตัวที่สองvP:lqqxjvPkPll@qq@q
Hauleth

@ lukasz ฉันได้ลองใช้ครั้งแรก แต่ด้วยเหตุผลอะไรก็ตามที่ทำงานหลายครั้งเกินไปและสลับตัวอักษรสุดท้ายเมื่อไม่ควร ฉันจะดูมันเพิ่มเติม
DJMcMayhem

ทำงานได้สำหรับฉันv.tryitonline.net/…
Hauleth

1
@ ŁukaszNiemierลิงก์นั้นมีรหัสเดียวกันกับที่ฉันโพสต์ คุณกด[save]ปุ่ม? ทั้งสองวิธีก็ไม่ทำงานสำหรับฉัน เหตุผลที่แท้จริงคือเพราะเมื่อคุณxเป็นตัวละครตัวสุดท้ายในบรรทัดมันจะเลื่อนเคอร์เซอร์ไปทางซ้ายทำให้เกิดการสลับตำแหน่งของการสลับ
DJMcMayhem

6

Haskell, 41 ไบต์

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

ส่งคืนคู่กับสตริง ตัวอย่างการใช้งาน: ->( (unzip.).(#) ) "Hello," "world!"("Hollo!","werld,")

วิธีการเรียกซ้ำแบบง่าย: ใช้อักขระตัวแรกของแต่ละสตริงเป็นคู่และต่อท้ายการเรียกซ้ำด้วยสตริง (ส่วนที่เหลือ) สลับ unzipทำรายการหนึ่งคู่ออกจากรายการคู่


6

05AB1E , 11 10 ไบต์

øvyNFÀ}})ø

ลองออนไลน์!

คำอธิบาย

input = ["code", "golf"]ใช้เป็นตัวอย่าง

ø             # 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 ไบต์

Bytecount มีรหัสและ-pแฟล็ก 47 ไบต์

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

ทำงานด้วย-pและ-Eตั้งค่าสถานะ คาดหวังแต่ละสตริงในบรรทัดที่แตกต่าง:

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

คำอธิบาย :

-p: จับสัญญาณเข้า$_และพิมพ์ที่ส่วนท้าย (เพื่อรับและพิมพ์สตริงแรก)
<>: รับบรรทัดอินพุต (เพื่อรับสตริงที่สอง)
=~: ใช้ regex กับ<>: s%%%geerโดยที่คืนrค่าสตริงที่แก้ไข (จากนั้นพิมพ์ด้วยsay)
regex:
.\K(.)ค้นหาอักขระสองตัวและจะแทนที่ตัวที่สองด้วยผลลัพธ์ของการประเมินโค้ดนี้"s/.{$-[0]}\\K(.)/$1/;\$1":
ส่วนแรกs/.{$-[0]}\\K(.)/$1/ใช้ regex กับ$_: .{$-[0]}ข้ามอักขระแรกเพื่อไปยังจุดเดียวกับ regex ด้านนอก (เนื่องจาก$-[0]มี ดัชนีของกลุ่มการจับภาพครั้งแรกดังนั้นในกรณีนั้นดัชนีของตัวละครที่จะมาแทนที่) และจากนั้นเราจับภาพด้วย char(.)และแทนที่ด้วยตัวอักษรของ regex ด้านนอก ( $1) แล้วเราก็เพิ่ม$1เข้าไปผลที่ได้"s/.{$-[0]}\\K(.)/$1/;\$1"คือตัวละครที่เราจับได้ใน regex ชั้นใน
คุณอาจสังเกตเห็นว่า$1อ้างถึงตัวละครที่เราต้องการแทนที่ทั้งสองสตริง (ดังนั้นสองตัวละครที่แตกต่างกัน) ดังนั้นเราจึงเล่นกับโมดิ/eeฟายเออร์ของ regex ที่ประเมินด้านขวาของ regex สองครั้ง: อันแรกจะแทนที่เฉพาะ$1ที่ไม่ได้นำหน้าด้วย\.


5

Python ขนาด 55 ไบต์

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

หั่น!

58 ไบต์:

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

64 ไบต์:

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

สะสมอักขระซ้ำ ๆ ของทั้งสองสายเข้าsและtและส่งออกคู่ของพวกเขาในตอนท้าย การสลับจะทำโดยการสลับสตริงอินพุตแต่ละการเรียกซ้ำ การแสดงผลสตริงที่คั่นด้วยช่องว่างมีความยาวเท่ากัน:

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

สิ่งนี้แคบกว่ากลยุทธ์การเรียกซ้ำที่แตกต่างกันของการสลับอักขระจากแต่ละสตริงโดยแต่ละสตริงที่เป็นไปได้สองรายการเป็นสตริงแรก (65 ไบต์)

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 ไบต์

ขอบคุณ ETHproductions เป็นเวลา 1 ไบต์!

"@X@YS&h

การป้อนข้อมูลเป็นอาร์เรย์ 2 ['Halloween'; 'Challenge']มิติที่มีสองสายเช่น: สตริงเอาต์พุตอยู่ในลำดับย้อนกลับ

ลองออนไลน์!

คำอธิบาย

        % 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

รุ่นเก่า: 9 ไบต์

tZyP:1&YS

คำอธิบาย

        % 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 ใช่! ขอขอบคุณ!
Luis Mendo

4

เยลลี่ 5 ไบต์

żṚż¥/

อินพุตเป็นอาร์กิวเมนต์ที่แยกกันเอาต์พุตถูกต่อกัน

ลองออนไลน์! หรือตรวจสอบกรณีทดสอบทั้งหมด

มันทำงานอย่างไร

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

4

เยลลี่ , 9 8 6 ไบต์

ขอบคุณเดนนิสที่ช่วยประหยัด 2 ไบต์!

Zṙ"J$Z

ใช้ เจลลี่การเข้ารหัส

ลองออนไลน์!


คุณสามารถใช้แทนṙ"J$ นอกจากนี้ยังแยกสตริงไม่จำเป็นต้องใช้เพื่อให้คุณสามารถวางĖṙ@/€ Y
Dennis

@Dennis Ahh นั่นเรียบร้อย ขอบคุณ! :)
Adnan

3

V , 12 ไบต์

lòyljvPkvPll

ลองออนไลน์!

ไม่มีอะไรน่าสนใจเพียงแค่เป็นพอร์ตโดยตรงของคำตอบที่เป็นกลุ่มของฉันดังนั้นฉันจึงสามารถแข่งขันกับ 05AB1E ได้ (แต่ไม่ชนะ)



3

JavaScript (ES6), 51 54

แก้ไข 3 ไบต์ที่บันทึกไว้ขอบคุณ @Neil

ฟังก์ชั่นที่มีอินพุต / เอาต์พุตอาเรย์

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

ฉันชอบอันนี้มากกว่านี้ แต่มันคือ 55 (2 สายในอินพุต, อาร์เรย์ในเอาต์พุต)

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

ทดสอบ

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>


replaceช่วยให้คุณประหยัด 3 p=>p.map((w,i)=>w.replace(/./g,(c,j)=>a[i+j&1][j]))ไบต์:
Neil

2

Pyth, 8 ไบต์

C.e_FbkC

ลองใช้งานออนไลน์: การสาธิต

สลับคำกลับรายการตัวอักษร 'ดัชนีปัจจุบัน' แต่ละคู่สลับอีกครั้ง


2

JavaScript (ES6), 55 ไบต์

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

ฉันต้องการทำสิ่งที่ฉลาดด้วยการใช้ regexp เพื่อแทนที่อักขระสำรอง แต่ท้ายที่สุดก็ใช้67 57 ไบต์:

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

ดี ฉันมีf=([a,...A],[b,...B])=>a?[a+f(B,A)[0],b+f(A,B)[0]]:[""]ความยาวเท่ากัน
ETHproductions

ฉันหวังว่าจะทำสิ่งที่ดีกว่านี้ให้มากขึ้น แต่ก็ไม่มีทางแค่น้อยกว่า ถึงเวลาโพสต์คำตอบแบบไม่เรียกซ้ำ
edc65

@ edc65 ความคิดที่ดีที่จะใช้mapมันโกน 10 ไบต์ออกคำตอบ regexp ของฉัน แม้ว่าจะนานเกินไป
Neil


2

Java, 132 103 100 ไบต์

ขอบคุณ Kevin Cruijssen ที่แนะนำให้ส่งคืนอาร์เรย์ (ท่ามกลางการปรับปรุงอื่น ๆ ) และประหยัด 29 ไบต์! ยัง Olivier Grégoire 3 ไบต์ด้วย!

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

เรียกว่าเป็นแบบนี้:

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

เอาท์พุท:

Hollo,werld!

ใช้ประโยชน์จากความจริงที่ว่าอินพุตสามารถถูกจัดรูปแบบในลักษณะใด ๆ (ในกรณีนี้อาร์เรย์อักขระเดี่ยวของ Strings ที่คั่นด้วยเครื่องหมายจุลภาค) และกฎเอาต์พุตที่ค่อนข้างผ่อนปรนเช่นกัน


สวัสดีรูปแบบอินพุตดั้งเดิมที่คุณไปถึงแล้ว คุณสามารถตีกอล์ฟได้มากกว่า: 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 ไบต์ ) โดยมีเอาต์พุตส่งคืนแทนที่จะพิมพ์โดยตรง อินพุตตัวอย่าง: System.out.println(c("Hello,world!".toCharArray(), 5));; ตัวอย่างผลลัพธ์: Hollo,werld!.
Kevin Cruijssen

จริงอยู่ฉันไม่ได้พิจารณาเพียงแค่คืนอาเรย์ถ่านด้วยเหตุผลบางอย่าง เยี่ยมมาก!
Hypino

ผลลัพธ์ควรเป็นHollo!werld,และไม่ใช่Hollo,werld!(เครื่องหมายวรรคตอนไม่ถูกต้อง) ฉันเชื่อว่าสิ่งนี้สามารถแก้ไขได้ด้วยค่าอินพุต 6 แทน 5
Olivier Grégoire

เมื่อคุณโยนtไปcharทำไมคุณไม่ประกาศในลูปโดยตรงในฐานะ a char? คุณสำรองไว้สองสามไบต์
Olivier Grégoire

น่าเสียดายที่คุณไม่สามารถประกาศถ่านภายในตัวเริ่มต้น for-loop ได้ แต่คุณเป็นแรงบันดาลใจให้ฉันตรวจสอบว่าการประกาศถ่านแยกต่างหากจะสั้นกว่าตัวละครและแน่นอนว่ามันคือ 1 ไบต์
Hypino

1

C, 124 ไบต์

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

โทรด้วย:

program.exe string1 string2

ความยาวสตริง จำกัด ไว้ที่ 98 ตัวอักษร



1

แร็กเก็ต 208 ไบต์

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

การทดสอบ:

(f "abcdef" "123456")

เอาท์พุท:

'("a2c4e6" "1b3d5f")

ด้านบนเป็นเวอร์ชั่นแบบเรียกซ้ำ

เวอร์ชันซ้ำ:

(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 ไบต์

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

ยังคงเล่นกอล์ฟอยู่ ...ไม่ ดูเหมือนจะไม่สามารถลงมือทำสิ่งนี้ได้โดยไม่ต้องใช้ regex เหมือนคำตอบอื่น ๆ

ดังนั้นเราจึงใช้เวลา$aและ$bเป็นสตริงชุดดัชนี$iจะ0หล่อ$aเป็นchar-array |%{...}และส่งผ่านห่วง การวนซ้ำแต่ละครั้งเรากำลังเชื่อมโยงสตริงเข้ากับ$cและ$dโดยการจัดทำดัชนีในอาร์เรย์เลือก (เช่นดังนั้นสลับไปมา) จากนั้นเราออก$cและ$dไปป์ไลน์และส่งออกโดยนัยWrite-Outputเกิดขึ้นเมื่อโปรแกรมเสร็จสมบูรณ์


1

Lithp , 120 ตัวอักษร (+3 สำหรับแฟล็ก -v1)

เส้นแบ่งเป็น 2 เพื่อให้อ่านง่าย:

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

ต้องการ-v1แฟล็กถึงrun.jsเนื่องจากบางฟังก์ชันยังไม่ได้เป็นส่วนหนึ่งของไลบรารีมาตรฐาน

ตัวอย่างการใช้งาน:

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

ไฮไลท์ประเภทนี้ที่ฉันไม่ได้ใช้เวลาเพียงพอในห้องสมุดมาตรฐาน ต้องใช้js-bridge/1สองครั้งและแบบฟอร์ม regex ยาวเช่นเดียวกับการเรียกใช้แผนที่โดยใช้invoke/*ทั้งหมดมีส่วนร่วมในการนี้จะนานกว่าที่มันจะต้องมี

ใช้เวลาในการทำงานกับห้องสมุดมาตรฐานของฉันมากกว่าที่ฉันคิด


1

PHP, 79 ไบต์

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

PHP เวอร์ชันก่อนหน้า, 82 ไบต์

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)
ติตัส

การสร้างความคิดเห็นของติตัสfor(;$i<=strlen(($a=$argv)[1]);$y.=$a[2-$i%2][$i++])echo$a[1+$i%2][$i]??" $y";เป็นอีก -2 แม้ว่ามันจะต้องมี php 7
user59178

@ user59178 ดี แต่คุณต้องการอีก 1 ไบต์
JörgHülsermann

ใช่ไหม มันใช้งานได้สำหรับฉันคุณเพิ่งได้รับNotice: String offset cast occurred in Command line code on line 1
user59178

@ user59178 ใช่เพื่อพิมพ์อักษรตัวแรกของคำแรก
JörgHülsermann

1

C, 54 52 ไบต์

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

ถือว่าเอาต์พุต cมีความยาวที่ต้องการอยู่แล้ว

การใช้งาน:

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

}

หากคุณยืนยันในการสร้างผลลัพธ์นี่คือวิธีแก้ปัญหา91 ไบต์ :

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

การใช้งาน:

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

0

C, 150 ไบต์

ฉันใช้การละเว้นโดยทั่วไปของไฟล์ส่วนหัวmain()และคำสั่ง return และ return type มันโยนคำเตือน แต่รวบรวมโดยไม่มีปัญหา ฉันยังใช้เคล็ดลับเฉพาะ GCC ที่อนุญาตให้มีการประกาศอาร์เรย์ด้วยนิพจน์ตัวแปร

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

หรือชัดเจนมากขึ้น

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 ไบต์

รับอินพุตเป็นอาร์เรย์ของอักขระสองอาร์เรย์โดยมีเอาต์พุตในรูปแบบเดียวกัน ฟังก์ชั่นเพียงสร้างอาร์เรย์ใหม่โดยใช้การดำเนินการ (mod 2)

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

0

QBasic 4.5, 172 ไบต์

Ouch อันนี้เจ็บปวดกับ ol '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)

สนุกจริง: การใช้DEFSTRบันทึกไบต์มากกว่าค่าใช้จ่ายเพราะตอนนี้ฉันสามารถใช้แทนAa$


0

QBIC , 112 ไบต์

QBIC สามารถปรับปรุง QBasic สำเร็จรูปจำนวนมากได้ แต่MID$เครื่องยนต์หลักยังคงต้องทำใน QBasic เนื่องจาก QBIC ขาดฟังก์ชั่นสตริงย่อย ยังช่วยฉัน 60 ไบต์

;;_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$ในข้อความ
ไม่ใช่ Charles

0

Java, 68 ไบต์

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

Ungolfed และการทดสอบ

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

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

คำอธิบาย: {... } กำหนดฟังก์ชั่น⍵เป็นอาร์กิวเมนต์ที่ถูกต้อง การใช้ (↑) สร้างเมทริกซ์จากสองสายจากนั้นหมุนแต่ละคอลัมน์ (⊖) n ครั้งโดยที่ n เป็นส่วนหนึ่งในวงเล็บ (⍳⍴⊃⍵) นั่นหมายถึงส่วนเล็ก ๆ ของความยาวของอาร์กิวเมนต์แรก (เช่นยาว = 5 ==> 1 2 3 4 5) ดังนั้นคอลัมน์แรกจะหมุนหนึ่งครั้งสองครั้งสองครั้ง (กลับไปที่ตำแหน่งเดิม) คอลัมน์ที่สามสามครั้ง ฯลฯ ...

ลองใช้ที่tryapl.org

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.