Tantangan Anda adalah mengambil nama (string) sebagai input
Albert Einstein
dan output:
Einstein, Albert
Kodesemu:
set in to input
set arr to in split by " "
set last to the last element of arr
remove the last element of arr
set out to arr joined with " "
prepend ", " to out
prepend last to out
output out
Lebih banyak kasus uji:
John Fitzgerald Kennedy => Kennedy, John Fitzgerald
Abraham Lincoln => Lincoln, Abraham
Aturan
- Input akan selalu cocok dengan regex
^([A-Z][a-z]+ )+([A-Z][a-z]+)$
. - Anda tidak perlu menangani nama-nama aneh , bahkan jika outputnya secara teknis salah, tidak masalah di sini.
- Trailing whitespace / newline adalah OK.
- Ada pertanyaan? Komentar dibawah!
le
dengan,
dan Anda memiliki pertanyaan inile
dengan,
.Jawaban:
05AB1E , 7 byte
Kode:
Menggunakan penyandian 05AB1E . Cobalah online!
Penjelasan:
sumber
JavaScript (ES6), 34 byte
Demo:
sumber
Retina ,
191716 byteSunting: Terima kasih kepada Riker karena telah menyimpan 3 byte
Cobalah online!
sumber
(.+)
bekerja juga untuk keduanya.\w
di tempat pertamaJelly , 7 byte
Cobalah online!
Saya tidak terlalu mengenal Jelly, tetapi membaca jawaban lain sepertinya mereka tidak menggunakan algoritma yang optimal ... jadi ini dia:
Penjelasan
sumber
Vim, 10 byte / penekanan tombol
Cobalah online!
sumber
<esc>
tidak muncul dalam kode Anda. Untuk pemberitahuan kepada orang lain yang ingin mencoba: Ini mengasumsikan bahwa namanya ditulis dalam editor dan bahwa Anda saat ini berada di awal file dalam mode normal.V / vim,
98 byteCobalah online!
Disimpan satu Byte berkat
Perhatikan ada karakter spasi tambahan. Meninggalkan ruang tambahan, yang diizinkan sesuai aturan.
Penjelasan:
sumber
<esc>
. Anda dapat menyimpan satu byte dengan melakukan$bD
alih - alih$diw
. :)$bD
tidak menangani nama satu karakter, saya sudah bertanya OP apakah itu diizinkan.Python 2 , 39 byte
Cobalah online!
Yup
rsplit
,.sumber
input
alih - alihraw_input
untuk bermain golf - lihat posting meta iniMathematica,
5240 bytesumber
> <> , 27 byte
Cobalah online!
sumber
C, 45 byte
EDIT: Saya baru saja memperhatikan persyaratan untuk input mungkin memiliki lebih dari dua kata. Saya akan membiarkannya apa adanya dengan catatan bahwa ini hanya berfungsi untuk dua kata.
EDIT: dihapus
\n
. Tambahkan 2 byte jika Anda anggap perlu.Kompilasi dengan
gcc name.c
, GCC 6.3.1. Abaikan peringatan. Pemakaian:Penyalahgunaan bahasa:
int
darimain
dan tidak kembali.printf
. GCC tetap akan memasukkannya.b
. Tidak masalah dengan%s
Terima kasih kepada @ Khaled.K untuk tips tentang penggunaan
main(a,b)int**b;
daripadamain(int a, int **b)
.sumber
main(a,**b){printf("%s, %s",b[2],b[1]);}
berukuran 40 bytemain(a,b)int**b;{printf("%s, %s\n",b[2],b[1]);}
Ruby , 22 byte
Cobalah online!
sumber
sed, 19 +1 untuk -E = 20 byte
Harus menggunakan -r (GNU) atau -E (BSD, GNU baru-baru ini) untuk menghindari keharusan lolos dari tanda kurung pengelompokan.
Jika dituliskan pada command-line, harus dilampirkan dalam tanda kutip untuk menghindari diuraikan sebagai beberapa token oleh shell:
sumber
C, 68 byte
Semoga tidak salah menambahkan posting lain tapi ini solusi yang sedikit berbeda dari solusi C yang saya posting sebelumnya. Yang ini menerima sejumlah nama.
Kompilasi dengan
gcc name.c
(GCC 6.3.1) dan abaikan peringatan. Pemakaian:Terima kasih kepada @ Khaled.K untuk tipsnya
main(a,b)int**b;
Terima kasih atas tip untuk loop ke @Alkano.
sumber
main(a,b)int**b;{for(printf("%s,",b[--a]);++b,--a;printf(" %s",*b));}
main(a,b)int**b;{a&&printf("%s,"b[a-1])&&main(a-1,b);}
main(a,b)int**b;{--a&&printf("%s, ",b[a])&&main(a,b);}
. Ini 2 byte lebih pendek, dan itu memastikan Anda tidak mencetak nama program, tetapi masih menggunakan koma antara masing-masing nama.Mathematica, 45 byte
Menyimpan beberapa byte pada jawaban ngenisis dengan mengambil input sebagai daftar karakter dan bukan sebagai string. Fungsi murni yang menggunakan aturan penggantian pola.
Mathematica, 49 byte
Fungsi murni lain mengambil daftar karakter sebagai input dan mengembalikan daftar karakter. Yang ini menambahkan
","
dan" "
ke input dan kemudian memutar daftar karakter sampai ruang terakhir di akhir. (Dengan demikian output memiliki ruang tambahan, tidak seperti fungsi pertama di atas.)sumber
#/.{a__,s=" ",b:Except@s..}->{b,",",s,a}&
adalah4
byte lebih pendek, tapi saya menemukan bahwaExcept
tidak perlu untuk pola string menyelamatkan saya12
byte.x
dalam jawaban Anda?C #,
7672 byteDisimpan 4 byte dengan bantuan @KevinCruijssen
Versi lama menggunakan substring untuk 76 byte:
sumber
System.Text.RegularExpressions.Regex
begitu lama di C # ..s=>new System.Text.RegularExpressions.Regex("(.+) (.+)").Replace(s,"$2, $1");
hanya satu byte lebih.Regex
untuk menyimpan 4 byteAwk, 18 karakter
Contoh dijalankan:
Cobalah online!
sumber
Jelly , 8 byte
Cobalah online!
sumber
05AB1E , 9 byte
Cobalah online!
Penjelasan
sumber
Pyth , 11 byte
Penjelasan:
Uji secara online!
sumber
PHP, 45 Bytes
Cobalah online!
sumber
\pL+
bukannya.+
?.
atau\pL
MATLAB / Oktaf , 37 byte
Cobalah online!
Berdasarkan jawaban Retina @ngenisis, kami juga dapat memainkan permainan regex di Oktaf dan MATLAB, menghemat beberapa byte yang adil dari jawaban saya sebelumnya.
Jawaban lama:
Saya akan meninggalkan jawaban ini di sini juga mengingat itu adalah cara yang lebih unik untuk melakukannya dibandingkan dengan regex sederhana.
Oktaf ,
4947 byteTua coba online!
Fungsi anonim untuk menghasilkan output.
Pada dasarnya kode pertama kali menemukan ruang terakhir dalam string menggunakan
b=find(a==32)(end)
. Kemudian Dibutuhkan bagian akhir dari string (setelah spasi) menggunakana(b+1:end)
, di manab
adalah output dari menemukan ruang terakhir. Ini juga membutuhkan awal stringa(1:b-1)
, dan menggabungkan keduanya bersama-sama dengan', '
di antaranya.Saya sudah menyimpan beberapa byte vs yang khas
find(a==32,1,'last')
. Tidak yakin ada banyak yang harus diselamatkan.sumber
Jelly , 9 byte
Dijelaskan, ish:
Cobalah online!
Coba semua uji kasus.
sumber
Python 3, 52 byte
Sangat sederhana, bisa menggunakan bantuan golf. Cukup letakkan kata terakhir di depan dan gabungkan dengan ",".
Kasus cobaan:
sumber
Japt, 14 byte
Sebuah pelabuhan @ programmer5000 Ini jawaban JavaScript .
Cobalah online!
sumber
Java,
11062 byteMetode non-statis.
-48 byte terima kasih kepada Kevin Cruijssen
sumber
String c(String s){int i=s.lastIndexOf(' ');return s.substring(i+1)+", "+s.substring(0,i);}
lebih pendek ( 91 byte ).String d(String s){return s.replaceAll("(.+) (.+)","$2, $1");}
bahkan lebih pendek ( 62 byte ).PHP ,
6259 byte-3 byte, terima kasih Jörg
Cobalah online!
Solusi lama, 63 Bytes
Tidak berfungsi jika orang tersebut memiliki 3 nama berulang.
Cobalah online
sumber
$argn
sebagai gantinya$argv[1]
Excel,
174170168 byteDisimpan 2 byte berkat Wernisch
Ini tidak mewah atau pintar. Ini metode yang cukup mendasar. Rasanya seperti harus ada cara yang lebih pendek dengan rumus array tetapi saya tidak dapat menemukan yang berfungsi.
sumber
-1
fungsi LEFT.JS (ES6),
5244 bytesumber
MATL , 10 byte
Cobalah online!
Penjelasan
sumber
Gema, 23 karakter
Satu-satunya hal yang luar biasa di sini adalah bagaimana tantangan tersebut berhasil mengenai kelemahan pola Gema yang tidak serakah.
Contoh dijalankan:
sumber