Untuk keperluan tantangan ini, sebuah polyphthong didefinisikan sebagai irisan yang berdekatan dari sebuah String, yang hanya berisi vokal, dan memiliki panjang setidaknya 2. Diberikan String yang tidak kosong sebagai input, tugas Anda adalah untuk mengeluarkan semua polyphthong yang dikandungnya. .
Misalnya, "abeoic"
memiliki irisan yang berdekatan berikut ini (dipisahkan ruang):
a b e o i c ab be eo oi ic abe beo eoi oic abeo beoi eoic abeoi beoic abeoic
Menghapus yang mengandung apa pun selain vokal, atau memiliki panjang lebih kecil dari 2, kami mendapatkan poliphong yang kami inginkan:
eo oi eoi
Kiriman Anda harus mematuhi aturan berikut:
Anda dapat memilih huruf kecil atau besar untuk I / O, tetapi case keluaran harus cocok dengan case input.
Vokal adalah
aeiou
(untuk huruf kecil) danAEIOU
(untuk huruf besar).y
SayaY
tidak dianggap sebagai vokal.Input hanya akan berisi ASCII yang dapat dicetak.
Jika polyphthong muncul beberapa kali, Anda dapat memilih untuk hanya menghasilkan satu kali atau menampilkan semua kemunculannya.
Format dan metode I / O yang masuk akal dibolehkan (daftar karakter juga baik-baik saja, baik untuk input maupun output).
Uji Kasus
Input -> Output (huruf kecil) r67 ^^ () * 6536782! 87 -> [] teka-teki pemrograman dan golf kode -> [] aaand ... aku menang! -> ['aa', 'aa', 'aaa'] abeoic -> ['eo', 'oi', 'eoi'] yah eioo ala -> ['ei', 'io', 'oo', 'eio', 'ioo', 'eioo'] @yabeeeayio__e -> ['ee', 'ee', 'ea', 'io', 'eee', 'eea', 'eeea'] 0ioen0aaiosnjksd -> ['io', 'oe', 'aa', 'ai', 'io', 'ioe', 'aai', 'aio', 'aaio']
Perhatikan bahwa untuk kasus uji 3 dan 6, Anda dapat mengeluarkan 'aa'
dan 'ee'
masing - masing hanya sekali (Lihat aturan keempat).
Ini adalah kode-golf , pengiriman terpendek dalam byte di setiap bahasa menang!
'aa'
muncul dua kali. Apakah seseorang harus mengeluarkan string yang sama beberapa kali jika muncul di berbagai lokasi atau dapatkah satu hanya menampilkan polip unik?Jawaban:
Python 2 ,
10297 byteterima kasih kepada @JonathanFrech untuk -5 byte
Cobalah online!
huruf kecil I / O
sumber
...AEIOU'
, karena Anda hanya diperbolehkan mengambil huruf kecil sebagai input.print([w[a:b]for a in l for b in l[a+2:]if{*w[a:b]}<={*'aeiou'}])
bekerja untuk 93.JavaScript (ES6),
7775 byteMengharapkan input dalam huruf kecil. Menghasilkan polyphthong unik tanpa berulang.
Uji kasus
Tampilkan cuplikan kode
Bagaimana?
Kami secara rekursif membangun pohon dari semua kemungkinan polyphthong, memangkas cabang segera setelah simpul saat ini tidak terkandung dalam input lagi, dan menyimpan semua node yang cocok minimal 2 karakter.
sumber
Retina ,
2320 byteCobalah online!
Ini mencetak semua kemunculan polyphthong.
Penjelasan
Retina memang memiliki cara untuk mendapatkan semua pertandingan yang tumpang tindih , tetapi apa artinya ini adalah bahwa ia akan mencari satu pertandingan dari setiap posisi. Jadi jika ada beberapa pertandingan dari posisi yang sama, ini hanya akan mengembalikan salah satunya. Satu-satunya cara untuk benar-benar mendapatkan semua pertandingan yang tumpang tindih adalah menggunakan fitur ini dua kali, sekali mencocokkan dari kiri ke kanan dan sekali dari kanan ke kiri (sehingga kami pertama-tama mendapatkan kecocokan terpanjang dari setiap posisi awal yang memungkinkan, dan kemudian kami juga mendapatkan semua kecocokan untuk posisi akhir yang mungkin).
Jadi program yang sebenarnya:
Dapatkan semua vokal yang tumpang tindih. Apa ini sebenarnya berarti untuk mendapatkan semua sufiks dari semua vokal berjalan.
Sekarang dapatkan semua awalan dengan panjang minimal 2, dengan mencocokkan dari kanan ke kiri. Ini
M
tersirat di sini, karena ini adalah baris terakhir dari program.sumber
!&`[aeiou]{2,}
adalah begitu dekat dengan benar , apakah ada cara untuk mendapatkannya rakus sehingga pertandingan melawanio
?&
bisa dilakukan adalah mencoba untuk pertandingan dari setiap posisi, sehingga Anda tidak dapat memiliki beberapa pertandingan dengan panjang yang berbeda dari posisi yang sama. Itu sebabnya saya butuh tahap kedua.QuadS , 20 + 1 = 21 byte
dengan
o
benderaCobalah online!
Dalam urutan hal-hal yang terjadi:
[aeiou]+
pada setiap pertandingan PCRE ini,\⍵M
awalan Pertandingan1↓
jatuhkan yang pertama (yang memiliki satu vokal),/⍵
merangkai semua daftar awalan⊃
mengungkapkan (karena pengurangan/
terlampir)Ini setara dengan fungsi diam APL Dyalog:
Cobalah online!
sumber
Mathematica, 92 byte
Cobalah online!
sumber
Java (OpenJDK 8) ,
138135134 byteCobalah online!
sumber
i<y-1
bisai<=y
danString#matches
secara implisit memeriksa seluruh String, sehingga Anda tidak perlu^
dan$
. +1 untuk mengalahkan saya karenanya. Baru saja memposting jawaban 138 byte saya sendiri (tetapi dengan perubahan ini saya mengusulkan Anda lebih pendek). :)J ,
3429 byteCobalah online!
sumber
Jelly , 9 byte
Cobalah online!
Penjelasan
-4 byte terima kasih kepada Tn. Xcoder
sumber
L>1$$
denganL’$
.L’$
denganḊ
untuk 9 byte . Setara akanẆṫLḊḟÐḟØc
.C (gcc) , 104 byte (99 byte hanya dengan huruf kecil atau huruf besar saja)
Ya, bocor - lalu apa?
Cobalah online!
sumber
#include
, dan Anda hanya perlu menangani satu case letter, sehingga Anda dapat mempersingkatnya menjadi 80 byte.R , 137 byte
dikalahkan oleh Mark !
Cobalah online!
sumber
unique
.Perl 5, 53 +1 (-p)
Cobalah secara Online
sumber
PowerShell ,
9388 byteCobalah online!
Gunakan huruf kecil / huruf besar I / O (atau campuran!).
Pinjam kode dari jawaban saya pada Substring Meledak untuk mendapatkan semua substring, kemudian tarik keluar yang regex
-match
terhadap^[aeiou]{2,}$
- yaitu, mereka yang setidaknya dua vokal panjangnya dan hanya vokal. String-string tersebut ditinggalkan di jalur pipa dan hasilnya tersirat.sumber
Haskell ,
148137130123118 byteBerkat @Laikoni untuk -11 byte, lebih lanjut -7 byte dengan mengarahkan saya ke tips golf, -7 byte, dan lagi -5 byte, untuk total -30 byte kekalahan.
Ini sepertinya cocok untuk Haskell tetapi hasilnya tampaknya tidak setuju.Saya kira Haskell adalah pilihan yang baik-baik saja. Saya masih kesal dengan carasubsequences
kerjanya.Cobalah online!
sumber
;
, tetapi meningkatkan keterbacaan kode. Anda selalu menggunakane
bersama denganv
, sehingga Anda dapat langsung mendeklarasikane=(
elem"aeiou")
.y!!0
lebih pendek darihead y
. AdaconcatMap
bukannyaconcat.map
, tetapi bahkan lebih pendek(=<<)
dari daftar monad yang memiliki efek yang sama.Data.Lists
alih-alihData.List
. Yang pertama memiliki semua fungsi yang terakhir, tetapi juga hal-hal tambahan sepertipowerslice
, yang memberikan daftar semua urutan berkelanjutan.y@(h:_:_)
droplength y>1
dan memperpendekv(y!!0)
kev h
.(\x y->v x&&v y)
dapat disingkat dengan mengonversikannya menjadi bebas titik, baik secara manual menggunakan tip ini atau dengan menggunakan pointfree.io . (2) Daftar monad juga dapat digunakan dengando
notasi, yaitudo x<-l;[...]
sama denganl>>=(\x->[...])
. Btw, pada TIO Anda bisa memasukkanmain
bidang header atau footer Anda agar jumlah byte sesuai dengan kiriman yang sebenarnya.Perl, 45 byte
sumber
R ,
120 byte,110 byteCobalah online!
Bagaimana itu bekerja
sumber
C, 119 byte
Cobalah online!
sumber
JavaScript (ES6), 105 byte
Mungkin masih banyak golf yang harus dilakukan.
sumber
Perl 5 , 44 +1 (
-n
) = 45 byteCobalah online!
sumber
05AB1E , 10 byte
Cobalah online!
Penjelasan:
sumber
ŒʒžMм_}ʒg≠
ŒD1ùKʒžMм_
10 byte. Saya mencoba mencari cara untuk menurunkannyaC,
10575 byteSebuah fungsi yang menerima pointer ke input huruf kecil, dan menghasilkan string yang dipisahkan ruang pada output standar:
Program uji
Demo
Penjelasan
Menggunakan GCC di Debian Linux, saya sepertinya lolos dengan deklarasi implisit yang tidak kompatibel dari
strchr()
danprintf()
. Platform lain mungkin mengharuskan<stdio.h>
dan<string.h>
untuk disertakan.Cobalah secara online (memerlukan Javascript).
sumber
f(p)char*p;
bisaf(char*p)
?f(s,d)char*s,*d
.APL (Dyalog) , 53 byte
Ini adalah
Dfn
( d irect f unctio n ). Penggunaan adalahp '<argument>'
. Peringatan yang adil: ini tidak terlalu efisien dan waktu habis untukinput > 8 characters
di TIO, tetapi bekerja secara normal ketika diberikan waktu yang cukup.Cobalah online!
Terima kasih kepada @ Adám selama 16 byte!
Bagaimana itu bekerja:
Ini lebih mudah dipahami jika kita memecah kode dalam porsi yang lebih kecil:
G←⊃,/{(,v∘.,⊢)⍣⍵⊢v←'aeiou'}¨⍳≢1↓⍵
: Bagian ini dari fungsi mengambil panjang argumen (kanan) dan mencampur vektoraeiou
itu sendiri berkali-kali, menghasilkan setiap kombinasi yang mungkin dari[2, length(right arg)]
vokal.(G∊⊃,/⌽,\∘⌽¨,\⌽⍵)/
: Bagian ini memeriksa elemen G yang merupakan anggota dari substring input. Ini mengembalikan vektor boolean, dengan1
's di indeks kombinasi vokal yang ada di input dan0
di mana mereka tidak. Vektor yang dihasilkan kemudian dipetakan (/
) di atasG
, mengembalikan elemen yang sesuai dengan nilai-nilai yang sebenarnya.Semuanya kemudian ditugaskan
p
.p←
tidak termasuk dalam jumlah byte karena itu tidak perlu , itu hanya membuat penggunaan fungsi lebih mudah.sumber
⊆
untuk memfilter. Gunakan/
.Haskell , 74 byte
Cobalah online!
sumber
Ruby 2.4, 100 byte
Ini adalah upaya pertama saya bermain golf, dan saya yakin ada banyak cara untuk mempersingkat kode ini.
sumber
Ruby , 80 byte
Cobalah online!
sumber
.compact
bisa-[nil]
Pyth , 15 byte
Cobalah online!
Jelas golf, saya ingin lebih baik sebelum menulis penjelasan.
sumber
T-SQL (SQL Server 2014), 281 byte
Masukan diberikan oleh
Menggunakan ekspresi tabel umum
s
untuk meledakkan input menjadi beberapa huruf yang diurutkan, dan kemudian ekspresi tabel umum keduac
untuk menghasilkan semua kombinasi yang diurutkan, membuang non vokal.SQL Fiddle
sumber
PHP, 139 byte
Demo online
Bagaimana itu bekerja
Pilih sub-string (dimulai dengan panjang 2) yang terdiri dari karakter yang berdekatan dan bergerak di sepanjang string. Kumpulkan sub-string yang hanya berisi vokal. Ulangi dengan sub-string yang lebih panjang.
Untuk string 'abcdef' ini adalah substring yang dihasilkan dan diperiksa:
sumber