Apakah ini kata yang kuat?

33

Mereka mengatakan itu hateadalah kata yang kuat. Saya ingin mencari tahu mengapa, jadi saya melihat kata itu.

Saya perhatikan bahwa setiap konsonan memiliki vokal setelahnya. Itu membuatnya terlihat cukup kuat bagi saya, jadi saya memutuskan bahwa itulah yang membuat kata kuat.

Saya ingin menemukan kata-kata yang lebih kuat, jadi saya perlu program untuk itu!

Menemukan kata-kata yang kuat

Kata-kata yang kuat adalah kata-kata di mana setiap konsonan (huruf dalam himpunan BCDFGHJKLMNPQRSTVWXZ) diikuti oleh vokal (huruf dalam himpunan AEIOUY). Itu dia. Tidak ada hal lain yang penting.

Jika kata dimulai dengan vokal, Anda tidak perlu khawatir tentang huruf apa pun sebelum konsonan pertama. Jika kata itu tidak memiliki konsonan sama sekali, itu secara otomatis adalah kata yang kuat!

Beberapa contoh kata-kata yang kuat adalah agate, hatedan you. agatemasih merupakan kata yang kuat karena meskipun dimulai dengan vokal, setiap konsonan masih diikuti oleh vokal. youadalah kata yang kuat karena tidak memiliki konsonan.

Tidak ada batasan panjang untuk kata-kata yang kuat.

Tantangan

Tulis sebuah program atau fungsi yang mengambil string yang tidak kosong sebagai input, dan mengeluarkan nilai kebenaran jika itu adalah kata yang kuat atau nilai yang salah jika tidak.

Klarifikasi

  • Anda dapat memutuskan untuk mengambil input dalam huruf kecil atau besar. Tentukan yang mana dalam jawaban Anda.
  • Kata-kata tidak akan mengandung tanda baca apa pun. Mereka hanya akan berisi huruf biasa di set ABCDEFGHIJKLMNOPQRSTUVWXYZ.
  • Alih-alih nilai yang benar dan salah, Anda dapat memilih dua nilai yang berbeda dan konsisten untuk mengembalikan nilai benar dan salah. Jika Anda melakukan ini, tentukan nilai yang Anda pilih dalam jawaban Anda.
    • Atau Anda dapat menampilkan nilai palsu untuk kata yang kuat dan yang benar untuk kata yang tidak kuat.

Uji kasus

Input      -> Output
hate       -> true
love       -> true
popularize -> true
academy    -> true
you        -> true
mouse      -> true
acorn      -> false
nut        -> false
ah         -> false
strong     -> false
false      -> false
parakeet   -> false

Mencetak gol

Karena ini adalah , jawabannya dengan byte paling sedikit menang!

Lirik
sumber
Sandbox
LyricLy
1
Apakah kata kosong ""kemungkinan input?
Silvio Mayolo
@ SilvioMayolo Tidak.
LyricLy
@ LyricLy Jika input "akademi" maka output harus salah, cara saya memahami masalah. Karena 'm' adalah konsonan.
Truth-seek
1
a "pisang" penuh dengan kebencian
jstnthms

Jawaban:

18

JavaScript (ES6), 36 28 27 byte

Disimpan 1 byte dengan membalikkan hasilnya, seperti yang disarankan oleh LarsW

Mengambil input dalam huruf kecil. Kembali falseuntuk kata yang kuat dan trueuntuk kata yang tidak kuat.

s=>/[^aeiouy]{2}/.test(s+0)

Bagaimana?

Kami menambahkan 0(non-vokal) di akhir string input dan mencari dua karakter non-vokal berturut-turut. Ini memungkinkan kami untuk membahas kedua kasus yang membuat kata tidak kuat:

  • ini berisi dua konsonan berturut-turut
  • atau diakhiri dengan konsonan

Uji kasus

