W tym wyzwaniu golfowym zweryfikujesz hashtagi!
#What_your_code_should_do
Dane wejściowe to ciąg znaków. Podaj prawdziwą wartość, jeśli jest to poprawny hashtag, aw przeciwnym razie wartość fałsz.
Zdefiniujemy ciąg jako prawidłowy Hashtag, jeśli ...
- Zaczyna się od hash (
#
). - Nie ma numeru zaraz po hasztagu (np
#2016USElection
Nie jest poprawnym hashtagiem). - Nie ma żadnych „znaków specjalnych” (tj. Żadnego znaku, który nie jest alfabetem, podkreśleniem (
_
) ani liczbą).
Możesz założyć, że dane wejściowe zawierają tylko znaki ASCII. (Byłoby niesprawiedliwe, gdybyśmy również zrobili Unicode).
#Rules
Obowiązują podstawowe zasady gry w golfa .
# Przykłady
Prawda:
#
#e
#_ABC
#thisisanunexpectedlylongstringxoxoxoxo
#USElection2016
Falsy:
Hello, World!
#12thBday
#not-valid
#alsoNotValid!
#!not_a_hash
code-golf
string
decision-problem
Laikoni
źródło
źródło
#
naprawdę ważny hashtag?#öäü
ważny?#
nie jest poprawnym hashtagiem dla żadnego systemu, Facebooka lub Twittera, łamie również ustalone zasady, również nie jestem pewien, czy #_ABC jest na nich ponownie ważny, ale nie jestem tego pewien.an alphabet
oznacza ascii wielkie czy małe litery? tj.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
?Odpowiedzi:
Siatkówka , 12 bajtów
Drukuje
1
na hashtagi i w0
inny sposób.Wypróbuj online! (Pierwszy wiersz włącza pakiet testowy oddzielony od linii).
Niewiele tu wyjaśnić, to jest całkiem dosłowna realizacja definicji:
^
a$
to tylko kotwice zapewniające pokrywy mecz cały ciąg,#
sprawdza, czy uruchamia ciąg z#
,(?!\d)
zapewnia, że następny znak nie jest cyfrą (bez postępu pozycja silnika wyrażenia regularnego),\w*
sprawdza czy możemy dotrzeć do końca ciągu zerowego lub więcej liter, cyfr lub znaków podkreślenia.Domyślnie Retina zlicza liczbę dopasowań podanego wyrażenia regularnego, dlatego daje to
1
prawidłowe tagi skrótu i0
inne.źródło
(?!\d)
jest(?=\D)
... ale nie wiem jak napisałeś Retina. Czy to możliwe, że możesz użyć(?\D)
bez=
i zapisać bajt? (Jeśli nie, to czy warto edytować język, aby było to wykonalne?)(?!\d)
różni się od(?=\D)
tym, że ten ostatni wymaga jakiś znak po bieżącej pozycji, podczas gdy pierwsza jest zadowolony z końca łańcucha. Niezależnie od tego, dostosowanie smaku wyrażeń regularnych nie jest obecnie możliwe (ponieważ po prostu przekazuję je wyrażeniom silnikowi wyrażeń regularnych .NET), ale wprowadzanie takich zmian znajduje się w mapie drogowej gdzieś (bardzo daleko).=
opcję opcjonalną. Cała(?...)
składnia została wybrana ze względu na rozszerzalność, ponieważ znak po znaku?
nigdy nie jest opcjonalny i określa, jaki to rodzaj grupy, i nie sądzę, żebym chciał zrezygnować z tej rozszerzalności.(?{
i(??
i(?<
(zarówno do fotografowania grup i dla lookbehind) i(?-
i(?1
i oczywiście podstawowym(?:
. I może trochę tęskniłem.Perl, 22 bajty
21 bajtów kodu +1 dla
-p
Wyświetla 1, jeśli jest to poprawny hashtag, w przeciwnym razie pusty ciąg.
Stosowanie
Zaoszczędzono 2 bajty dzięki za Martina Endera (i kolejne 4 za pomocą jego metody wyszukiwania )
Perl, 18 bajtów
17 bajtów kod +1 dla
-p
Korzystając z wyglądu Martina, może to być znacznie krótsze!
źródło
JavaScript (ES6), 25 bajtów
źródło
C, 80 bajtów
Funkcja
f()
przyjmuje ciąg jako argument i zmieniaint *b
się na 1 lub 0, aby wskazać wartość prawda / fałsz.Jeśli ciąg ma zawsze co najmniej jeden znak (tzn. Nigdy nie jest pusty), bajt można zgolić dla 79 bajtów:
źródło
Python 3, 41 bajtów
źródło
None
mają falsey, myślę, że upuszczeniebool()
jest w porządku.re.compile('#(?!\d)\w*$').match
? Dopuszczalne jest upuszczenief=
BTW.Brachylog , 55 bajtów
To nie używa wyrażenia regularnego.
Wyjaśnienie
źródło
Python 3,
10393 bajty#
samopoczucieTrue
zabiła mnie tutaj, musiałem wymienić łańcuch, aby uniknąć błędu indeksu na wejście pojedynczego znaku.źródło
isalpha()
metody na mojej odpowiedzi py3: D "#" będąc prawdą, również mnie zniszczyło.PowerShell v2 +, 25 bajtów
Za pomocą wyrażenia regularnego Martina , po prostu opakowane w
-match
operator PowerShell w połączeniu z danymi wejściowymi$args
. W przypadku wartości true / falsey spowoduje to zwrócenie samego łańcucha w dopasowaniu (wartość true) lub brak wartości w przypadku niezgodności (wartość falsey). Jest tak, ponieważ gdy operator porównania zostanie zastosowany do tablicy, zwraca wszystko , co spełnia ten operator.Kilka przykładów (zapakowanych w
[bool]
rzut, aby uzyskać wyraźniejszy wynik):źródło
Mathematica,
524643 bajtyZapisano
69 bajtów dzięki @MartinEnder .Funkcjonować. Pobiera ciąg jako dane wejściowe i zwraca
True
lubFalse
dane wyjściowe. Całkiem proste, po prostu pasuje do wyrażenia regularnego/#(?!\d)\w*/
.źródło
hello#world
ponieważ nie masz początku i końca kotwicy ciągów. Nie znam jednak Mathematiki, więc nie jestem pewien.Dyalog APL ,
2220 bajtówBez RegEx:
-2 dzięki ngn
źródło
Python 2, 79 bajtów
Pierwsza próba golfa. Wersja bez golfa:
źródło
Oktawa,
37565443 bajtyDzięki @LuisMendo za usunięcie 8 bajtów!
Niezbyt golfowy, ale bardzo zbudowany-inny.
Edycja: oryginalny kod zaakceptował ciągi bez wiodącego „#”. Chyba powinienem był trzymać się wyrażenia regularnego.
Zestaw testowy na ideone .
źródło
Python3 -
156128 bajtówRozwiązanie, które nie używa wyrażenia regularnego. 0 to falsey, a każda inna wartość jest prawdziwa.
Dzięki @LeakyNun za oszczędność bajtów!
źródło
+0
późniejn[1:]
, ale niestety nadal nie działało: / Dałem fałsz „#d”.+0
ale kończy się niepowodzeniem na „#d”. Testowałem to jednak na Python3. Nie jestem pewien, czy zadziała na Python2IndexOutOfRange
dla „#” iFalse
„#d”.lambda n:n=="#"or(n[0]=="#")*all(any([47<ord(c)<58,64<ord(c)<91,ord(c)==95,96<ord(c)<123])for c in n[1:]+"0")*~(47<ord(n[1])<58)
dla 128 bajtów. Dowód, że to działaLua,
595554 bajtówKod
Jak to działa:
#
.Pobiera dane z wiersza poleceń. Drukuje,
true
jeśli ciąg jest poprawnym hashtagiem, w przeciwnym razie drukujenil
.źródło
Arkusze Google, 30 bajtów
Anonimowa funkcja arkusza, która pobiera dane z komórki,
A1
sprawdza je względem wyrażenia RE2 i przekazuje wynik do komórki wywołującej.źródło
05AB1E , 18 bajtów
Kod:
Wykorzystuje kodowanie CP-1252 . Wypróbuj online! .
źródło
Sed 19 + 2 = 21 bajtów
To odfiltrowuje wszystkie nie-hashtagi i wyświetla prawidłowe hashtagi.
Uruchom jako
sed -rn "/^#$|^#[a-z]\w*$/Ip"
. Wyjdź z Ctrl+ D(wyślij EOF).źródło
GNU grep, 15 + 2 = 17 bajtów
Test:
Wydajność:
źródło
Python 3, 97 bajtów
70 bajtów 56 bajtów(Kod zmieniony)
Czytelny dla człowiekaźródło
lambda x:all(True==[x[0]=="#",x[1].isalpha(),x[2:].isalpha()])
isalpha
?Pyke, 19 bajtów
Wypróbuj tutaj!
Szybka poprawka na dzisiejszy wieczór
źródło
#123
wciąż zwraca nic, czy nie powinno zwrócić 0?Rubin, 16 +
31 (n
flaga) =1917 bajtówUżywa
0
jako prawdy inil
fałszu.Uruchom jako
ruby -ne 'p~/^#(?!\d)\w*$/'
. Dzięki @manatwork za naprawienie błędu bash podczas uruchamiania programu.źródło
!
, patrz Designators in Event bash.)Standard ML ,
121118107 bajtówWypróbuj online! Funkcjonalne rozwiązanie bez użycia wyrażenia regularnego. Deklaruje anonimową funkcję, która jest powiązana z niejawnym identyfikatorem wyniku
it
.źródło
isAlphaNum$orelse
to raczej groźne ...orelse
iandalso
.AlphaNum
,orelse
!! (orelse what?
)o explode
koniec też jest dość groźny ...Excel VBA, 54 bajty
Anonimowa funkcja bezpośredniego okna VBE, która pobiera dane z komórki
[A1]
, sprawdza, czy wartość komórki jest zgodna zLike
wzorcem, i wysyła dane jakBoolean
do bezpośredniego okna VBEźródło
Haskell , 79 bajtów
Wypróbuj online!
źródło
C #, 92 bajty
C # lambda (
Predicate
) gdzie wejście tostring
a wyjście tobool
.Wypróbuj online!
źródło
Lua, 39 bajtów
Prosta kopia opisu meczu. Powoduje fałsz
nil
jeśli nie hashtag, w przeciwnym razie wyprowadza hashtag.Można skrócić o jeszcze jeden bajt, używając,
find
jeśli wypisywanie listy dwóch wartości (co jest prawdą) nie łamie reguł.źródło
#
samego.#
jest hashtagiem na Twitterze czy Facebooku, nie ma znaczenia dla tego wyzwania. Specyfikacja jasno określa fakt, że#
do celów tego wyzwania należy uznać hashtag. I chociaż nie sprawdziłem wszystkich odpowiedzi, wszystko, co sprawdziłem , akceptuję#
jako hashtag, więc nie jestem pewien, które najlepsze odpowiedzi masz na myśli.Clojure,
130135132 bajtów+5 bajtów, aby poradzić sobie z NPE, które miało miejsce, gdy łańcuch składał się tylko z hasztagu.
-2 bajty przy użyciu
Character/isLetterOrDigit
.Nie golfowany:
źródło
Java 8,
575428 bajtówPort Retina odpowiada portowi Martina Endera, aby zapisać kilka bajtów i dopasować dodane przypadki testowe.
Nie
String#matches
zawsze pasuje do całego ciągu, więc nie ma takiej potrzeby^...$
.Wypróbuj tutaj.
źródło