Khuôn mặt McFaceface


47

Có ai còn nhớ Boaty không?

Bạn hoàn toàn có thể làm cho bất kỳ từ cũ, phải không?

  • Viết hàm để biến một chuỗi thành Somethingy McS Somethingface.
  • Nó nên chấp nhận một chuỗi làm đầu vào. Bỏ qua trường hợp đầu vào.
  • Nếu từ kết thúc bằng 'y', chức năng của bạn không nên thêm 'y' vào trường hợp đầu tiên, mà nên xóa từ đó trong trường hợp thứ hai.
  • Nếu từ kết thúc bằng 'ey', thì nó không nên có thêm 'y' được thêm vào trong trường hợp đầu tiên, mà nên loại bỏ cả hai trong trường hợp thứ hai.
  • Đầu ra chỉ nên có chữ in hoa trong ký tự đầu tiên, 'M' của 'Mc' và ký tự đầu tiên sau 'Mc'.
  • nó chỉ cần làm việc với các chuỗi từ 3 ký tự trở lên.

Ví dụ:

boat                  =>  Boaty McBoatface
Face                  =>  Facey McFaceface
DOG                   =>  Dogy McDogface
Family                =>  Family McFamilface
Lady                  =>  Lady McLadface
Donkey                =>  Donkey McDonkface
Player                =>  Playery McPlayerface
yyy                   =>  Yyy McYyface
DJ Grand Master Flash =>  Dj grand master flashy McDj grand master flashface

Còn những khoảng trống trong chuỗi, chúng ta có để chúng nguyên vẹn không? Ví dụ: ' y'' '
chạm vào cơ thể tôi

2
Tôi sẽ thực hiện một đề xuất từ ​​@Arnauld và làm cho nó tối thiểu ba ký tự. Đối xử với khoảng trắng giống như một chữ cái khác.
AJFaraday 27/03/18


Chúng ta có thể giả sử đầu vào sẽ chỉ chứa chữ hoa và chữ thường không?
Kevin Cruijssen

@KevinCruijssen Tôi không đặt bất kỳ chữ cái nào trong các trường hợp thử nghiệm, vì vậy chúng thực sự không liên quan.
AJFaraday

Câu trả lời:


7

Stax , 26 byte

ëO╛εh╕⌠î&!}∞┌C^U╟«äδ◙Bg⌠└¿

Chạy và gỡ lỗi nó

^           convert input to upper case                     "FACE"
B~          chop first character and push it back to input  70 "ACE"
v+          lowercase and concatenate                       "Face"
c'yb        copy, push "y", then copy both                  "Face" "Face" "y" "Face" "y"
:]          string ends with?                               "Face" "Face" "y" 0
T           trim this many character                        "Face" "Face" "y"
+           concatenate                                     "Face" "Facey"
p           output with no newline                          "Face"
"e?y$"z     push some strings                               "Face" "e?y$" ""
" Mc`Rface  execute string template; `R means regex replace " Mc Faceface"
            result is printed because string is unterminated

Chạy cái này


15

V , 27 28 30 byte

Vu~Ùóe¿y$
Hóy$
ÁyJaMc<Esc>Aface

Hãy thử trực tuyến!

<Esc> đại diện 0x1b

  • Đánh gôn hai byte sau khi biết rằng chúng tôi không cần hỗ trợ đầu vào có ít hơn 3 ký tự.

  • Lưu 1 byte nhờ @DJMcMayhem bằng cách làm việc trên dòng thứ hai trước dòng thứ nhất, do đó loại bỏ G

Đầu vào là trong bộ đệm. Chương trình bắt đầu bằng cách chuyển đổi mọi thứ thành chữ thường

Vchọn dòng và uviết thường

~ chuyển đổi trường hợp của ký tự đầu tiên (chuyển đổi nó thành chữ hoa)

Ùsao chép dòng này ở trên, để con trỏ ở dòng dưới cùng