Arnauld
sumber
Tapi mengapa +0? Tampaknya berfungsi dengan baik tanpanya
Matheus Avellar
1
@MatheusAvellar Tanpa +0itu, itu akan mengembalikan positif palsu pada kata-kata yang diakhiri dengan konsonan.
Arnauld
Begitu ya, tanpa itu tidak dapat menemukan 2 non-vokal berturut-turut jika itu adalah huruf terakhir dari kata tersebut. Pintar!
Matheus Avellar
Anda harus dapat menghilangkan !(dua nilai berbeda)
LarsW
@ LarsW Terima kasih! Saya tidak memperhatikan aturan ini.
Arnauld
10

Python 2 , 48 byte

lambda s:'se, F'in`[v in'aeiouy'for v in s+'b']`

Fungsi tanpa nama mengambil string (huruf kecil) s,, dan kembali Falsejika kuat atau Truejika tidak.

Cobalah online! (membalikkan hasil agar sesuai dengan OP)

Bagaimana?

Kata-kata yang tidak kuat memiliki konsonan diikuti oleh konsonan atau diakhiri dengan konsonan.

Kode menambahkan konsonan ke akhir ( s+'b') untuk membuat tes yang diperlukan hanya untuk dua konsonan berturut-turut.

Itu mengetahui apakah setiap huruf dalam kata yang diubah adalah vokal dengan pemahaman daftar [v in'aeiouy'for v in s+'b'].

Sekarang perlu memeriksa dua Falsehasil berturut-turut (menandakan kata yang tidak kuat), ia melakukannya dengan mendapatkan representasi string (menggunakan `...`) daftar ini dan mencari keberadaan 'se, F'. Ini adalah string terpendek yang ditemukan 'False, False'tetapi tidak ada 'True, True':; 'False, True'; atau 'True, False'.

Sebagai contoh perhatikan 'nut', pemahaman daftar mengevaluasi setiap huruf, vdari 'nutb'keberadaan dalam 'aeiouy'menghasilkan daftar [False, True, False, False], representasi string dari daftar ini adalah '[False, True, False, False]'yang berisi di 'e, F'sini: '[False, True, Fals>>e, F<<alse]'maka fungsi mengembalikan Truemakna bahwa kacang bukan kata yang kuat.

Jonathan Allan
sumber
7

Jelly ,  10  9 byte

e€ØY;Ạ11ẇ

Tautan monadik yang mengambil daftar karakter dan mengembalikan:

  • 0 jika kuat
  • 1 jika tidak

Cobalah online! atau lihat test-suite .

Bagaimana?

e€ØY;Ạ11ẇ - Link: list of characters, s      e.g. "hate"  or  "you"  or  "not"
  ØY      - consonant yield                   "BCDFGHJKLMNPQRSTVWXZbcdfghjklmnpqrstvwxz"
e€        - exists in? for €ach letter            [1,0,1,0]   [0,0,0]    [1,0,1]
     Ạ    - all truthy? (1 for any valid input)   1           1          1
    ;     - concatenate                           [1,0,1,0,1] [0,0,0,1]  [1,0,1,1]
      11  - literal eleven
        ẇ - sublist exists?                       0           0          1
          -  N.B.: left of ẇ implicitly makes digits so it looks for the sublist [1,1]

Catatan: Alasan untuk menggunakan hanya untuk menyimpan byte lebih dari menggunakan 1(karena kami kemudian ingin menggunakan 11langsung).

Jonathan Allan
sumber
hmm, nilai yang konsisten ...
Erik the Outgolfer
apa maksudmu?
Jonathan Allan
hal yang mengganggu dalam kode Anda ... kalau tidak Anda bisa melakukan eۯY;1w11atau sesuatu
Erik the Outgolfer
Kenapa sebelas? Kata-kata string sepertinya tidak terikat pada angka sebelas dengan cara apa pun
hyiltiz
@ Ashiltiz ketika angka dua memiliki argumen kiri yang merupakan angka itu secara implisit dikonversi ke daftar angka desimal, sehingga sebelas menjadi [1,1].
Jonathan Allan
5

