Jest to podobne do tworzenia akronimu , ale istnieje kilka kluczowych różnic, w tym metoda pobierania akronimu, a wyzwanie to obejmuje elastyczną produkcję.
Zadanie
Biorąc pod uwagę ciąg znaków (dozwolona jest lista znaków / długość 1 ciągów znaków) zawierający tylko drukowalne ASCII, wypisz na wejściu wszystkie wielkie litery poprzedzone spacją lub myślnikiem albo pierwszy znak na wejściu. Pusty ciąg znaków jest niezdefiniowanym zachowaniem.
Przypadki testowe:
Wyjście może być w formie "TEST"
, ["T","E","S","T"]
albo cokolwiek innego działa dla Ciebie.
Self-contained Underwater Breathing Apparatus
SUBA
a Programming Language
PL
NATO Atlantic TREATY Organization
NATO
DEFCON 2
D
hello, world!
light-Emitting dioDe
E
What Does the Fox Say?
WDFS
3D mov-Ies
I
laugh-Out Lou-D
OLD
Best friends FOREVE-r
BF
--
<space>
-- --a - - --
-- -- - - -- A
A
Step-Hen@Gmail-Mail Mail.CoM m
SHMM
To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
[email protected]
.Odpowiedzi:
V , 7 bajtów
Wypróbuj online!
Oto zrzut heksowy, który potwierdza liczbę bajtów:
Wyjaśnienie:
Jest to krótki wszystko dzięki wspaniałej V za kompresji regex .
źródło
-
są dozwolone.R ,
6663 bajtówWypróbuj online!
-3 bajty dzięki Scarabee
Anonimowa funkcja; zwraca akronim jako wektor,
c("N","A","T","O")
który jest drukowany domyślnie.Tym razem nie jest tak źle w R! dzieli na
-
lub(space)
bierze pierwszy element każdego z nich, a następnie zwraca dowolne, które są wielkimi literami (LETTERS
jest to wbudowane R z dużymi literami), w kolejności.źródło
function(s)(s=substr(strsplit(s,' |-')[[1]],1,1))[s%in%LETTERS]
Python 2 ,
5956 bajtów-3 bajty dzięki Lynn
Wypróbuj online!
źródło
'@'<b<'['
, bardzo fajne rozwiązanie +1'@'<b<'['>a in' -'
oszczędza 3 bajty.Javascript 21 bajtów
Pobiera dane wejściowe i wyświetla tablicę ciągów zawierających znaki akronimowe
Wyjaśnienie
To tylko globalne dopasowanie wyrażenia regularnego dla granicy słowa, po której następuje wielka litera.
źródło
Retina ,
2117 bajtówWypróbuj online!
Wyjaśnienie
Wyświetla dopasowania wyrażenia regularnego
(?<=^| |-)[A-Z]
na wejściu, po jednym w wierszu (!
).źródło
Dyalog APL,
2923 bajtówDodatkowy przypadek testowy: język programowania (APL).
Zwraca tablicę znaków (pokazuje jako przestrzeń oddzieloną w TIO).
Wypróbuj online!
Starszy post, 29 bajtów
Wypróbuj online!
W jaki sposób?
'(\w)\w+'⎕R
- zastąp każdą grupę znaków alfabetycznych'\1'
- ze swoją pierwszą postacią~⍨
- usuń każdy znak(⎕AV~⎕A)
- to nie jest duża litera ASCIIźródło
Python, 53 bajty
Wypróbuj online!
Proste wyrażenie regularne z wyczekiwaniem miejsca lub myślnika. Zamiast dopasowywać początek, wstaw spację.
źródło
C #,
8478 bajtówZaoszczędź 6 bajtów dzięki @jkelm .
Wypróbuj online!
Pełna / sformatowana wersja:
źródło
using System.Linq
w liczbie bajtów, jeśliusing System.Collections.Generic
jest zwolniony? Czy istnieje konsensus co do tego, któreusing
można policzyć?using System.Linq;
jest potrzebny do kodu Linq w mojej odpowiedzi. NieIEnumerbale<char>
jest to jednak część odpowiedzi i jest to część kodu, którą należyusing System.Collections.Generic;
skompilować.Julia 0.6.0 (57 bajtów)
Objaśnienie: To mój pierwszy golf. Całkiem prosto. Podziel słowa, wydrukuj pierwszą pierwszą literę każdego z nich.
Prawdopodobnie łatwo to zrobić lepiej, używając wyrażenia regularnego, ale jestem nowy
źródło
05AB1E , 11 bajtów
Wypróbuj online!
źródło
C # (.NET Core) , 108 bajtów
Wypróbuj online!
źródło
if
trójskładnikową może zaoszczędzić bajty. Zaczyna się od indeksu2
zamiast1
, wystarczy zmienić,int i=1
abyint i=0
to naprawić. Poza tym nie sądzę, że możesz tutaj zrobić znacznie więcej.Galaretka ,
1110 bajtów-1 bajt dzięki Erikowi Outgolfer (
Ḳ
dzieli się na spacje> _ <)Monadyczny link pobierający i zwracający listy znaków.
Jako pełny program przyjmuje ciąg znaków i wypisuje wynik.
Wypróbuj online! lub zobacz zestaw testowy .
W jaki sposób?
źródło
Ḳ
zamiastṣ⁶
?Perl 5 , 25 bajtów
24 bajtowy kod + 1 dla
-n
.Irytujące, że
grep -P
obsługuje spojrzenie o zmiennej długości, ale Perl nie :(.-1 bajt dzięki @Dada !
Wypróbuj online! - obejmuje
-l
uruchomienie wszystkich testów jednocześnie.źródło
s///
albo$_=
do negujeprint
...s///
by to rozwiązał, ale to nie jest oczywiste ... Jestem w pracy, może spróbuję później!MATL , 19 bajtów
Wypróbuj online!
źródło
Brachylog ,
252322 bajtówWypróbuj online!
(-2 bajty dzięki @Fatalize.)
źródło
Ṣ
zamiast" "
zapisać dwa bajtyJapt ,
191614 bajtów-2 bajty dzięki Shaggy
Wypróbuj online!
źródło
"(^| |-)%A"
na,/^| |-)\A/
aby zapisać bajtmf\A
->,mÌ
aby zapisać 2 bajty.Swift 5 , 110 bajtów
-5 dzięki Cœur
Szczegółowe wyjaśnienie
import Foundation
- ImportujeFoundation
niezbędny modułzip()
, główny element tego kodu.func f(s:[String]){...}
- Tworzy funkcję z parametrems
, czyli listą ciągów znaków reprezentujących znaki wejścia.for i in zip(s,[" "]+s){...}
- Iteruje zai
pomocą zipu wejścia i wejścia z spacją dodaną na początku, co jest bardzo pomocne w uzyskaniu poprzedniego znaku w ciągu.if
- Sprawdza, czy:i.0==i.0.uppercased()
- Obecny znak jest pisany wielkimi literami,&&"- ".contains(i.1)
- oraz Jeśli poprzedni znak to spacja lub myślnik.Jeśli powyższe warunki są spełnione, to:
print(i.0)
- Znak jest drukowany, ponieważ jest częścią akronimu.źródło
import UIKit
zamiastimport Foundation
.PowerShell , 43 bajty
Wypróbuj online!
Rozwinięty:
źródło
Python 3 , 67 bajtów
Wypróbuj online!
źródło
Python 3 ,
7370 bajtówWypróbuj online!
Wyjaśnienie
lambda n:
- Tworzy anonimową funkcję lambda z parametrem Stringn
.n[x]
- Pobiera znakn
w indeksiex
.for x in range(len(n))
- Iteruje od0
don
, nazywając zmiennąx
.if
- Czeki:'@'<n[x]<'['
- Jeśli znak jest pisany wielkimi literami,and(' '+n)[x]in' -'
- A jeśli poprzedza go spacja lub myślnik w ciągu utworzonym przez spację in
.źródło
i supper
i nie mam pojęcia, dlaczego?.isupper()
, nie mam pojęcia, co czytasz: pJavaScript (SpiderMonkey) , 62 bajty
Wypróbuj online!
źródło
QuadS , 17 bajtów
Wypróbuj online!
źródło
Pyth,
1516 bajtówZestaw testowy
źródło
Pyth, 12 bajtów
Zestaw testowy tutaj.
źródło
Bash (grep),
2928 bajtówPort mojej odpowiedzi w Pythonie, ale ponieważ
pgrep
obsługuje zmienną długość lookhinds, jest zauważalnie krótszy (nawet biorąc pod uwagę obciążenie Pythona). Przyklej przypadki testowe do pliku o nazwiea
, wyjście to 1 znak na linię.-1 dzięki Neil
źródło
^| |-
może być krótszy test?RProgN 2 , 18 bajtów
Wyjaśniono
Wypróbuj online!
źródło
PHP, 62 bajty
Uruchom jako potok z
-nR
lub spróbuj online .inne rozwiązania:
źródło
C ++, 168 bajtów
Dane wyjściowe wykonane za pomocą parametru
źródło
#include<string>
i założenie, że arguments
jeststd::string
?Lua ,
7975 bajtówSpróbuj!
Utknąłem print () przed końcowym końcem w wersji try it, ponieważ w przeciwnym razie jest to bałagan. Ten program doskonale spełnia wymagania I / O i dopasowania, ale bez tej nowej nowej linii jest dość trudny do odczytania.
Dane wejściowe są podawane w postaci tabeli liczb: ciąg, liczba za każdym razem zwiększana o 1 i rozpoczynająca się od 1.
Wyjaśnienie:
To dla pętli przez gmatch każdego ciągu wejściowego. Wyszukiwanie w gmatch wygląda następująco:
[% - | ] - Grupuj, wyszukaj - lub spację
% u - Wyszukaj wielką literę
Następnie dla każdego dopasowania wypisuje go minus poprzedni myślnik lub spację
Edycja: 4 bajty w golfie, usuwając deklarację „a” i dodając spację do wejścia wewnątrz pętli for, a także zmieniając wejście sub na tylko 2 zamiast 2,2 (co daje równoważne wyniki)
źródło
Pyth , 12 bajtów
Utworzono rok po pierwszej odpowiedzi.
Wypróbuj online!
Pyth , 21 bajtów
Wstępna odpowiedź.
Wypróbuj online!
źródło
-|
jest o jeden bajt mniej niż[ -]