Membalik Kata-Kata

30

Sona ada di rumahnya bersama putrinya yang berusia 10 tahun. Dia harus pergi ke sekolah untuk membawa kembali anak lain dari sekolah, karena sekolah selesai pada jam 2 siang. Di luar panas, jadi dia ingin meninggalkan anak bungsunya di rumah.

Dia memberikan seikat tali kepada anaknya untuk membuatnya sibuk saat dia pergi. Dia memintanya untuk membalikkan kata-kata dalam string. Ada banyak string, jadi Anda perlu membantu putrinya dalam menyelesaikan tugas besar ini.

Jadi, diberi string yang berisi kata-kata yang dipisahkan oleh spasi tunggal, balikkan kata-kata dalam string. Anda dapat mengasumsikan bahwa tidak ada ruang depan atau belakang di sana.

String hanya akan berisi [a-zA-z ], jadi Anda tidak perlu menangani tanda baca.

Anda akan diberi string sebagai input, dan Anda harus menampilkan string.

Contoh Uji Kasus:

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

Mencetak gol

Ini adalah . Jawaban terpendek dalam byte menang.

Cyoce
sumber
1
Terkait
Martin Ender
1
Bisakah kita mengambil input sebagai daftar kata-kata? (yaitu ['man', 'bites', 'dog'])
Rɪᴋᴇʀ
3
Bisakah output memiliki spasi spasi tambahan?
Digital Trauma

Jawaban:

11

Retina , 7 byte

