Di chat, kita sering cepat-typers dan tidak benar-benar melihat urutan dari huruf sebelum posting pesan. Karena kita malas, kita membutuhkan program yang secara otomatis menukar dua huruf terakhir dengan kata-kata kita, tetapi karena kita tidak ingin merespons terlalu terlambat, kodenya harus pendek.
Tugas Anda, jika Anda ingin menerimanya, adalah menulis program yang membalik dua huruf terakhir dari setiap kata dalam string yang diberikan (sehingga kata Thansk
berubah menjadi Thanks
). Sebuah kata adalah urutan dua atau lebih huruf dalam alfabet bahasa Inggris yang dibatasi oleh satu spasi.
String / daftar karakter yang Anda terima sebagai input dijamin hanya berisi karakter dan spasi alfabet (ASCII [97 - 122], [65 - 90] dan 32).
Anda dapat mengambil input dan memberikan output melalui metode standar apa pun , dalam bahasa pemrograman apa pun , sambil memperhatikan bahwa celah ini dilarang secara default.
Output mungkin memiliki satu trailing space dan / atau satu trailing newline.
Input akan selalu berisi kata-kata saja (dan spasi yang sesuai) dan akan terdiri dari setidaknya satu kata.
Ini adalah kode-golf, jadi pengiriman terpendek (skor dalam byte), dalam setiap bahasa menang!
Uji kasus
Perhatikan bahwa string dikelilingi dengan tanda kutip untuk keterbacaan.
Input -> Output "Thansk" -> "Terima kasih" "Youer welcoem" -> "Terima kasih kembali" "Ini apel" -> "Ini appel" "Flippign Lettesr Aroudn" -> "Membalik Surat Sekitar" "tAtUaN chALlEneg dengan swappde lettesR" -> "teHd chALlEnge dengan bertukar letteRs"
Atau, untuk kenyamanan test suite, berikut adalah input dan output yang sesuai secara terpisah:
Bahasa thans Selamat datang Ini sebuah apel Flippign Lettesr Aroudn TANTANGAN KITA SENDIRI DENGAN SENDIRI
Terima kasih Sama-sama Ini si appel Membalik Surat Sekitar BEGITU DARAH DENGAN KETERBUKAAN bertukar
Terima kasih kepada DJMcMayhem untuk judulnya. Ini awalnya CMC .
Jawaban:
V , 4
5byteCobalah online!
||
menunjukkan kursorBuffer dimulai dengan
|w|ord and more words
dan kursor berada pada karakter pertama.Secara rekursif
ò
pergi ke
e
menemukan katawor|d| and more words
hapus
X
karakter di sebelah kiri kursorwo|d| and more words
p
tempelkan di atas karakter berikutnyawod|r| and more words
Akhir yang tersirat
ò
, ulangi proses yang sama dengan kata lain sampai akhir buffer tercapaisumber
ò
perintah github.com/DJMcMayhem/V/wiki/Normal-Mode-CommandsJelly , 7 byte
Tautan monadik yang mengambil dan mengembalikan daftar karakter
Cobalah online!
Bagaimana?
sumber
Ḳ2œ?ЀK
juga berfungsi dan menggunakan satu quick.Brain-Flak , 122 byte
Cobalah online!
Bahasa terburuk untuk pekerjaan itu :)
Dapatdibaca Versi yang sedikit lebih mudah dibaca:sumber
Haskell , 40 byte
Cobalah online! Contoh penggunaan:
(f=<<).words $ "abc xyz"
hasil"acb xzy "
.sumber
Retina , 13 byte
Cobalah online! Tautan termasuk kasus uji.
sumber
Python 3 , 50 byte
Cobalah online!
Jawaban ini menyalahgunakan perilaku cetak Python 3: Banyak argumen dicetak dengan satu spasi di antaranya. Tentu saja, kita tidak bisa hanya memberikan beberapa argumen karena kita tidak tahu berapa banyak kata yang akan dimasukkan dalam input. Jadi kami menggunakan operator percikan . Pada dasarnya
persis sama dengan
Penyalahgunaan yang membuat program lengkap ternyata lebih pendek dari fungsi / lambda di mana kita harus menggunakan
' '.join
atau yang serupa.sumber
for w in input().split():print w[:-2]+w[:-3:-1],
. Dalam Python 3, mengekstraksi dua karakter terakhir akan bekerja dengan baikprint(*(''.join(a)+c+b for*a,b,c in input().split()))
kecuali yanga
perlu dibuat kembali menjadi string.Matlab (R2016b),
5150 byteDisimpan
4950 (!) Byte berkat @Giuseppe.Dan jawaban saya sebelumnya:
Matlab (R2016b), 100 byte
(Hanya untuk bersenang-senang: P)
Penjelasan:
sumber
regexprep
bekerja di sini? Sesuatu sepertiregexprep(a,'(\w*)(\w)(\w)','\1\3\2')
?$1
, dan tidak\1
, jadi itu akan terjadiregexprep(a,'(\w*)(\w)(\w)','$1$3$2')
.function s(a),regexprep(a,'(\w)(\w)( |$)','$2$1 ')
masih byte lebih pendek!C,
625854 byteTerima kasih kepada @Dennis karena telah menghemat
empatdelapan byte!Cobalah online!
sumber
Prolog (SWI) , 60 byte
Cobalah online!
Penjelasan
Pertama kita mendefinisikan kasus dasar:
Ini berarti bahwa dua huruf terakhir akan selalu ditukar.
Lalu kami menentukan apa yang terjadi jika kami berada tepat di sebelah spasi:
Dua string cocok jika tepat sebelum spasi, huruf-huruf sebelum spasi diganti dan sisanya jika string cocok. Kami kemudian gunakan
!
untuk memotong.Kasus terakhir kami adalah jika kami tidak berada di sebelah spasi, dua huruf pertama harus cocok.
sumber
Bahasa Wolfram , 117 byte
Cobalah online!
Diterapkan ke string uji.
sumber
R ,
1115141 byteAtas perkenan @Giuseppe, sebuah pendekatan regex yang menghancurkan metode lama saya keluar dari air.
sumber
APL (Dyalog Classic) , 28 byte
⎕ML
dan⎕IO
keduanya1
,Cobalah online!
Penjelasan
... (,⊂⍨⊣=,) ...
Membagi (sambil menjaga perbatasan, dan menambahkan perbatasan ke awal) ...... ⍞
... input ...... ' ' ...
... di ruang angkasa.... ( ... )¨ ...
Kemudian, untuk setiap elemen itu:... , ...
Menggabungkan ...... (¯2↓⊢) ...
... setiap item kecuali dua yang terakhir ...... 2↑⌽ ...
... dengan kebalikan dari dua elemen terakhir.1↓∊ ...
Akhirnya, kembalikan semua kecuali elemen pertama dari hasil yang diratakan.sumber
Funky , 34 byte
Cobalah online!
sumber
Haskell , 45 byte
-2 byte terima kasih kepada H.PWiz.
Cobalah online!
sumber
J ,
20 1911 byteKredit ke @Bolce Bussiere
Cobalah online!
sumber
(1&A.&.>)&.;:
Alice , 24 byte
Cobalah online!
Penjelasan
Ini membentuk sebuah loop di mana tubuh loop adalah potongan Ordinal linear dan kami mengeksekusi
' o
dalam mode Kardinal antara setiap dua iterasi loop. Yang terakhir hanya mencetak spasi.Membuka struktur zigzag dari kode Ordinal, badan loop linear sebenarnya terlihat seperti ini:
Hancurkan ini:
sumber
h~Z
) alih-alih empat (e10x
), tapi saya tidak melihat cara untuk menyesuaikan tata letak untuk benar-benar menyimpan byte secara keseluruhan dengan itu.brainfuck ,
109100 byteSunting: tidak harus menangani satu kata kata
Cobalah online!
Mencetak spasi tambahan
Bagaimana itu bekerja
Versi sebelumnya, 109 byte
Cobalah online!
sumber
QuadR , 8 byte
Cobalah online!
sumber
PHP ,
119107 byteSunting: terima kasih sepenuhnya kepada manusia
Cobalah online!
sumber
$word
nama variabel karakter tunggal?fgets(STDIN)
dapat dihilangkan atau diganti$x
juga, seperti tidak semua jawaban menghitung input untuk jawaban merekatrim()
seharusnya tidak perlu.Haskell , 41 byte
Cobalah online!
Output dengan spasi tambahan.
Yang berulang
' ':r
terlihat boros. Tetapia%(b:t@(' ':r))=b:a:t
panjangnya sama dana%(b:t)|' ':_<-t=b:a:t
satu byte lebih panjang.Haskell , 41 byte
Cobalah online!
sumber
sed ,
2017 + 1 (-r) = 18 byteCobalah online!
sumber
|$
. Itu tidak melakukan apa-apa. (Untuk itu untuk melakukan apa yang Anda harapkan Anda butuhkan(.)(.)(\b|$)
, tapi itu tidak perlu karena\b
sudah cocok dengan akhir string.)PHP, 65 byte
membutuhkan PHP 7.1 (atau lebih baru)
mengambil kalimat sebagai argumen baris perintah terpisah. Jalankan dengan
-nr
.bekerja pada string tunggal, 77 +1 byte :
Jalankan sebagai pipa dengan
-nR
.... atau coba online .
sumber
Java 8, 35 byte
Port of @TaylorScott Google Sheets menjawab , setelah saya bermain golf dua byte. EDIT: Saya melihat sekarang ini adalah port jawaban Neil 's Retina setelah dua byte golf saya.
Penjelasan:
Cobalah online.
sumber
Google Sheets, 33 Bytes
Fungsi lembar kerja anonim yang mengambil input dari sel
A1
dan output ke sel panggilan-2 Bytes Terima kasih kepada @KevinCruijssen untuk penggunaan
(.)
lebih(\w)
sumber
(\w)
bisa bermain golf(.)
jika saya tidak salah. The\b
sudah merupakan indikasi untuk mencari kata-kata saja. (Meskipun tidak sepenuhnya yakin, tetapi berfungsi di Jawa.)JavaScript (Node.js) ,
383632 byteCobalah online!
Pendekatan RegExp dengan hormat @Giuseppe (meskipun saya memikirkan ini secara independen), dengan asumsi kata-kata dipisahkan oleh hanya satu ruang
-2 untuk hanya mempertimbangkan 1 ruang dan menambahkan ruang tambahan
-4 Terima kasih @Shaggy
sumber
s=>s.replace(/(.)(.)( +|$)/g,"$2$1$3")
.s=>s.replace(/(.)(.)(\s|$)/g,"$2$1$3")
ab abc abcd abcde abcdef
Apakahab_
,bc_
,cd_
,de_
,___
,ef_
,___
F=s=>s.replace(/(.)(.)(?!\w)/g,"$2$1")
panjang yang samaK (oK) ,
2322 byteCobalah online!
Contoh:
Penjelasan:
Solusi Port of FrownyFrog untuk menghemat 1 byte .
Saya akan kembali ke sini.
Solusi sebelumnya:
" "/-2{(x_y),|x#y}'" "\
23 bytesumber
05AB1E , 7 byte
Cobalah online!
-1 terima kasih kepada Magic Octopus Mm .
Mencetak satu spasi tambahan.
sumber
`
.Jelly , 10 byte
Cobalah online!
sumber
SNOBOL4 (CSNOBOL4) ,
136119 byteCobalah online!
Mencetak dengan spasi tambahan.
Anda tahu Anda telah melakukan sesuatu yang salah ketika sebuah bahasa adalah backronym untuk StriNg Oriented dan symBOlic Language dan kode Anda lebih panjang dari Brain-Flak :(sekarang ini sedikit lebih baik.Line
B
mengambilI
dan mengganti(alphabetic characters saved as Y)(some number of spaces)
dengan string kosong.Baris berikut ekstrak 2 karakter terakhir
Y
sebagaiZ
dan menggantikan mereka sebagaiZ
terbalik, maka merangkai baris berikutnyaO
,Y
dan karakter spasi tunggal.Akhirnya, ia mencetak ketika
I
tidak lagi cocok dengan pola yang diperlukan sesuaiB
.sumber
Perl 5 , 19 + 1 (
-p
) = 20 byteCobalah online!
sumber