Đảo ngược từ


30

Sona đang ở trong nhà với cô con gái 10 tuổi. Cô ấy cần phải đến trường để mang về một đứa trẻ khác từ trường học, vì trường học đã kết thúc lúc 2 giờ chiều. Bên ngoài trời nóng, vì vậy cô muốn để đứa con nhỏ ở nhà.

Cô ấy đã đưa một loạt các chuỗi cho con của cô ấy để giữ cho cô ấy bận rộn trong khi cô ấy đi. Cô yêu cầu cô đảo ngược các từ trong chuỗi. Có rất nhiều chuỗi, vì vậy bạn cần giúp con gái mình giải quyết công việc to lớn này.

Vì vậy, đưa ra một chuỗi chứa các từ được phân tách bằng khoảng trắng đơn, đảo ngược các từ trong chuỗi. Bạn có thể giả định rằng không có không gian hàng đầu hoặc dấu ở đó.

Chuỗi sẽ chỉ chứa [a-zA-z ], vì vậy bạn không cần xử lý dấu câu.

Bạn sẽ được cung cấp một chuỗi làm đầu vào và bạn nên xuất một chuỗi.

Các trường hợp thử nghiệm mẫu:

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

Chấm điểm

Đây là . Câu trả lời ngắn nhất trong byte thắng.



1
Chúng ta có thể lấy đầu vào là một danh sách các từ? (tức là ['man', 'bites', 'dog'])
Rɪᴋᴇʀ

3
Đầu ra có thể có khoảng trắng ở cuối không?
Chấn thương kỹ thuật số

Câu trả lời:


11

Võng mạc , 7 byte