05AB1E , 8 byte

Kode

žPS¡¦õÊP

Menggunakan penyandian 05AB1E . Cobalah online!

Penjelasan

žPS¡         # Split the string on consonants (bcdfghjklmnpqrstvwxz)
    ¦        # Remove the first element of the array to handle cases when the
               string starts with a consonant
     õÊP     # Check if the empty string is not in the array

Contoh

             # "popularize"
žPS¡         # ['', 'o', 'u', 'a', 'i', 'e']
    ¦        # ['o', 'u', 'a', 'i', 'e']
     õÊ      # [1, 1, 1, 1, 1]
       P     # 1
Adnan
sumber
Mungkin saya melewatkan sesuatu, tetapi ini sepertinya selalu mengembalikan 1? Ia mengembalikan 1 untuk kedua kasus kebenaran yang saya coba dan testcals palsu.
sundar - Pasang kembali Monica
(Oh, saya baru tahu berapa umur jawaban ini (dan pertanyaan). Saya kira sesuatu dalam bahasa ini telah berubah sementara itu?)
sundar - Reinstate Monica
@sundar Ya tangkapan bagus! Sepertinya saya merusak fungsi split di beberapa titik. Saya akan memperbaikinya sesegera mungkin.
Adnan
5

R , 43 byte

function(s)grep("[^aeiouy]{2}",paste(s,""))

Cobalah online!

Port jawaban JavaScript Arnauld; mengembalikan 1 untuk kata-kata yang lemah dan integer(0)untuk yang kuat; itu menambahkan (spasi) ke ujung string.

Ini sebenarnya vektor; dengan vektor string, ia mengembalikan indeks (1-based) dari kata-kata yang lemah.

Giuseppe
sumber
Komentar yang sama di sini, tidak bisakah Anda menggunakan $ di regex alih-alih menambahkan spasi?
Charlie
@Charlie Saya tidak yakin bagaimana Anda bermaksud menggunakan $, ingin menjelaskan lebih lanjut?
Giuseppe
Sangat menyukai solusi ini. Saya pikir logikanya lebih jelas (dan byte sama) paste0(s,0), tetapi itu hanya kebawelan. Saya pikir @Charlie mereferensikan sesuatu seperti ini: grep("[^aeiouy]([^aeiouy]|$)",s)
user5957401
3

Dyalog APL, 20 byte

⎕←∧/2∨/0,⍨⍞∊'aeiouy'

Cobalah online!

Oberon
sumber
3
Saya pikir Anda tidak perlu ⎕←.
Zacharý
@ Zacharý Saya dulu tidak mengatakannya, tapi saya kemudian diberitahu (oleh Dennis, saya percaya) bahwa sebuah program seharusnya tidak dianggap dijalankan dalam REPL.
Oberon
Bahasa apa yang dia katakan tentang itu? Apakah itu untuk Dyalog APL? Saya tahu bahwa kebijakan pasti berlaku untuk Python / JavaScript / dll.
Zacharý
3

Haskell , 61 54 byte

f=and.(zipWith(||)=<<tail).(map(`elem`"aeiouy")).(++"z")

Cobalah online!

Saya harus menambahkan huruf zpada akhir string untuk menangani huruf konsonan tertinggal.

jferard
sumber
2

Java (OpenJDK 8) , 93 81 byte

s->{int w=0,p=w,l;for(char c:s)w|=p&(p=l="aeiouy".indexOf(c)>>31);return w+p>=0;}

Cobalah online!

