Ihre Herausforderung besteht darin, einen Namen (eine Zeichenfolge) als Eingabe zu verwenden
Albert Einstein
und Ausgabe:
Einstein, Albert
Pseudocode:
set in to input
set arr to in split by " "
set last to the last element of arr
remove the last element of arr
set out to arr joined with " "
prepend ", " to out
prepend last to out
output out
Weitere Testfälle:
John Fitzgerald Kennedy => Kennedy, John Fitzgerald
Abraham Lincoln => Lincoln, Abraham
Regeln
- Die Eingabe stimmt immer mit dem regulären Ausdruck überein
^([A-Z][a-z]+ )+([A-Z][a-z]+)$
. - Sie müssen nicht mit seltsamen Namen umgehen , auch wenn die Ausgabe technisch inkorrekt ist, ist sie hier in Ordnung.
- Das nachfolgende Leerzeichen / Newline ist in Ordnung.
- Irgendwelche Fragen? Kommentiere unten!
le
mit,
und Sie diese Frage habenle
durch ersetzt wird,
.Antworten:
05AB1E , 7 Bytes
Code:
Verwendet die 05AB1E- Codierung. Probieren Sie es online!
Erläuterung:
quelle
JavaScript (ES6), 34 Byte
Demo:
quelle
Netzhaut ,
191716 BytesEdit: Danke an Riker für das Speichern von 3 Bytes
Probieren Sie es online!
quelle
(.+)
funktioniert auch für beide.\w
in erster LinieGelee , 7 Bytes
Probieren Sie es online!
Ich kenne Jelly nicht sehr gut, aber als ich andere Antworten las, sah es so aus, als hätten sie keinen optimalen Algorithmus verwendet ... also hier ist es:
Erläuterung
quelle
Vim, 10 Bytes / Tastenanschläge
Probieren Sie es online!
quelle
<esc>
taucht nicht in Ihrem Code auf. Hinweis für andere, die es versuchen möchten: Dies setzt voraus, dass der Name im Editor geschrieben ist und Sie sich im normalen Modus am Anfang der Datei befinden.V / vim,
98 BytesProbieren Sie es online!
Ein Byte gespart dank
Beachten Sie, dass ein Leerzeichen nachgestellt ist. Hinterlässt ein Leerzeichen, das nach den Regeln zulässig ist.
Erläuterung:
quelle
<esc>
. Sie können ein Byte speichern, indem Sie$bD
anstelle von$diw
. :)$bD
obwohl nicht ein Zeichen Namen zu behandeln, ich habe gefragt , OP , ob das erlaubt ist.Python 2 , 39 Bytes
Probieren Sie es online!
Yup,
rsplit
.quelle
input
stattraw_input
zum Golfen - siehe diesen Meta-PostMathematica,
5240 Bytesquelle
> <> 27 Bytes
Probieren Sie es online!
quelle
C 45 Bytes
EDIT: Mir ist gerade aufgefallen, dass die Eingabe möglicherweise mehr als zwei Wörter umfassen muss. Ich werde es so lassen, wie es ist, mit der Bemerkung, dass dies nur für zwei Wörter funktioniert.
EDIT: entfernt
\n
. Fügen Sie 2 Bytes hinzu, wenn Sie dies für erforderlich halten.Kompiliert mit
gcc name.c
, GCC 6.3.1. Warnungen ignorieren. Verwendung:Missbrauch der Sprache:
int
vonmain
und nichts zurückgegeben.printf
. GCC wird es trotzdem aufnehmen.b
. Macht nichts mit%s
Vielen Dank an @ Khaled.K für die Tipps zur Verwendung von
main(a,b)int**b;
anstattmain(int a, int **b)
.quelle
main(a,**b){printf("%s, %s",b[2],b[1]);}
ist auch 40 Bytesmain(a,b)int**b;{printf("%s, %s\n",b[2],b[1]);}
Ruby , 22 Bytes
Probieren Sie es online!
quelle
sed, 19 + 1 für -E = 20 Bytes
Es muss -r (GNU) oder -E (BSD, aktuelle GNUs) verwendet werden, um zu vermeiden, dass die Gruppierungsklammern verlassen werden müssen.
Wenn in der Befehlszeile geschrieben, muss in Anführungszeichen gesetzt werden, um zu vermeiden, dass die Shell mehrere Token analysiert:
quelle
C 68 Bytes
Hoffe, es ist nicht falsch, einen weiteren Beitrag hinzuzufügen, aber hier ist eine etwas andere Lösung als meine zuvor veröffentlichte C-Lösung. Dieser akzeptiert eine beliebige Anzahl von Namen.
Kompilieren Sie mit
gcc name.c
(GCC 6.3.1) und ignorieren Sie Warnungen. Verwendung:Vielen Dank an @ Khaled.K für die Tipps zu
main(a,b)int**b;
Danke für den Tipp auf der for-Schleife an @Alkano.
quelle
main(a,b)int**b;{for(printf("%s,",b[--a]);++b,--a;printf(" %s",*b));}
main(a,b)int**b;{a&&printf("%s,"b[a-1])&&main(a-1,b);}
main(a,b)int**b;{--a&&printf("%s, ",b[a])&&main(a,b);}
. Es ist 2 Bytes kürzer und stellt sicher, dass Sie den Programmnamen nicht drucken, sondern Kommas zwischen den einzelnen Namen verwenden.Mathematica, 45 Bytes
Sparte ein paar Bytes über die Antwort von ngenisis, indem die Eingabe als Liste von Zeichen und nicht als Zeichenfolge vorgenommen wurde. Reine Funktion, die eine Musterersetzungsregel verwendet.
Mathematica, 49 Bytes
Eine weitere reine Funktion, die eine Liste von Zeichen als Eingabe verwendet und eine Liste von Zeichen zurückgibt. Dieser fügt
","
und" "
an die Eingabe an und dreht dann die Liste der Zeichen, bis das letzte Leerzeichen am Ende ist. (Daher hat die Ausgabe im Gegensatz zur obigen ersten Funktion ein Leerzeichen am Ende.)quelle
#/.{a__,s=" ",b:Except@s..}->{b,",",s,a}&
ist4
Bytes kürzer, aber ich fand heraus, dass dasExcept
für Zeichenkettenmuster unnötig ist und sparte mir12
Bytes.x
in Ihrer Antwort?C #,
7672 Bytes4 Bytes mit Hilfe von @KevinCruijssen gespeichert
Alte Version mit Teilstrings für 76 Bytes:
quelle
System.Text.RegularExpressions.Regex
ist so verdammt lang in C # ..s=>new System.Text.RegularExpressions.Regex("(.+) (.+)").Replace(s,"$2, $1");
ist nur ein Byte mehr.Regex
, um 4 Bytes zu sparenAwk, 18 Zeichen
Probelauf:
Probieren Sie es online!
quelle
Gelee , 8 Bytes
Probieren Sie es online!
quelle
05AB1E , 9 Bytes
Probieren Sie es online!
Erläuterung
quelle
Pyth , 11 Bytes
Erläuterung:
Online testen!
quelle
PHP, 45 Bytes
Probieren Sie es online!
quelle
\pL+
statt.+
?.
oder\pL
MATLAB / Octave , 37 Bytes
Probieren Sie es online!
Basierend auf der Retina-Antwort von @ngenisis können wir auch das Regex-Spiel sowohl in Octave als auch in MATLAB spielen und dabei ein paar Bytes mehr als bei meiner vorherigen Antwort einsparen.
Alte Antwort:
Ich werde diese Antwort auch hier belassen, da dies im Vergleich zu einem einfachen regulären Ausdruck eine einzigartigere Methode ist.
Oktave ,
4947 BytesAlt versuchen Sie es online!
Eine anonyme Funktion zum Generieren der Ausgabe.
Grundsätzlich findet der Code zuerst das letzte Leerzeichen in der Zeichenfolge mit
b=find(a==32)(end)
. Dann wird der Endteil der Zeichenkette (nach dem Leerzeichen) verwendeta(b+1:end)
, wobeib
die Ausgabe der Suche nach dem letzten Leerzeichen ist. Es nimmt auch den Anfang des Strings mita(1:b-1)
und verkettet beide zusammen mit einem', '
dazwischen.Ich habe schon ein paar Bytes gespart gegenüber dem typischen
find(a==32,1,'last')
. Ich bin mir nicht ganz sicher, ob es noch viel mehr zu sparen gibt.quelle
Gelee , 9 Bytes
Erklärt, ish:
Probieren Sie es online!
Probieren Sie alle Testfälle aus.
quelle
Python 3, 52 Bytes
Sehr einfach, könnte Golfen helfen. Schreibe einfach das letzte Wort nach vorne und verbinde sie mit ",".
Testfall:
quelle
Japt, 14 Bytes
Ein Port von @ programmer5000 ‚s JavaScript Antwort .
Probieren Sie es online!
quelle
Java,
11062 BytesNicht statische Methode.
-48 Bytes dank Kevin Cruijssen
quelle
String c(String s){int i=s.lastIndexOf(' ');return s.substring(i+1)+", "+s.substring(0,i);}
ist kürzer ( 91 Bytes ).String d(String s){return s.replaceAll("(.+) (.+)","$2, $1");}
ist noch kürzer ( 62 Bytes ).PHP ,
6259 Bytes-3 Bytes, danke Jörg
Probieren Sie es online!
Alte Lösung, 63 Bytes
Funktioniert nicht, wenn die Person 3 sich wiederholende Namen hat.
Probieren Sie es online aus
quelle
$argn
anstelle von$argv[1]
Excel,
174170168 Bytes2 Bytes gespart dank Wernisch
Das ist nicht schick oder klug. Es ist eine ziemlich einfache Methode. Es fühlt sich an, als ob es einen kürzeren Weg mit Array-Formeln geben sollte, aber ich kann keinen finden, der funktioniert.
quelle
-1
in der LINKEN Funktion weglassen.JS (ES6),
5244 Bytesquelle
MATL , 10 Bytes
Probieren Sie es online!
Erläuterung
quelle
Gema, 23 Zeichen
Das einzig Bemerkenswerte dabei ist, wie die Herausforderung es geschafft hat, die Schwäche des Gema-Musters Nichtgier zu treffen.
Probelauf:
quelle