O$^`\w+

Hãy thử trực tuyến!

Nối tất cả các từ ( \w+) sắp xếp chúng với chuỗi rỗng sắp xếp ( O$) có nghĩa là chúng sẽ không được sắp xếp, và sau đó đảo ngược thứ tự của chúng ( ^).


Không bao giờ sử dụng Retina nhưng tại sao bạn cần 0$? Bạn có thể đảo ngược nó không?
caird coinheringaahing

@RandomUser sort sort mode ( O) hiện là chế độ duy nhất có tùy chọn đảo ngược này.
Martin Ender



7

JavaScript (ES6), 31 byte

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

Thử nó

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
Đó là những câu trả lời như thế này, về cơ bản giống như câu trả lời C # của tôi khiến tôi ghét C # khi chơi golf. Tất cả số lông tơ bổ sung trong câu trả lời của tôi gần gấp đôi số byte ... +1
TheLethalCoder

Lưu ý bên lề: Trong C # nếu bạn không truyền gì cho Splitnó sẽ phân tách trên khoảng trắng theo mặc định, bạn có thể làm tương tự ở đây không?
TheLethalCoder

1
Thật không may, @TheLethalCoder, nếu bạn không cung cấp một chuỗi / regex cho splittrong JS, nó sẽ phân tách trên từng ký tự riêng lẻ hoặc tạo một mảng với một thành phần duy nhất chứa chuỗi gốc, tùy thuộc vào cú pháp được sử dụng.
Xù xì


6

R, 19 byte

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

đọc chuỗi từ stdin. Theo mặc định, scanđọc mã thông báo được phân tách bằng dấu cách / dòng mới, do đó, nó đọc các từ dưới dạng vectơ. revđảo ngược, và catin các yếu tố với không gian.

Hãy thử trực tuyến!


6

Brachylog , 6 byte

ṇ₁↔~ṇ₁

Hãy thử trực tuyến!

Giải trình

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

Lưu ý rằng cả "chia nhỏ trên không gian" và "tham gia không gian wth" đều sử dụng cùng một tích hợp, nghĩa là ṇ₁chỉ được sử dụng theo các "hướng" khác nhau.




3

Brainfuck , 74 byte

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

Hãy thử trực tuyến!

Mã này tạo số -32 ở hai nơi khác nhau, nhưng dường như ít byte hơn so với cố gắng duy trì một -32.

Giải trình

,[                        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 byte

Sử dụng đối số làm đầu vào, 48 byte

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

Thử trực tuyến

> ./a.out man bites dog

Sử dụng con trỏ, 84 byte

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

Sử dụng

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

3

Japt , 11 10 7 4 byte

Nỗ lực đầu tiên của tôi tại Japt.

¸w ¸

Dùng thử trực tuyến


Giải trình

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

Hãy chia sẻ lời khuyên Japt của bạn ở đây .


2
Cảm ơn bạn đã sử dụng Japt :-) Bạn có thể sử dụng ¸thay thế qS , điều này sẽ giúp bạn tiết kiệm ba byte ở đây. (Xem phần "Phím tắt Unicode" của tài liệu trình thông dịch)
Sản phẩm ETH

Tốt đẹp! bạn có thể lưu một byte nếu bạn sử dụng -Scờ .
Oliver

Tôi đếm 2 byte, @obarakon. Trừ khi cờ được bao gồm trong số byte, trong trường hợp đó sẽ là 4 byes, không?
Xù xì

@Shaggy Mỗi cờ được tính là một byte. Vì vậy, -Ssẽ là +1 trên tổng số byte của bạn.
Oliver

Ah tôi thấy. Đó là một thứ PPCG hay một thứ Japt?
Xù xì






2

Khối , 48 byte

Gần như đã từ bỏ cái này, nhưng cuối cùng đã đến đó.

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

Hãy thử trực tuyến!

Bản đồ này lên một khối lập phương có chiều dài ba cạnh như sau

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

Các bước chung là:

  • Nhận tất cả ngăn xếp đầu vào Avà đảo ngượcB
  • Di chuyển âm qbản xuống dưới cùng, thêm một bộ đếm 0vào ngăn xếp. một chút nhảy xung quanh đây.
  • Tìm không gian / kết thúc vòng lặp, cũng đặt ngăn xếp theo thứ tự in chính xác.
    • Bộ đếm tăng )và lấy mục truy cập từ ngăn xếpt
    • Nó là một không gian hay EOI S-?
    • Lặp lại nếu không
  • In vòng lặp từ
    • Bộ đếm giảm (
    • Vòng lặp thoát nếu bộ đếm !Ulà 0
    • Trao đổi bộ sđếm với nhân vật trên ngăn xếp
    • In oký tự và bật nó từ ngăn xếp;
    • Lặp lại vòng lặp
  • Lấy chiều dài của ngăn xếp #và giảm dần(
  • Kiểm tra ?nếu 0 và thoát @nếu nó bằng 0
  • Nếu không, in một không gian Sosạch lên ;;và quay lại vòng lặp đầu tiên.

Tôi đã bỏ qua một số bước không cần thiết, nhưng bạn có thể thấy nó từng bước


2

Toán học, 35 byte

StringRiffle@Reverse@StringSplit@#&

Hãy thử trực tuyến!


StringSplit[#]tự động phân tách trên khoảng trắng, vì vậy bạn không cần chỉ định " ".
Không phải là một cái cây vào

2
chính xác! -5 byte!
J42161217

Ồ, và tôi nghĩ rằng bạn có thể lưu một byte khác bằng cách sử dụng thành phần chức năng: StringRiffle@*Reverse@*StringSplit(gọi nó là như thế StringRiffle@*Reverse@*StringSplit@"hello world")
Không phải là một cây vào

2

Röda , 27 25 byte

2 byte được lưu nhờ @fergusq

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

Hãy thử trực tuyến!

Hàm này lấy đầu vào từ luồng đầu vào.

Giải thích (lỗi thời)

{[[(_/" ")()|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 */

splitsử dụng không gian làm dấu phân cách mặc định, vì vậy split()ngắn hơn (_/" ")().
fergusq





1

Gema, 29 ký tự

<W><s>=@set{o;$1 ${o;}}
\Z=$o

Chạy mẫu:

bash-4.4$ gema '<W><s>=@set{o;$1 ${o;}};\Z=$o' <<< 'Man bites dog'
dog bites Man 


1

Perl 6 , 14 byte

{~[R,] .words}

Thử nó

Mở rộng:

{              # lambda with implicit param $_

  ~            # stringify following (joins a list using spaces)

   [R,]        # reduce the following using the Reverse meta operator

        .words # call the words method on $_
}

1

Java 8, 53 57 byte

API Lambda + Stream

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

Theo đề xuất của Selim, chúng tôi chỉ bỏ 4 byte


1
Lưu 4 byte bằng cách sử dụng Stream.ofthay vì Arrays.stream: -)
Selim


1

Bình thường, 3 byte

_cw

Câu trả lời Pyth đầu tiên của tôi, ngắn hơn một byte so với câu trả lời của @ notjagan!

Giải thích:

 cw # Split the input by space (same as Python's string.split())
_   # Reverses the array
    # Pyth prints implicitly.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.