Atau, "Tukar huruf pertama dan terakhir dari setiap kata"
Tantangan Anda adalah, mengingat serangkaian karakter ASCII alfabet serta satu karakter lain untuk digunakan sebagai pembatas (untuk memisahkan setiap kata), menukar huruf pertama dan terakhir dari setiap kata. Jika ada kata satu karakter, biarkan saja.
Contoh / testcases menggunakan huruf kecil dan spasi sebagai pembatas.
Anda tidak perlu menangani tanda baca; semua input hanya akan terdiri dari huruf a sampai z, dipisahkan oleh pembatas, semua kasus seragam.
Misalnya, dengan string "hello world":
Input string: "hello world"
Identify each word: "[hello] [world]"
Identify the first and last letters of each word: "[[h]ell[o]] [[w]orl[d]]"
Swap the first letters of each word: "[[o]ell[h]] [[d]orl[w]]"
Final string: "oellh dorlw"
CATATAN: pembatas tidak perlu dimasukkan secara terpisah. Pembatas hanyalah karakter yang digunakan untuk memisahkan kata-kata. Itu bisa apa saja. Saya ingin membiarkan opsi terbuka untuk pegolf kreatif, jadi saya tidak ingin membatasi hanya ruang atau garis baru. Pembatas hanyalah karakter yang memisahkan kata dalam string input.
Kasus uji:
"swap the first and last letters of each word" -> "pwas eht tirsf dna tasl setterl fo hace dorw"
"hello world" -> "oellh dorlw"
"test cases" -> "test sasec"
"programming puzzles and code golf" -> "grogramminp suzzlep dna eodc folg"
"in a green meadow" -> "ni a nreeg weadom"
"yay racecar" -> "yay racecar"
Hello, world!
menjadi,elloH !orldw
(menukar tanda baca sebagai huruf) atauoellH, dorlw!
(mempertahankan tanda baca di tempat)?Jawaban:
TeX, 216 byte (masing-masing 4 baris, 54 karakter)
Karena ini bukan tentang jumlah byte, ini tentang kualitas output typeset :-)
Cobalah secara Online! (Overleaf; tidak yakin cara kerjanya)
File tes lengkap:
Keluaran:
Untuk LaTeX Anda hanya perlu boilerplate:
Penjelasan
TeX adalah binatang aneh. Membaca kode normal dan memahaminya adalah suatu prestasi tersendiri. Memahami kode TeX yang dikaburkan melangkah lebih jauh. Saya akan mencoba membuat hal ini dapat dimengerti oleh orang-orang yang juga tidak mengenal TeX, jadi sebelum kita mulai di sini adalah beberapa konsep tentang TeX untuk membuat hal-hal lebih mudah diikuti:
Untuk (tidak begitu) pemula TeX mutlak
Pertama, dan yang paling item yang penting dalam daftar ini: kode tidak tidak harus dalam bentuk persegi panjang, meskipun budaya pop mungkin menyebabkan Anda berpikir begitu .
TeX adalah bahasa ekspansi makro. Anda dapat, sebagai contoh, mendefinisikan
\def\sayhello#1{Hello, #1!}
dan kemudian menulis\sayhello{Code Golfists}
untuk mendapatkan TeX untuk dicetakHello, Code Golfists!
. Ini disebut "undelimited macro", dan untuk memberikannya parameter pertama (dan hanya, dalam hal ini) Anda melampirkannya dalam kurung kurawal. TeX menghapus kawat gigi itu ketika makro mengambil argumen. Anda dapat menggunakan hingga 9 parameter:\def\say#1#2{#1, #2!}
lalu\say{Good news}{everyone}
.Counterpart macro undelimited yang, tidak mengejutkan, yang dibatasi :) Anda bisa membuat definisi sebelumnya anak laki-laki lebih semantical :
\def\say #1 to #2.{#1, #2!}
. Dalam hal ini parameter diikuti oleh apa yang disebut teks parameter . Teks parameter tersebut membatasi argumen makro (#1
dibatasi oleh␣to␣
, spasi yang disertakan, dan#2
dibatasi oleh.
). Setelah definisi itu, Anda dapat menulis\say Good news to everyone.
, yang akan diperluas keGood news, everyone!
. Bagus bukan? :) Namun argumen yang dibatasi adalah (mengutip TeXbook ) “urutan token terpendek (mungkin kosong) dengan{...}
grup bertumpuk dengan benar yang diikuti dalam input oleh daftar token non-parameter khusus ini”. Ini berarti perluasan dari\say Let's go to the mall to Martin
akan menghasilkan kalimat yang aneh. Dalam hal ini Anda akan perlu untuk “menyembunyikan” yang pertama␣to␣
dengan{...}
:\say {Let's go to the mall} to Martin
.Sejauh ini baik. Sekarang segalanya mulai menjadi aneh. Ketika TeX membaca sebuah karakter (yang didefinisikan oleh "kode karakter"), TeX akan memberikan karakter itu "kode kategori" (catcode, untuk teman-teman :) yang mendefinisikan apa arti karakter itu. Kombinasi kode karakter dan kategori ini membuat token (lebih lanjut tentang itu di sini , misalnya). Yang menarik bagi kami di sini pada dasarnya adalah:
catcode 11 , yang mendefinisikan token yang dapat membuat urutan kontrol (nama mewah untuk makro). Secara default semua huruf [a-zA-Z] adalah catcode 11, jadi saya bisa menulis
\hello
, yang merupakan satu urutan kontrol tunggal, sedangkan\he11o
urutan kontrol\he
diikuti oleh dua karakter1
, diikuti oleh hurufo
, karena1
bukan catcode 11. Jika saya lakukan\catcode`1=11
, sejak saat itu\he11o
akan menjadi satu urutan kontrol. Satu hal penting adalah bahwa kode-kode ditetapkan ketika TeX pertama kali melihat karakter di tangan, dan kode seperti itu dibekukan ... SELAMANYA! (syarat dan ketentuan berlaku)catcode 12 , yang merupakan sebagian besar karakter lain, seperti
0"!@*(?,.-+/
dan sebagainya. Mereka adalah jenis catcode yang paling tidak istimewa karena hanya berfungsi untuk menulis hal-hal di atas kertas. Tapi, hei, siapa yang menggunakan TeX untuk menulis?!? (sekali lagi, syarat dan ketentuan berlaku)catcode 13 , yang mana sih :) Sungguh. Berhentilah membaca dan lakukan sesuatu dari hidup Anda. Anda tidak ingin tahu apa itu catcode 13. Pernah dengar hari Jumat, tanggal 13? Tebak dari mana namanya berasal! Lanjutkan dengan risiko Anda sendiri! Karakter catcode 13, juga disebut karakter "aktif", bukan hanya karakter lagi, itu adalah makro itu sendiri! Anda dapat mendefinisikannya untuk memiliki parameter dan memperluas ke sesuatu seperti yang kita lihat di atas. Setelah Anda melakukan
\catcode`e=13
Anda berpikir Anda bisa melakukannya\def e{I am the letter e!}
, TAPI. KAMU. TIDAK BISA!e
bukan surat lagi, jadi\def
bukankah\def
Anda tahu, itu\d e f
! Oh, pilih surat lain yang Anda katakan? Baik!\catcode`R=13 \def R{I am an ARRR!}
. Baiklah, Jimmy, coba! Saya berani Anda melakukan itu dan menulisR
kode Anda! Itulah yang dimaksud dengan catcode 13. SAYA TENANG! Mari kita lanjutkan.Oke, sekarang untuk pengelompokan. Ini cukup mudah. Tugas apa pun (
\def
merupakan operasi penugasan,\let
(kami akan membahasnya) adalah tugas lain) yang dilakukan dalam suatu grup dikembalikan ke posisi semula sebelum grup itu dimulai kecuali tugas itu bersifat global. Ada beberapa cara untuk memulai grup, salah satunya adalah dengan karakter catcode 1 dan 2 (oh, kode cat lagi). Secara default{
adalah catcode 1, atau begin-group, dan}
catcode 2, atau end-group. Contoh:\def\a{1} \a{\def\a{2} \a} \a
Ini mencetak1 2 1
. Di luar grup\a
ada1
, lalu di dalamnya didefinisikan ulang2
, dan ketika grup berakhir, ia dikembalikan ke1
.The
\let
operasi tugas operasi lain seperti\def
, tapi agak berbeda. Dengan\def
Anda menentukan makro yang akan diperluas ke hal-hal, dengan\let
Anda membuat salinan dari hal-hal yang sudah ada. Setelah\let\blub=\def
(=
opsional) Anda dapat mengubah awale
contoh dari item catcode 13 di atas\blub e{...
dan bersenang-senang dengan yang itu. Atau lebih baik, bukannya melanggar hal-hal yang Anda dapat memperbaiki (yang akan Anda lihat itu!) YangR
misalnya:\let\newr=R \catcode`R=13 \def R{I am an A\newr\newr\newr!}
. Pertanyaan cepat: dapatkah Anda mengganti nama\newR
?Akhirnya, yang disebut "ruang palsu". Ini semacam topik yang tabu karena ada orang yang mengklaim bahwa reputasi yang diperoleh di TeX - LaTeX Stack Exchange dengan menjawab pertanyaan "ruang palsu" tidak boleh dipertimbangkan, sementara yang lain dengan sepenuh hati tidak setuju. Dengan siapa Anda setuju? Tempatkan taruhan Anda! Sementara itu: TeX memahami jeda baris sebagai spasi. Cobalah untuk menulis beberapa kata dengan jeda baris (bukan baris kosong ) di antaranya. Sekarang tambahkan
%
di akhir baris ini. Sepertinya Anda “berkomentar” pada ruang-ruang ujung ini. Itu dia :)(Semacam) tidak mengubah kode
Mari kita buat persegi panjang itu menjadi sesuatu (bisa dibilang) lebih mudah diikuti:
Penjelasan dari setiap langkah
setiap baris berisi satu instruksi tunggal. Mari kita pergi satu per satu, membedah mereka:
{
Pertama-tama kita memulai sebuah kelompok untuk menjaga beberapa perubahan (yaitu perubahan catcode) lokal sehingga mereka tidak mengacaukan teks input.
\let~\catcode
Pada dasarnya semua kode kebingungan TeX dimulai dengan instruksi ini. Secara default, baik dalam TeX polos dan LaTeX,
~
karakter adalah karakter aktif yang dapat dibuat menjadi makro untuk digunakan lebih lanjut. Dan alat terbaik untuk mengubah kode TeX adalah perubahan catcode, jadi ini umumnya pilihan terbaik. Sekarang alih-alih\catcode`A=13
kita dapat menulis~`A13
(=
ini opsional):~`A13
Sekarang surat itu
A
adalah karakter aktif, dan kita dapat mendefinisikannya untuk melakukan sesuatu:\defA#1{~`#113\gdef}
A
sekarang merupakan makro yang mengambil satu argumen (yang seharusnya merupakan karakter lain). Pertama-tama catcode argumen diubah menjadi 13 untuk membuatnya aktif:~`#113
(ganti~
dengan\catcode
dan tambahkan=
dan Anda punya :)\catcode`#1=13
. Akhirnya ia meninggalkan\gdef
(global\def
) dalam aliran input. Singkatnya,A
buat karakter lain aktif dan mulai definisinya. Mari kita coba:AGG#1{~`#113\global\let}
AG
"aktifkan" pertamaG
dan lakukan\gdef
, yang diikuti oleh yang berikutnyaG
memulai definisi. DefinisiG
ini sangat mirip denganA
, kecuali bahwa alih-alih\gdef
itu melakukan\global\let
(tidak ada\glet
seperti\gdef
). Singkatnya,G
mengaktifkan karakter dan membuatnya menjadi sesuatu yang lain. Mari kita buat pintasan untuk dua perintah yang akan kita gunakan nanti:GFF\else
GHH\fi
Sekarang alih-alih
\else
dan\fi
kita cukup menggunakanF
danH
. Jauh lebih pendek :)AQQ{Q}
Sekarang kita gunakan
A
lagi untuk mendefinisikan makro lainQ
,. Pernyataan di atas pada dasarnya tidak (dalam bahasa yang kurang dikaburkan)\def\Q{\Q}
. Ini bukan definisi yang sangat menarik, tetapi memiliki fitur yang menarik. Kecuali Anda ingin memecah beberapa kode, satu-satunya makro yang berkembangQ
adalahQ
dirinya sendiri, sehingga berfungsi seperti penanda unik (disebut quark ). Anda bisa menggunakan\ifx
persyaratan untuk menguji apakah argumen makro adalah quark dengan\ifx Q#1
:AII{\ifxQ}
sehingga Anda dapat yakin bahwa Anda menemukan spidol tersebut. Perhatikan bahwa dalam definisi ini saya menghapus ruang antara
\ifx
danQ
. Biasanya ini akan menyebabkan kesalahan (perhatikan bahwa highlight sintaksis berpikir itu\ifxQ
adalah satu hal), tetapi karena sekarangQ
adalah katak 13 maka tidak dapat membentuk urutan kontrol. Namun, berhati-hatilah untuk tidak memperluas kuark ini atau Anda akan terjebak dalam loop tak terbatas karenaQ
memperluasQ
yang memperluas keQ
mana ...Sekarang setelah pendahuluan telah selesai, kita dapat pergi ke algoritma yang tepat untuk mengatur setterl. Karena tokenization TeX, algoritma harus ditulis mundur. Ini karena pada saat Anda melakukan definisi, TeX akan melakukan tokenize (menetapkan kode) ke karakter dalam definisi menggunakan pengaturan saat ini jadi, misalnya, jika saya lakukan:
hasilnya adalah
E1
, sedangkan jika saya mengubah urutan definisi:outputnya adalah
11
. Ini karena pada contoh pertamaE
definisi dalam tokenized sebagai huruf (catcode 11) sebelum perubahan catcode, jadi itu akan selalu menjadi hurufE
. Namun, pada contoh kedua,E
pertama kali diaktifkan, dan baru kemudian\one
ditetapkan, dan sekarang definisi tersebut berisi katak 13E
yang diperluas1
.Namun, saya akan mengabaikan fakta ini dan menyusun ulang definisi untuk memiliki urutan logis (tetapi tidak berfungsi). Dalam paragraf berikut Anda dapat mengasumsikan bahwa surat-surat
B
,C
,D
, danE
aktif.\gdef\S#1{\iftrueBH#1 Q }
(perhatikan ada bug kecil di versi sebelumnya, itu tidak mengandung ruang terakhir dalam definisi di atas. Saya hanya memperhatikannya saat menulis ini. Baca terus dan Anda akan melihat mengapa kita membutuhkannya untuk menghentikan makro dengan benar. )
Pertama kita mendefinisikan makro tingkat pengguna
\S
,. Yang ini seharusnya tidak menjadi karakter aktif untuk memiliki sintaks ramah (?), Jadi makro untuk gwappins dan setterl adalah\S
. Makro dimulai dengan kondisi selalu benar\iftrue
(akan segera menjadi jelas mengapa), dan kemudian memanggilB
makro diikuti olehH
(yang telah kita tentukan sebelumnya\fi
) untuk mencocokkan\iftrue
. Lalu kita meninggalkan argumen makro#1
diikuti oleh spasi dan oleh quarkQ
. Misalkan kita gunakan\S{hello world}
, maka input streamakan terlihat seperti ini:\iftrue BHhello world Q␣
(Saya mengganti ruang terakhir dengan␣
sehingga rendering situs tidak memakannya, seperti yang saya lakukan pada versi kode sebelumnya).\iftrue
itu benar, jadi itu mengembang dan kita dibiarkanBHhello world Q␣
. TeX tidak menghapus\fi
(H
) setelah kondisi dievaluasi, melainkan membiarkannya di sana sampai benar\fi
- benar diperluas. SekarangB
makro diperluas:ABBH#1 {HI#1FC#1|BH}
B
adalah makro terbatas yang memiliki parameter teksH#1␣
, jadi argumennya adalah apa pun yang ada di antaraH
dan spasi. Melanjutkan contoh di atas aliran input sebelum perluasanB
isBHhello world Q␣
.B
diikuti olehH
, sebagaimana mestinya (jika TeX akan menimbulkan kesalahan), maka ruang berikutnya adalah antarahello
danworld
, begitu#1
juga katahello
. Dan di sini kita harus membagi teks input di spasi. Yay: D PerluasanB
menghapus segala sesuatu sampai ke ruang pertama dari input stream dan menggantikan denganHI#1FC#1|BH
dengan#1
menjadihello
:HIhelloFChello|BHworld Q␣
. Perhatikan bahwa ada yang baruBH
nanti dalam aliran input, untuk melakukan rekursi ekorB
dan memproses kata-kata selanjutnya. Setelah kata ini diproses,B
proses kata berikutnya hingga kata yang akan diproses adalah kuarkQ
. Ruang terakhir setelahQ
diperlukan karena makro dibatasiB
membutuhkan satu di akhir argumen. Dengan versi sebelumnya (lihat sunting histori) kode akan bertingkah jika Anda menggunakan\S{hello world}abc abc
(ruang antaraabc
s akan lenyap).OK, kembali ke input stream:
HIhelloFChello|BHworld Q␣
. Pertama adaH
(\fi
) yang melengkapi inisial\iftrue
. Sekarang kita punya ini (pseudocoded):The
I...F...H
berpikir sebenarnya adalah\ifx Q...\else...\fi
struktur. The\ifx
pemeriksaan tes jika (pertama tanda yang) kata meraih adalahQ
quark. Jika tidak ada yang lain untuk melakukan dan berakhir eksekusi, jika apa yang tersisa adalah:Chello|BHworld Q␣
. SekarangC
diperluas:ACC#1#2|{D#2Q|#1 }
Argumen pertama
C
adalah undelimited, jadi kecuali bersiap akan menjadi tanda tunggal, Argumen kedua dibatasi oleh|
, jadi setelah ekspansiC
(dengan#1=h
dan#2=ello
) input stream adalah:DelloQ|h BHworld Q␣
. Perhatikan bahwa lain|
yang diletakkan di sana, danh
darihello
diletakkan setelah itu. Setengah swapping dilakukan; huruf pertama ada di akhir. Di TeX, mudah untuk mengambil token pertama dari daftar token. Makro sederhana\def\first#1#2|{#1}
mendapatkan huruf pertama saat Anda menggunakan\first hello|
. Yang terakhir adalah masalah karena TeX selalu mengambil daftar token "terkecil, mungkin kosong" sebagai argumen, jadi kita perlu beberapa solusi. Item berikutnya dalam daftar token adalahD
:ADD#1#2|{I#1FE{}#1#2|H}
D
Makro ini adalah salah satu solusi dan berguna dalam kasus tunggal di mana kata memiliki satu huruf. Andaikanhello
kita tidak melakukannyax
. Dalam hal ini input stream akanDQ|x
, makaD
akan memperluas (dengan#1=Q
, dan#2
mengosongkan) ke:IQFE{}Q|Hx
. Ini mirip dengan blokI...F...H
(\ifx Q...\else...\fi
) diB
, yang akan melihat bahwa argumen adalah quark dan akan mengganggu eksekusi hanya menyisakanx
untuk pengaturan huruf. Dalam kasus lain (kembali kehello
contoh),D
akan memperluas (dengan#1=e
dan#2=lloQ
) ke:IeFE{}elloQ|Hh BHworld Q␣
. Sekali lagi,I...F...H
akan memeriksaQ
tapi akan gagal dan mengambil\else
cabang:E{}elloQ|Hh BHworld Q␣
. Sekarang bagian terakhir dari hal ini, theE
makro akan berkembang:AEE#1#2#3|{I#3#2#1FE{#1#2}#3|H}
Teks parameter di sini sangat mirip dengan
C
danD
; argumen pertama dan kedua tidak didahulukan, dan yang terakhir dibatasi oleh|
. Input stream terlihat seperti ini:E{}elloQ|Hh BHworld Q␣
, kemudianE
mengembang (dengan#1
kosong,#2=e
dan#3=lloQ
):IlloQeFE{e}lloQ|HHh BHworld Q␣
. LainI...F...H
blok cek untuk quark (yang melihatl
dan kembalifalse
):E{e}lloQ|HHh BHworld Q␣
. SekarangE
memperluas lagi (dengan#1=e
kosong,#2=l
dan#3=loQ
):IloQleFE{el}loQ|HHHh BHworld Q␣
. Dan lagiI...F...H
. Makro melakukan beberapa iterasi lagi sampaiQ
akhirnya ditemukan dantrue
cabang diambil:E{el}loQ|HHHh BHworld Q␣
->IoQlelFE{ell}oQ|HHHHh BHworld Q␣
->E{ell}oQ|HHHHh BHworld Q␣
->IQoellFE{ello}Q|HHHHHh BHworld Q␣
. Sekarang quark ditemukan dan mengembang bersyarat untuk:oellHHHHh BHworld Q␣
. Fiuh.Oh, tunggu, apa ini? SURAT NORMAL? Oh Boy! Surat-surat yang akhirnya menemukan dan TeX menuliskan
oell
, kemudian sekelompokH
(\fi
) ditemukan dan diperluas (apa-apa) meninggalkan input stream dengan:oellh BHworld Q␣
. Sekarang kata pertama memiliki huruf pertama dan terakhir ditukar dan apa TeX menemukan selanjutnya adalah yang lainB
untuk mengulangi seluruh proses untuk kata berikutnya.}
Akhirnya kami mengakhiri grup mulai kembali ke sana sehingga semua tugas lokal dibatalkan. Tugas lokal adalah perubahan catcode huruf
A
,B
,C
, ... yang dibuat macro sehingga mereka kembali ke surat arti normal mereka dan dapat digunakan dengan aman dalam teks. Dan itu saja. Sekarang\S
makro yang didefinisikan kembali di sana akan memicu pemrosesan teks seperti di atas.Satu hal yang menarik tentang kode ini adalah bahwa kode ini sepenuhnya dapat dikembangkan. Artinya, Anda bisa menggunakannya dengan aman dalam memindahkan argumen tanpa khawatir itu akan meledak. Anda bahkan dapat menggunakan kode untuk memeriksa apakah huruf terakhir dari sebuah kata sama dengan yang kedua (untuk alasan apa pun Anda membutuhkannya) dalam
\if
ujian:Maaf untuk penjelasan bertele-tele (mungkin terlalu). Saya mencoba membuatnya sejelas mungkin untuk non TeXies juga :)
Ringkasan untuk yang tidak sabar
Makro
\S
mendahului input dengan karakter aktifB
yang mengambil daftar token yang dibatasi oleh ruang final dan meneruskannya keC
.C
mengambil token pertama dalam daftar itu dan memindahkannya ke akhir daftar token dan memperluasD
dengan apa yang tersisa.D
memeriksa apakah "apa yang tersisa" kosong, dalam hal ditemukan satu kata, tidak melakukan apa-apa; jika tidak mengembangE
.E
loop melalui daftar token sampai menemukan huruf terakhir dalam kata, ketika ditemukan meninggalkan huruf terakhir, diikuti oleh tengah kata, yang kemudian diikuti oleh huruf pertama yang tersisa di ujung token stream olehC
.sumber
JavaScript (ES6),
3936 byteDisimpan 3 byte berkat @FryAmTheEggman
Menggunakan umpan baris sebagai pemisah.
Cobalah online!
sumber
(.)(.*)(.)
Apakah itu emotikon Total Recall?Retina ,
85 byteCobalah online!
Disimpan 3 byte berkat Kevin Cruijssen !
Menggunakan baris baru sebagai pemisah. Kami menggunakan tahap mundur Retina dan beberapa batasan. Batas pertama adalah yang cocok untuk menerapkan pembalikan, jadi kami memilih semuanya
,
. Lalu kami ingin huruf pertama dan terakhir dari setiap pertandingan ditukar, jadi kami mengambil setiap huruf dalam rentang,,
yang diterjemahkan ke kisaran dari awal hingga akhir dengan ukuran langkah nol.sumber
V
, tetapi tidak tahu itu bisa digunakan dengan indeks1,-2
seperti itu. Yang bagus!Pepe ,
107105 byteCobalah online!
Penjelasan:
Notasi pada komentar:
command-explanation -> (stack) // explanation
sumber
Python 3 ,
7258 byteCobalah online!
sumber
a
)laskelH , 71 byte
Cobalah online!
Contoh dalam / output:
sumber
where
klausa dapat dipindahkan ke penjaga yang mengikat untuk menghemat 5 byte: Cobalah secara online!05AB1E , 10 byte
Cobalah online!
-3 Terima kasih kepada @Kevin Cruijssen .
sumber
|ʒRćsRćJ,
loop_as_long_as_there_are_inputs
, maka saya akan tahu 8-byter:[RćsRćJ,
8-byter ini menggunakan[
tidak pernah output dalam teori Namun, hanya ketika Anda kehabisan memori atau waktu habis seperti pada TIO (dan itu membutuhkan trailing baris baru dalam input, jika tidak maka akan tetap menggunakan kata terakhir) ..ð¡
input kata tunggal, tetapið¡εćsÁì}ðý
juga bekerja pada 10 byte.J ,
2317 byteCobalah online!
sumber
1 A.
!1&A.&.(1&|.)
->({:,1|.}:)
dan kemudian Anda dapat menghapus::]
Ruby dengan
-p
,424129 byteCobalah online!
sumber
\w
s dengan.
s.Haskell, 54 byte
Cobalah online!
sumber
Japt
-S
, 7 byteCobalah
sumber
PowerShell , 37 byte
Cobalah online!
sumber
Stax , 8 byte
Jalankan dan debug itu
Menggunakan baris baru sebagai pemisah kata.
sumber
Ruang putih , 179 byte
Huruf
S
(spasi),T
(tab), danN
(baris baru) ditambahkan hanya sebagai penyorotan.[..._some_action]
ditambahkan sebagai penjelasan saja.Tab sebagai pembatas. Input harus mengandung baris baru (atau tab), jika tidak program tidak tahu kapan harus berhenti, karena mengambil input di Whitespace hanya dapat dilakukan satu karakter pada satu waktu.
Cobalah online (dengan spasi, tab, dan hanya baris baru).
Penjelasan dalam pseudo-code:
Program berakhir dengan kesalahan ketika mencoba membaca karakter ketika tidak ada yang diberikan dalam TIO (atau hang menunggu input di beberapa kompiler Whitespace seperti vii5ard ).
sumber
Bahasa Wolfram (Mathematica) , 58 byte
Cobalah online!
-22 byte dari @attinat
-12 byte dari @ M.Stern
sumber
StringReplace
denganStringExpression
sStringTake
sebagai gantiStringReplace
:StringRiffle[StringSplit@##~StringTake~{{-1},{2,-2},{1}},#2,""]&
StringReplace[#, a : u ~~ w : u .. ~~ b : u :> b <> w <> a /. {u -> Except@#2}] &
QuadR , 20 byte
Cukup buat tiga kelompok pengambilan yang terdiri dari 1, 0-atau-lebih, dan 1 karakter kata, lalu balikkan urutannya.
Cobalah online!
sumber
APL + MENANG, 50 byte
Meminta string dan menggunakan ruang sebagai pembatas.
Cobalah online! Atas perkenan Dyalog Classic
sumber
Japt
-S
, 10 byteYakin harus ada pendekatan yang lebih pendek (dan saya benar ) tetapi ini akan dilakukan untuk saat ini.
Cobalah
sumber
¸®Ì+Zs1J +Zg
¸®ÎiZÌ+Zs1J
.sed, 64 byte
sumber
.
alih-alih[[:alpha:]]
, tetapi sebenarnya harus[^ ]
, yang menguranginya menjadi 43, tetapi istirahat pada tanda baca dan semacamnya. Menggunakan[a-zA-Z]
membawanya hingga 55, pada titik mana saya hanya mendambakan entitas yang dapat dibaca manusia yang manis dan manis ...You do not need to handle punctuation; all of the inputs will only consist of the letters a through z, separated by a delimiter, all of a uniform case.
Dengan kata lain, Anda tidak perlu khawatir tentang tanda baca "melanggar" kode Anda dan bisa dengan aman pergi[^ ]
;)[^ ]
harus[^[:space:]]
yang membawanya menjadi 67 karakter.sed , 34 byte
Dan mungkin ide pola akan bekerja dengan sebagian besar alat RE (dan saya tahu ada perbedaan antara RE standar dan RE diperpanjang).
Cobalah online!
sumber
\b
dari pertandingan: Cobalah secara online!\b
akan menyebabkan 30 byte..
untuk karakter bertukar dan Anda bisa kehilangan dua karakter lainnya. Ini membawa Anda ke 26 byte; salah satu solusi terkecil yang bisa dibaca.s,\b(.)(\w*)(.)\b,\3\2\1,g
\w
s di ujungnya.s,\b(\w)(\w*)(\w)\b,\3\2\1,g
28 karakter.Ruby, 53 byte
Saya mencobanya tanpa regex. Keluaran mencetak setiap kata pada baris baru. Jika itu melanggar aturan, beri tahu saya dan saya akan memperbaikinya.
Tidak Terkumpul:
sumber
p
tidak bagus karena itu menambahkan kutipan ke output. Anda selalu dapat menggunakanputs
sebagai gantinya karena yang satu otomatis menambahkan baris baru dan lebih pendek dariprint
! Juga, jika Anda meneleponsplit
tanpa argumen maka secara otomatis terbagi spasi.8088 Majelis, IBM PC DOS,
3938 byteBelum dirakit:
Standalone PC DOS dapat dieksekusi. Input melalui args baris perintah, output ke layar.
Unduh dan uji PWAS.COM .
sumber
Perl 5
-p
, 24 byteCobalah online!
sumber
Batch, 141 byte
Mengambil input sebagai parameter baris perintah. Manipulasi string sangat buruk di Batch, dan keharusan untuk huruf tunggal kata tunggal tidak membantu.
sumber
C # (Visual C # Interactive Compiler) , 90 byte
Menggunakan baris baru sebagai pembatas, meskipun benar-benar spasi apa pun dapat digunakan.
Cobalah online!
sumber
Ikon , 76 byte
Cobalah online!
sumber
Java,
110109 byte-1 byte dengan menggunakan baris baru untuk delimeter
TIO
sumber
Haskell ,
7574 byteMemperbaiki bug yang ditunjukkan oleh Cubic dan juga menurunkan 1 byte.
Cobalah online!
sumber
map g
lebih pendek dari(g<$>)
a
menjadiaa
Scala, 100 byte
sumber
T-SQL, 126 byte
Input adalah melalui tabel t yang sudah ada sebelumnya dengan bidang varchar v , sesuai standar IO kami .
Membaca dari belakang ke depan,
STRING_SPLIT
memecah string menjadi baris individual melalui pembatas,STUFF
memodifikasi karakter pada posisi yang ditentukan, laluSTRING_AGG
menggabungkannya kembali.sumber