Covfefify สตริง


371

ในการท้าทายนี้คุณจะต้องใช้สตริงที่ตรงกับ regex ^[a-zA-Z]+$หรืออะไรก็ตามที่สมเหตุสมผล (คุณไม่ต้องพิจารณาตัวอักษรตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็กถ้าคุณต้องการ) (คุณอาจถือว่าสตริงนั้นยาวพอและมีโครงสร้างที่เหมาะสมสำหรับทุกคน การดำเนินงาน) และส่งออกสตริงอื่นผลิตคล้ายกับคำที่ส่วนท้ายของทวีต Dadaist ล่าสุดโดย POTUS ( "Despite the constant negative press covfefe")

วิธี covfefify สตริง:

ขั้นแรกให้รับกลุ่มเสียงแรก (สร้างคำศัพท์)

คุณทำเช่นนี้ได้อย่างไร ดี:

  • ค้นหาเสียงสระแรก ( yยังเป็นเสียงสระ)

      v
    creation
    
  • ค้นหาพยัญชนะตัวแรกหลังจากนั้น

        v
    creation
    
  • ลบส่วนที่เหลือของสตริง

    creat
    

นั่นคือกลุ่มเสียงแรกของคุณ

ขั้นตอนต่อไป:

รับพยัญชนะตัวสุดท้ายของกลุ่มเสียง

t

และแทนที่ด้วยเวอร์ชันที่เปล่งเสียงหรือไม่มีเสียง เมื่อต้องการทำเช่นนี้ค้นหาตัวอักษรในตารางนี้ แทนที่ด้วยตัวอักษรที่กำหนด (ซึ่งอาจเป็นตัวอักษรเดียวกัน)

b: p
c: g
d: t
f: v
g: k
h: h
j: j
k: g
l: l
m: m
n: n
p: b
q: q
r: r
s: z
t: d
v: f
w: w
x: x
z: s

ดังนั้นเราจะได้รับ

d

จากนั้นนำเสียงสระถัดไปหลังจากพยัญชนะดังกล่าว คุณสามารถสันนิษฐานได้ว่าพยัญชนะนี้ไม่อยู่ท้ายสตริง เข้าร่วมสองคนนี้ด้วยกันจากนั้นทำซ้ำสองครั้ง:

didi

ต่อสิ่งนี้เข้ากับกลุ่มเสียงแรก:

creatdidi

คุณทำเสร็จแล้ว: สตริงถูก covfefified และคุณสามารถส่งออกได้

กรณีทดสอบ:

coverage: covfefe

example: exxaxa

programming: progkaka (the a is the first vowel after the g, even though it is not immediately after)
code: codtete

president: preszizi

นี่คือดังนั้นโปรดทำให้โปรแกรมของคุณสั้นที่สุด!


7
"x" ในทางเทคนิคควรแมปลงบน "gz" "qu" ควรแมปไปยัง "gw"
Steve Bennett

2
สิ่งนี้ระบุถึงแนวคิดเรื่องการแปรเปลี่ยนของโคฟฟิฟ แต่ฉันรู้สึกว่าการอ้างอิงถึงงานของดักลาสฮอฟสตเตอร์ (และเมลานีมิตเชลล์) ในการเปรียบเทียบการแปลงสตริงเช่นในแนวคิดของไหลดูเหมือนว่าเหมาะสม
ดาวอังคาร

59
คำตอบที่มีมากกว่า 140 ตัวอักษรควรถูกตัดสิทธิ์
Sandy Gifford

