Catatan: Jawaban yang menang akan dipilih pada 4/12/17 pemenang saat ini adalah Jolf, 1 byte .
Saya terkejut bahwa kami belum memiliki tantangan apa nama tengah saya di situs ini. Saya melakukan banyak pencarian tetapi tidak menemukan apa pun. Jika ini adalah dup, harap tandai seperti itu.
Tantangan anda
Mengurai string yang terlihat seperti Jo Jean Smith
dan kembali Jean
.
Uji kasus
Input: Samantha Vee Hills
Output: Vee
Input: Bob Dillinger
Output: (empty string or newline)
Input: John Jacob Jingleheimer Schmidt
Output: Jacob Jingleheimer
Input: Jose Mario Carasco-Williams
Output: Mario
Input: James Alfred Van Allen
Output: Alfred Van
(Yang terakhir itu salah secara teknis, tetapi memperbaiki itu akan terlalu sulit.)
Catatan:
- Nama akan selalu memiliki setidaknya 2 bagian yang dipisahkan oleh ruang, dengan nama tengah tak terbatas di antara mereka atau dapat berupa daftar / larik string.
- Nama dapat berisi alfabet (tidak peka huruf besar-kecil) dan - (
0x2d
) - Anda dapat menampilkan baris tambahan.
- Anda mungkin memerlukan input untuk memiliki baris tambahan.
- Input dari STDIN, parameter fungsi, atau argumen baris perintah diizinkan, tetapi pengodean keras di dalamnya tidak diizinkan.
- Celah standar dilarang.
- Output dapat berupa nilai pengembalian fungsi, STDOUT, STDERR, dll.
- Spasi spasi / baris baru / tab pada output diizinkan.
- Ada pertanyaan? Komentar dibawah!
Ini adalah kode-golf , jadi anwser terpendek yang menang akan!
["John", "Jacob", "Jingleheimer", "Schmidt"]
->["Jacob", "Jingleheimer"]
solusi yang valid?Jawaban:
Jolf, 1 byte
Mendapat bagian dalam input. Coba di sini!
sumber
Ohm , 2 byte (CP437)
Menerima dan mengembalikan daftar string.
Penjelasan:
sumber
Vim,
65 byteCobalah online!
(keluaran dengan spasi tambahan)
Karena Vim kompatibel terbalik dengan V, saya telah menyertakan tautan TIO untuk V.
Penjelasan
sumber
dWWD
menghemat satu byte.dW
dihapus sampai spasi.dw
dihapus hingga karakter non-kata.Python , 24 byte
Cobalah input string online!
Format Input: string
Python 2 , 16 byte
Coba masukan daftar online!
Format Input: Daftar
sumber
Python
alih - alihPython 2
, karena berfungsiPython 3
juga, baru akan memposting itu.must be a string
, dan karena format input diperbolehkan menjadi daftar, cetak daftar tidak dapat dianggap sebagai hasil yang salah!lambda n:n[1:-1]
input()
(hanya Python 3)Brain-Flak , 133 byte
Cobalah online!
132 byte kode, ditambah 1 byte untuk
-c
flag yang memungkinkan input dan output ASCII.Sayangnya, ini mengandung banyak kode duplikat, tetapi akan sangat sulit untuk digunakan kembali. Saya akan memeriksanya nanti. Berikut penjelasannya:
sumber
05AB1E , 2 byte
Cobalah online!
Jika mengeluarkan daftar nama tengah tidak diizinkan, saya akan mengubahnya.
sumber
Haskell,
23,179 byteMengambil dan mengembalikan daftar string. Cobalah online!
Jatuhkan string pertama, jatuhkan string terakhir.
Sunting: @Nama Tampilan Umum mencatat, bahwa input dapat berupa daftar string, yang menyimpan 6 byte.
Sunting II: kembalikan daftar string alih-alih satu string
sumber
unwords.
untuk -8 byte.Mathematica, 10 byte
Fungsi tanpa nama yang menerima dan mengembalikan daftar string.
Rest
membuang elemen terakhir,Most
membuang elemen pertama,@*
adalah komposisi fungsi. BertukarRest
danMost
menggunakan komposisi yang tepat/*
juga akan berhasil. Ini mengalahkan pengindeksan#[[2;;-2]]&
oleh satu byte.sumber
Brain-Flak , 86 byte
Cobalah online!
Sebagian besar kode ini berasal dari jawaban ini . Jika Anda menyukai solusi saya, Anda harus menghapusnya juga.
sumber
Java 7, 74 byte
Java 8, 49 byte
Fungsi yang mengidentifikasi kemunculan pertama karakter spasi dan yang terakhir dan mengekstrak tengah. String yang dihasilkan diawali oleh karakter spasi (pada saat posting, OP belum mengklarifikasi jika spasi terdepan diizinkan), yang dapat dihilangkan dengan menambahkan
.trim()
kode dengan biaya tambahan 7 byte.Dibandingkan dengan C #, Java memiliki keuntungan menentukan indeks akhir daripada panjang sub-string, yang menurunkan jumlah byte.
sumber
JavaScript (ES6), 22 byte
Mengambil dan mengeluarkan array string.
Uji kasus
Tampilkan cuplikan kode
Versi string (27 byte)
Mengambil dan mengeluarkan string. String output adalah ruang tunggal jika tidak ada nama tengah yang ditemukan, atau nama tengah dengan spasi awal dan akhir.
Tampilkan cuplikan kode
sumber
/./.exec.bind(/ .* /)
tampaknya meniru # 2, kecualinull
tidak adaAWK ,
1710 byteDisimpan 7 byte berkat @steve!
Cobalah online!
Penjelasan:
sumber
$NF=$1="";1
$NF=$1=x;1
1
? Saya tidak begitu mahir di AWK :)Groovy , 19 byte
Penjelasan:
Fungsi penutupan / anonim
sumber
.split()
?PHP, 37 Bytes
-4 byte untuk output sebagai array
PHP, 42 Bytes
PHP, 50 Bytes
sumber
Retina , 11 byte
Cobalah online!
Cocokkan kata pertama (termasuk spasi setelahnya) dan kata terakhir, dan hapus keduanya.
Jika I / O dapat berupa daftar yang dipisahkan dengan linefeed, itu dapat dilakukan dalam 8 byte:
Cobalah online!
sumber
Perl 5 ,
2718 bytePerlu dijalankan dengan
-n
opsi.Cobalah online!
Ingin melakukan sesuatu yang serupa di sed pertama, tetapi, sayangnya, itu tidak mendukung penjumlah non-serakah.
Diperlukan jika nama tengah lebih dari satu kata.Edit
-9 byte terima kasih kepada Dada .
Non-greedy quantifier tidak diperlukan lagi, di antara beberapa hal lainnya.
sumber
/ (.+) /&&print$1
harus menjadi penyortir. Luar biasa melihat beberapa orang baru bermain golf dengan Perl!print if s| (.+) |\1|
tidak berhasil? Bagi saya itu mirip dengan apa yang Anda tulis.print if s| (.+) |\1|
mengganti bagian tengah dengan ... bagian tengah! (minus spasi sebelum dan sesudah), jadi tidak berfungsi. Di sisi lain, apa yang saya sarankan hanya cocok dengan bagian tengah dan hanya mencetaknya ($1
).Javascript (ES6)
4916 byteEdit:
Cobalah online!
ungolfed:
Saya lupa beberapa properti sederhana
slice
, dan inputnya bisa berupa array. Berkat @Neil dan @ fəˈnɛtɪk saya dapat menghapus 27 byte. Masih belum benar-benar bersaing.Asli:
Ini tidak benar-benar bersaing tetapi inilah solusi Javascript:
Ini menciptakan fungsi anonim yang sama dengan:
Bagaimana saya memainkannya
Ini adalah golf yang cukup sederhana. Saya mengubah fungsi menjadi fungsi panah . Lalu aku "memperkecil" kodenya. Ini termasuk penggantian nama
name
menjadi satu karakter (a
dalam hal ini) dan menghapuslet
deklorasinya dari variabel.Potongan
Tampilkan cuplikan kode
Semoga ini bisa membantu siapa saja yang terjebak pada tantangan.
sumber
length -
perlu, karenaslice
sudah menerima panjang negatif sebagai relatif terhadap akhir. Ini berarti bahwa Anda tidak lagi memerlukan variabel perantara, sehingga Anda dapat mengubah fungsi panah dari blok menjadi ekspresi.-1
terakhir tetapi yang Anda butuhkan di sini.Röda , 9 byte
Cobalah online!
Bukan solusi yang sangat menarik. Mengambil daftar dari aliran dan mengembalikan nama tengah.
21 byte dan I / O:
Cobalah online!
Ini menggunakan
/
(split) dan&
(gabung).sumber
Jelly , 2 byte
Cobalah online!
Ini berfungsi sebagai tautan non-inline (yaitu fungsi), bukan program lengkap.
'John','Jacob','Jingleheimer','Schmidt'
→'Jacob','Jingleheimer'
Sebagai program penuh, itu akan menjadi 3 byte:,
ḊṖK
yang mencetak nama tengah yang dipisahkan oleh ruang.sumber
Pyth, 2 byte
Penerjemah online
sumber
C #, 67 byte
Fungsi anonim yang mengidentifikasi kemunculan pertama karakter spasi dan yang terakhir dan mengekstrak tengah. Ini juga mengekstraksi ruang trailing, yang dapat dihapus dengan biaya 2 byte.
Program lengkap dengan uji kasus:
sumber
Kotlin , 39 byte
Cobalah online!
yaitu
sumber
VBA, 69 byte
sumber
R,
302722 byteSolusi saat ini karena pengguna11599!
Mengambil input dari stdin, mengembalikan setiap nama tengah sebagai string yang terpisah. Mengembalikan
character()
dalam kasus tanpa nama tengah; yaitu, vektor kelascharacter
panjang0
.Penjelasan:
Baca stdin menjadi daftar string, dipisahkan oleh spasi
Hapus elemen terakhir.
head
mengembalikann
elemen pertama dari daftar, dengann
default ke6
. Jikan
ini-1
ia mengembalikan semua tapi elemen terakhir.Sekarang, hapus elemen pertama dari daftar ini.
Ini menghasilkan nama tengah.
sumber
head()
dantail()
, tetapi saya tidak tahu Anda bisa melewati angka negatif sebagai argumen kedua. Bagus!Ruby,
2413 byteDisimpan 11 byte berkat Piccolo menunjukkan bahwa output seperti array diperbolehkan.
Mengambil nama sebagai argumen baris perintah terpisah, misalnya:
atau
Kode sebelumnya (menghasilkan string yang tepat):
sumber
$><<ARGV[1..-2].join" "
itu mengeluh tentang" "
yang tak terduga, jadi saya harus menambahkan tanda kurung - yang akan menambah 1 byte pada akhirnya.puts ARGV[1..-2]
, supaya Anda tahu.p ARGV[1..-2]
untuk 13 byte - hanya terlihat tidak seperti output dalam tantanganGolang ,
15281 byteDibutuhkan input sebagai "Samantha Vee Hills" (dengan tanda kutip ganda) dan mengembalikan nama tengah ke stdout.
Cobalah secara Online!
Sunting: @Dada, perhatikan bahwa "fungsi sebagai jawaban diizinkan" mempersingkat kode saya 71 byte. terima kasih banyak!
sumber
Matlab,
81,79,78, 55 BytesDibawa dalam string input,,
s
dipecah (oleh pembatas default, spasi spasi) ke dalam array sel, dari mana elemen tengah diakses. Kemudian elemen-elemen tengah digabungkan, atau string kosong dikembalikan.Sunting: terima kasih kepada Luis Mendo karena telah menghemat 3 byte!
Sunting 2: Solusi yang lebih baik dari Ankit!
sumber
nnz
array sel, tetapi saya melakukan dua perubahan lainnya :)function x=a(s) s=strsplit(s);x=strjoin(s(2:end-1));end
C, 42 byte
Parameternya adalah array pointer yang diakhiri NULL untuk char.
Lihat berhasil di sini .
Argumen baris perintah juga dapat digunakan dengan fungsi yang sama .
C, 51 byte
Program lengkap. Input dilakukan melalui argumen baris perintah.
Lihat berhasil di sini .
C, 54 byte
Parameter adalah parameter masuk / keluar.
Lihat berhasil di sini .
sumber
Python 2,
421916 BytesCobalah online! Berkat @Kritixi Lithos untuk menghemat 23 byte! Terima kasih @math_junkie karena telah menyimpan 3 byte lebih banyak. Untuk input, letakkan setiap bagian nama sebagai string dalam daftar seperti:
Dan ya, OP telah menyetujui daftar untuk menjadi input yang valid.
Penjelasan
sumber
print input()[1:-1]
lebih pendeklambda n:n[1:-1]
bahkan lebih pendekSamantha Vee Hills
sebagai input di link repl.it yang telah Anda bagikan, ini hanya mencetakamantha Vee Hill
yang jelas bukan output yang diperlukan.Names will always have at least 2 space-separated parts
adalah poin pertama dari pertanyaan yang benar.C ++, 91 byte
Mengambil input sebagai referensi ke daftar string dan memodifikasi daftar secara langsung.
Cobalah online!
sumber