Roberto Graham
sumber
Saya boolean takut tidak jawabannya: s->{int w=0,p=w,l;for(char c:s){l="aeiouy".indexOf(c)>>31;w|=p&l;p=l;}return w+p>=0;}.
Jakob
1
Atau Anda bahkan dapat melakukan ini:s->{int w=0,p=w,l;for(char c:s)w|=p&(p=l="aeiouy".indexOf(c)>>31);return w+p>=0;}
Jakob
Jawaban yang bagus, tetapi dengan tantangan ini, pencocokan regex sederhana sebenarnya sedikit lebih pendek. Namun, +1 dari saya.
Kevin Cruijssen
1
@KevinCruijssen Regex saya buruk, tidak bisa berfungsi: D. Saya akan berpura-pura ingin menjadi orisinal
Roberto Graham
@RobertoGraham " Saya akan berpura-pura ingin menjadi yang asli " Ya, tentu saja. :) Dan saya dulu cukup buruk di regex juga, tapi setelah beberapa jawaban lain di sini di PPCG menggunakan regex saya semakin terbiasa. Dan saya sudah menemukan cara untuk mencocokkan konsonan yang digunakan [a-z&&[^aeiouy]] dalam jawaban saya sebelumnya . ;)
Kevin Cruijssen
2

Sekam , 12 byte

ΛΣX_2m€¨γaıu

Cobalah online!

Terima kasih kepada H.PWiz untuk bantuan dengan -4. Mengembalikan nilai-nilai yang tidak konsisten tetapi benar atau salah.
Berkat Leo untuk -1, sekarang mengembalikan nilai kebenaran / kepalsuan yang konsisten.

Erik the Outgolfer
sumber
String terkompresi lebih pendek . Kompresi string masih terlalu lambat, saya perlu mengatasinya lagi
Leo
@ Leo, saya pikir itu masalah NP sayangnya.
Erik the Outgolfer
2

Pyth , 18 byte

:+Q1."2}M>åYà

Verifikasi semua kasus uji.

"Meminjam" regex dari jawaban JS . Ini mengembalikan Falsekata-kata yang kuat, Truejika tidak

Tuan Xcoder
sumber
@KevinCruijssen Bahkan, Pyth menggunakan ISO-8859-1. Itu sebabnya saya tidak yakin.
Tn. Xcoder
1
Userscript @KevinCruijssen Downgoat mengatakan kepada saya itu adalah 13 bytes: 13 ISO-8859-1 bytes, 13 chars. Saya pikir itu akan baik
Tn. Xcoder
@KevinCruijssen Harus diperbaiki sekarang.
Tn. Xcoder
@KevinCruijssen Saya tidak melihat perbedaan. Apa kode yang Anda lihat di jawaban saya dan kode apa yang Anda lihat di tautan pengujian saya?
Tn. Xcoder
@KevinCruijssen Lol, ini adalah font browser Anda.
Tn. Xcoder
2

Brachylog , 18 11 10 byte

,Ḷs₂{¬∈Ẉ}ᵐ

Cobalah online!

Rapi dan sederhana (kecuali mungkin untuk 2 byte awal tambahan untuk menangani kasus konsonan akhir, seperti "parkit").

Apakah kepalsuan untuk kata-kata yang kuat dan benar untuk kata-kata yang tidak kuat.

,Ḷ               % append a newline (non-vowel) at the end of input, 
                 %   to catch final consonants
     s₂          % the result has some substring of length 2
       {¬∈Ẉ}ᵐ    % where neither of its elements belong to  
                 %   the set of alternate vowels (with "y")
sundar - Pasang kembali Monica
sumber
1

Python 2 , 58 byte

-30 byte dengan menyadarinya bisa sesederhana jawaban JS Arnauld .

lambda s:re.search('[^aeiouy]([^aeiouy]|$)',s)<1
import re

Cobalah online!