óvà thay thế e¿y$, dạng nén của e\?y$(tùy chọn evà a yở cuối dòng), không có gì (xảy ra trên dòng thứ hai)

H đi đến dòng đầu tiên

óthay thế y$( yở cuối dòng) không có gì trên dòng đầu tiên

Ánối thêm yvào cuối dòng đầu tiên

J và nối dòng cuối cùng với dòng đầu tiên có khoảng trắng ở giữa và con trỏ được di chuyển đến khoảng trắng này

anối thêm Mc( <Esc>trở về chế độ bình thường)

Acuối cùng, xuất hiện faceở cuối dòng



13

Python, 144 byte

def f(s):
 s=s[0].upper()+s[1:].lower()
 y=lambda s:s[:-1]if s[-1]=='y'else s
 t=y(s)
 u=s[:-2]if s[-2:]=='ey'else y(s)
 return t+'y Mc%sface'%u

Dùng thử trực tuyến tại đây


2
lần thử chơi mã đầu tiên của tôi ...
chạm vào cơ thể của tôi vào

3
Chào mừng đến với PPCG! Tôi có thể đề nghị thêm một liên kết để Dùng thử trực tuyến! để xác minh tính đúng đắn?
Giuseppe

1
f("Face")không tuân thủ các trường hợp thử nghiệm hiện tại ( TIO ).
Jonathan Frech

Đã chỉnh sửa bài đăng cho chính xác, cũng đã thêm Thử trực tuyến! liên kết
chạm vào cơ thể của tôi


12

Excel, 204 144 137 165 byte

=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(REPT(REPLACE(LOWER(A1),1,1,UPPER(LEFT(A1)))&"~",2),"~","y Mc",1),"yy ","y "),"ey~","~"),"y~","~"),"~","face")

Từ trong ra ngoài:

REPLACE(LOWER(A1),1,1,UPPER(LEFT(A1)))      Replaces PROPER to handle space-delimited cases
REPT(%&"~",2)                   Duplicate.                    Donkey~Donkey~
SUBSTITUTE(%,"~","y Mc",1)      Replace first ~.              Donkeyy McDonkey~
SUBSTITUTE(%,"yy ","y ")        Handle words ending in 'y'.   Donkey McDonkey~
SUBSTITUTE(%,"ey~","~")         Handle words ending in 'ey'   Donkey McDonk~
SUBSTITUTE(%,"y~","~")          Handle words ending in 'y'    Donkey McDonk~
SUBSTITUTE(%,"~","face")        Adding face.                  Donkey McDonkface

Câu trả lời cũ, tạo tất cả các bit riêng biệt, và sau đó nối (176 byte). Không xử lý các trường hợp giới hạn không gian chính xác.

=PROPER(A1)&IF(LOWER(RIGHT(A1,1))="y",,"y")&" Mc"&IF(LOWER(RIGHT(A1,2))="ey",LEFT(PROPER(A1),LEN(A1)-2),IF(LOWER(RIGHT(A1,1))="y",LEFT(PROPER(A1),LEN(A1)-1),PROPER(A1)))&"face"

Thật không may, do yêu cầu xử lý các trường hợp giới hạn không gian, PROPER(A1)không hợp lệ (xem DJ Grand Master Flashtrường hợp đầu vào), sự thay thế tốt nhất mà tôi có thể tìm thấy khi làm việc với giải pháp VBA của mình là LEFT(UPPER(A1))&MID(LOWER(A1),2,LEN(A1))- vui lòng cho tôi biết nếu bạn kết thúc việc chơi golf đó.
Taylor Scott

1
Cảm ơn bạn @TaylorScott. Đã tìm thấy 'REPLACE (LOWER (A1), 1,1, UPPER (LEFT (A1))) `ngắn hơn 2 byte.
Wernisch


9

C # (.NET Core) , 122 108 139 175 180 179 154 byte

Cảm ơn rất nhiều, lee!

