Facey McFaceface


47

Erinnert sich jemand an Boaty ?

Du könntest ein altes Wort schreiben, richtig?

  • Schreiben Sie eine Funktion, um einen String in Somethingy McSomethingface zu verwandeln.
  • Es sollte eine Zeichenfolge als Eingabe akzeptieren. Ignorieren Sie den Fall der Eingabe.
  • Wenn das Wort mit "y" endet, sollte Ihre Funktion der ersten Instanz kein zusätzliches "y" hinzufügen, sondern es in der zweiten Instanz entfernen.
  • Wenn das Wort mit "ey" endet, sollte in der ersten Instanz kein zusätzliches "y" hinzugefügt werden, in der zweiten Instanz sollten jedoch beide entfernt werden.
  • Die Ausgabe sollte nur Großbuchstaben im ersten Zeichen, dem 'M' von 'Mc' und dem ersten Zeichen nach 'Mc' enthalten.
  • Es muss nur mit Zeichenfolgen mit 3 oder mehr Zeichen gearbeitet werden.

Beispiele:

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

Was ist mit Leerzeichen in der Zeichenfolge? Lassen wir sie intakt? Beispiele: ' y'und' '
meinen Körper berühren

2
Ich werde einen Vorschlag von @Arnauld implementieren und ihn auf mindestens drei Zeichen beschränken. Behandle Whitespace wie einen anderen Buchstaben.
AJFaraday


Können wir davon ausgehen, dass die Eingabe nur Groß- und Kleinbuchstaben enthält?
Kevin Cruijssen

@KevinCruijssen Ich habe keine Buchstaben in die Testfälle eingefügt, sie sind also praktisch nicht betroffen.
AJFaraday

Antworten:


7

Stax , 26 Bytes

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

Führen Sie es aus und debuggen Sie es

^           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

Führen Sie dieses aus


15

V , 27 28 30 Bytes

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

Probieren Sie es online!

<Esc> repräsentiert 0x1b

  • Golfed zwei Bytes nach dem Lernen, dass wir Eingaben mit weniger als 3 Zeichen nicht unterstützen mussten.

  • Dank @DJMcMayhem wird 1 Byte gespart, indem in der zweiten Zeile vor der ersten gearbeitet wird, wodurch die entfernt wird G

Die Eingabe erfolgt im Puffer. Das Programm konvertiert zunächst alles in Kleinbuchstaben

VWählt die Linie aus und setzt usie in die untere Zeile

~ Schaltet die Groß- / Kleinschreibung des ersten Zeichens um (konvertiert es in Großbuchstaben)

und Ùdupliziert diese Zeile oben, wobei sich der Cursor in der untersten Zeile befindet

óund ersetzt e¿y$, komprimierte Form von e\?y$(optional eund a yam Ende der Zeile), mit nichts (geschieht in der zweiten Zeile)

H geht in die erste Zeile

ówird y$( yam Ende der Zeile) durch nichts in der ersten Zeile ersetzt

ÁFügt ein yan das Ende der ersten Zeile an

J und verbindet die letzte mit der ersten Zeile mit einem Leerzeichen in der Mitte, und der Cursor wird auf dieses Leerzeichen bewegt

ahängt an Mc( <Esc>kehrt zum normalen Modus zurück)

Awird schließlich faceam Ende der Zeile angehängt



13

Python, 144 Bytes

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

Probieren Sie es hier online aus


2
Mein allererster Code Golf Versuch ...
Berühre meinen Körper

3
Willkommen bei PPCG! könnte ich vorschlagen, einen Link zu Try it Online hinzuzufügen ! zur Überprüfung der Richtigkeit?
Giuseppe

1
f("Face")entspricht nicht den aktuellen Testfällen ( TIO ).
Jonathan Frech

Der Beitrag wurde aus Gründen der Korrektheit bearbeitet. Außerdem wurde ein Online-Test hinzugefügt. link
touch my body


12

Excel, 204 144 137 165 Bytes

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

Von innen nach außen:

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

Alte Antwort, alle Bits separat erstellen und dann verketten (176 Bytes). Behandelt durch Leerzeichen begrenzte Fälle nicht korrekt.

=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"

Leider ist aufgrund der Anforderung der Behandlung von durch Leerzeichen begrenzten Fällen PROPER(A1)(siehe DJ Grand Master FlashEingabefall) der beste Ersatz, den ich bei der Arbeit an meiner VBA-Lösung finden konnte , ungültig LEFT(UPPER(A1))&MID(LOWER(A1),2,LEN(A1))- lassen Sie es mich bitte wissen, wenn Sie am Ende Golf spielen.
Taylor Scott

1
Vielen Dank an TaylorScott. Es wurde "REPLACE (LOWER (A1), 1,1, UPPER (LEFT (A1))" gefunden, was 2 Byte kürzer ist.
Wernisch


9

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