benar-benar manusiawi
sumber
Apakah Anda tidak perlu menugaskan lambda untuk sesuatu? yaituf=lambda s...
OldBunny2800
@ OldBunny2800 tidak kecuali Anda menggunakan referensi dalam kode Anda (dapat diterima untuk membuat fungsi yang tidak disebutkan namanya yang dapat diakses seseorang untuk digunakan kembali dengan kode header atau footer - di sini dengan f=\di header).
Jonathan Allan
Saya pikir Anda mungkin dapat mengganti string pola Anda '[^aeiouy]([^aeiouy]|$)'(24 byte) dengan "[^aeiouy]("*2+")|$)"(21 byte) untuk menyimpan 3 byte, karena grup kosong (),, tidak mengubah perilaku pencarian ( TIO ).
Jonathan Frech
@ JonathanFrech Ini bisa menjadi lebih baik lagi
Tn. Xcoder
1

Perl 5, 31 byte (30 +1)

$_=''if/[^aeiouy](?![aeiouy])/

+1 byte untuk -pbendera baris perintah. Mencetak kata jika itu kata yang kuat, atau string kosong jika bukan.

Silvio Mayolo
sumber
"dua nilai yang berbeda dan konsisten"
L3viathan
@ L3viathan String kosong adalah falsy dan string non-kosong adalah benar. Ini valid
LyricLy
Peraturan L3viathan Perl tentang kebenaran sebenarnya sangat kondusif untuk tantangan seperti ini. Ini bukan pertama kalinya saya mengeksploitasi fakta itu.
Silvio Mayolo
Dengan kata-kata yang diakhiri baris baru, ini dapat disingkat menjadi $_=$/if/[^aeiouy]{2}/.
nwellnhof
1

Jelly , 11 byte

e€ØY;1a2\¬Ȧ

Cobalah online!

e€ØY;1a2\¬Ȧ  Main link
 €           For each letter
e            Is it an element of
  ØY         The consonants (excluding Yy)?
    ;1       Append 1 (true) (consonant) to make sure last letter isn't consonant
       2\    For all (overlapping) slices of length 2 (the <link><nilad>\ functionality)
      a      Logical AND of the two values; is it a consonant pair?
         ¬   Logical NOT vectorizing; for each (overlapping) pair, is it not a consonant pair?
          Ȧ  Any and all; make sure all pairs are not consonant pairs

Ya saya tahu saya sering dikalahkan oleh Jonathan Allan tetapi saya tetap ingin berbagi pendekatan saya: P

-4 byte dengan mencuri sedikit jawaban Jonathan Allan (alih-alih menambahkan konsonan untuk memeriksa huruf tepi huruf terakhir, tambahkan saja 1)
-1 byte berkat mil

HyperNeutrino
sumber
Anda dapat menyimpan byte menggunakan salah satu a2\atau Ȧ2Ƥbukannyaṡ2Ȧ€
mil
@Jonathan Allan facepalm yang sengaja saya pastikan untuk digunakan ØCuntuk memastikan Yydihitung sebagai konsonan karena entah bagaimana saya ingat ke belakang. Terima kasih!
HyperNeutrino
1

Awk, 39 byte

/([^aeiouy]{2}|[^aeiouy]$)/{print "n"}

mencetak nuntuk kata-kata yang tidak kuat, tidak ada (atau, hanya baris baru) untuk kata kunci

mengikuti paket dan mencari dua non-vokal berturut-turut pada input huruf kecil

pengujian

$ awk -f strongwork.awk
hate
love
popularize
academy
you
mouse
acorn
n
nut
n
ah
n
strong
n
false
n
parakeet
n
JoshRagem
sumber
1

Kotlin , 49 byte

{Regex(".*[^aeiouy]([^aeiouy].*|$)").matches(it)}

Benar dan salah ditukar

Yg diperindahkan

{
    Regex(".*[^aeiouy]([^aeiouy].*|$)").matches(it)
}

Uji

var s:(String)->Boolean =
{Regex(".*[^aeiouy]([^aeiouy].*|$)").matches(it)}
data class TestData(val input: String, val output: Boolean)