s=>((s.EndsWith("y")?s:s+"y")+" Mc"+(s+"$").Replace("ey$","")+"face").Replace(s,s.ToUpper()[0]+s.Substring(1).ToLower()).Replace("y$","").Replace("$","");

Hãy thử trực tuyến!

C # (.NET Core, với LINQ), 152 byte

s=>((s.Last()=='y'?s:s+"y")+" Mc"+(s+"$").Replace("ey$","")+"face").Replace(s,s.ToUpper()[0]+s.Substring(1).ToLower()).Replace("y$","").Replace("$","");

Hãy thử trực tuyến!


3
Chào mừng đến với trang web! :)
DJMcMayhem


7

Ruby , 61 49 byte

->s{s.capitalize=~/(e)?y$|$/;"#$`#$1y Mc#$`face"}

Hãy thử trực tuyến!

Đã lưu 12 byte ngọt ngào nhờ @MartinEnder:


1
Sử dụng regex từ câu trả lời Retina của tôi và tận dụng nhiều hơn một chút của chuỗi suy được xuống này đến 49: tio.run/##DcxBCsIwEEDRqwxJBF3Y4lpSN0U3igcQwTQmGFptMVNkTOLVY3bvb/...
Martin Ender

@MartinEnder Wow, đó là một sự khác biệt khá lớn. Tôi không nghĩ rằng tôi đã thấy nội suy chuỗi mà không có dấu ngoặc. Tôi sẽ lấy nó nếu bạn không muốn sử dụng nó cho câu trả lời Ruby của riêng bạn.
iamnotmaynard

Không, không sao, tôi sẽ không nghĩ đến việc sử dụng =~và xây dựng toàn bộ chuỗi thay vì sử dụng sub. Nội suy chuỗi có thể được sử dụng mà không có dấu ngoặc nếu biến là biến toàn cục, thể hiện hoặc biến lớp.
Martin Ender

Bạn có thể giảm xuống còn 44 + 1 byte bằng cách sử dụng -pcờ và sử dụng sub: tio.run/ Kẻ
Jordan

7

Python 3 , 80 byte

Người đọc khao khát thời gian dài, lần gửi đầu tiên của tôi cuối cùng!

lambda y:re.sub("([\w ]+?)((e)?y)?$",r"\1\3y Mc\1face",y.capitalize())
import re

Dùng thử trực tuyến


1
Chào mừng bạn đến với PPCG, và bài đăng đầu tiên rất hay!
Zacharý



5

Java 8, 121 112 107 106 byte

s->(s=(char)(s.charAt(0)&95)+s.toLowerCase().substring(1)).split("y$")[0]+"y Mc"+s.split("e?y$")[0]+"face"

-1 byte nhờ @ OliverGrégoire .

Giải trình:

Hãy thử trực tuyến.

s->                         // Method with String as both parameter and return-type
  (s=                       //  Replace and return the input with:
     (char)(s.charAt(0)&95) //   The first character of the input as Uppercase
     +s.toLowerCase().substring(1))
                            //   + the rest as lowercase
  .split("y$")[0]           //  Remove single trailing "y" (if present)
  +"y Mc"                   //  Appended with "y Mc"
  +s.split("e?y$")[0]       //  Appended with the modified input, with "y" or "ey" removed
  +"face"                   //  Appended with "face"

Điều gì nếu char đầu tiên không theo thứ tự chữ cái? Hoặc có lẽ chúng ta có thể có được một quy tắc được thêm vào về điều đó ..
streetster

1
@streetster Chỉ cần hỏi OP, và có vẻ như đầu vào sẽ chỉ chứa chữ hoa và / hoặc chữ thường.
Kevin Cruijssen

1
~32-> 95cho 1 byte được lưu
Olivier Grégoire

@ OlivierGrégoire Tôi thực sự cần phải bắt đầu tìm hiểu thêm một chút về các thao tác bitwise ..>.>
Kevin Cruijssen

4

JavaScript, 103 96 94 byte

Khá ngây thơ đầu tiên vượt qua lúc này.

