Versenke das Bismark! (Errr, Schwein)

8

Schweinelatein ist eine erfundene Sprache, in die übersetzt wird, indem der erste Buchstabe eines Wortes an das Ende verschoben ayund am Ende hinzugefügt wird . Zum Beispiel: helloübersetzt in Schweinelatein als ellohay. Wenn Sie also Schweinelatein wieder ins Englische übersetzen, wird das ayam Ende gelöscht und der letzte Buchstabe an den Anfang verschoben (wie oodbyegaybei goodbye). Beim Schreiben schreiben einige Leute ein -Ende, bevor sie den ersten Buchstaben aus Gründen der Klarheit verschieben, sodass er (zum Beispiel) ello-haystatt ellohayfür lautet hello. Wir werden diese Version mit Bindestrich für diese Herausforderung verwenden.

Zielsetzung

Löse eine Schweinelateinschnur.

Anleitung

Schreiben Sie ein Programm / eine Funktion mit einem Argument, einem einzelnen Wort in Form einer Zeichenfolge. Wenn dieses Wort in Schweinelatein ist, muss das Programm / die Funktion returndas Nichtschweinlateinwort ausgeben (dh drucken). Wenn es kein Schweinelatein ist, geben Sie das Wort unverändert aus.

Schweinelatein für diese Herausforderung wird im folgenden Format vorliegen:

ello-hay

Wenn das Wort endet -*ay, ist es Schweinelatein, wobei das *ein einzelnes Platzhalterzeichen ist.

Nicht-Buchstaben-Zeichen sollten wie normale Buchstaben behandelt werden. Ignorieren Sie bei mehreren Strichen alle außer den letzten.

Beispiele

Verwendung der fiktiven unpig()Python-Funktion für die Demo.

unpig("ello-hay")    #=> hello
unpig("hello-world") #=> hello-world
unpig("hello")       #=> hello
unpig("pple-aay")    #=> apple
unpig("apple")       #=> apple
unpig("ig-Stay")     #=> ig-Stay (+1 to ETHproductions for noticing.)
unpig("ello----hay") #=> hello---
unpig("la$s-gay")    #=> gla$s
unpig("ig-pay-yay")  #=> yig-pay

Regeln

  1. Es gelten Standardlücken
  2. Dies ist , also gewinnt der kürzeste Code.
  3. Eingebaute Funktionen (speziell für diesen Zweck) sind nicht zulässig.
  4. Header verwenden # Language, XX bytes

Bestenliste

juniorRubyist
quelle

Antworten:

5

JavaScript (ES6), 34 Byte

s=>s.replace(/(.*)-(.)ay$/,'$2$1')

Testfälle

Arnauld
quelle
Ist das eine Funktion? Ich mache kein JS (ES6).
juniorRubyist
Ich hatte buchstäblich genau die gleiche Lösung, außer doppelte Anführungszeichen anstelle von einfachen Anführungszeichen zu verwenden
ETHproductions
Nvm. Toller Start!
juniorRubyist
@juniorRubyist Es ist eine anonyme Funktion, die jeder Variablen zugewiesen werden kann (in diesem Fall 'unpig').
Officialaimm
Scheint ziemlich unschlagbar.
Steve Bennett
3

PHP , 61 Bytes

function f($v){echo preg_replace("#(.*)-(.)ay$#","$2$1",$v);}

Probieren Sie es online aus!

PHP , 46 Bytes

ohne Funktion

<?=preg_replace("#(.*)-(.)ay$#","$2$1",$argn);

Probieren Sie es online aus!

Jörg Hülsermann
quelle
Muss eine Funktion sein. Ungültig.
CalculatorFeline
@CalculatorFeline behoben
Jörg Hülsermann
Vor 22 Minuten wurde Ihre 46-Byte-Lösung gültig.
CalculatorFeline
3

Python 2 , 48 46 Bytes

-2 Bytes dank xnor.

Dies sind anonyme Lambda-Funktionen, die beispielsweise zugewiesen werden können unpig.

lambda s:[s,s[-3]+s[:-4]][s[-4]+s[-2:]=="-ay"]

Probieren Sie es online aus!

Regex-Lösung, 49 Bytes

lambda s:re.sub('(.*)-(.)ay',r'\2\1',s)
import re

Probieren Sie es online aus!

total menschlich
quelle
1
Sie müssen nicht verwenden, and/orwenn kein Kurzschluss erforderlich ist. Die Auswahl aus einer Liste funktioniert und ist kürzer.
xnor
2

Python 2.7, 68 55 52 Bytes

def up(s):print(s,s[-3]+s[:-4])[s[-4]+s[-2:]=="-ay"]

Verwendet einen ternären Operator.

-13 Bytes dank Officialaimm und einer Aktualisierung der Regeln.

-3 Geänderter ternärer Operator. Siehe https://stackoverflow.com/a/470376/3210045 .

juniorRubyist
quelle
1
s[0:len(s)-4]kann durch nur ersetzt werden s[:-4]. Und wenige Leerzeichen können durch Drücken ]ifund"else
offiziell am
1

05AB1E , 15 Bytes

D'-¡θ¦„ayQi¨¨Á¨

Probieren Sie es online aus!

θwird durch ®èauf TIO ersetzt, da es dort noch nicht gezogen wurde.

Erik der Outgolfer
quelle
Bestes Golfen! Du gewinnst.
JuniorRubyist
0

Japt , 18 Bytes

Genau der gleiche RegEx-Ersatz wie alle anderen, zuerst veröffentlicht von Arnauld

r"(.*)-(.)ay""$2$1

Probier es aus

Zottelig
quelle
Ich hatte q$/-(.)ay/$ w qfür 15, aber leider schlägt das bei Eingaben fehl, die mehrere Kopien von enthalten -<char>ay(es korrigiert sie alle und nicht nur die letzten). Na
ja
0

Perl 6 , 22 Bytes

{S/(.+)\-(.)ay$/$1$0/}

Grundlegende Lösung für reguläre Ausdrücke.

Sean
quelle
0

Python 3 , 59 60 Bytes

  • 1 Byte hinzugefügt dank @Erik the Outgolfer: $, um sicherzustellen, dass die ig-payyayAusgaben gleich sind und nichtyig-pa
lambda a:a[-3]+a[:-4]if re.search("-.ay$",a)else a
import re

Probieren Sie es online aus!

Officialaimm
quelle
0

Java (OpenJDK 8) , 146 Bytes

s->{Matcher m=Pattern.compile("(.*)-(.)ay").matcher(s);String g="";while(m.find())g=m.group(1);return (g!=""?s.charAt(s.lastIndexOf('-')+1)+g:s);}

Probieren Sie es online aus!

marcelovca90
quelle