Vielen Dank, 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("$","");

Probieren Sie es online!

C # (.NET Core, mit 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("$","");

Probieren Sie es online!


3
Willkommen auf der Seite! :)
DJMcMayhem


7

Ruby , 61 49 Bytes

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

Probieren Sie es online!

12 süße Bytes dank @MartinEnder gespeichert:


1
Mit dem regulären Ausdruck meiner Retina Antwort und ein bisschen mehr Einsatz von String - Interpolation machen wird diese bis auf 49: tio.run/##DcxBCsIwEEDRqwxJBF3Y4lpSN0U3igcQwTQmGFptMVNkTOLVY3bvb/...
Martin Ender

@MartinEnder Wow, das ist ein ziemlicher Unterschied. Ich glaube nicht, dass ich eine String-Interpolation ohne Klammern gesehen habe. Ich nehme es, wenn Sie es nicht für Ihre eigene Ruby-Antwort verwenden möchten.
Iamnotmaynard

Nein, es ist in Ordnung, ich hätte mir nicht ausgedacht, =~die ganze Saite zu benutzen und zu bauen, anstatt sie zu benutzen sub. Die String-Interpolation kann ohne eckige Klammern verwendet werden, wenn die Variable eine globale Variable, eine Instanzvariable oder eine Klassenvariable ist.
Martin Ender

Sie können diese bis zu 44 + 1 Bytes erhalten , indem die Verwendung von -pFlagge und mit sub: tio.run/...
Jordan




5

Java 8, 121 112 107 106 Bytes

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

-1 Byte danke an @ OliverGrégoire .

Erläuterung:

Probieren Sie es online aus.

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"

Was ist, wenn das erste Zeichen nicht alphabetisch ist? Oder vielleicht können wir eine Regel hinzufügen ..
Streetster

1
@streetster Habe gerade nach OP gefragt und es scheint, dass die Eingabe nur Groß- und / oder Kleinbuchstaben enthält.
Kevin Cruijssen

1
~32-> 95für 1 Byte gespeichert
Olivier Grégoire

@ OlivierGrégoire Ich muss wirklich anfangen, ein bisschen mehr über bitweise Operationen zu lernen ..>.>
Kevin Cruijssen

4

JavaScript, 103 96 94 Bytes

Ziemlich naiv erster Versuch.

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

Probieren Sie es online aus


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

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

Danke, @BenjaminGruenbaum, aber der erste schlägt fehl Donkeyund der zweite für Face.
Shaggy


@ Shaggy Ich habe es geschafft, die g-Funktion um einige Zeichen zu reduzieren :). Sie können in meiner Lösung suchen
DanielIndie

3

vim, 35 34 bytes

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

<ESC> ist 0x1b

Ungolfed

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

Probieren Sie es online!

1 Byte dank DJMcMayhem gespeichert


1
Sie können Yanstelle vonyy
DJMcMayhem


3

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