fun main(args: Array<String>) {
    val items = listOf(
            TestData("hate", true),
            TestData("love", true),
            TestData("popularize", true),
            TestData("academy", true),
            TestData("you", true),
            TestData("mouse", true),
            TestData("acorn", false),
            TestData("nut", false),
            TestData("ah", false),
            TestData("strong", false),
            TestData("false", false),
            TestData("parakeet", false)
    )

    items
            .filter { s(it.input) == it.output }
            .forEach { throw AssertionError(it.toString()) }

    println("Test Passed")
}

TryItOnline

Berdasarkan pada Jawaban @ Arnauld

jrtapsell
sumber
1

Retina , 23 18 byte

$
$
1`[^aeiouy]{2}

Cobalah online! Output 0 untuk yang kuat, 1 jika tidak. Tambahkan 1 byte untuk mendukung case campuran. Sunting: Disimpan 5 byte berkat @ovs.

Neil
sumber
18 byte dengan menambahkan konsonan hingga akhir.
Ovs
1

Java 8, 53 42 byte

s->s.matches(".*[^aeiouy]([^aeiouy].*|$)")

-11 byte dengan menggunakan regex yang sama dengan jawaban Kotlin di @jrtapsell .

Coba di sini. ( falsejika kuat; truejika tidak)

Penjelasan:

s->               // Method with String parameter and boolean return-type
  s.matches(      //  Checks if the String matches the following regex:
    ".*           //   One or more characters
     [^aeiouy]    //   Followed by a consonant
     ([^aeiouy].* //   Followed by another consonant (+ any more characters)
      |$)")       //   Or the end of the String
                  // End of method (implicit / single-line return statement)

Jadi pada dasarnya memeriksa apakah kita dapat menemukan dua konsonan yang berdekatan, atau jika String berakhir dengan konsonan.


Jawaban lama ( 53 byte ):

s->s.matches("[aeiouy]*([a-z&&[^aeiouy]][aeiouy]+)*")

Coba di sini. ( truejika kuat; falsejika tidak)

Gunakan regex untuk melihat apakah input-String cocok dengan regex 'kuat'. Perhatikan bahwa String#matchesdi Jawa secara otomatis ditambahkan ^...$untuk memeriksa apakah String sepenuhnya cocok dengan regex yang diberikan.

Penjelasan":

 s->                   // Method with String parameter and boolean return-type
  s.matches(           //  Checks if the String matches the following regex:
    "[aeiouy]*         //   0 or more vowels
    ([a-z&&[^aeiouy]]  //     { A consonant,
     [aeiouy]+)        //       plus one or more vowels }
    *")                //    Repeated 0 or more times
                       // End of method (implicit / single-line return statement)

Pencarian alih-alih yang cocok (seperti banyak penggunaan jawaban lain) sebenarnya lebih lama di Jawa:
70 byte :

s->java.util.regex.Pattern.compile("[^aeiouy]{2}").matcher(s+0).find()

Coba di sini. ( falsejika kuat; truejika tidak)

Kevin Cruijssen
sumber
1

Ruby , 25 byte

->w{w+?t!~/[^aeiouy]{2}/}

Cobalah online!

Semua orang melakukannya, jadi mengapa tidak bisa Ruby?

GB
sumber
0

SOGL V0.12 , 19 18 byte

æ"[^ŗy]”ŗ(ŗ|$)”øβ=

Coba Di Sini!

Penjelasan:

æ                   push "aeiou"
 "[^ŗy]”            push "[^ŗy]" with ŗ replaced with pop
        ŗ(ŗ|$)”     push `ŗ(ŗ|$)` with ŗ replaced with pop
               øβ   replace in the input that regex with nothing
                 =  check for equality with the original input
dzaima
sumber
0

05AB1E , 11 byte

žP¹SåJ1«11å

Cobalah online!

Menggunakan algoritma Jonathan, menghasilkan 0true dan 1false.

Erik the Outgolfer
sumber
0

Swift 3.1 , 85 bytes

import Foundation
{($0+"0").range(of:"[^aeiouy]{2}",options:.regularExpression)==nil}

Coba di sini!

Ini meminjam regex Arnauld .

Tuan Xcoder
sumber
0

Lua, 41 byte

return#(io.read()..0):match"[^aeiouy]+"<2

Membaca dari input standar

Lua (loadstring'ed), 37 byte

return#((...)..0):match"[^aeiouy]+"<2

Membaca dari parameter fungsi


Input huruf kecil

Melihat jika ada string dengan panjang 2 atau lebih, hanya terdiri dari bukan vokal (konsonan) atau jika string berakhir dengan non-vokal

Mengembalikan nilai true / false

brianush1
sumber
0

C ++, 195 194 byte

-1 byte, terima kasih kepada Zacharý

Huruf besar, mengembalikan true jika input adalah kata yang kuat, false jika tidak (C ++ memiliki int sederhana untuk membuat aturan pemeran implisit, 0 => false, true sebaliknya)

#include<string>
#define C(p)(v.find(e[p])==size_t(-1))
std::string v="AEIOUY";int s(std::string e){for(int i=0;i<e.size()-1;++i)if(e[i]>64&&e[i]<91&&C(i)&&C(i+1))return 0;return!C(e.size()-1);}

Kode untuk diuji:

auto t = {
    "HATE",
    "LOVE",
    "POPULARIZE",
    "ACADEMY",
    "YOU",
    "MOUSE",
    "ACORN",
    "NUT",
    "AH",
    "STRONG",
    "FALSE",
    "PARAKEET"
};

for (auto&a : t) {
    std::cout << (s(a) ? "true" : "false") << '\n';
}
HatsuPointerKun
sumber
1
Anda dapat menghapus ruang antara returndan !.
Zacharý
0

C, 107 Bytes

i,v,w,r,t;a(char*s){w=0;for(r=1;*s;s++){v=1;for(i=6;v&&i;)v=*s^" aeiouy"[i--];r=w&&v?0:r;w=v;}return r&~v;}

Mengembalikan 1 untuk kata kuat dan 0 untuk kata lemah . Diuji dengan kata-kata yang diberikan di pos utama.

Helco
sumber
0

PHP, 69 byte

preg_match("/([^AEIOUY][^AEIOUY]+|[^AEIOUY]$)/",$_SERVER['argv'][1]);

Pengembalian 1 adalah kata tidak kuat.

Matias Villanueva
sumber
Selamat datang di PPCG! Saya percaya Anda dapat menghapus spasi untuk memotong beberapa byte, khususnya /", str-> /",strdan [1]))) return-> [1])))returntapi saya tidak tahu PHP terlalu baik sehingga saya tidak yakin.
Stephen
Ya, ide yang bagus! Dimungkinkan juga untuk mengurangi byte dengan mengasumsikan bahwa input selalu dalam huruf besar.
Matias Villanueva
Oh, dan jika regex adalah mesin regex standar, tidak bisakah Anda melakukannya [B-Z]?
Stephen
@Stephen [B-Z]termasuk vokal. [^AEIOUY]bekerja, meskipun.
LyricLy
Saya juga tidak tahu PHP, tetapi Anda mungkin bisa menyimpan lebih banyak byte dengan mengembalikan hasil dari pertandingan regex secara langsung, alih-alih membungkusnya dalam sebuah ifpernyataan.
LyricLy
0

CJam , 57 byte

q{"aeiouy"#W=}%_,:B{_A={_A_)\B(<{=!X&:X;}{0:X;;;}?}&}fA;X

Cobalah online!


Membaca input, dikonversi ke 1s untuk konsonan, 0s untuk vokal. Untuk setiap konsonan, DAN variabel X yang telah ditentukan sebelumnya (ditetapkan ke 1) dengan nilai karakter berikutnya. Output X

lolad
sumber