การกลับคำ


30

โซน่าอยู่ในบ้านของเธอพร้อมกับลูกสาวอายุ 10 ขวบ เธอต้องไปโรงเรียนเพื่อพาเด็กกลับจากโรงเรียนอีกเพราะโรงเรียนเลิกเวลา 14.00 น. ข้างนอกมันร้อนดังนั้นเธอจึงอยากจะทิ้งลูกคนเล็กไว้ที่บ้าน

เธอให้เชือกกับลูกของเธอเพื่อให้เธอยุ่งในขณะที่เธอหายไป เธอขอให้เธอย้อนกลับคำในสตริง มีสายอักขระมากมายดังนั้นคุณต้องช่วยลูกสาวของเธอในการแก้ปัญหาอันยิ่งใหญ่นี้

ดังนั้นให้สตริงที่มีคำที่คั่นด้วยช่องว่างเดียวกลับคำในสตริง คุณสามารถสมมติได้ว่าไม่มีช่องว่างนำหน้าหรือต่อท้าย

สตริงจะมีเฉพาะ[a-zA-z ]ดังนั้นคุณไม่จำเป็นต้องจัดการเครื่องหมายวรรคตอน

คุณจะได้รับสตริงเป็นอินพุตและคุณควรส่งออกสตริง

กรณีทดสอบตัวอย่าง:

Input:
Man bites dog 

Output: 
dog bites Man


Input:
The quick brown fox jumps over the lazy dog

Output:
dog lazy the over jumps fox brown quick The


Input:
Hello world

Output:
world Hello

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

นี่คือรหัสกอล์ฟคำตอบที่สั้นที่สุดในการชนะไบต์



1
เราสามารถรับอินพุตเป็นรายการคำได้หรือไม่? (เช่น['man', 'bites', 'dog'])
Rɪᴋᴇʀ

3
เอาท์พุทสามารถมีช่องว่างต่อท้าย?
Digital Trauma

คำตอบ:


11

เรติน่า 7 ไบต์