[](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";}

Beachten Sie, dass Clang dies nicht kompiliert.

Der Trick geht an Kevin Cruijssen und Olivier Grégoire&95 .

Vielen Dank an Chris für das Golfen mit 11 Bytes.

Probieren Sie es hier online aus .

Ungolfed-Version:

[] (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";
}

Ich kenne C ++ nicht so gut, aber Sie können 9 Bytes Golf spielen: Probieren Sie es online 172 Bytes. Zusammenfassung der Änderungen: s[0]=s[0]&~32;bis s[0]&=~32;; s[i++]=s[i]|32;zu s[i++]|=32; und int i=1,n=s.length()-1,b;so brauchst du nur 1 int.
Kevin Cruijssen

Oh, und noch ein Byte durch Entfernen des Leerzeichens bei#include<string>
Kevin Cruijssen

@ KevinCruijssen danke für den Fang! Ich habe bearbeitet.
Bilanz

Sie können 11 Bytes einsparen, nindem Sie den Wert inach der while-Schleife nicht definieren und nur verwenden . Probieren Sie es online!
Chris

@ Chris Danke! Ich habe es geschafft, 2 weitere Bytes zu entfernen.
Bilanz

2

V , 38 36 32 Bytes

-5 byte dank @Cows quack

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

<esc>ist ein buchstäbliches Escapezeichen und [^wird als codiert\x84

Probieren Sie es online!


gu$kann werdenVu
Kritixi Lithos

2
Da [^es sich um eine Regex-Verknüpfung handelt (siehe hier ), können Sie 0x84 verwenden, anstatt [^ein Byte zu speichern. Ebenso \?kann vereinfacht ein <M-?>weiteres Byte eingespart werden. Und $a=>A
Kritixi Lithos


2

Python 3 , 117 114 Bytes

-3 Bytes dank 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'

Probieren Sie es online!


Das dritte Element der Liste [s,s[:-1],'',s[:-2]kann geändert werden 0, um 1 Byte zu speichern.
Dead Possum

In 'y'*1 *1wird nicht benötigt. 2 weitere Bytes
Dead Possum

Das Wechseln von Python 3 zu Python 2 und das Ersetzen returndurch printist 1 Byte kürzer.
Kevin Cruijssen

2

JavaScript (Node.js) , 87 Byte

  • danke an @Shaggy für 5 reduzierende 5 bytes
s=>(g=r=>Buffer(s.replace(r,"")).map((x,i)=>i?x|32:x&~32))(/y$/)+`y Mc${g(/e?y$/)}face`

Probieren Sie es online!


2
Sie müssen keine nicht rekursiven Funktionen benennen.
Dennis

1
Schön gemacht. Ich denke nie daran, es zu benutzen Buffer, ich werde versuchen müssen, es für zukünftige Herausforderungen in Erinnerung zu behalten. Ich habe es auf 87 Bytes reduziert.
Shaggy

2

K4 , 74 69 68 Bytes

Lösung:

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

Beispiele:

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"

Erläuterung:

Finden Sie heraus, ob die letzten Zeichen gleich "ey"sind. Konvertieren Sie das Ergebnis in Basis-2, damit wir Wörter, die enden, ignorieren können "e?". Indexieren Sie eine Liste mit der Anzahl der zu trimmenden Zeichen.

Es ist mir gelungen, 5 Bytes meines Codes zu sparen "ey", um festzustellen, ob die letzten beiden Zeichen nicht besser sind ...

{$[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)

Bonus:

67-Byte- Port in K (OK) :

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

Probieren Sie es online!


1
Was nützt der K4, wenn Ihr OK-Port ihn besiegt?
Zacharý

Ich hätte es nicht gedacht, und der Port funktioniert nicht, wenn das erste Zeichen nicht alphabetisch ist, da ich blind 32 vom ASCII-Wert subtrahiere - es ist kein "oberes" eingebaut.
Streetster

2

Ruby , 69 Bytes

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

Erläuterung:

->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

Probieren Sie es online!


Könnten Sie einen TIO-Link hinzufügen? Ich kenne Ruby nicht, aber s.capitalizeersetzt es das vorherige s? Wenn nicht, wird /e?y$/ein Testfall Y, der EYmit oder endet , Eykorrekt behandelt?
Kevin Cruijssen

1
@ KevinCruijssen s.capitalizevs s.capitalize!(verschiedene Funktionen). s.capitalize!verstopft die alte Version.
Dkudriavtsev

@ KevinCruijssen Ich habe einen TIO-Link hinzugefügt.
Dkudriavtsev

@ KevinCruijssen Auch eine Erklärung hinzugefügt
dkudriavtsev

Ah ok, danke für die Erklärung und die Information über s.capitalize!. Nie in Ruby programmiert, aber das Hinzufügen eines Erklärungszeichens, um den vorherigen Wert zu ersetzen, ist ziemlich cool. +1 von mir.
Kevin Cruijssen

2

JSTX , 27 Byte

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

Erläuterung

      # 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

Probieren Sie es online!


Ich habe diese Sprache noch nie gesehen. Es sieht interessant aus. Gibt es Unterlagen?
rekursive


Wow, das ist wirklich beeindruckend. Vor allem für so wenig Entwicklungszeit. Ich bin gespannt, wohin das führt.
rekursive

2

Rot , 143 142 Bytes

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"]]

Probieren Sie es online!

Ungolfed:

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';}

Erläuterung:

<?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

Jelly , 77 75 74 73 Bytes

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

Probieren Sie es online!

Anregungen zum Golfen sind willkommen (und erwünscht)!


2

Pyth, 36 34 Bytes

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

Probieren Sie es online!

Erläuterung:

++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

Leider funktioniert dies nicht, da der letzte Testfall fehlschlägt.
Zacharý

Wechseln Sie rz3zu rz4, damit dies für den letzten Testfall ordnungsgemäß funktioniert.
hakr14

Oh hoppla, ich werde das beheben: P
RK.

2

Elixir , 112 110 107 106 Bytes

jetzt so kurz wie java

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

Probieren Sie es online!

Erläuterung:

x=String.capitalize x

Ruft xdas erste Zeichen in Großbuchstaben und alle anderen in Kleinbuchstaben ab.

#{ code }

Bewerten Sie den Code und fügen Sie ihn in die Zeichenfolge ein.

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

Verkettet x mit, ywenn es nicht mit endet y(dh es stimmt nicht mit dem regulären Ausdruck überein y$).

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

Entfernt Trailing eyund Trailing y.



1

Pyth, 60 59 Bytes SBCS

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

Testsuite

Sie zeigen nicht hier, sondern drei Bytes \x9c, \x82und \x8csind in dem gepackten String zwischen sund ÷. Seien Sie versichert, der Link enthält sie.

Python 3 Übersetzung:
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))
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.