12
น่าเสียดายที่เป็นไปไม่ได้ที่จะทำเช่นนี้ใน TrumpScript :(

4
@ThePlasmaRailgun มันเป็นเรื่องตลกเนื่องจากทวีตต้องมีความยาวไม่เกิน 140 ตัวอักษร
แยกผลไม้

คำตอบ:


91

เยลลี่ ,  58  57 ไบต์

<TḢị
e€Øyµ¬TĖEÐḟḢṪ;ç¥T
ḣÇḢ⁸ÇịµḢØYiị“ßȷ%Hẹrȧq’œ?ØY¤⁾cgy;ẋ2

โปรแกรมเต็มรูปแบบที่รับรายการอักขระตัวพิมพ์เล็กและพิมพ์ผลลัพธ์

ลองออนไลน์!

อย่างไร?

<TḢị - Link 1, extract first value from y not less than x: number, x; list of numbers, y
     -                                                     e.g. 5, [3,4,7]
<    - x less than vectorised across y                             [0,0,1]
 T   - truthy indices                                              [    3]
  Ḣ  - head                                                             3
   ị - index into y                                                     7

e€Øyµ¬TĖEÐḟḢṪ;ç¥T - Link 2, indices of the letters to manipulate: list of characters, w
  Øy              - vowel+ yield = "AEIOUYaeiouy"                 e.g.  "smouching" 
e€                - exists in for €ach letter in w                       001100100
    µ             - monadic chain separation, call that v
     ¬            - not vectorised across v                              110011011
      T           - truthy indices                                       12  56 89
       Ė          - enumerate                      [[1,1],[2,2],[3,5],[4,6],[5,8],[6,9]]
         Ðḟ       - filter discard if:
        E         -   elements are equal                       [[3,5],[4,6],[5,8],[6,9]]
           Ḣ      - head                                        [3,5]
            Ṫ     - tail                                           5
                T - truthy indices of v                                    34  7
               ¥  - last 2 links as a dyad
              ç   -   call last link (1) as a dyad                         7
             ;    -   concatenate                                     5,7
                  -                                    ...i.e the indexes of 'c' and 'i'

ḣÇḢ⁸ÇịµḢØYiị“ßȷ%Hẹrȧq’œ?ØY¤⁾cgy;ẋ2 - Main link: list of characters, w
                                   -                             e.g.  "smouching"
 Ç                                 - call the last link (2) as a monad    [5,7]
ḣ                                  - head to index (vectorises)      ["smouc","smouchi"]
  Ḣ                                - head                             "smouc"
                                   -   implicit print due to below leading constant chain
   ⁸                               - link's left argument, w
    Ç                              - call the last link (2) as a monad    [5,7]
     ị                             - index into w                         "ci"
      µ                            - monadic chain separation, call that p
       Ḣ                           - head p                               'c'
        ØY                         - consonant- yield = "BCDFGHJKLMNPQRSTVWXZbcdfghjklmnpqrstvwxz"
          i                        - first index                          22
                          ¤        - nilad followed by link(s) as a nilad:
            “ßȷ%Hẹrȧq’             -   base 250 number = 1349402632272870364
                        ØY         -   consonant- yield = "BCDFGHJKLMNPQRSTVWXZbcdfghjklmnpqrstvwxz"
                      œ?           -   nth permutation  = "BCDFGHJKLMNPQRSTVWXZpctvkhjglmnbqrzdfwxs"
           ị                       - index into         (special case ->) 'c'
                           ⁾cg     - literal ['c','g']
                              y    - translate (change 'c's to 'g's)      'g'
                               ;   - concatenate with the headed p        "gi"
                                ẋ2 - repeat list twice                    "gigi"
                                   - implicit print ...along with earlier = smoucgigi

13
นี้เป็นที่น่าตื่นตาตื่นใจ ...
Klangen

ผลงานที่เหลือเชื่อ
JF มัน

9
ฉันเจลลี่ upvoted
DeepS1X

6
นี่คือภาษาการเขียนโปรแกรมที่แปลกประหลาดที่สุดที่ฉันเคยเห็น
Ryan

@ Ryan มันมีไว้สำหรับเล่นกอล์ฟ
แยกผลไม้

61

JavaScript (ES6), 107 103 ไบต์

บันทึกแล้ว 4 ไบต์ด้วยGOTO 0

s=>([,a,b,c]=s.match`(.*?[aeiouy]+(.)).*?([aeiouy])`,a+(b=(a="bcdfgszkvtgp")[11-a.search(b)]||b)+c+b+c)

กรณีทดสอบ


6
คุณสามารถบันทึกได้สองสามไบต์เช่นนี้:s=>([,a,b,c]=s.match`(.*?[aeiouy]+(.)).*?([aeiouy])`,a+(b=(a="bcdfgszkvtgp")[11-a.search(b)]||b)+c+b+c)
GOTO 0

@ GOTO0 ขอบคุณอัปเดตแล้ว
Arnauld

49

เจลลี่ , 45 39 ไบต์

Øa“œṣ$b|0Ḃ’ṃ,Ṛ$yṫµfØyḢṭḢẋ2
e€ØyIi-‘ɓḣ;ç

ลองออนไลน์!

มันทำงานอย่างไร

e€ØyIi-‘ɓḣ;ç                Main link. Argument: s (string)

  Øy                        Vowels with y; yield "AEIOUYaeiouy".
e€                          Test each character in s for membership.
    I                       Increments; compute the forward differences of the
                            resulting array of Booleans.
     i-                     Find the first index of -1.
       ‘                    Increment this index to find the index of the first
                            consonant that follows a vowel.
                            Let's call this index j.
        ɓ                   Begin a new chain. Left argument: s. Right argument: j
         ḣ                  Head; yield the first j characters of s.
           ç                Call the helper link with arguments s and j.
          ;                 Concatenate the results to both sides.
Øa“œṣ$b|0Ḃ’ṃ,Ṛ$yṫµfØyḢṭḢẋ2  Helper link. Left argument: s. Right argument: j

Øa                          Alphabet; set the return value to “abc...xyz”.
  “œṣ$b|0Ḃ’                 Yield 7787255460949942. This is a numeric literal in
                            bijective base 250. The value of each digit matches its
                            1-based index in Jelly's code page.
           ṃ                Convert 7787255460949942 to base 26, using the digts
                            a = 0, b = 1, ..., z = 25.
                            This yields "bcdfkszgvtgp".
            ,Ṛ$             Pair the result with its reverse, yielding
                            ["bcdfkszgvtgp", "pgtvgzskfdcb"].
                ṫ           Call tail with arguments s and j, yielding the j-th and
                            all following characters of s.
               y            Translate the result to the right according to the
                            mapping to the left, i.e., replace 'b' with 'p', 'c'
                            with 'g', etc. 'g' appears twice in the first string
                            of the mapping; only the first occurrence counts.
                            Let's call the resulting string r.
                 µ          Begin a new chain. Argument: r
                  fØy       Filter; remove non-vowels from r.
                     Ḣ      Head; take the first vowel.
                       Ḣ    Head; take the first character/consonant of r.
                      ṭ     Tack; append vowel to the consonant.
                        ẋ2  Repeat the resulting string twice.

4
ขอโทษเพื่อนดูเหมือนคุณพลาด mega jelly rep
Destructible Lemon

คำตอบดูเรียบง่ายเกินไป แต่จริงๆแล้วมันวิเศษจริงๆ ... ความเรียบง่ายนั้นสวยงาม
Erik the Outgolfer

31

CJam , 59 58 57 56 ไบต์

q_{"aeiouy":V&,_T|:T^}#)/(_W>"cbdfkszgvtpg"_W%er@sV&0=+_

ลองออนไลน์!

คำอธิบาย

q_                   e# Read the input and copy it.
{                    e# Find the index of the first char for which the following is true:
 "aeiouy":V          e#  Push "aeiouy" and store it in V.
 &,                  e#  Check if the current char is in the vowel string (0 or 1).
 _T|:T               e#  Copy the result and OR with T (T is initially 0), storing back in T.
 ^                   e#  XOR with the original result. This will be 1 for the first 
                     e#  consonant appearing after a vowel.
}#                   e# (end find)
)/                   e# Increment the index and split the string into chunks of that size.
(                    e# Pull out the first chunk.
_W>                  e# Copy it and get the last character (the consonant).
"cbdfkszgvtpg"_W%er  e# Transliterate the consonant to voiced/voiceless alternative.
@s                   e# Bring all the other split chunks to the top and join them together.
V&0=                 e# First char of the set intersection of that and the vowels.
                     e# (i.e. the first vowel in the second half)
+                    e# Concatenate the new consonant and the vowel.
_                    e# Duplicate the result of that.
                     e# Implicit output of stack contents.

2
CJam เต้น Jelly หรือเปล่า? : O (อย่างน้อยก็เต้น Jelly ตอบทุกคนดูเหมือนจะ upvoting.)
ผลไม้ที่แยกออก

29

C, 219 213 206 179 175 ไบต์

#define p putchar
#define q(a)for(;a strchr("aeiouy",*s);p(*s++));
f(s,c,h)char*s;{q(!)q()p(*s);p(c="pgt vkh jglmn bqrzd fwx s"[*s-98]);p(h=s[strcspn(s,"aeiouy")]);p(c);p(h);}

ลองออนไลน์!


* p = putchar ทำงานเป็นบรรทัดแรกหรือไม่
k_g

4
ขออภัยขาดคุณสมบัติ ไม่สามารถใส่ทวีตได้
caird coinheringaahing

@cairdcoinheringaahing คุณครับไม่ถูกต้อง (ฉันรู้ว่ามันเป็น 140 เมื่อคุณเขียนว่า)
สแตนดีด


1
สามารถลบออกได้ 12 ไบต์หรือมากกว่าโดยการแทนที่#defines และฟังก์ชันด้วยค่าสถานะตัวประมวลผลล่วงหน้า ( -D...)


18

PHP, 121 ไบต์

$v=aeiouy;preg_match("#(.*?[$v]+([^$v])).*?([$v])#",$argn,$t);echo$t[1],$z=strtr($t[2].$t[3],bcdfgkpstvz,pgtvkgbzdfs),$z;

ลองออนไลน์!


3
-2 bytes:echo$t[1],$z=strtr($t[2].$t[3],bcdfgkpstvz,pgtvkgbzdfs),$z;
Titus

@Titus ฉันไม่ได้คิดเกี่ยวกับเรื่องนั้น ขอบคุณ
JörgHülsermann

ทำไมไม่เปลี่ยนชื่อ$argnเป็นบางสิ่งที่สั้นกว่านี้? $aตัวอย่างเช่น - นั่นคือ -3 ไบต์
Tyler Sebastian

@TylerSebastian ฉันต้องมีตัวแปรอินพุตที่มีอยู่ ใช่ฉันสามารถสร้างฟังก์ชั่น แต่ถ้าฉันทำมันจะเพิ่มจำนวนไบต์เพิ่มขึ้นเมื่อใช้สามไบต์
JörgHülsermann

โอเคขอโทษฉันลืมวิธี PHP ทำบรรทัดคำสั่ง args - ฉันเพิ่งเห็นว่าคุณได้กำหนดไว้ในส่วนหัว แต่ล้มเหลวที่จะตระหนักว่ามันเป็นตัวแปรสงวน
Tyler Sebastian


14

Python 3, 155 139 ไบต์

import re
def f(x,k='aeiouy])'):b,c,v=re.findall(f'(.*?[{k}([^{k}.*?([{k}',x)[0];return b+c+(('bcdfgkpstvz'+c)['pgtvkgbzdfs'.find(c)]+v)*2

ลบออก 16 ไบต์ด้วย @ovs

ลบ 1 byte ขอบคุณGábor Fekete


2
คุณสามารถสร้างตัวแปรที่มีค่า'aeiouy]'ซึ่งอาจจะช่วยประหยัดไบต์ นอกจากนี้คุณยังสามารถลบอักขระบางตัวออกจากสตริงการแทนที่ได้เหมือนกัน
Gábor Fekete

2
ฉันไม่สามารถลบอักขระที่เหมือนกันออกจากสตริงการแทนที่ได้เนื่องจากจะเป็นIndexErrorและการบันทึกaeiouy])จะไม่บันทึกไบต์ใด ๆ
L3viathan

