Hinweis: Die Gewinnerantwort wird am 17.04.17 ausgewählt. Der aktuelle Gewinner ist Jolf, 1 Byte .
Ich bin überrascht, dass wir auf dieser Website noch keine Frage zu meinem zweiten Vornamen hatten. Ich habe viel gesucht, aber nichts gefunden. Wenn dies ein Dup ist, kennzeichnen Sie es bitte als solches.
Deine Herausforderung
Analysieren Sie eine Zeichenfolge, die aussieht, Jo Jean Smith
und geben Sie zurück Jean
.
Testfälle
Input: Samantha Vee Hills
Output: Vee
Input: Bob Dillinger
Output: (empty string or newline)
Input: John Jacob Jingleheimer Schmidt
Output: Jacob Jingleheimer
Input: Jose Mario Carasco-Williams
Output: Mario
Input: James Alfred Van Allen
Output: Alfred Van
(Letzteres ist technisch nicht korrekt, aber es wäre zu schwierig, das zu beheben.)
Anmerkungen:
- Namen haben immer mindestens 2 durch Leerzeichen getrennte Teile mit unbegrenzten Zwischennamen oder können eine Liste / ein Array von Zeichenfolgen sein.
- Namen können das Alphabet enthalten (Groß- / Kleinschreibung wird nicht berücksichtigt) und - (
0x2d
) - Sie können eine abschließende Newline ausgeben.
- Möglicherweise benötigen Sie Eingaben für eine nachgestellte Zeile.
- Eingaben von STDIN, einem Funktionsparameter oder einem Befehlszeilenargument sind zulässig, eine Hardcodierung ist jedoch nicht zulässig.
- Standardlücken verboten.
- Ausgabe kann Funktionsrückgabewert, STDOUT, STDERR usw. sein.
- Nachgestellte Leerzeichen / Zeilenumbrüche / Tabulatoren in der Ausgabe sind zulässig.
- Irgendwelche Fragen? Kommentiere unten!
Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes!
["John", "Jacob", "Jingleheimer", "Schmidt"]
->["Jacob", "Jingleheimer"]
eine gültige Lösung?Antworten:
Jolf, 1 Byte
Ruft das Innere der Eingabe ab. Probieren Sie es hier aus!
quelle
Ohm , 2 Bytes (CP437)
Akzeptiert eine Liste von Zeichenfolgen und gibt sie zurück.
Erläuterung:
quelle
Vim,
65 BytesProbieren Sie es online!
(Ausgaben mit einem Leerzeichen am Ende)
Da Vim mit V abwärtskompatibel ist, habe ich einen TIO-Link für V hinzugefügt.
Erläuterung
quelle
dWWD
Spart Ihnen ein Byte.dW
löscht bis zum Leerzeichen.dw
löscht bis Nicht-Wortzeichen.Python , 24 Bytes
Probieren Sie es online aus!
Eingabeformat: Zeichenfolge
Python 2 , 16 Bytes
Probieren Sie es online Listeneingabe!
Eingabeformat: Liste
quelle
Python
anstattPython 2
, weil es auch funktioniertPython 3
, wollte das gerade posten.must be a string
hat und das Eingabeformat eine Liste sein darf, kann das Drucken einer Liste nicht als falsches Ergebnis gewertet werden !lambda n:n[1:-1]
input()
(nur Python 3) ersetzenBrain-Flak , 133 Bytes
Probieren Sie es online!
132 Byte Code plus 1 Byte für das
-c
Flag, das ASCII-Ein- und Ausgabe ermöglicht.Leider enthält es viele doppelte Codes, aber es wäre wirklich schwierig, sie wiederzuverwenden. Ich werde es später untersuchen. Hier ist eine Erklärung:
quelle
05AB1E , 2 Bytes
Probieren Sie es online!
Wenn die Ausgabe einer Liste mit Zweitnamen nicht zulässig ist, ändere ich sie.
quelle
Haskell,
23,179 BytesNimmt und gibt eine Liste von Zeichenfolgen zurück. Probieren Sie es online!
Erste Zeichenfolge löschen, letzte Zeichenfolge löschen.
Edit: @Generic Display Name merkt an, dass die Eingabe eine Liste von Zeichenketten sein kann, die 6 Bytes spart.
Edit II: Liste der Zeichenfolgen anstelle einer einzelnen Zeichenfolge zurückgeben
quelle
unwords.
für -8 Byte fallen.Mathematica, 10 Bytes
Eine unbenannte Funktion, die eine Liste von Zeichenfolgen akzeptiert und zurückgibt.
Rest
verwirft das letzte Element,Most
verwirft das erste Element,@*
ist Funktionszusammensetzung. Das VertauschenRest
und /Most
oder Verwenden der richtigen Komposition/*
würde ebenfalls funktionieren. Dies übertrifft die Indizierung#[[2;;-2]]&
um ein Byte.quelle
Brain-Flak , 86 Bytes
Probieren Sie es online!
Der größte Teil dieses Codes stammt aus dieser Antwort . Wenn Sie meine Lösung mögen, sollten Sie auch diese positiv bewerten.
quelle
Java 7, 74 Bytes
Java 8, 49 Bytes
Funktion, die das erste Vorkommen des Leerzeichens und das letzte identifiziert und die Mitte extrahiert. Der resultierenden Zeichenfolge wird ein Leerzeichen vorangestellt (zum Zeitpunkt der Veröffentlichung hat OP nicht geklärt, ob führende Leerzeichen zulässig sind), das durch Hinzufügen
.trim()
des Codes zu einem Aufpreis von 7 Byte beseitigt werden kann .Im Vergleich zu C # hat Java den Vorteil, dass der Endindex anstelle der Länge der Teilzeichenfolge angegeben wird, wodurch die Byteanzahl verringert wird.
quelle
JavaScript (ES6), 22 Byte
Nimmt eine Reihe von Zeichenfolgen auf und gibt sie aus.
Testfälle
Code-Snippet anzeigen
String-Version (27 Bytes)
Nimmt einen String und gibt ihn aus. Die Ausgabezeichenfolge ist entweder ein einzelnes Leerzeichen, wenn kein zweiter Vorname gefunden wurde, oder der zweite Vorname mit führenden und nachfolgenden Leerzeichen.
Code-Snippet anzeigen
quelle
/./.exec.bind(/ .* /)
scheint # 2 zu imitieren, außernull
für keineAWK ,
1710 Bytes7 Bytes gespart dank @steve!
Probieren Sie es online!
Erläuterung:
quelle
$NF=$1="";1
$NF=$1=x;1
1
? Ich bin nicht so gut in AWK :)Groovy , 19 Bytes
Erläuterung:
Eine Schließung / anonyme Funktion
quelle
.split()
?PHP, 37 Bytes
-4 Bytes für eine Ausgabe als Array
PHP, 42 Bytes
PHP, 50 Bytes
quelle
Retina , 11 Bytes
Probieren Sie es online!
Stimmt mit dem ersten Wort (einschließlich des Leerzeichens danach) und dem letzten Wort überein und entfernt beide.
Wenn E / A eine durch Zeilenvorschub getrennte Liste sein kann, kann dies stattdessen in 8 Bytes erfolgen:
Probieren Sie es online!
quelle
Perl 5 ,
2718 BytesMuss mit
-n
Option ausgeführt werden.Probieren Sie es online!
Wollte etwas Ähnliches zuerst in sed machen, aber leider unterstützt es nicht-gierige Quantifizierer nicht.
Es wird benötigt, wenn der zweite Vorname mehr als ein Wort enthält.Bearbeiten
-9 Bytes dank Dada .
Nicht-gierige Quantifizierer werden unter anderem nicht mehr benötigt.
quelle
/ (.+) /&&print$1
sollte sorter sein. Es ist großartig, neue Leute beim Golfen mit Perl zu sehen!print if s| (.+) |\1|
nicht funktioniert? Für mich sieht es ähnlich aus wie das, was Sie geschrieben haben.print if s| (.+) |\1|
ersetzt den Mittelteil durch ... den Mittelteil! (abzüglich der Leerzeichen davor und danach), damit es nicht funktioniert. Auf der anderen Seite stimmt das , was ich vorgeschlagen habe, nur mit dem mittleren Teil überein und druckt nur diesen ($1
).Javascript (ES6)
4916 BytesBearbeiten:
Probieren Sie es online!
ungolfed:
Ich habe einige der einfachen Eigenschaften von vergessen
slice
, und dass die Eingabe ein Array sein kann. Dank @Neil und @ fəˈnəˈtɛk konnte ich 27 Bytes entfernen. Immer noch nicht wirklich konkurrierend.Original:
Dies ist nicht wirklich konkurrierend, aber hier ist eine Javascript-Lösung:
Dies erzeugt eine anonyme Funktion, die gleich ist mit:
Wie ich es gespielt habe
Dies ist ein ziemlich einfaches Golfspiel. Ich habe die Funktion in eine Pfeilfunktion umgewandelt . Dann habe ich den Code "verkleinert". Dies beinhaltete das Umbenennen
name
in ein einzelnes Zeichen (a
in diesem Fall) und das Entfernen deslet
Deklaration der Variablen.Ausschnitt
Code-Snippet anzeigen
Hoffe, das hilft jedem, der sich der Herausforderung stellt.
quelle
length -
ist unnötig, daslice
negative Längen bereits als relativ zum Ende akzeptiert werden. Dies bedeutet, dass Sie die Zwischenvariable nicht mehr benötigen, sodass Sie Ihre Pfeilfunktion von einem Block in einen Ausdruck umwandeln können.-1
es das vorletzte ist, das Sie hier brauchen.Röda , 9 Bytes
Probieren Sie es online!
Keine sehr interessante Lösung. Nimmt eine Liste aus dem Stream und gibt die zweiten Vornamen zurück.
21 Bytes und I / O:
Probieren Sie es online!
Dies verwendet
/
(split) und&
(join).quelle
Gelee , 2 Bytes
Probieren Sie es online!
Dies funktioniert als Nicht-Inline-Link (dh Funktion), nicht als vollständiges Programm.
'John','Jacob','Jingleheimer','Schmidt'
→'Jacob','Jingleheimer'
Als vollständiges Programm wären es 3 Bytes
ḊṖK
:, die einen durch Leerzeichen getrennten zweiten Vornamen ausgeben.quelle
Pyth, 2 Bytes
Online-Dolmetscher
quelle
C #, 67 Bytes
Anonyme Funktion, die das erste Vorkommen des Leerzeichens und das letzte identifiziert und die Mitte extrahiert. Es extrahiert auch einen nachfolgenden Speicherplatz, der auf Kosten von 2 Byte entfernt werden kann.
Volles Programm mit Testfällen:
quelle
Kotlin , 39 Bytes
Probieren Sie es online!
dh
quelle
VBA, 69 Bytes
quelle
R
30,2722 BytesAktuelle Lösung durch user11599!
Übernimmt die Eingabe von stdin und gibt jeden zweiten Vornamen als separate Zeichenfolge zurück. Gibt
character()
zurück, wenn kein zweiter Vorname angegeben ist. das heißt, ein Vektor der Klassecharacter
der Länge0
.Erläuterung:
Lies stdin in eine Liste von Strings, die durch Leerzeichen getrennt sind
Entfernen Sie das letzte Element.
head
Gibt die erstenn
Elemente einer Liste zurück, wobei dern
Standardwert "" ist6
. Wennn
ist-1
, werden alle Elemente bis auf das letzte zurückgegeben.Entfernen Sie nun das erste Element dieser Liste.
Dies ergibt den zweiten Vornamen.
quelle
head()
und gespielttail()
, aber ich wusste nicht, dass Sie als zweites Argument eine negative Zahl übergeben können. Nett!Ruby,
2413 Bytes11 Bytes gespart dank Piccolo, der darauf hinweist, dass eine Array-ähnliche Ausgabe zulässig ist.
Nimmt den Namen als separates Kommandozeilenargument, zB:
oder
Vorheriger Code (gibt eine richtige Zeichenfolge aus):
quelle
$><<ARGV[1..-2].join" "
beschwert es sich über das" "
Unerwartete, also müsste ich Klammern hinzufügen - was am Ende 1 Byte hinzufügen würde.puts ARGV[1..-2]
, damit Sie es wissen.p ARGV[1..-2]
für 13 Bytes - sieht einfach nicht aus wie die Ausgabe in OPs HerausforderungGolang ,
15281 BytesDie Eingabe erfolgt als "Samantha Vee Hills" (mit doppelten Anführungszeichen) und der zweite Vorname wird an die Standardausgabe zurückgegeben.
Probieren Sie es online!
Edit: @Dada, beachte, dass die "Funktion als Antwort erlaubt" meinen Code um 71 Bytes verkürzt. ein großes Dankeschön!
quelle
Matlab,
81,79,78, 55 BytesÜbernimmt eine Eingabezeichenfolge,
s
, wird (durch das Standardtrennzeichen, Whitespace-Zeichen) in ein Zellenarray aufgeteilt, von dem aus auf das mittlere Element zugegriffen wird. Dann werden die mittleren Elemente verkettet oder es wird eine leere Zeichenfolge zurückgegeben.Edit: Danke an Luis Mendo für das Speichern von 3 Bytes!
Edit 2: Bessere Lösung von Ankit!
quelle
nnz
für ein Zellenarray verwenden, aber ich habe die anderen beiden Änderungen vorgenommen :)function x=a(s) s=strsplit(s);x=strjoin(s(2:end-1));end
C, 42 Bytes
Der Parameter ist ein mit NULL abgeschlossenes Array von Zeigern auf char.
Sehen Sie , wie es hier funktioniert .
Die Befehlszeilenargumente können auch mit derselben Funktion verwendet werden .
C, 51 Bytes
Ein volles Programm. Die Eingabe erfolgt über Befehlszeilenargumente.
Sehen Sie , wie es hier funktioniert .
C 54 Bytes
Der Parameter ist ein In / Out-Parameter.
Sehen Sie , wie es hier funktioniert .
quelle
Python 2,
421916 BytesProbieren Sie es online! Vielen Dank an @Kritixi Lithos für die Einsparung von 23 Bytes! Vielen Dank an @math_junkie für das Speichern von 3 weiteren Bytes. Setzen Sie zur Eingabe jeden Teil des Namens als Zeichenfolge in eine Liste wie folgt:
Und ja, das OP hat eine Liste als gültige Eingabe genehmigt.
Erläuterung
quelle
print input()[1:-1]
ist kürzerlambda n:n[1:-1]
ist noch kürzerSamantha Vee Hills
als Eingabe in repl.it Link, den Sie geteilt haben, wird nur gedruckt,amantha Vee Hill
was definitiv nicht die Ausgabe ist, die benötigt wird.Names will always have at least 2 space-separated parts
Ist der erste Punkt der Frage richtig.C ++, 91 Bytes
Nimmt Eingaben als Referenz auf eine Liste von Zeichenfolgen und ändert die Liste direkt.
Probieren Sie es online!
quelle