s=>(g=r=>s[0].toUpperCase()+s.slice(1).toLowerCase().split(r)[0])(/y$/)+`y Mc${g(/e?y$/)}face`

Dùng thử trực tuyến


s =>${s=s[0].toUpperCase()+s.slice(1).toLowerCase().replace(/y$/,``)}y Mc${s.replace(/e?y$/,``)}face
Benjamin Gruenbaum

Một ít hơn: s =>${s=s[0].toUpperCase()+s.slice(1).toLowerCase().replace(/y$/,'')}y Mc${s.replace(/e$/,``)}face
Benjamin Gruenbaum

Cảm ơn, @BenjaminGruenbaum, nhưng lần đầu tiên thất bại Donkeyvà lần thứ hai cho Face.
Xù xì


@Shaggy tôi quản lý để giảm chức năng g bằng một số ký tự :). bạn có thể nhìn vào giải pháp của tôi
DanielIndie 28/03/18

3

vim, 35 34 byte

Vu~Yp:s/ey$
:%s/y$
kgJiy Mc<ESC>Aface<ESC>

<ESC>0x1b

Ung dung

Vu~                      # Caseify McCaseface
Yp                       # dup line
:s/ey$ 
:%s/y$                   # Get the suffixes right
kgJiy Mc<ESC>Aface<ESC>  # Join lines and add the extra chars

Hãy thử trực tuyến!

Đã lưu 1 byte nhờ DJMcMayhem


1
Bạn có thể làm Ythay vìyy
DJMcMayhem


3

C ++ 14 (g ++), 181 171 148 147 134 byte

[](auto s){s[0]&=95;int i=1,b;for(;s[i];)s[i++]|=32;b=s[--i]-'y';return s+(b?"y":"")+" Mc"+(b?s:s.substr(0,s[i-1]-'e'?i:i-1))+"face";}

Lưu ý rằng clang sẽ không biên dịch này.

Tín dụng cho Kevin CruijssenOlivier Grégoire cho &95mánh khóe.

Cảm ơn Chris vì đã chơi golf 11 byte.

Hãy thử trực tuyến tại đây .

Phiên bản bị đánh cắp:

[] (auto s) { // lambda taking an std::string as argument and returning an std::string
    s[0] &= 95; // convert the first character to upper case
    int i = 1, // for iterating over the string
    b; // we'll need this later
    for(; s[i] ;) // iterate over the rest of the string
        s[i++] |= 32; // converting it to lower case
    // i is now s.length()
    b = s[--i] - 'y'; // whether the last character is not a 'y'
    // i is now s.length()-1
    return s + (b ? "y" : "") // append 'y' if not already present
    + " Mc"
    + (b ? s : s.substr(0, s[i-1] - 'e' ? i : i-1)) // remove one, two, or zero chars from the end depending on b and whether the second to last character is 'e'
    + "face";
}

Tôi không biết rõ về C ++, nhưng bạn có thể chơi golf 9 byte: Hãy thử trực tuyến với 172 byte. Tóm tắt các thay đổi: s[0]=s[0]&~32;đến s[0]&=~32;; s[i++]=s[i]|32;để s[i++]|=32; và int i=1,n=s.length()-1,b;vì vậy bạn chỉ cần 1 int.
Kevin Cruijssen

Ồ, và thêm một byte bằng cách xóa khoảng trống tại#include<string>
Kevin Cruijssen

@KevinCruijssen cảm ơn vì đã bắt được điều đó! Tôi đã chỉnh sửa.
OOBalance

Bạn có thể lưu 11 byte bằng cách không xác định nvà chỉ sử dụng giá trị isau vòng lặp while. Hãy thử trực tuyến!
Chris

@Chris Cảm ơn! Tôi quản lý để cạo thêm 2 byte.
OOBalance 30/03/18

2

V , 38 36 32 byte

-5 byte nhờ quẻ @Cows

Vu~hy$ó[^y]$/&y
A Mc<esc>póe¿y$
Aface

