Uwaga: Zwycięska odpowiedź zostanie wybrana na dzień 12.12.17 . Aktualnym zwycięzcą jest Jolf, 1 bajt .
Dziwię się, że nie mieliśmy jeszcze wyzwania, jak brzmi moje drugie imię na tej stronie. Dużo szukałem, ale nic nie znalazłem. Jeśli jest to duplikat, oznacz go jako taki.
Twoje wyzwanie
Analizuj ciąg znaków, który wygląda Jo Jean Smith
i zwraca Jean
.
Przypadki testowe
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
(Ten ostatni jest nieprawidłowy technicznie, ale jego naprawa byłaby zbyt trudna.)
Uwagi:
- Nazwy zawsze będą miały co najmniej 2 części oddzielone spacjami, z nieograniczoną liczbą środkowych nazw między nimi lub mogą być listą / tablicą ciągów.
- Nazwy mogą zawierać alfabet (bez rozróżniania wielkości liter) i - (
0x2d
) - Możesz wygenerować końcowy znak nowej linii.
- Możesz potrzebować danych wejściowych, aby mieć końcowy znak nowej linii.
- Dane wejściowe ze STDIN, parametru funkcji lub argumentu wiersza polecenia są dozwolone, ale nie jest dozwolone ich kodowanie na stałe.
- Standardowe luki zabronione.
- Wyjściem może być wartość zwracana przez funkcję, STDOUT, STDERR itp.
- Końcowe spacje / znaki nowej linii / tabulatory w danych wyjściowych są dozwolone.
- Jakieś pytania? Komentarz poniżej!
To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach!
["John", "Jacob", "Jingleheimer", "Schmidt"]
->["Jacob", "Jingleheimer"]
prawidłowe rozwiązanie?Odpowiedzi:
Jolf, 1 bajt
Pobiera wnętrze danych wejściowych. Wypróbuj tutaj!
źródło
Om , 2 bajty (CP437)
Akceptuje i zwraca listę ciągów znaków.
Wyjaśnienie:
źródło
Vim,
65 bajtówWypróbuj online!
(wyjścia z końcową spacją)
Ponieważ Vim jest wstecznie kompatybilny z V, dołączyłem łącze TIO dla V.
Wyjaśnienie
źródło
dWWD
oszczędza jeden bajt.dW
usuwa się do spacji.dw
usuwa aż do znaków innych niż słowa.Python , 24 bajty
Spróbuj wpisać ciąg znaków online!
Format wejściowy: ciąg
Python 2 , 16 bajtów
Wypróbuj wprowadzanie listy online!
Format wejściowy: lista
źródło
Python
zamiastPython 2
, ponieważ on również działaPython 3
, właśnie miał to opublikować.must be a string
, a ponieważ formatem wejściowym może być lista, wydrukowanie listy nie może być uważane za zły wynik!lambda n:n[1:-1]
input()
(tylko Python 3)Brain-Flak , 133 bajty
Wypróbuj online!
132 bajty kodu plus 1 bajt dla
-c
flagi, która umożliwia wejście i wyjście ASCII.Niestety zawiera wiele zduplikowanych kodów, ale ponowne użycie byłoby naprawdę trudne. Zajmę się tym później. Oto wyjaśnienie:
źródło
05AB1E , 2 bajty
Wypróbuj online!
Jeśli wyprowadzanie listy drugich imion nie jest dozwolone, zmienię ją.
źródło
Haskell,
23,179 bajtówPobiera i zwraca listę ciągów znaków. Wypróbuj online!
Upuść pierwszy ciąg, upuść ostatni ciąg.
Edycja: @Generic Nazwa wyświetlana zauważyła, że wejściem może być lista ciągów znaków, która pozwoliła zaoszczędzić 6 bajtów.
Edycja II: zwraca listę ciągów zamiast pojedynczego ciągu
źródło
unwords.
-8 bajtów.Mathematica, 10 bajtów
Nienazwana funkcja, która przyjmuje i zwraca listę ciągów znaków.
Rest
odrzuca ostatni element,Most
odrzuca pierwszy element,@*
jest składnikiem funkcji. Działa również zamianaRest
i /Most
lub użycie właściwej kompozycji/*
. To bije indeksowanie#[[2;;-2]]&
o jeden bajt.źródło
Brain-Flak , 86 bajtów
Wypróbuj online!
Większość tego kodu pochodzi z tej odpowiedzi . Jeśli podoba ci się moje rozwiązanie, również go poprzyj.
źródło
Java 7, 74 bajty
Java 8, 49 bajtów
Funkcja, która identyfikuje pierwsze wystąpienie znaku spacji i ostatnią i wyodrębnia środek. Powstały ciąg jest poprzedzony znakiem spacji (w momencie księgowania OP nie wyjaśnił, czy dozwolone są spacje wiodące), co można wyeliminować przez dodanie
.trim()
do kodu dodatkowy koszt 7 bajtów.W porównaniu do C #, Java ma tę zaletę, że określa indeks końcowy zamiast długości podciągu, co zmniejsza liczbę bajtów.
źródło
JavaScript (ES6), 22 bajty
Pobiera i wyświetla tablicę ciągów.
Przypadki testowe
Pokaż fragment kodu
Wersja łańcuchowa (27 bajtów)
Bierze i wysyła ciąg. Łańcuch wyjściowy jest albo pojedynczą spacją, jeśli nie znaleziono drugiego imienia, albo imionami środkowymi ze spacjami wiodącymi i końcowymi.
Pokaż fragment kodu
źródło
/./.exec.bind(/ .* /)
zdaje się naśladować # 2, z wyjątkiemnull
żadnegoAWK ,
1710 bajtówZaoszczędź 7 bajtów dzięki @steve!
Wypróbuj online!
Wyjaśnienie:
źródło
$NF=$1="";1
$NF=$1=x;1
1
? Nie jestem zbyt dobry w AWK :)Groovy , 19 bajtów
Wyjaśnienie:
Funkcja zamknięcia / anonimowości
źródło
.split()
?PHP, 37 bajtów
-4 bajty dla wyjścia w postaci tablicy
PHP, 42 bajty
PHP, 50 bajtów
źródło
Siatkówka , 11 bajtów
Wypróbuj online!
Dopasowuje pierwsze słowo (w tym spację po nim) i ostatnie słowo i usuwa oba z nich.
Jeśli I / O może być listą oddzieloną od linii, można to zrobić zamiast 8 bajtów:
Wypróbuj online!
źródło
Perl 5 ,
2718 bajtówMusisz uruchomić z
-n
opcją.Wypróbuj online!
Chciałem najpierw zrobić coś podobnego w sed, ale niestety nie obsługuje on nie chciwego kwantyfikatora.
Jest potrzebny, jeśli drugie imię to więcej niż jedno słowo.Edytować
-9 bajtów dzięki Dadzie .
Nie chciwy kwantyfikator nie jest już potrzebny, między innymi z innymi rzeczami.
źródło
/ (.+) /&&print$1
powinien być lepszy. Wspaniale jest zobaczyć nowych ludzi grających w golfa z Perlem!print if s| (.+) |\1|
nie działa? Dla mnie wygląda podobnie do tego, co napisałeś.print if s| (.+) |\1|
zamienia środkową część na ... środkową część! (minus spacje przed i po), więc to nie działa. Z drugiej strony to, co zasugerowałem, pasuje tylko do środkowej części i wypisuję tylko to ($1
).JavaScript (ES6)
4916 bajtówEdytować:
Wypróbuj online!
bez golfa:
Zapomniałem niektórych prostych właściwości
slice
i że dane wejściowe mogą być tablicą. Dzięki @Neil i @ fəˈnɛtɪk udało mi się usunąć 27 bajtów. Wciąż mało konkurencyjny.Oryginalny:
To nie jest tak naprawdę konkurencyjne, ale oto rozwiązanie JavaScript:
To tworzy anonimową funkcję równą:
Jak to grałem w golfa
To całkiem prosty golf. Przekształciłem funkcję w funkcję strzałki . Następnie „zminimalizowałem” kod. Obejmowało to zmianę nazwy
name
na pojedynczy znak (a
w tym przypadku) i usunięcielet
odbarwienia zmiennej.Skrawek
Pokaż fragment kodu
Mam nadzieję, że pomoże to każdemu, kto utknął na wyzwaniu.
źródło
length -
to niepotrzebne, ponieważslice
już przyjmuje ujemne długości w stosunku do końca. Oznacza to, że nie potrzebujesz już zmiennej pośredniej, więc możesz zmienić funkcję strzałki z bloku na wyrażenie.-1
jest to przedostatni, którego potrzebujesz tutaj.Röda , 9 bajtów
Wypróbuj online!
Niezbyt interesujące rozwiązanie. Pobiera listę ze strumienia i zwraca drugie imiona.
21 bajtów i we / wy:
Wypróbuj online!
Używa
/
(dzielenia) i&
(przyłączania).źródło
Galaretka , 2 bajty
Wypróbuj online!
Działa to jako nieliniowy link (tj. Funkcja), a nie pełny program.
'John','Jacob','Jingleheimer','Schmidt'
→'Jacob','Jingleheimer'
Jako pełny program będzie to 3 bajty:,
ḊṖK
które wypisuje drugie imię oddzielone spacją.źródło
Pyth, 2 bajty
Tłumacz online
źródło
C #, 67 bajtów
Anonimowa funkcja, która identyfikuje pierwsze wystąpienie znaku spacji i ostatnią i wyodrębnia środek. Wyodrębnia również końcowe miejsce, które można usunąć kosztem 2 bajtów.
Pełny program z przypadkami testowymi:
źródło
Kotlin , 39 bajtów
Wypróbuj online!
to znaczy
źródło
VBA, 69 bajtów
źródło
R,
302722 bajtówAktualne rozwiązanie dla użytkownika11599!
Pobiera dane wejściowe ze standardowego wejścia, zwraca każde drugie imię jako osobny ciąg. Zwraca
character()
w przypadku braku drugiego imienia; to jest wektor klasycharacter
długości0
.Wyjaśnienie:
Wczytaj stdin w listę ciągów znaków, oddzielonych spacjami
Usuń ostatni element.
head
zwraca pierwszen
elementy listy, zn
domyślną wartością6
. Jeślin
jest-1
zwracane wszystkie oprócz ostatniego elementu.Teraz usuń pierwszy element z tej listy.
Daje to drugie imię (imiona).
źródło
head()
itail()
, ale nie wiedziałem, że możesz podać liczbę ujemną jako drugi argument. Miły!Rubin,
2413 bajtówZapisano 11 bajtów dzięki Piccolo wskazującemu, że dane wyjściowe podobne do tablicy są dozwolone.
Traktuje nazwę jako osobne argumenty wiersza poleceń, np .:
lub
Poprzedni kod (wyświetla prawidłowy ciąg):
źródło
$><<ARGV[1..-2].join" "
tym narzeka na" "
to, że jest nieoczekiwany, więc musiałbym dodać nawiasy - które w końcu dodałyby 1 bajt.puts ARGV[1..-2]
, żebyś wiedział.p ARGV[1..-2]
na 13 bajtów - po prostu nie przypomina wyjścia w wyzwaniu POGolang ,
15281 bajtówPobiera dane wejściowe jako „Samantha Vee Hills” (z podwójnymi cudzysłowami) i zwraca drugie imię na standardowe wyjście.
Wypróbuj online!
Edycja: @Dada, zauważ, że „funkcja jako odpowiedź jest dozwolona” skraca mój kod 71 bajtów. wielkie dzięki!
źródło
Matlab,
81,79,78, 55 bajtówPobiera ciąg wejściowy,
s
, jest dzielony (przez domyślny separator, biały znak) na tablicę komórkową, z której można uzyskać dostęp do środkowego elementu. Następnie środkowe elementy są łączone lub zwracany jest pusty ciąg.Edycja: podziękowania dla Luisa Mendo za zapisanie 3 bajtów!
Edycja 2: Lepsze rozwiązanie z Ankit!
źródło
nnz
na tablicy komórek, ale ja zrobiłem dwie pozostałe zmiany :)function x=a(s) s=strsplit(s);x=strjoin(s(2:end-1));end
C, 42 bajty
Ten parametr to tablica wskaźników zakończonych znakiem NULL na char.
Zobacz, jak to działa tutaj .
Argumentów wiersza poleceń można również używać z tą samą funkcją .
C, 51 bajtów
Pełny program. Wprowadzanie odbywa się za pomocą argumentów wiersza poleceń.
Zobacz, jak to działa tutaj .
C, 54 bajty
Ten parametr jest parametrem wejścia / wyjścia.
Zobacz, jak to działa tutaj .
źródło
Python 2,
421916 bajtówWypróbuj online! Dzięki @Kritixi Lithos za oszczędność 23 bajtów! Dzięki @math_junkie za oszczędność 3 dodatkowych bajtów. W celu wprowadzenia umieść każdą część nazwy jako ciąg na liście w taki sposób:
I tak, PO zatwierdził listę jako prawidłowy wkład.
Wyjaśnienie
źródło
print input()[1:-1]
jest krótszylambda n:n[1:-1]
jest jeszcze krótszySamantha Vee Hills
udostępnionym przez ciebie linkiem do repl.it, to po prostu drukuje,amantha Vee Hill
co zdecydowanie nie jest wymagane.Names will always have at least 2 space-separated parts
jest pierwszym punktem właściwego pytania.C ++, 91 bajtów
Pobiera dane wejściowe jako odniesienie do listy ciągów i bezpośrednio modyfikuje listę.
Wypróbuj online!
źródło