O$^`\w+

ลองออนไลน์!

จับคู่คำทั้งหมด ( \w+) เรียงลำดับด้วยสตริงว่างของคีย์การเรียง ( O$) ซึ่งหมายความว่าพวกเขาจะไม่ได้รับการจัดเรียงเลยจากนั้นสลับลำดับ ( ^)


ไม่เคยใช้ Retina แต่ทำไมคุณต้องการ0$? คุณไม่สามารถย้อนกลับได้หรือ
caird coinheringaahing

@RandomUser โหมดเรียงลำดับ ( O) ปัจจุบันเป็นโหมดเดียวที่มีตัวเลือกย้อนกลับนี้
Martin Ender



7

JavaScript (ES6), 31 ไบต์

s=>s.split` `.reverse().join` `

ลองมัน

f=
s=>s.split` `.reverse().join` `
o.innerText=f(i.value="Man bites dog")
oninput=_=>o.innerText=f(i.value)
<input id=i><pre id=o>


1
มันเป็นคำตอบแบบนี้มันเหมือนกับคำตอบ C # ของฉันที่ทำให้ฉันเกลียด C # สำหรับการเล่นกอล์ฟ ปุยทั้งหมดในคำตอบของฉันเกือบสองเท่านับไบต์ ... +1
TheLethalCoder

หมายเหตุด้านข้าง: ใน C # หากคุณไม่ผ่านสิ่งใดไปยังพื้นที่Splitว่างตามค่าเริ่มต้นคุณสามารถทำสิ่งเดียวกันได้หรือไม่
TheLethalCoder

1
น่าเสียดายที่ไม่ใช่ @TheLethalCoder หากคุณไม่ได้ระบุสตริง / regex ให้กับsplitJS มันจะแบ่งแต่ละอักขระแต่ละตัวหรือสร้างอาร์เรย์ที่มีองค์ประกอบเดียวที่มีสตริงเดิมขึ้นอยู่กับไวยากรณ์ที่ใช้
Shaggy

7

Bash + ยูทิลิตี้ Linux ทั่วไป, 21

printf "$1 "|tac -s\ 

ปล่อยให้ช่องว่างต่อท้ายในสตริงออก - ไม่แน่ใจว่าตกลงหรือไม่


2
ขอแสดงความยินดีกับ 50k !! ตาคุณวันนี้ :-)
Luis Mendo

@ LuisMendo ขอบคุณ!
Digital Trauma

6

R, 19 ไบต์

cat(rev(scan(,'')))

อ่านสตริงจาก stdin โดยค่าเริ่มต้นscanอ่านโทเค็นที่คั่นด้วยช่องว่าง / การขึ้นบรรทัดใหม่ดังนั้นจึงอ่านคำว่าเป็นเวกเตอร์ revย้อนกลับและcatพิมพ์องค์ประกอบที่มีช่องว่าง

ลองออนไลน์!


6

Brachylogขนาด 6 ไบต์

ṇ₁↔~ṇ₁

ลองออนไลน์!

คำอธิบาย

ṇ₁        Split on spaces
  ↔       Reverse
   ~ṇ₁    Join with spaces

โปรดทราบว่าทั้ง "แบ่งช่องว่าง" และ "เข้าร่วมช่องว่าง wth" ใช้ในตัวเดียวกันนั่นคือṇ₁เพียงใช้ใน "ทิศทาง" ที่แตกต่างกัน




3

brainfuck , 74 ไบต์

,[>++++[<-------->-],]<[>++++[->--------<]+>[[<]>[+>]<]<-[<]>[.>]<[[-]<]<]

ลองออนไลน์!

รหัสนี้สร้างตัวเลข -32 ในสองตำแหน่งที่แตกต่างกัน แต่ดูเหมือนว่าจะน้อยกว่าไบต์ที่พยายามรักษา -32 เดี่ยว

คำอธิบาย

,[                        input first character
  >++++[<-------->-]      subtract 32 from current character (so space becomes zero)
,]                        repeat for all characters in input
<                         go to last character of last word
[                         while there are more words to display:
 >++++[->--------<]       create -32 two cells right of last letter
 +>                       increment trailing space cell (1 right of last letter) so the next loop works
 [[<]>[+>]<]              add 32 to all cells in word and trailing space cell
 <-                       subtract the previously added 1 from the trailing space
 [<]>                     move pointer to beginning of word
 [.>]<                    output word (with trailing space)
 [[-]<]                   erase word
 <                        move to last character of previous word
]

3

C, 54 48 ไบต์

การใช้อาร์กิวเมนต์เป็นอินพุต 48 ไบต์

main(c,v)char**v;{while(--c)printf("%s ",v[c]);}

ลองออนไลน์

> ./a.out man bites dog

ใช้พอยน์เตอร์ 84 ไบต์

f(char*s){char*t=s;while(*t)t++;while(t-s){while(*t>32)t--;*t=0;printf("%s ",t+1);}}

ใช้

main(){ f("man bites dog"); }

3

Japt , 11 10 7 4 ไบต์

ความพยายามครั้งแรกของฉันที่ Japt

¸w ¸

ลองออนไลน์

  • บันทึกแล้ว 3 ไบต์ด้วยETHproductions

คำอธิบาย

    :Implicit input of string U
¸   :Split on <space>
w   :Reverse
¸   :Join with <space>

กรุณาแบ่งปันเคล็ดลับ Japt ของคุณที่นี่


2
ขอบคุณที่ใช้ Japt :-) คุณสามารถใช้¸แทนqS ซึ่งควรช่วยคุณสามไบต์ที่นี่ (ดูที่ส่วน "ทางลัด Unicode" ของเอกสารล่าม)
ETHproductions

ดี! คุณสามารถบันทึกไบต์ได้หากคุณใช้-Sแฟล็
Oliver

ฉันนับ 2 ไบต์ @obarakon เว้นแต่ธงจะรวมอยู่ในการนับไบต์ซึ่งในกรณีนี้จะเป็น 4 ไบต์ใช่ไหม
Shaggy

@Shaggy แต่ละธงนับเป็นหนึ่งไบต์ ดังนั้น-Sจะเท่ากับ +1 ไปยังจำนวนไบต์ทั้งหมดของคุณ
Oliver

อ่าฉันเข้าใจแล้ว นั่นคือสิ่งที่ PPCG หรือสิ่งที่ Japt?
Shaggy



2

05AB1E , 4 ไบต์

#Rðý

หมายเหตุ: ใช้งานได้เพียง 2 คำขึ้นไป +1 ไบต์หากไม่เป็นที่ยอมรับ

ลองออนไลน์!


ฉันเห็นยูนิโคดมันคือ 4 ไบต์จริงหรือเปล่า
วาลพูดว่า Reinstate Monica

ใช่ 05AB1E ใช้เพจรหัสที่
kalsowerus

#R¸»โซลูชันสำรอง 4 ไบต์: P
Magic Octopus Urn



2

Cubix , 48 ไบต์

เกือบจะยอมแพ้กับสิ่งนี้ แต่ในที่สุดก็ถึงที่นั่น

oU_;SW;@?ABu>):tS-?;\0$q^s.$;;<$|1osU!(;;...<#(1

ลองออนไลน์!

สิ่งนี้แม็พกับคิวบ์ที่มีความยาวด้านสามดังนี้

      o U _
      ; S W
      ; @ ?
A B u > ) : t S - ? ; \
0 $ q ^ s . $ ; ; < $ |
1 o s U ! ( ; ; . . . <
      # ( 1
      . . .
      . . .

ขั้นตอนทั่วไปคือ:

  • รับอินพุตทั้งหมด AและBสแต็กย้อนกลับ
  • ย้ายค่าลบqไปที่ด้านล่างเพิ่มตัวนับ0ลงในสแต็ก กระโดดไปรอบ ๆ ที่นี่
  • ค้นหา space / end loop และวาง stack ในลำดับการพิมพ์ที่ถูกต้อง
    • เพิ่มตัวนับ)และดึงรายการตัวนับจากสแต็กt
    • มันเป็นพื้นที่หรือ EOI S-?
    • ทำซ้ำถ้าไม่
  • พิมพ์ลูปคำ
    • ลดเคาน์เตอร์ (
    • ออกจากลูปถ้าเคาน์เตอร์ !Uเป็น 0
    • แลกเปลี่ยน sนับกับอักขระบนสแต็ก
    • พิมพ์oอักขระและนำออกมาจากสแต็ก;
    • วนซ้ำซ้ำ
  • รับความยาวของสแต็ก#และการลดลง(
  • ตรวจสอบ?ว่า 0 และออก@ถ้าเป็น 0
  • มิฉะนั้นพิมพ์ช่องว่างในการSoทำความสะอาด;;และกลับไปที่ลูปแรก

ฉันข้ามขั้นตอนที่ไม่จำเป็นจำนวนมากไปแล้ว แต่คุณสามารถดูได้ทีละขั้นตอน


2

Mathematica, 35 ไบต์

StringRiffle@Reverse@StringSplit@#&

ลองออนไลน์!


StringSplit[#]" "แยกในช่องว่างโดยอัตโนมัติเพื่อให้คุณไม่ต้องระบุ
ไม่ใช่ต้นไม้

2
แก้ไข! -5 ไบต์!
J42161217

Ooh และฉันคิดว่าคุณสามารถบันทึกไบต์อื่นโดยใช้การจัดองค์ประกอบฟังก์ชั่น: StringRiffle@*Reverse@*StringSplit(เรียกว่าชอบStringRiffle@*Reverse@*StringSplit@"hello world")
ไม่ใช่ต้นไม้

2

Röda , 27 25 ไบต์

บันทึก 2 ไบต์ด้วย @fergusq

{[[split()|reverse]&" "]}

ลองออนไลน์!

ฟังก์ชั่นนี้รับอินพุตจากสตรีมอินพุต

คำอธิบาย (ล้าสมัย)

{[[(_/" ")()|reverse]&" "]}           /* Anonymous function */
   (_/" ")                            /* Pull a value from the stream and split it on spaces */
          ()                          /* Push all the values in the resulting array to the stream */
            |reverse                  /* And reverse it */
  [                 ]                 /* Wrap the result into an array*/
                     &" "             /* Concatenate each of the strings in the array with a space */
 [                       ]            /* And push this result to the output stream */

splitใช้พื้นที่เป็นตัวคั่นเริ่มต้นเพื่อให้สั้นกว่าsplit() (_/" ")()
fergusq








1

Java 8, 53 57ไบต์

Lambda + Stream API

s->Stream.of(s.split(" ")).reduce("",(a,b)->b+" "+a)

ตามคำแนะนำของ Selim เราเพิ่งลดลง 4 ไบต์


1
บันทึก 4 ไบต์โดยใช้Stream.ofแทนArrays.stream: -)
Selim


1

Pyth, 3 ไบต์

_cw

คำตอบ Pyth แรกของฉันหนึ่งไบต์สั้นกว่าคำตอบของ @ notjagan!

อธิบาย:

 cw # Split the input by space (same as Python's string.split())
_   # Reverses the array
    # Pyth prints implicitly.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.