<esc>là một ký tự thoát theo nghĩa đen và [^được mã hóa thành\x84

Hãy thử trực tuyến!


gu$có thể trở thànhVu
Kritixi Lithos

2
[^là một phím tắt regex (xem tại đây ), bạn có thể sử dụng 0x84 thay vì [^để lưu một byte. Tương tự, \?có thể được đơn giản hóa <M-?>để lưu một byte khác. Và $a=>A
Kritixi Lithos


2

Python 3 , 117 114 byte

-3 byte nhờ Dead Possum

def f(s):s=s.title();return s+'y'*(s[-1]!='y')+' Mc'+([s,s[:-1],0,s[:-2]][(s[-1]=='y')+((s[-2:]=='ey')*2)])+'face'

Hãy thử trực tuyến!


Phần tử thứ 3 của danh sách [s,s[:-1],'',s[:-2]có thể được thay đổi 0để lưu 1 byte.
Dead Possum

Trong 'y'*1 *1là không cần thiết. Thêm 2 byte
Dead Possum

Chuyển từ Python 3 sang Python 2 và thay thế returnbằng printngắn hơn 1 byte.
Kevin Cruijssen

2

JavaScript (Node.js) , 87 byte

  • cảm ơn @Shaggy vì đã giảm 5 byte
s=>(g=r=>Buffer(s.replace(r,"")).map((x,i)=>i?x|32:x&~32))(/y$/)+`y Mc${g(/e?y$/)}face`

Hãy thử trực tuyến!


2
Bạn không phải đặt tên cho các hàm không đệ quy.
Dennis

1
Hoàn thành tốt Tôi không bao giờ nghĩ để sử dụng Buffer, sẽ phải cố gắng ghi nhớ nó cho những thách thức trong tương lai. Có nó xuống đến 87 byte cho bạn.
Xù xì

2

K4 , 74 69 68 byte

Giải pháp:

{$[r;x;x,"y"]," Mc",_[r:0&1-2/:"ye"=2#|x;x:@[_x;0;.q.upper]],"face"}

Ví dụ:

q)k)f:{$[r;x;x,"y"]," Mc",_[r:0&1-2/:"ye"=2#|x;x:@[_x;0;.q.upper]],"face"}
q)f each ("boat";"Face";"DOG";"Family";"Lady";"Donkey";"Player")
"Boaty McBoatface"
"Facey McFaceface"
"Dogy McDogface"
"Family McFamilface"
"Lady McLadface"
"Donkey McDonkface"
"Playery McPlayerface"

Giải trình:

Chỉ ra nếu các ký tự cuối cùng bằng "ey", chuyển đổi kết quả thành cơ sở 2 để chúng ta có thể bỏ qua các từ kết thúc "e?". Lập chỉ mục vào một danh sách số lượng ký tự để cắt.

Quản lý để loại bỏ 5 byte mã của tôi để xác định xem hai ký tự cuối cùng tại "ey"nhưng đấu tranh để cải thiện nó ...

{$[r;x;x,"y"]," Mc",_[r:0&1-2/:"ye"=2#|x;x:@[_x;0;.q.upper]],"face"} / the solution
{                                                                  } / lambda function
                                                            ,"face"  / join with "face"
                    _[                  ;                  ]         / cut function
                                           @[_x; ;        ]          / apply (@) to lowercased input
                                                0                    / at index 0
                                                  .q.upper           / uppercase function
                                         x:                          / save back into x
                                      |x                             / reverse x
                                    2#                               / take first two chars of x
                               "ye"=                                 / equal to "ye"?
                             2/:                                     / convert to base 2
                           1-                                        / subtract from 1
                         0&                                          / and with 0 (take min)
                       r:                                            / save as r
             ," Mc",                                                 / join with " Mc"
 $[r;x;x,"y"]                                                        / join with x (add "y" if required)

Thêm:

Cổng 67 byte trong K (oK) :

{$[r;x;x,"y"]," Mc",((r:0&1-2/"ye"=2#|x)_x:@[_x;0;`c$-32+]),"face"}

Hãy thử trực tuyến!


1
Điểm nào trong K4 nếu cổng oK của bạn đánh bại nó?
Zacharý

Tôi đã không nghĩ rằng nó sẽ hoạt động và cổng không hoạt động nếu char đầu tiên không theo thứ tự chữ cái khi tôi trừ 32 một cách mù quáng khỏi giá trị ASCII - không có tích hợp "trên".
streetster

2

Ruby , 69 byte

->s{"#{(s.capitalize!||s)[-1]==?y?s:s+?y} Mc#{s.gsub /e?y$/,""}face"}

Giải trình:

->s{                                                                } # lambda 
    "#{                                 } Mc#{                }face" # string interpolation
       (s.capitalize!||s) # returns string capitalized or nil, in that case just use the original string
                         [-1]==?y # if the last character == character literal for y
                                 ?s:s+?y # then s, else s + "y"
                                              s.gsub /e?y$/,"" # global substitute
                                                               # remove "ey" from end

Hãy thử trực tuyến!


Bạn có thể thêm một liên kết TIO? Tôi không biết Ruby, nhưng s.capitalizethay thế cái trước s? Nếu không được, không /e?y$/xử lý một trường hợp thử nghiệm kết thúc bằng Y, EYhay Eychính xác?
Kevin Cruijssen

1
@KevinCruijssen s.capitalizevs s.capitalize!(các chức năng khác nhau). s.capitalize!đóng đinh phiên bản cũ.
dkudriavtsev

@KevinCruijssen Tôi đã thêm một liên kết TIO.
dkudriavtsev

@KevinCruijssen Cũng thêm một lời giải thích
dkudriavtsev

Ah ok, cảm ơn đã giải thích và thông tin về s.capitalize!. Không bao giờ được lập trình trong Ruby, nhưng thêm một dấu giải thích để thay thế giá trị trước đó là khá tuyệt. +1 từ tôi.
Kevin Cruijssen

2

Jstx , 27 byte

h</►yT↓►y/◙♂ Mc♀/◄eyg►yg/íå

Giải trình

      # Command line args are automatically loaded onto the stack
h     # Title case the top of the stack
<     # Duplicate the top value on the stack twice
/     # Print the top value on the stack
►y    # Load 'y' onto the stack
T     # Returns true if the 2nd element on the stack ends with the top
↓     # Execute block if the top of the stack is false
  ►y  # Load 'y' onto the stack
  /   # Print the top value on the stack
◙     # End the conditional block
♂ Mc♀ # Load ' Mc' onto the stack
/     # Print the top value on the stack
◄ey   # Load 'ey' onto the stack
g     # Delete the top of the stack from the end of the 2nd element on the stack if it exists
►y    # Load 'y' onto the stack
g     # Delete the top of the stack from the end of the 2nd element on the stack if it exists
/     # Print the top of the stack
íå    # Load 'face' onto the stack
      # Print with newline is implied as the program exits

Hãy thử trực tuyến!


Tôi chưa từng thấy ngôn ngữ này trước đây. Trông nó thật thú vị. Có tài liệu không?
đệ quy


Wow, điều này thực sự ấn tượng. Đặc biệt là cho rất ít thời gian phát triển. Tôi rất vui khi thấy nơi này đi.
đệ quy

2

Màu đỏ , 143 142 byte

func[s][s: lowercase s s/1: uppercase s/1
w: copy s if"y"<> last s[append w"y"]rejoin[w" Mc"parse s[collect keep to[opt["y"|"ey"]end]]"face"]]

Hãy thử trực tuyến!

Ung dung:

f: func[s][
   s: lowercase s                      ; make the entire string lowercase
   s/1: uppercase s/1                  ; raise only its first symbol to uppercase 
   w: copy s                           ; save a copy of it to w
   if "y" <> last s[append w "y"]     ; append 'y' to w if it doesn't have one at its end
   rejoin[w                            ; assemble the result by joining:
          " Mc"
          ; keep the string until "y", "ey" or its end
          parse s[collect keep to [opt ["y" | "ey"] end]]
          "face"
    ]
]

2

PHP: 132

<?php function f($s){$s=ucfirst(strtolower($s));return $s.(substr($s,-1)=='y'?'':'y').' Mc'.preg_replace('/(ey|y)$/','',$s).'face';}

Giải trình:

<?php

function f($s)
{
    // Take the string, make it all lowercase, then make the first character uppercase
    $s = ucfirst(strtolower($s));

    // Return the string, followed by a 'y' if not already at the end, then ' Mc'
    // and the string again (this time, removing 'y' or 'ey' at the end), then
    // finally tacking on 'face'.
    return $s
        . (substr($s, -1) == 'y' ? '' : 'y')
        . ' Mc'
        . preg_replace('/(ey|y)$/', '', $s)
        . 'face';
}

2

Thạch , 77 75 74 73 byte

2ḶNṫ@€⁼"“y“ey”S
ØA;"ØaF
¢y⁸µ¢Uyµ1¦
Çṫ0n”yẋ@”y;@Ç;“ Mc”
⁸JU>ÑTị3Ŀ;@Ç;“face

Hãy thử trực tuyến!

Bất kỳ đề nghị chơi golf đều được chào đón (và muốn)!


2

Bình thường 36 34 byte

++Jrz4*\yqJK:J"e?y$"k+" Mc"+K"face

Hãy thử trực tuyến!

Giải trình:

++Jrz4*\yqJK:J"(e)?y$"k+" Mc"+K"face

  Jrz4                                  Set J to the titlecase of z (input)
           K:J"e?y$"k                   Set K to (replace all matches of the regex e?y$ in J with k (empty string))
         qJ                             Compare if equal to J
      *\y                               Multiply by "y" (if True, aka if no matches, this gives "y", else it gives "")
 +                                      Concatenate (with J)
                             +K"face    Concatenate K with "face"
                       +" Mc"           Concatenate " Mc" with that
+                                       Concatenate

Đáng buồn là điều này không hoạt động, vì trường hợp thử nghiệm cuối cùng thất bại.
Zacharý

Chuyển sang rz3để rz4làm điều này hoạt động đúng cho trường hợp thử nghiệm cuối cùng.
hakr14

Ôi, xin lỗi, tôi sẽ sửa nó: P
RK.

2

Thuốc tiên , 112 110 107 106 byte

bây giờ ngắn như java

fn x->x=String.capitalize x;"#{x<>if x=~~r/y$/,do: "",else: "y"} Mc#{String.replace x,~r/e?y$/,""}face"end

Hãy thử trực tuyến!

Giải trình:

x=String.capitalize x

Được xký tự đầu tiên viết hoa và tất cả những chữ thường khác.

#{ code }

Đánh giá mã và chèn nó vào chuỗi.

#{x<>if x=~ ~r/y$/, do: "", else: "y"}

Kết hợp x với ynếu nó không kết thúc bằng y(nghĩa là nó không khớp với biểu thức chính quy y$).

#{String.replace x, ~r/e?y$/, "")}

Loại bỏ đuôi eyvà đuôi y.



1

Pyth, 60 59 byte SBCS

K"ey"Jrz4Iq>2JK=<2J=kK.?=k\yIqeJk=<1J))%." s÷   WZÞàQ"[JkJ

Bộ kiểm tra

Họ không hiển thị ở đây, nhưng ba byte, \x9c, \x82, và \x8cđang trong chuỗi đóng gói giữa s÷. Hãy yên tâm, liên kết bao gồm chúng.

Dịch thuật Python 3:
K="ey"
J=input().capitalize()
if J[-2:]==K:
    J=J[:-2]
    k=K
else:
    k="y"
    if J[-1]==k:
        J=J[:-1]
print("{}{} Mc{}face".format(J,k,J))
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.