2
ถ้าคุณดึงออกบางอย่างเช่นคุณสามารถใช้s='aeiouy])' b,c,v=re.findall('(.*?[%s([^%s.*?([%s'%(s,s,s)มันไม่ได้สั้นกว่า แต่อาจนำไปสู่วิธีการทำให้สั้นลงโดยรวม
Jeremy Weirich


3
การใช้ f-strings จะช่วยประหยัด 1 ไบต์: k='aeiouy])'และf'(.*?[{k}([^{k}.*?([{k}'
Gábor Fekete

14

Java 8, 243 236 222 ไบต์

s->{String q="[a-z&&[^aeiouy]]",a=s.replaceAll("(^"+q+"*[aeiouy]+"+q+").*","$1"),b="pgtvkhjglmnbqrzdfwxs".charAt("bcdfghjklmnpqrstvwxz".indexOf(a.charAt(a.length()-1)))+s.replaceAll(a+q+"*([aeiouy]).*","$1");return a+b+b;}

ใช้.replaceAllregexes กับกลุ่มการดักจับเพื่อกรองส่วนที่เราไม่ต้องการ

คำอธิบาย:

ลองที่นี่

s->{ // Method with String parameter and String return-type
  // Temp String we use multiple times:
  String q="[a-z&&[^aeiouy]]",
   // Regex to get the first part (i.e. `creation` -> `creat` / `example` -> `ex`)
   a=s.replaceAll("(^"+q+"*[aeiouy]+"+q+").*","$1"), 
   // Get the trailing consonant and convert it
   b="pgtvkhjglmnbqrzdfwxs".charAt("bcdfghjklmnpqrstvwxz".indexOf(a.charAt(a.length()-1)))
   // Get the next vowel after the previous consonant from the input-String
    +s.replaceAll(a+q+"*([aeiouy]).*","$1");
  // Return the result:
  return a+b+b;
} // End of method

13

Haskell , 143 141 138 137 136 ไบต์

z h=elem h"aeiouy"
f i|(s,(m,c:x))<-span z<$>break z i,j:_<-filter z x,d<-"pgt.vkh.jglmn.bqrzd.fwx.s"!!(fromEnum c-98)=s++m++[c,d,j,d,j]

ลองออนไลน์!


1
น่ากลัว! การแทนที่nxด้วยสิ่งที่ตัวอักษรตัวเดียวจะช่วยประหยัด 2 ไบต์
tomsmeding

ประกาศzภายนอกfและเปลี่ยนไปใช้ยามแทนการletบันทึกอีกสองไบต์: ลองออนไลน์!
Laikoni

2
และอีกสองโดยรวม(s,v)<-break z i,(m,c:x)<-span z vเข้า(s,(m,c:x))<-span z<$>break z iด้วยกัน
Laikoni

สามารถโกนอีกครั้งได้โดยใส่วงเล็บเปิดถัดจากletขอบคุณ!
bartavelle

@Laikoni ฉันไม่เข้าใจส่วนที่เกี่ยวกับการย้ายzออกจากf?
bartavelle

10

Python 261 260 ไบต์

def c(s,t='bpcgdtfvgksz'):
 q,r,t='aeiouy',range(len(s)),t+t[::-1]
 c=[i for i in r if i>[j for j in r if s[j]in q][0]and s[i]not in q][0]
 C=([t[2*i+1]for i in range(12)if s[c]==t[i*2]]or s[c])[0]
 return s[:c+1]+(C+s[[i for i in r if i>c and s[i]in q][0]])*2

ไม่ใช่ regex ไม่ใช่โซลูชันลึกลับ ใช้เวลาในการทำประมาณ 20 นาทีและอีกหนึ่งชั่วโมงในการเล่นกอล์ฟ

อาจมีความเข้าใจในรายการมากกว่าไลบรารี่มาตรฐานของไพ ธ อนส่วนใหญ่เพราะฉันไม่รู้ regex ...

ลองออนไลน์! (พร้อมทดสอบ)


8

Ruby , 90 ไบต์

->x{x[/(.*?#{$v='[aeiouy]'}+.).*?(#$v)/];$1+($1[-1].tr('bcdfgkpstvz','pgtvkgbzdfs')+$2)*2}

ลองออนไลน์!

เรามีบางอย่างที่เทียบเท่ากับ:

def covfefefify(x)
  v = '[aeiouy]'
  # Match x to a regular expression capturing:
  # Group 1:
  #  some characters (non-greedy)
  #  followed by some (greedy) non-zero number of vowels
  #  followed by exactly one character
  # Ungrouped:
  #  Some more (non-greedy) characters
  # Group 2
  #  Exactly one other vowel
  # By switching between greedy and non-greedy matches, we can capture longest and shortest vowel/consonant sequences without writing out all the consonants
  x[/(.*?#{v}+.).*?(#{v})/]
  # Glue it back together, replace the necessary consonants, duplicate where needed
  $1+($1[-1].tr('bcdfgkpstvz','pgtvkgbzdfs')+$2)*2
end

8

Python 2, 251 246 245 239 237 234 229 211 ไบต์

ส่งครั้งแรกที่นี่

def f(s):
  r=c='';n=0;w='aeiouy';a='bcdfghjklmnpqrstvwxz'
  for i in s:
    if n<2:r+=i
    if n<1and i in w:n=1
    if n==1and i in a:c='pgtvkhjglmnbqrzdfwxs'[a.index(i)];n=2
    if n==2and i in w:r+=c+i+c+i;break
  return r

ลองออนไลน์!

นักกอล์ฟเพื่อนที่ช่วยฉัน:

 Destructible Lemon / Wheat Wizard - 5 bytes
 Hubert Grzeskowiak - 1 byte
 musicman523 - 16 bytes

2
ยินดีต้อนรับสู่เว็บไซต์! ฉันเห็นคุณลองใช้แท็บเพื่อเยื้อง หากคุณแทนที่แต่ละแท็บด้วยช่องว่างเดียวมันจะเหมือนกันในด้านการใช้งานและจะปรากฏขึ้นอย่างถูกต้องแทนที่จะเป็นไบต์พิเศษ
Destructible Lemon

4
ในขณะที่สิ่งที่มะนาวที่ถูกทำลายกล่าวว่าถูกต้องคุณสามารถบันทึกไบต์ได้มากขึ้นในแหล่งที่มาของคุณโดยการเยื้องรหัสระดับแรกของคุณด้วยการเว้นวรรคเดียวและระดับที่สองด้วยแท็บเดียวซึ่งจะทำให้ยากต่อการแสดง แต่จะ ช่วยให้คุณประหยัด 5 ไบต์
Sriotchilism O'Zaic

1
เซมิโคลอนที่ท้ายบรรทัด 4 จำเป็นหรือไม่?
Hubert Grzeskowiak

1
@WaitndSee ฉันคิดว่าคุณสามารถทำให้เงื่อนไขของคุณสั้นลงได้ ครั้งแรก: คุณสามารถเปลี่ยนnot nเป็นn<12 ไบต์เนื่องจากคุณรู้ว่าnจะไม่ติดลบ นอกจากนี้คุณสามารถเปลี่ยนn==3ไปn>2ตั้งแต่ที่คุณรู้ว่าจะไม่เป็นมากกว่าn 3นอกจากนี้คุณยังสามารถใช้เทคนิค Python สำหรับเงื่อนไขเพื่อย่อให้สั้นลงและต่อไปได้อีกn=[n,1][i in w and n<1]; r+=[0,r][n<2]
musicman523

1
คุณสามารถเปลี่ยนr,v,c=('',)*3เป็นr=v=c=''เนื่องจากสตริงไม่เปลี่ยนรูป ฉันได้พยายามพวงของเทคนิคฉลาดอื่น ๆ แต่พวกเขามีความเฉื่อยชาว่าเป็นเวลานาน นอกจากนี้อาจเป็นการเพิ่มลองแบบออนไลน์! ลิงก์ไปยังโพสต์ของคุณ
musicman523

7

ทับทิม , 175 141 110 ไบต์

->s{s=~/(.*?#{v='[aeiouy]'}+(#{c='[^aeiouy]'}))#{c}*(#{v})/;"#$1#{($2.tr('bcdfgkpstvz','pgtvkgbzdfs')+$3)*2}"}

ลองออนไลน์!

  • บันทึกแล้ว 34 ไบต์ขอบคุณEric Duminil
  • บันทึกแล้ว 31 ไบต์ด้วยValue Ink + trอาร์กิวเมนต์ที่แนะนำเพิ่มประสิทธิภาพ

Ungolfed

covfefify = -> (s) {
    from = 'bcdfgkpstvz'
    to   = 'pgtvkgbzdfs'

    vowels = "[aeiouy]"
    consonants = "[^aeiouy]"

    s.match(/(.*?#{vowels}+(#{consonants}))#{consonants}*(#{vowels})/)
    d = ($2.tr(from, to) + $3) * 2
    "#$1#{d}"
}

4
-34 ไบต์ด้วยHash[*"bpcgdtfvgkkgpbsztdvfzs".chars]
Eric Duminil

1
เนื่องจากอินพุตดูเหมือนจะรับประกันว่าเป็นตัวอักษรทั้งหมดc=[^aeiou]จึงสั้นกว่า มีการแก้ไขเป็นครั้งแรกสำหรับแต่ละตัวแปรกำหนดพร้อมกัน -2 /^(.*?${v='[aeiou]'}+(#{c='[^aeiou]})).../ไบต์: ในที่สุด$2.tr("b-z","pgtevkhijgl-obqrzdufwxys")แทนที่จะแก้ปัญหาแฮช
หมึกมูลค่า

คุณสามารถบันทึก 14 ไบต์โดยใช้ subexpressions ( \g<n>) แทนการแก้ไขบวกอีก 14 ใช้ @ ValueInk ของข้อเสนอแนะ:[^aeiou] s=~/^(.*?([aeiouy])+([^aeiou]))\g<3>*(\g<2>)/
จอร์แดน

จริงๆแล้วมันมีจุดบกพร่องด้วยprogramming-> progkakaซึ่งฉันคิดไม่ออก
Jordan

@Jordan ขออภัยที่ subexpression call \g<3>อัปเดตค่า $ 3 ดังนั้นเราจึงไม่สามารถใช้ทางลัดนี้ได้
sudee

6

คริสตัล, 203 194 187 186 184 163 ไบต์

o=""
ARGV[v=c=0].each_char{|a|r=/#{a}/
"aeiouy"=~r&&(v=x=1)||(c=v)
o+=a if c<2||x
c>0&&(x&&break||(o+=(i="pgtvkgbqrzdfs"=~r)?"bcdfgkpqrstvz"[i]: a))}
p o+o[-2..-1]

ฉันคิดว่าคุณจะสูญเสียความสามารถไปรอบ ๆc=vและo+=<...>
Cyoce

5

MATLAB / Octave - 159 158 bytes

งานต่อไปนี้สมมติว่าสตริงอินพุตเป็นตัวพิมพ์เล็กทั้งหมด

a=input('','s');m=ismember(a,'aeiouy');s='pgt vkh jglmn bqrzd fwx s';m(1:find(m,1))=1;i=find(~m,1);f=a(1:i);d=s(f(end)-97);m(1:i)=0;v=a(find(m,1));[f d v d v]

คำอธิบาย

  1. a = input('','s');: Gets สตริงจาก STDIN aและเก็บไว้ลงในตัวแปร
  2. m=ismember(a,'aeiouy');: ส่งคืนอาร์เรย์บูลีนที่มีขนาดเท่ากับสตริงที่aกำหนดว่าจะให้สระอยู่ที่ไหน
  3. s='pgt vkh jglmn bqrzd fwx s';การcovfefeทำแผนที่ของพยัญชนะเป็นสตริง สายนี้มีความยาว 25 ตัวอักษรและไม่รวมสระ ตำแหน่งแรกที่สระ'a'ควรจะถูกลบออกในขณะที่ตำแหน่งอื่น ๆ ที่ตั้งของสระจะถูกวางด้วยอักขระพื้นที่จำลอง นี่คือเพื่อที่ว่าเมื่อเราตรวจสอบพยัญชนะตัวแรกที่ปรากฏหลังสระเราจะแปลงพยัญชนะเป็นตำแหน่งเพื่อเข้าถึงตัวอักษรในสายอักขระนี้เพื่อกำหนดองค์ประกอบแรกของคำที่ถูกแปลง
  4. m(1:find(m,1))=1: ตั้งค่าตำแหน่งแรกของอาเรย์บูลีนไปยังตำแหน่งที่เราพบเสียงสระแรกเป็นเสียงสระทั้งหมด นี่จะเป็นเช่นนั้นเมื่อเราค้นหาพยัญชนะตัวถัดไปที่ตามหลังสระตัวแรกเราจะละเว้นอักขระเหล่านี้
  5. i=find(~m,1);: ค้นหาตำแหน่งแรกของสตริงที่เป็นพยัญชนะหลังสระตัวแรก
  6. f=a(1:i): ลบสตริงหลังจากพยัญชนะตัวแรกที่ตามด้วยสระ เราสุ่มตัวอย่างจากตำแหน่งแรกของสตริงจนถึงจุดนี้
  7. d=s(f(end)-97);: ใช้อักขระตัวสุดท้ายของสตริงที่เหลืออยู่และค้นหาตำแหน่งที่เราต้องการตัวอย่างจากสตริงการค้นหาและรับตัวอักษรนั้น การลบอักขระและตัวเลขใน MATLAB หรือ Octave รวมกันเพื่อสร้างจำนวนเต็มโดยการแปลงอักขระเป็นรหัส ASCII ในกรณีนี้เราลบอักขระตัวสุดท้ายด้วยตัวอักษรที่จุดเริ่มต้นของตัวอักษรเพื่อให้เรามีตำแหน่งสัมพันธ์กับจุดเริ่มต้น อย่างไรก็ตามแทนที่จะลบด้วยb(98) เราจะลบออกaเมื่อ MATLAB เริ่มสร้างดัชนีด้วย 1 แทน'a'รหัส ASCII ของ 0 คือ 97
  8. m(1:i)=0;: ใช้หน้ากากบูลีนและตั้งค่าอักขระทั้งหมดในสตริงอินพุตจากตำแหน่งแรกเป็นพยัญชนะตัวแรกหลังจากสระไปเป็นเท็จ
  9. v=a(find(m,1));: ค้นหาเสียงสระถัดไปที่ตามพยัญชนะตัวแรกจากสตริงอินพุต
  10. [f d v d v]: เอาต์พุตcovfefeสตริง ied ของเรา

ตัวอย่างรัน

>> a=input('','s');m=ismember(a,'aeiouy');s='pgt vkh jglmn bqrzd fwx s';m(1:find(m,1))=1;i=find(~m,1);f=a(1:i);d=s(f(end)-97);m(1:i)=0;v=a(find(m,1));[f d v d v]
coverage

ans =

covfefe

>> a=input('','s');m=ismember(a,'aeiouy');s='pgt vkh jglmn bqrzd fwx s';m(1:find(m,1))=1;i=find(~m,1);f=a(1:i);d=s(f(end)-97);m(1:i)=0;v=a(find(m,1));[f d v d v]
example

ans =

exxaxa

>> a=input('','s');m=ismember(a,'aeiouy');s='pgt vkh jglmn bqrzd fwx s';m(1:find(m,1))=1;i=find(~m,1);f=a(1:i);d=s(f(end)-97);m(1:i)=0;v=a(find(m,1));[f d v d v]
programming

ans =

progkaka

>> a=input('','s');m=ismember(a,'aeiouy');s='pgt vkh jglmn bqrzd fwx s';m(1:find(m,1))=1;i=find(~m,1);f=a(1:i);d=s(f(end)-97);m(1:i)=0;v=a(find(m,1));[f d v d v]
code

ans =

codtete

>> a=input('','s');m=ismember(a,'aeiouy');s='pgt vkh jglmn bqrzd fwx s';m(1:find(m,1))=1;i=find(~m,1);f=a(1:i);d=s(f(end)-97);m(1:i)=0;v=a(find(m,1));[f d v d v]
president

ans =

preszizi

ลองออนไลน์!

http://www.tutorialspoint.com/execute_octave_online.php?PID=0Bw_CjBb95KQMdjROYVR0aFNrWXM

เมื่อคุณกดปุ่มดำเนินการที่ด้านบนรอสักครู่แล้วป้อนสตริงที่ต้องการ ป้อนสตริงอย่างช้า ๆ เนื่องจากดูเหมือนว่ามีความล่าช้าเมื่อป้อนข้อความ


5

Clojure, 182 156 ตัวอักษร

#(let[v #{\a\e\i\o\u\y}p(partition-by v %)[s m[c][n]](if(v(first %))(cons[]p)p)z[(or((zipmap"bcdfgkpstvz""pgtvkgbzdfs")c)c)n]](apply str(concat s m[c]z z)))

มันทำงานอย่างไร

(partition-by v "president")

ส่งคืน seq ของ ((\p \r) (\e) (\s) (\i) (\d) (\e) (\n \t))

[s m [c] [n]] (if (v (first x)) (cons [] p) p)

Destructures seq ลงs=(\p \r), m=(\e), ,c=\sn=\i

หรือสำหรับ "เช่น" มันs=[], m=(\e), ,c=\xn=\a

(apply str (concat s m [c] [(l c) n] [(l c) n]))

ส่งคืนสตริงเอาต์พุตโดยต่อเชื่อมชิ้นส่วนเข้าด้วยกันแล้วทำการร้อยชุด

แล้วฉันก็ลบช่องว่างมากที่สุดเท่าที่จะทำได้ในขณะที่ยังคงรวบรวม

De-uglified:

(defn covfefify [x]
  (let [vowel? #{\a\e\i\o\u\y}
        parts (partition-by vowel? x)
        [start mid [consonant] [last-vowel]] (if (vowel? (first x)) (cons [] parts) parts)
        lookup #(or ((zipmap "bcdfgkpstvz" "pgtvkgbzdfs") %) %)]
    (apply str (concat start mid [consonant] [(lookup consonant) last-vowel] [(lookup consonant) last-vowel]))))

ยินดีต้อนรับสู่ PPCG และคำตอบแรกที่ยอดเยี่ยม! เราหวังว่าคุณจะอยู่และสนุกกับการเข้าร่วมในความท้าทายที่มากขึ้น :-)
ETHproductions

หากคุณกำหนดฟังก์ชันชื่อของมันน่าจะสั้นที่สุด cตัวอย่างเช่นคุณสามารถเรียกฟังก์ชันหลักได้ (เราอนุญาตการใช้งานที่ไม่ระบุตัวตนซึ่งสั้นกว่าในหลายภาษา; ฉันไม่แน่ใจว่าอยู่ใน Clojure หรือไม่) ฉันเห็นว่าคุณได้ปรับปรุงการตกแต่งภายในโค้ดของคุณเรียบร้อยแล้วดังนั้นอาจไม่จำเป็นต้องเปลี่ยนแปลงมากนักที่นี่

5

R, 341 ตัวอักษร

f=function(x){g=function(x,y)el(strsplit(x,y));a=g(x,'');v=g('aeiouy','');n=letters[-c(1,5,9,15,21,25)];l=data.frame(n,g('pgtvkhjglmnbqrzdfwxs',''));y=min(match(n,a)[which(match(n,a)>min(match(v,a),na.rm=T))]);m=l[which(l$n==a[y]),2];e<-a[-c(1:y)][min(match(v,a[-c(1:y)]),na.rm=T)];paste0(paste0(a[c(1:y)],collapse=''),m,e,m,e,collapse="")}

ความพยายาม R ที่น่ากลัวทำไมสตริงถึงยากนัก

รุ่นที่อ่านได้:

f = function(x) {
  g = function(x, y)el(strsplit(x, y))
  a = g(x, '')
  v = g('aeiouy', '')
  n = letters[-c(1, 5, 9, 15, 21, 25)]
  l = data.frame(n, g('pgtvkhjglmnbqrzdfwxs', ''))
  y = min(match(n, a)[which(match(n, a) > min(match(v, a), na.rm = T))])
  m = l[which(l$n == a[y]), 2]
  e <-a[-c(1:y)][min(match(v, a[-c(1:y)]), na.rm = T)]
  paste0(paste0(a[c(1:y)], collapse = ''), m, e, m, e, collapse = "")
}

ฉันเชื่อว่าการนับของคุณถูกปิด - ฉันนับ 340 ไบต์
Taylor Scott


4

BlitzMax, 190 ไบต์

s$=Input()For i=1To s.Length
f="aeiouy".Contains(s[i-1..i])If f v=i If c Exit
If v And c|f=0c=i
Next
t$="bpdtfvgkcgsz"x$=s[c-1..c]r=t.Find(x)~1If r>=0x=t[r..r+1]
x:+s[v-1..v]Print s[..c]+x+x

ใช้คำจาก stdin และพิมพ์ผลลัพธ์เป็น stdout คำที่ถูกป้อนเข้านั้นจะเป็นตัวพิมพ์เล็กและมีเสียงสระอย่างน้อยหนึ่งเสียงตามด้วยพยัญชนะ

เวอร์ชันที่อ่านได้ง่ายขึ้นของ progam พร้อมการจัดรูปแบบและการประกาศตัวแปร:

SuperStrict
Framework BRL.StandardIO

Local s:String = Input()
Local v:Int
Local c:Int

For Local i:Int = 1 To s.Length
    Local f:Int = "aeiouy".Contains(s[i - 1..i])
    If f Then
        v = i
        If c Then Exit
    End If
    If v And c | f = 0 Then c = i
Next

Local t:String = "bpdtfvgkcgsz"
Local x:String = s[c-1..c]
Local r:Int = t.Find(x) ~ 1
If r >= 0 Then x = t[r..r + 1]
x :+ s[v - 1..v]
Print s[..c] + x + x

มันทำงานอย่างไร:

BlitzMax ไม่มีฟังก์ชั่น regin ในตัวหรือคล้ายกันดังนั้นจึงใช้วนซ้ำในการวนซ้ำอักขระของคำที่ป้อนจนกว่าจะพบสระตามด้วยห่วงโซ่ของพยัญชนะอย่างน้อยหนึ่งตัว ตัวแปร c เก็บตำแหน่งของพยัญชนะท้ายของเสียงนั้น v ของเสียงสระ ลูปจะยังคงดูว่ามีเสียงสระอื่นอยู่หลังห่วงโซ่หรือไม่และหากเป็นเช่นนั้น v จะได้รับการอัพเดตตามนั้น จากนั้นพยัญชนะที่ c จะถูกค้นหาในสตริง "bpdtfvgkcgsz" ซึ่งทำหน้าที่เป็นตารางการแทนที่ หากพบพยัญชนะในตารางที่ตำแหน่งใด ๆ ตำแหน่งนั้นคือ XOR-ed ด้วย 1 และอักขระที่ตำแหน่งผลลัพธ์จะถูกใช้แทน การดำเนินการ XOR เปลี่ยน 0 เป็น 1, 2 เป็น 3, 4 เป็น 5 ฯลฯ และในทางกลับกันเพื่อให้ b ถูกสลับกับ p, d กับ t และอื่น ๆ ในที่สุดสตริงดั้งเดิมจนถึง c

ตัวอย่างผลลัพธ์:

คุ้มครอง covfefe

สร้าง creatdidi

การเขียนโปรแกรม progkaka

ความโง่เขลา stupbibi

blah blahhaha


เชื่อมโยงไปยัง blitzmax repo?
มะนาวที่ถูกทำลายได้

@DestructibleLemon BlitzMax ถูกสร้างขึ้นเป็นภาษาหลักสำหรับการพัฒนาเกมมือสมัครเล่นและมีคอมไพเลอร์กรรมสิทธิ์ขายเงิน แม้ว่าตอนนี้จะว่างและพร้อมให้บริการจากที่นี่แต่ฉันเชื่อว่าคอมไพเลอร์ยังไม่เปิดแหล่งที่มา มีการนำไปใช้ทางเลือกอื่น (repo ที่นี่สร้างที่นี่ ) ซึ่งจะเรียกใช้เฉพาะโค้ดข้างต้นที่ไม่ได้รับเนื่องจากไม่มีการตั้งค่า "ไม่เข้มงวด" ที่อนุญาตให้ละเว้นการประกาศตัวแปร
FireballStarfish

การใช้ XOR อย่างชาญฉลาดในดัชนี - ฉันอาจใช้สักวันหนึ่ง ขอขอบคุณ.
AI Breveleri

4

Perl, 71 ไบต์

s#[aeiouy]+(.)\K.*?([aeiouy]).*#"$1$2"=~y/bcdfgkpstvz/pgtvkgbzdfs/rx2#e

perl -peนอกจากนี้ยังทำงานกับ ไบต์น้อยกว่าโซลูชัน Perl ก่อนหน้า เป็นที่ยอมรับว่าฉันได้รับแรงบันดาลใจจากที่นั่นเช่นกัน


4

05AB1E , 101 104 88 ไบต์

-16 ไบต์ขอบคุณจาก Okx

ฉันอย่างใดหวังว่านี้สามารถทำได้ด้วยวิธีที่มีประสิทธิภาพมากขึ้น

žOÃćIsk>[DIs£¤žPså#\>]s[DIsèDžOså#\>]ŠŠ"bpcgdtfvgkhhjjkgllmmnnpbqqrrsztdvfwwxxzs"S2ôDí«ø`Šs¤sŠksŠèsŠì2׫

ลองออนไลน์!

คำอธิบาย

                  Argument: s
žOÃ0èk            Get index of first vowel in s
>[DIs£¤žPså#\>]   Increment index and split s until last character of substring is a consonant
s[DIsèDžOså#\>]   Increment index an get character at index in s until character is a vowel
ŠŠ                Rearrange stack
.•7¶ëÒ—Öb´ƒ≠Ä“šʒƵJ^ÝV“Îpи•S2ôDí«ø`   Prepare character substitution map
Šs                Rearrange stack
¤                 Last character of substring
sŠ                Rearrange stack (yes, again)
k                 Index of last character in substitution key list
sŠ                Rearrange stack (it won't stop)
è                 Character at index in character substitution value list
sŠ                Rearrange stack (ONE LAST TIME)
ì2׫              Prepend substitution consonant before vowel, duplcicate and concatenate with the substring from the very beginning

คุณสามารถแทนที่"bpcgdtfvgkhhjjkgllmmnnpbqqrrsztdvfwwxxzs"ด้วย.•7¶ëÒ—Öb´ƒ≠Ä“šʒƵJ^ÝV“Îpи•เพื่อบันทึก 15 ไบต์
Okx

คุณสามารถแทนที่žOÃćIskด้วยžOÃ0èkเพื่อบันทึกไบต์อื่น
Okx

@ อ็อกซ์ฉันคิดว่าฉันจำเป็นต้องเรียนรู้เทคนิคการบีบอัดสตริง ขอบคุณ!
kalsowerus

@ kalsowerus ฉันรู้ว่ามันใช้เวลานาน แต่คุณสามารถเล่นกอล์ฟ 8 ไบต์จากคำตอบของคุณเช่นนี้: žOÃнk>[DIs£¤žPså#\>]©s[DIsèDžOså#\>]s\.•7¶ëÒ—Öb´ƒ≠Ä“šʒƵJ^ÝV“Îpи•S2ôDí«ø`®θkèìDJ ลองออนไลน์ ฉันส่วนใหญ่กำจัด swaps และ triple-swaps ทั้งหมดโดยใช้ตัวแปรแทน และสามารถเป็นได้нและฉันถูกแทนที่2׫ด้วยDJเพื่อเข้าร่วมสแต็กทั้งหมดเข้าด้วยกัน PS: ฉันยังโพสต์คำตอบ 55 ไบต์ 05AB1E โดยใช้เทคนิคที่แตกต่างกัน (ซึ่งรวมถึงลิงก์เพื่อทำความเข้าใจการบีบอัดใน 05AB1E: D) ให้ดียิ่งขึ้น
Kevin Cruijssen

3

คริสตัลขนาด 130 ไบต์

c=/[aeiouy]/
x,y,z=ARGV[0].partition /[^aeiouy]*#{c}*/
k=z[0]
b=((i="pgtvkgbqrzdfs"=~/#{k}/)?"bcdfgkpqrstvz"[i]: k)+z[c]
p y+k+b*2

มันทำงานอย่างไร

c = /[aeiouy]/

เก็บ regex cสำหรับการค้นหาเสียงสระแรกที่

x, y, z = ARGV[0].partition /[^aeiouy]*#{c}*/

แยกอาร์กิวเมนต์แรกออกเป็นสามส่วน {"", String จนกระทั่งอักขระหนึ่งตัวต่อหน้าพยัญชนะตัวแรกหลังจากสระตัวแรก, ส่วนที่เหลือของสตริง} และเก็บแต่ละองค์ประกอบไว้ใน x, y และ z

k = z[0]

รับตัวอักษรตัวแรก, ตัวอักษรที่เกี่ยวข้อง

i = "pgtvkgbqrzdfs" =~ /#{k}/

nilได้รับดัชนีของพยัญชนะภายในสตริงทางซ้ายหรือ

b = ((i = ...) ? "bcdfgkpqrstvz"[i] : k) + z[c]

ถ้าiไม่ใช่nilให้ใช้ดัชนีนี้สำหรับสตริงที่สอง (ชนิดของแฮช golfed)

ถ้าiเป็นnilเช่นนั้นใช้ตัวละครเดิม

zถัดไปท้ายสระแรกของ

p y + k + (b * 2)

ในที่สุดพิมพ์ส่วนแรกจาก regex แรกy, พยัญชนะตัวแรกและครั้งที่สองสตริงคำนวณก่อนหน้านี้kb

ลองมันออนไลน์



2

Lua, 164 157 ไบต์

w=arg[1]
i,j,a,b=w:find('[aeiouy]+([^aeiouy]+)(.)')
print(w:sub(1,j-#a)..(('pgtvkhjglmnbqrzdfwxs'):sub(('bcdfghjklmnpqrstvwxz'):find(a:sub(1,1)))..b):rep(2))

แก้ไข 1: ลบออก 7 ไบต์โดยค้นหาตัวอักษรใด ๆ หลังจากพยัญชนะ (ดู regex)

ลองออนไลน์!

โปรแกรมนี้รับสตริงในอาร์กิวเมนต์ CLI และพิมพ์เวอร์ชัน covfefied

นี่คือการส่งครั้งแรกของฉันไปที่รหัสกอล์ฟ! ฉันไม่ได้ตรวจสอบรายละเอียดอื่น ๆ ดังนั้นฉันอาจพลาดการปรับแต่งทั่วไปบางอย่าง (และตกหลุมพราง) ฉันใช้ Lua เพราะฉันเริ่มชอบภาษาเล็ก ๆ น้อย ๆ นี้และฉันพยายามค้นหา regex ที่เหมาะกับความต้องการของฉัน

นี่คือรุ่นที่สะอาดกว่าโดยใช้ฟังก์ชั่น (ฉันตั้งใจจะใช้ แต่คำหลักใน Lua ยาวเกินไป!):

function covfefy(word)
  i, j, a, b = word:find('[aeiouy]+([^aeiouy]+)(.)')

  -- 'a' is one or several consonants following the first vowel, b is the first vowel after that
  -- 'i' is the index of the beginning of 'a', 'j' the index of 'b'

  cov = word:sub(1, j - #a)

  -- Look for the first letter of 'a' in the voiced/voiceless table
  f = ('pgtvkhjglmnbqrzdfwxs'):sub(('bcdfghjklmnpqrstvwxz'):find(a:sub(1, 1)))

  return cov .. (f .. b):rep(2)
end

รู้สึกอิสระที่จะให้ข้อเสนอแนะบางอย่าง :)

หมายเหตุ: หากคุณสงสัยว่ามีความยาว 149 ไบต์เมื่อใช้ MoonScript!


2

JavaScript (ES5), 237 229 ไบต์

function(s){r=['aeiouy','bcdfgkpstvz','pgtvkgbzdfs']i=0,p=''while(p+=s[i],r[0].indexOf(s[i++])<0);while(p+=s[i],~r[0].indexOf(s[i++]));b=s[i-1];while(r[0].indexOf(s[i++])<0);c=r[1].indexOf(b)d=((~c)?r[2][c]:b)+s[i-1]return p+d+d}

ลองออนไลน์!

อาจไม่ใช่นักกอล์ฟที่เก่งที่สุด แต่เป็น ES5

แก้ไขข้อผิดพลาดล่าสุด ตัวอย่างผลลัพธ์:

creation->creatdidi
coverage->covfefe
example->exxaxa
programming->progkaka
code->codtete
president->preszizi

2

sed, 106 (105 + 1) ไบต์

สิ่งนี้อยู่ใน-Eสถานะที่เห็นได้ชัดว่านับหนึ่งไบต์

s/([aoeuiy][^aoeuiy])[^aoeuiy]*(.).*/\1\2/
h
s/.*(..)/\1\1/
y/bcdfgkpstvz/pgtvkgbzdfs/
x
s/.$//
G
s/\n//g

ลองออนไลน์!


2

C #, 584 581 ไบต์

-3 ไบต์ขอบคุณ Lemon ที่ทำลายได้

นี่คือการส่งครั้งแรกของฉันเกี่ยวกับ Code Golf และในการแลกเปลี่ยนกองซ้อนโดยทั่วไป ฉันรู้ว่า C # ไม่ใช่ภาษากอล์ฟที่ยอดเยี่ยมและนี่อาจไม่ได้รับการปรับให้เหมาะสมอย่างสมบูรณ์ แต่ฉันต้องการที่จะให้ภาพ: p ยินดีต้อนรับเคล็ดลับใด ๆ !

เวอร์ชั่น Golfed:

namespace System{class B{static void Main(string[]args){var s="creation";var t="aeiou";int i=0,j=0,l=s.Length;char c=' ',f=' ';for(int x=0;x++<l;){if(t.IndexOf(s[x])>=0){i=x;break;}}for(int x=i;x++<l;){if(!(t.IndexOf(s[x])>=0)){j=x;c=s[x];for(int y=x;y++<l;){if (t.IndexOf(s[y])>=0){f=s[y];goto W;}}}}W:switch(c){case'b':c='p';break;case'c':c='g';break;case'd':c='t';break;case'f':c='v';break;case'g':c='k';break;case'k':c='j';break;case'p':c='b';break;case's':c='z';break;case't':c='d';break;case'v':c='f';break;case'z':c='s';break;}Console.Write(s.Substring(0,l-i-1)+c+f+c+f);}}}

เวอร์ชันที่อ่านได้:

namespace System
{
    class B
    {
        static void Main(string[] args)
        {
            var s = "creation";
            var t = "aeiou";
            int i = 0, j = 0, l = s.Length;
            char c = ' ', f = ' ';
            for (int x = 0; x++ < l; )
            {
                if (t.IndexOf(s[x]) >= 0)
                {
                    i = x; break;
                }
            }
            for (int x = i; x++ < l;)
            {
                if (!(t.IndexOf(s[x]) >= 0))
                {
                    j = x; c = s[x];
                    for (int y = x; y++ < l;)
                    {
                        if (t.IndexOf(s[y]) >= 0)
                        {
                            f = s[y];
                            break;
                        }
                    }
                }
            }
            switch (c)
            {
                case 'b': c = 'p';
                    break;
                case 'c': c = 'g';
                    break;
                case 'd': c = 't';
                    break;
                case 'f': c = 'v';
                    break;
                case 'g': c = 'k';
                    break;
                case 'k': c = 'j';
                    break;
                case 'p': c = 'b';
                    break;
                case 's': c = 'z';
                    break;
                case 't': c = 'd';
                    break;
                case 'v': c = 'f';
                    break;
                case 'z': c = 's';
                    break;
            }
            Console.Write(s.Substring(0, l - i - 1) + c + f + c + f);
        }
    }
}

1
ฉันไม่มีความเชี่ยวชาญ แต่ฉันคิดว่าคุณสามารถเพิ่มส่วนเพิ่มเติมในตัวเปรียบเทียบใน for for loop นั่นคือx++ < lหรือบางสิ่งบางอย่าง (บางทีl > x++ถ้าตัวแรกไม่ทำงาน) ไม่แน่ใจว่า
มะนาวที่ถูกทำลายได้

@DestructibleLemon ขอบคุณสำหรับคำแนะนำ!
Brandon Hao

2

SmileBASIC 3, 195 ไบต์

สายเกินไปสำหรับคำถามนี้ แต่ฉันจะต้านทานความท้าทายที่ดีสำหรับ SmileBASIC 3 ได้อย่างไร คุณลักษณะต่างๆเช่นการวนซ้ำลำดับหรือการจัดการสตริงนั้นไม่ค่อยมีประสิทธิภาพเท่าภาษาอื่น ๆ ดังนั้นนี่เป็นความท้าทายเล็กน้อยที่จะทำให้มันมีขนาดเล็กที่สุดเท่าที่จะทำได้ ถือว่าคำศัพท์มีประสิทธิภาพมากขึ้น

V$="AEIOUY
LINPUT W$REPEAT I=I+1UNTIL.<=INSTR(V$,W$[I-1])&&.>INSTR(V$,W$[I])J=I
WHILE.>INSTR(V$,W$[J])J=J+1WEND?LEFT$(W$,I+1)+("PGTVKHJGLMNBQRZDFWXS"[INSTR("BCDFGHJKLMNPQRSTVWXZ",W$[I])]+W$[J])*2

คำอธิบายโดยละเอียดที่นี่!


2

05AB1E , 55 ไบต์

η.ΔžOSåàyžPSÅ¿à*}ÐIsKžOÃнsθU.•gÍĆdQ¸G•SDXåiÂXQÏθë\X}ìDJ

ลองมันออนไลน์หรือตรวจสอบกรณีทดสอบทั้งหมด

คำอธิบาย:

η                        # Suffixes of the (implicit) input
                         #  i.e. "creation" → ["c","cr","cre","crea","creat","creati","creato","creatio","creation"]
        }              # Find the first for which the following is truthy:
   žO                    #  Push vowels (including y): "aeiouy"
     S                   #  Convert it to a list of characters: ["a","e","i","o","u","y"]
      å                  #  Check for each if they're in the current (implicit) suffix
                         #   i.e. "creat" → [1,1,0,0,0,0]
       à                 #  Pop and push the max (basically check if any are truthy)
                         #   i.e. [1,1,0,0,0,0] → 1
   y                     #  Push the suffix again
    žP                   #  Push the consonants (excluding y): "bcdfghjklmnpqrstvwxz"
      S                  #  Convert to a list of characters: ["b","c","d","f","g","h","j","k","l","m","n","p","q","r","s","t","v","w","x","z"]
       Å¿                #  Check for each if the suffix ends with it
                         #   i.e. "creat" → [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0]
         à               #  Pop and push the max (basically check if any are truthy)
                         #   i.e. [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0] → 1
   *                     #  Check if both are truthy
                         #   i.e. 1 and 1 → 1
           Ð             # Triplicate the found suffix
            I            # Push the input
             s           # Swap the top two items on the stack
                         #  i.e. stack contains now: "creat","creat","creation","creat"
K                        # Remove the suffix from the input
                         #  i.e. "creation" and "creat" → "ion"
 žOÃ                     # Only leave the vowels
                         #  i.e. "ion" → "io"
    н                    # Pop and push the first character
                         #  i.e. "io" → "i"
s                        # Swap again so the prefix is a the top of the stack again
 θ                       # Pop and push the last character
                         #  i.e. "creat" → "t"
  U                      # Pop and store it in variable `X`
   .•gÍĆdQ¸G            # Push string "bcdfkszgvtgp"
             S           # Convert to list of characters: ["b","c","d","f","k","s","z","g","v","t","g","p"]
              D          # Duplicate it
               Xåi       # If `X` is in this string:
                  Â      #  Bifurcate the list (short for Duplicate & Reverse copy)
                         #   i.e. ["b","c","d","f","k","s","z","g","v","t","g","p"]
                         #   → ["p","g","t","v","g","z","s","k","f","d","c","b"]
                   XQ    #  Check if they're equal to variable `X`
                         #   i.e. `X` = "t" → [0,0,1,0,0,0,0,0,0,0,0,0]
                     Ï   #  Only keep the truthy values
                         #   i.e. ["b","c",...,"g","p"] and [0,0,1,0,0,0,0,0,0,0,0,0]
                         #    → ["d"]
                      θ  #  Pop and push the last one
                         #   i.e. ["d"] → "d"
                 ë       # Else:
                  \      #  Discard the duplicate list from the stack
                   X     #  And push variable `X` again
                 }       # Close the if-else
                  ì      # Prepend the second character in front of the first
                         #  i.e. "d" and "i" → "di"
                   D     # Duplicate it
J                        # Join the stack together (and output implicitly)
                         #  i.e. "creat" and "di" and "di" → "creatdidi"

เห็นนี้ 05AB1E เคล็ดลับของฉัน (ส่วนวิธีการบีบอัดสตริงไม่ใช่ส่วนหนึ่งของพจนานุกรม? )จะเข้าใจว่าทำไมเป็น.•gÍĆdQ¸G•"bcdfkszgvtgp"

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.