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
' y'
und' '
Antworten:
Stax , 26 Bytes
Führen Sie es aus und debuggen Sie es
Führen Sie dieses aus
quelle
V , 27
2830BytesProbieren Sie es online!
<Esc>
repräsentiert0x1b
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
V
Wählt die Linie aus und setztu
sie 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 ersetzte¿y$
, komprimierte Form vone\?y$
(optionale
und ay
am Ende der Zeile), mit nichts (geschieht in der zweiten Zeile)H
geht in die erste Zeileó
wirdy$
(y
am Ende der Zeile) durch nichts in der ersten Zeile ersetztÁ
Fügt einy
an das Ende der ersten Zeile anJ
und verbindet die letzte mit der ersten Zeile mit einem Leerzeichen in der Mitte, und der Cursor wird auf dieses Leerzeichen bewegta
hängt anMc
(<Esc>
kehrt zum normalen Modus zurück)A
wird schließlichface
am Ende der Zeile angehängtquelle
Python, 144 Bytes
Probieren Sie es hier online aus
quelle
f("Face")
entspricht nicht den aktuellen Testfällen ( TIO ).Excel,
204144137165 BytesVon innen nach außen:
Alte Antwort, alle Bits separat erstellen und dann verketten (176 Bytes). Behandelt durch Leerzeichen begrenzte Fälle nicht korrekt.
quelle
PROPER(A1)
(sieheDJ Grand Master Flash
Eingabefall) der beste Ersatz, den ich bei der Arbeit an meiner VBA-Lösung finden konnte , ungültigLEFT(UPPER(A1))&MID(LOWER(A1),2,LEN(A1))
- lassen Sie es mich bitte wissen, wenn Sie am Ende Golf spielen.Perl 6 ,
423735 BytesProbieren Sie es online!
quelle
C # (.NET Core) ,
122108139175180179154 BytesVielen Dank, Lee!
Probieren Sie es online!
C # (.NET Core, mit LINQ), 152 Byte
Probieren Sie es online!
quelle
SOGL V0.12 , 38 Bytes
Probieren Sie es hier aus!
quelle
Ruby ,
6149 BytesProbieren Sie es online!
12 süße Bytes dank @MartinEnder gespeichert:
quelle
=~
die ganze Saite zu benutzen und zu bauen, anstatt sie zu benutzensub
. Die String-Interpolation kann ohne eckige Klammern verwendet werden, wenn die Variable eine globale Variable, eine Instanzvariable oder eine Klassenvariable ist.-p
Flagge und mitsub
: tio.run/...Python 3 , 80 Bytes
Lange Zeit begeisterter Leser, meine erste Vorlage endlich!
Probieren Sie es online aus
quelle
Retina , 29 Bytes
Probieren Sie es online!
quelle
Python 2 ,
8892 BytesProbieren Sie es online!
quelle
Java 8,
121112107106 Bytes-1 Byte danke an @ OliverGrégoire .
Erläuterung:
Probieren Sie es online aus.
quelle
~32
->95
für 1 Byte gespeichertJavaScript,
1039694 BytesZiemlich naiv erster Versuch.
Probieren Sie es online aus
quelle
${s=s[0].toUpperCase()+s.slice(1).toLowerCase().replace(/y$/,``)}y Mc${s.replace(/e?y$/,``)}face
${s=s[0].toUpperCase()+s.slice(1).toLowerCase().replace(/y$/,'')}y Mc${s.replace(/e$/,``)}face
Donkey
und der zweite fürFace
.vim,
3534 bytes<ESC>
ist0x1b
Ungolfed
Probieren Sie es online!
1 Byte dank DJMcMayhem gespeichert
quelle
Y
anstelle vonyy
Perl 5
-p
,4739 Bytes6 Bytes mit @ OlegV.Volkovs Vorschlägen gespeichert, 1 mit @ mwellnhofs und 1 alleine
Probieren Sie es online!
quelle
ucfirst
:$_=lc^$";
$_=s/y$//r."y Mc".s/e?y$//r.face
ist ein Byte kürzer./y$|$/
->/y?$/
C ++ 14 (g ++),
181171148147134 BytesBeachten 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:
quelle
s[0]=s[0]&~32;
biss[0]&=~32;
;s[i++]=s[i]|32;
zus[i++]|=32
; undint i=1,n=s.length()-1,b;
so brauchst du nur 1int
.#include<string>
n
indem Sie den Werti
nach der while-Schleife nicht definieren und nur verwenden . Probieren Sie es online!V ,
383632 Bytes-5 byte dank @Cows quack
<esc>
ist ein buchstäbliches Escapezeichen und[^
wird als codiert\x84
Probieren Sie es online!
quelle
gu$
kann werdenVu
[^
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
05AB1E , 30 Bytes
Probieren Sie es online! oder als Testsuite
quelle
Python 3 ,
117114 Bytes-3 Bytes dank Dead Possum
Probieren Sie es online!
quelle
[s,s[:-1],'',s[:-2]
kann geändert werden0
, um 1 Byte zu speichern.'y'*1
*1
wird nicht benötigt. 2 weitere Bytesreturn
durchprint
ist 1 Byte kürzer.JavaScript (Node.js) , 87 Byte
Probieren Sie es online!
quelle
Buffer
, ich werde versuchen müssen, es für zukünftige Herausforderungen in Erinnerung zu behalten. Ich habe es auf 87 Bytes reduziert.K4 ,
746968 BytesLösung:
Beispiele:
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 ...Bonus:
67-Byte- Port in K (OK) :
Probieren Sie es online!
quelle
Ruby , 69 Bytes
Erläuterung:
Probieren Sie es online!
quelle
s.capitalize
ersetzt es das vorheriges
? Wenn nicht, wird/e?y$/
ein TestfallY
, derEY
mit oder endet ,Ey
korrekt behandelt?s.capitalize
vss.capitalize!
(verschiedene Funktionen).s.capitalize!
verstopft die alte Version.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.JSTX , 27 Byte
Erläuterung
Probieren Sie es online!
quelle
Rot ,
143142 BytesProbieren Sie es online!
Ungolfed:
quelle
PHP: 132
Erläuterung:
quelle
Jelly ,
77757473 BytesProbieren Sie es online!
Anregungen zum Golfen sind willkommen (und erwünscht)!
quelle
Pyth,
3634 BytesProbieren Sie es online!
Erläuterung:
quelle
rz3
zurz4
, damit dies für den letzten Testfall ordnungsgemäß funktioniert.Elixir ,
112110107106 Bytesjetzt so kurz wie java
Probieren Sie es online!
Erläuterung:
Ruft
x
das erste Zeichen in Großbuchstaben und alle anderen in Kleinbuchstaben ab.Bewerten Sie den Code und fügen Sie ihn in die Zeichenfolge ein.
Verkettet x mit,
y
wenn es nicht mit endety
(dh es stimmt nicht mit dem regulären Ausdruck übereiny$
).Entfernt Trailing
ey
und Trailingy
.quelle
PHP , 45
46BytesProbieren Sie es online!
quelle
boAty
. (Falsche Kappen, 'y' nicht entfernt).Pyth,
6059 Bytes SBCSTestsuite
Sie zeigen nicht hier, sondern drei Bytes
Python 3 Übersetzung:\x9c
,\x82
und\x8c
sind in dem gepackten String zwischens
und÷
. Seien Sie versichert, der Link enthält sie.quelle