O$^`\w+

Cobalah online!

Cocokkan semua kata ( \w+) urutkan mereka dengan kunci kosong string kosong ( O$) yang berarti mereka tidak akan diurutkan sama sekali, dan kemudian balikkan urutannya ( ^).

Martin Ender
sumber
Tidak pernah menggunakan Retina tetapi mengapa Anda membutuhkannya 0$? Tidak bisakah Anda membalikkannya?
caird coinheringaahing
@RandomUser sort mode ( O) saat ini adalah satu-satunya mode yang memiliki opsi balik ini.
Martin Ender
9

Haskell, 21 byte

unwords.reverse.words

Cobalah online!

nimi
sumber
7

JavaScript (ES6), 31 byte

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

Cobalah

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>

Shaggy
sumber
1
Jawabannya seperti ini, yang pada dasarnya sama dengan jawaban C # yang membuat saya membenci C # untuk bermain golf. Semua bulu ekstra dalam jawaban saya hampir dua kali lipat jumlah byte ... +1
TheLethalCoder
Catatan sisi: Dalam C # jika Anda tidak memberikan apa-apa Splitpadanya, split pada spasi putih secara default, dapatkah Anda melakukan hal yang sama di sini?
TheLethalCoder
1
Sayangnya tidak, @TheLethalCoder, jika Anda tidak menyediakan string / regex ke splitdalam JS, itu akan terpecah pada setiap karakter individu atau membuat array dengan elemen tunggal yang berisi string asli, tergantung pada sintaks yang digunakan.
Shaggy
7

Bash + utilitas Linux umum, 21

printf "$1 "|tac -s\ 

Meninggalkan ruang tambahan di string keluaran - tidak yakin apakah itu OK atau tidak.

Trauma Digital
sumber
2
Selamat atas 50k !! Giliran Anda hari ini :-)
Luis Mendo
@LuisMendo Terima kasih!
Digital Trauma
6

R, 19 byte

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

membaca string dari stdin. Secara default, scanmembaca token yang dipisahkan oleh spasi / baris baru, sehingga membaca kata-kata sebagai vektor. revmembalikkan, dan catmencetak elemen dengan spasi.

Cobalah online!

Giuseppe
sumber
6

Brachylog , 6 byte

ṇ₁↔~ṇ₁

Cobalah online!

Penjelasan

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

Perhatikan bahwa "split on spasi" dan "join wth space" menggunakan built-in yang sama ṇ₁, yaitu , hanya digunakan di "arah" yang berbeda.

Fatalisasi
sumber
4

C #, 58 byte

using System.Linq;s=>string.Join(" ",s.Split().Reverse());
TheLethalCoder
sumber
3

brainfuck , 74 byte

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

Cobalah online!

Kode ini menciptakan angka -32 di dua tempat yang berbeda, tetapi nampaknya lebih sedikit byte daripada mencoba mempertahankan satu -32.

Penjelasan

,[                        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
]
Nitrodon
sumber
3

C, 54 48 byte

Menggunakan argumen sebagai input, 48 byte

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

Coba Online

> ./a.out man bites dog

Menggunakan pointer, 84 byte

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

Menggunakan

main(){ f("man bites dog"); }
Khaled.K
sumber
3

Japt , 11 10 7 4 byte

Upaya pertama saya di Japt.

¸w ¸

Cobalah online

  • Disimpan 3 byte berkat produk ETH

Penjelasan

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

Silakan bagikan kiat Japt Anda di sini .

Shaggy
sumber
2
Terima kasih telah menggunakan Japt :-) Anda dapat menggunakannya ¸sebagai pengganti qS , yang seharusnya menghemat tiga byte di sini. (Lihat bagian "Pintasan Unicode" pada dokumen juru bahasa)
ETHproduksi
Bagus! Anda dapat menyimpan satu byte jika menggunakan -Sbendera .
Oliver
Saya menghitung 2 byte, @obarakon. Kecuali jika flag dimasukkan dalam hitungan byte, dalam hal ini akan menjadi 4 bye, bukan?
Shaggy
@ Shaggy Setiap bendera dihitung sebagai satu byte. Jadi -Sakan menjadi +1 ke jumlah total byte Anda.
Oliver
Ah, begitu. Apakah itu hal PPCG atau hal Japt?
Shaggy
2

Python 2 , 34 byte

lambda s:' '.join(s.split()[::-1])

Cobalah online!

benar-benar manusiawi
sumber
Bermain golf. > _> Yah ... yang lain hanya bekerja di Python 3 ...
totallyhuman
2

05AB1E , 4 byte

#Rðý

Catatan: Hanya akan berfungsi untuk 2 kata atau lebih. +1 byte jika ini tidak OK.

Cobalah online!

Okx
sumber
Saya melihat unicode, apakah benar-benar 4 byte?
val berkata Reinstate Monica
Ya, 05AB1E menggunakan codepage
kalsowerus
#R¸»alternatif solusi 4-byte: P.
Magic Octopus Mm
2

PHP, 47 Bytes

<?=join(" ",array_reverse(explode(" ",$argn)));

Cobalah online!

Jörg Hülsermann
sumber
2

GNU Make , 62 byte

$(if $1,$(call $0,$(wordlist 2,$(words $1),$1)) $(word 1,$1),)
eush77
sumber
2

Cubix , 48 byte

Hampir menyerah pada yang satu ini, tetapi akhirnya sampai di sana.

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

Cobalah online!

Ini memetakan ke sebuah kubus dengan panjang sisi tiga sebagai berikut

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

Langkah-langkah umum adalah:

  • Dapatkan semua input Adan balikkan Btumpukan
  • Pindahkan negatif qke bawah, tambahkan penghitung 0ke tumpukan. sedikit melompat-lompat di sini.
  • Temukan lingkaran ruang / akhir, juga menempatkan tumpukan dalam urutan cetak yang benar.
    • Tambahkan penghitung )dan ambil item penghitung dari tumpukant
    • Apakah ini ruang atau EOI S-?
    • Ulangi jika tidak
  • Cetak lingkaran kata
    • Penghitung penurunan (
    • Keluar loop jika penghitung !Uadalah 0
    • Tukar scounter dengan karakter di stack
    • Cetak okarakter dan keluarkan dari tumpukan;
    • Ulangi lingkaran
  • Dapatkan panjang tumpukan #dan pengurangan(
  • Periksa ?apakah 0 dan keluar @jika 0
  • Jika tidak, cetak spasi Sopembersihan ;;dan kembali ke loop pertama.

Saya telah melewatkan sejumlah langkah berlebihan, tetapi Anda dapat melihatnya Langkah Demi Langkah

MickyT
sumber
2

Mathematica, 35 byte

StringRiffle@Reverse@StringSplit@#&

Cobalah online!

J42161217
sumber
StringSplit[#]memisahkan spasi putih secara otomatis, jadi Anda tidak perlu menentukan " ".
Bukan pohon
2
benar! -5 byte!
J42161217
Ooh, dan saya pikir Anda dapat menyimpan byte lain menggunakan komposisi fungsi: StringRiffle@*Reverse@*StringSplit(sebut saja seperti StringRiffle@*Reverse@*StringSplit@"hello world")
Bukan pohon
2

Röda , 27 25 byte

2 byte disimpan berkat @fergusq

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

Cobalah online!

Fungsi ini mengambil input dari aliran input.

Penjelasan (kedaluwarsa)

{[[(_/" ")()|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 */
Kritixi Lithos
sumber
splitmenggunakan ruang sebagai pemisah default, jadi split()lebih pendek dari (_/" ")().
fergusq
1

Ohm , 4 byte

z]Qù

Cobalah online!

Penjelasan

z     Split the input on spaces.
 ]    Dump it onto the stack.
  Q   Reverse the stack.
   ù  Join the stack with spaces. Implicit output.
Kucing Bisnis
sumber
1

CJam , 7 byte

qS/W%S*

Cobalah online!

Penjelasan

q        e# Read input
 S/      e# Split on spaces
   W%    e# Reverse
     S*  e# Join with spaces
Kucing Bisnis
sumber
1

J , 6 byte

|.&.;:

Cobalah online! Ini terbalik ( |.) di bawah ( &.) kata-kata ( ;:). Yaitu, pisahkan kalimat menjadi kata-kata, balikkan, dan gabungkan kalimat itu lagi.

Conor O'Brien
sumber
1

Gema, 29 karakter

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

Contoh dijalankan:

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

Java 8, 62 byte

s->{String r="";for(String x:s.split(" "))r=x+" "+r;return r;}

Coba di sini.

Java 7, 77 byte

String c(String s){String r="";for(String x:s.split(" "))r=x+" "+r;return r;}

Coba di sini.

Kevin Cruijssen
sumber
1

Perl 6 , 14 byte

{~[R,] .words}

Cobalah

Diperluas:

{              # 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 $_
}
Brad Gilbert b2gills
sumber
1

Java 8, 53 57 byte

Lambda + Stream API

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

Mengikuti saran Selim, kami hanya menjatuhkan 4 byte

pengguna902383
sumber
1
Hemat 4 byte dengan menggunakan Stream.ofalih-alih Arrays.stream: -)
Selim
1

Vim, 20 byte

:s/ /\r/g|g/^/m0<cr>vGJ

Ini lebih pendek dari jawaban vim lainnya.

Cobalah online!

DJMcMayhem
sumber
1

Pyth, 3 byte

_cw

Jawaban Pyth pertama saya, satu byte lebih pendek dari jawaban @ notjagan!

Dijelaskan:

 cw # Split the input by space (same as Python's string.split())
_   # Reverses the array
    # Pyth prints implicitly.
OldBunny2800
sumber