Diberikan string, cari kata pertama yang dimulai dengan setiap huruf (tidak sensitif huruf).
Mencicipi
Menggunakan Ferulas flourish in gorgeous gardens.
sebagai input:
"Ferulas flourish in gorgeous gardens."
^^^^^^^ ^^ ^^^^^^^^
| | |
| | --> is the first word starting with `g`
| --> is the first word starting with `i`
--> is the first word starting with `f`
Kemudian, output untuk sampel ini harus berupa kata-kata yang cocok yang digabungkan oleh satu spasi tunggal:
"Ferulas in gorgeous"
Tantangan
Baik input maupun output harus berupa representasi string, atau alternatif terdekat dalam bahasa Anda.
Program atau fungsi diizinkan.
Anda dapat mempertimbangkan sebuah kata yang setidaknya salah satu dari: lowercase or uppercase letters, digits, underscore
.
Ini adalah kode-golf , jawaban terpendek dalam byte yang menang.
Sampel lain:
input: "Take all first words for each letter... this is a test"
output: "Take all first words each letter is"
input: "Look ^_^ .... There are 3 little dogs :)"
output: "Look _ There are 3 dogs"
input: "...maybe some day 1 plus 2 plus 20 could result in 3"
output: "maybe some day 1 plus 2 could result in 3"
Jawaban:
Retina , 28 byte:
M!
- Cocokkan masing-masing pekerjaan dan cetak semua kata yang dipisahkan oleh baris baru.i
- Abaikan case.\b(\w)
- Tangkap huruf pertama dari setiap kata(?<!\b\1.+)
- Setelah mencocokkan surat, periksa apakah tidak ada kata sebelumnya yang dimulai dengan huruf yang sama.\1.+
memastikan setidaknya dua karakter, jadi kami melewatkan kata saat ini.\w*
- cocok dengan sisa kata.Kata-kata di atas hanya cocok - semua karakter lain dihapus.
¶\n
- Ganti baris baru dengan spasi.Cobalah online!
sumber
Retina , 45 byte
Cukup gunakan regex tunggal untuk menghapus kata-kata selanjutnya yang dimulai dengan
\w
karakter yang sama (case-sensitive with thei
option), mengonversi lari dari\W
ke satu ruang, lalu menghapus ruang utama / belakang dari hasilnya.Cobalah online!
Sunting: Lihat jawaban @ Kobi untuk versi yang lebih pendek menggunakan
M!`
sumber
i` \b((\w)\w*)\b(?<=\b\2\w*\b.+)
(spasi sebelum yang pertama\b
) Apakah garis sesudahnya tidak perlu?a...a -> a
JavaScript (ES6),
7371 byteDisimpan 2 byte berkat @ edc65!
Uji
sumber
parseInt("_",36) = NaN
? Penghujatan!s=>s.match(u=/\w+/g).filter(w=>u[w=parseInt(w[0],36)]?0:u[w]=1).join' '
Pyth, 23 byte
Cobalah online: Demonstrasi atau Test Suite
J:z"\w+"1
menemukan semua kata dalam input menggunakan regex\w+
dan menyimpannya dalamJ
..grhk0J
mengelompokkan kata-kata dengan huruf kecil pertama mereka,hM
mengambil yang pertama dari setiap kelompok,xDJ
mengurutkan kata-kata ini dengan indeks mereka dalam string input, danjd
menempatkan spasi di antara mereka.sumber
Perl 6, 39 byte
sumber
\w+
dan bermain golfsubstr
bagianC,
142132122 byte10 byte lebih ringan berkat @tucuxi!
Mencetak spasi tambahan setelah kata keluaran terakhir.sumber
c>47
danc<58
dengan menggunakanisalnum
alih-alihisalpha
MATL , 23 byte
Ini meminjam ide Jakube untuk menggunakan regexp untuk menghapus karakter yang tidak diinginkan dan membelah pada saat yang sama.
Input adalah string yang diliputi oleh tanda kutip tunggal
Cobalah online!
Penjelasan
sumber
Vim 57 penekanan tombol
Penjelasan:
Saya benar-benar kecewa dengan berapa lama ini. The "tidak valid" chars (segala sesuatu tetapi
a-z
,A-Z
,_
dan ruang) benar-benar melemparkan saya off. Saya yakin ada cara yang lebih baik untuk melakukan ini:Karena
\h
cocok dengan semua yang diharapkan untuk ruang, tapi saya tidak tahu bagaimana menempatkan metachar dalam kisaran. Jika ada yang punya tips, saya ingin mendengarnya.sumber
a-zA-Z_
dan tidak\w
? digit validJulia,
165155151129102 byteIni adalah fungsi yang menerima string dan mengembalikan string.
Tidak Disatukan:
Disimpan 53 byte dengan bantuan dari Sp3000!
sumber
Jelly,
3231 byteCobalah online!
sumber
C # (LINQPAD) -
136128 bytesumber
05AB1E , 40 byte
Kode:
Cobalah online!
Penjelasan:
Kami pertama-tama menghasilkan semua karakter yang harus dihapus dari string input menggunakan
94L32+ç
( Coba di sini ). Kami bergabung dengan string ini menggunakanJ
dan menghapus[a-zA-Z0-9_]
yang disimpan di žj ( Coba di sini ). Kami menghapus semua karakter yang ada di string kedua dari string pertama, yang akan meninggalkan kita:Itu juga bisa diuji di sini . Kami
D
menggandakan ini dan menyimpannyaX
dengan-U
perintah. Kami kemudian menghapus semua karakter yang ada di string ini dari input. Kami kemudian membagi pada spasi putih menggunakanð¡
dan menghapus semua string kosong (menggunakan""K
). Kami sekarang memiliki ini .Ini adalah bersih versi masukan, yang kami akan bekerja dengan. Kami memetakan setiap elemen menggunakan
v
. Ini digunakany
sebagai variabel string. Kami mengambil karakter pertama dari string menggunakan¬
dan mendorongX
, yang berisi string dengan semua karakter terlarang (!"#$%&'()*+,-./:;<=>?@[\]^`{|}~
). Kami memeriksa apakahl
versi owercase dari karakter pertama, (yang juga akan©
disalin ke register), menggunakan string iniå
. Ditutupi oleh bagian ini:,ï>i
jika huruf pertama tidak ada dalam string karakter terlarang (X
), kami menambahkan surat ini ke daftar karakter terlarang (selesai denganX®«U
) dan kami mendorongy
di atas tumpukan.Akhirnya, ketika string difilter, kita bergabung dengan stack dengan spasi
ðý
.sumber
PHP
Terinspirasi oleh penggunaan regex di sebagian besar jawaban, saya awalnya mencoba melakukan ini tanpa menggunakan regex sama sekali hanya untuk memamerkan variasi yang rapi, tetapi titik mencuatnya tidak memiliki string bersih sebagai input merusak ide itu. Sedih.
Dengan fungsi wrapper, 89 byte
Tanpa fungsi wrapper (membutuhkan $ s yang telah dideklarasikan), 73 byte
Penjelasan:
Satu-satunya penyesalan saya adalah saya tidak dapat menemukan cara yang lebih cepat untuk memeriksa / mengubah huruf.
sumber
Python, 103 byte
sumber
Lua, 172 Bytes
Itu berakhir jauh lebih lama daripada yang saya inginkan ...
Tidak disatukan
sumber
Serius, 43 byte
Cobalah online!
Kurangnya kemampuan regex membuat ini jauh lebih sulit daripada yang seharusnya.
Penjelasan:
sumber
Ruby 76 Bytes
Atau dengan metode definisi 88 byte
Tidak disatukan dan dengan unit test:
sumber
\w
sertakan karakter angka, jadi[\w\d]
bisa diganti dengan\w
. Juga, jikanil
nilai-nilai berada dalam array ketika Anda meneleponjoin' '
(atau lebih baik lagi,*' '
adalah singkatan yang dapat Anda gunakan untuk menyimpan lebih banyak byte), mereka menghilang, sehingga panggilan kecompact
tidak perlu.\w\d
memalukan bagi saya. Tetapi jika saya menghapuscompact
saya mendapatkan ruang tambahan, (lihat['x',nil,'x']*'y' == 'xyyx'
). Atau apakah saya melewatkan sesuatu?(list-[p])
simpan byte lebih darilist.compact
. Juga,/\w/
setara dengan/[\w]/
. Akhirnya, Anda dapat menggantinil
denganp
dan!p
dengan1
(karena hash Anda hanya membutuhkan nilai yang benar di dalamnya)nil
denganp
tidak berfungsi. Jika saya menggunakannya di dalam kode saya, saya mendapatkan kesalahan sintaksis. Saya harus merangkum suka(p)
- tapi kemudian saya punya lagi 3 karakter.!f[j=i.upcase]?(f[j]=1;h):p
. Juga hanya memikirkan ini, tetapi karena pengindeksan string, menggunakans.scan(/\w+/)
dan menghapusi
mendukungh[0]
karya juga.grep dan awk,
6856 byteNaskah:
Penjelasan:
grep -o
cocok dengan kata-kata hukum, mencetak masing-masing pada barisnya sendiri.awk
mengambil huruf pertama dari setiap baris dengansubstr
, membuatnya menjadi huruf kecil, dan kemudian menambahkan entri hashtable dengan kunci itu. Jika nilainya tidak disetel sebelum kenaikan, garis dicetak.echo ...
mengubah garis kembali menjadi kata-kataSaya sebelumnya mencoba untuk membuat solusi tanpa
awk
, menggunakanuniq
,sort
,grep
danbash
tapi jatuh hanya singkat. Riwayat dalam suntingan.Terima kasih kepada Dennis untuk beberapa perbaikan yang saya lewatkan.
sumber
Python 3.5, 138 byte:
Pada dasarnya, apa yang terjadi adalah ..
sumber
PHP 120bytes
Ini menghasilkan banyak peringatan tapi tidak apa-apa.
sumber
function
perlu?Javascript ES6,
108107 karakter107 karakter, string hasil dipangkas
Uji:
sumber
f=
tidak masuk hitungan .Tcl , 150 byte
Cobalah online!
sumber