Napisz funkcję lub program, który pobiera ciąg znaków i wypisuje prawdziwą wartość, jeśli ciąg znaków jest pangramem (ciąg liter zawierający co najmniej jedną z każdej litery alfabetu angielskiego), a w przeciwnym razie wartość falsey.
Przypadki liter należy zignorować; Jeśli ciąg jest abcdefghijklmnopqrstuvwXYZ
, funkcja powinna nadal zwracać prawdziwą wartość. Zauważ, że ciąg może zawierać dowolne inne znaki, więc 123abcdefghijklm NOPQRSTUVWXYZ321
zwróci prawdziwą wartość. Puste wejście powinno zwrócić wartość falsey.
Przypadki testowe
AbCdEfGhIjKlMnOpQrStUvWxYz
==> True
ACEGIKMOQSUWY
BDFHJLNPRTVXZ
==> True
public static void main(String[] args)
==> False
The quick brown fox jumped over the lazy dogs. BOING BOING BOING
==> True
To jest kod golfowy. Obowiązują standardowe zasady. Najkrótszy kod w bajtach wygrywa.
code-golf
string
decision-problem
Arktur
źródło
źródło
Odpowiedzi:
Pyth, 7 bajtów
Wyjaśnienie:
Wypróbuj pełną program, wersja jednowierszowa tutaj .
źródło
L!-Grb0
.!-Grs.z0
też by działał, ale jest dłuższy.Perl 6 , 20 bajtów
stosowanie:
Użyłem 3-bajtowej „francuskiej” wersji (
⊆
)U+2286 SUBSET OF OR EQUAL TO
operatora zamiast 4-bajtowej wersji „texas” ((<=)
), która również wymagałaby dodatkowego miejsca przed nią.źródło
GS2,
119 bajtówDzięki @MitchSchwartz za grę w golfa z 2 bajtów!
Kod źródłowy używa kodowania CP437. Wypróbuj online!
Jak to działa
źródło
m2
(\xe9
) zapisuje 2 bajty.JavaScript ES6, 51
57Edytuj 6 bajtów, zapisz thx @ user81655
Testowy fragment kodu
źródło
a.replace(/[^A-Z]|[^a-z]/g,'')
czya.replace(/[^A-Z]/gi,'')
zadziała?A
ia
musi stać się tą samą postacią, inaczej zestaw zachowa je jako odrębne, a rozmiar będzie> 26[...a.toUpperCase().replace(/[^A-Z]/g,'')].length>25
?R
50,4639 bajtówEdycja usuwa potrzebę
tolower
dodającignore.case=TRUE
(T
)źródło
ignore.case=TRUE (T)
być również uwzględniany w obliczeniach?T
koniec, dzięki dopasowaniu umiejscowienia argumentów nie trzeba tak naprawdę określać nazwy argumentu (iT
jest to domyślny alias dlaTRUE
). Napisany tutaj kod wykonuje niezbędną akcję bez potrzeby dodawania czegokolwiek.O, 11 bajtów
Wypróbuj online.
Niestety O nie ma ustawionej różnicy: /
Wyjaśnienie
źródło
Julia, 38 bajtów
To proste -
lowercase
dotyczy problemu wielkich / małych liter,'a':'z'
przechowuje wszystkie małe litery,∩
jest przecięciem, usuwa dowolny znak, który nie jest literą, a ponieważ'a':'z'
jest pierwszy, będzie zawierała tylko jedną z każdej litery, która się pojawis
.endof
jest najkrótszym sposobem uzyskania długości wynikowej tablicy, a jeśli jest to 26, to jest to pangram (nie może być większy niż 26 i>25
zapisuje bajt względem==26
).źródło
Python 2,
5351 bajtówAlternatywne rozwiązania:
Dzięki xnor za wskazanie, że zestawy mają
<=
operator, dla alternatywnego 51:źródło
lambda s:set(range(65,91))<=set(map(ord,s.upper()))
dla 51.p=lambda s:{*range(65,91)}<={*map(ord,s.upper())}
. Nawiasem mówiąc, nie mogę znaleźć żadnych zasad określających, czylambda
należy przypisać (jak w twoim pierwszym przypadku), czy nie (jak w późniejszych). Wsparcie?Siatkówka , 22 bajty
Wypróbuj online.
Pierwszy wiersz pasuje do dowolnej litery, która nie pojawia się ponownie w ciągu ciągu. To gwarantuje, że nie dopasujemy każdej litery maksymalnie raz, bez względu na to, jak często występuje. Tryb dopasowania domyślnie zamienia ciąg znaków na liczbę znalezionych dopasowań. Tak więc w drugim etapie dopasowujemy
26
do wyniku pierwszego wkładu, który da albo0
albo1
, w zależności od tego, czy znaleźliśmy maksymalnie 26 dopasowań, czy nie.źródło
Minkolang 0,14 , 18 bajtów
Wypróbuj tutaj.
Wyjaśnienie
źródło
Python 3.5, 47 bajtów
Ta sama zasada, co odpowiedź Mitcha Schwartza , ale przy użyciu ulepszeń PEP 0448 do
*
rozpakowywania, po raz pierwszy wprowadzona w Pythonie 3.5.Ta wersja różni się nieznacznie od tego, co napisałem w moim komentarzu do postu Mitcha, tym, że zamieniam liczby na litery, a nie odwrotnie. To dlatego, że tak napisałem moje oryginalne próby rozwiązania, zanim odkryłem, że nie mogę prześcignąć Mitcha bez wyraźnego skopiowania jego podejścia. Zastanów się więc, czy ulepszyć mój jedyny strzęp oryginalności!
źródło
Ruby,
4133Stosowanie
Dzięki Vasu Adari za uratowanie mi 8 bajtów
źródło
R,
5345 bajtówStara wersja o 53 bajtach:
Stosowanie:
źródło
MATLAB / Octave ,
3533 bajtówWypróbuj online!
Funkcja anonimowa zwraca logiczną 1, jeśli wejściem
x
jest pangram, lub logiczną 0, jeśli nie jest.Zasadniczo wykorzystuje to samo podejście, co rozwiązanie Pyth @ ThomasKwa. Ustawiona różnica między wszystkimi znakami z zakresu wielkich liter (
65:91
) i ciągu wejściowego (konwertowanego na wielkie litery). Wszelkie znaki, które są w alfabecie, ale nie w ciągu wejściowym, są zwracane przezsetdiff
. Tylko jeśli tablica zwrócona przez ustawioną różnicę jest pusta, łańcuch jest pangramem.Użycie wielkich liter zamiast małych pozwala zaoszczędzić kilka bajtów w porównaniu z tym,
'a':'z'
ponieważ zamiast tego można użyć wartości ASCII do utworzenia zakresu.źródło
Haskell ,
59565351 bajtówWypróbuj online!
Wyjaśnienie:
Podaj ciąg wejściowy
s
, dla każdegoa
w zakresie 65 do 90 (kody ASCIIA
doZ
) sprawdza, czy dowolny znak ws
jest równa alboa
(górna liter) luba+32
(dolnego znaku przypadek), przekształca się w postać przeztoEnum
. To generuje listę wartości logicznych.and
sprawdza, czy wszystkie są wszystkieTrue
.Stara wersja:
Dla każdej dużej litery alfabetu sprawdź, czy jakaś litera z
s
wielkich liter jest równa.any(==a)s
jest taki sam,elem a s
ale pozwala modyfikować elementys
przed porównaniem - w tym przypadku zakryj je wielkimi literami.źródło
Japt , 14 bajtów
Wypróbuj online!
Jak to działa
źródło
CJam, 11 bajtów
To jest kompletny program. Wypróbuj online .
Wyjaśnienie:
źródło
JavaScript,
110109999593 bajtówZaoszczędzono 6 bajtów dzięki Thomasowi Kwa, a 10 częściowo dzięki ev3.
źródło
for(i=65;i++<91;)b+=!~a.indexOf(String.fromCharCode(i));alert(!b)
?05AB1E , 4 bajty (prawdopodobnie niekonkurencyjne )
Wypróbuj online!
źródło
2sable ,
65 bajtówWersja 6-bajtowa:
Wypróbuj online!
Wyjaśnienie:
Wersja 5-bajtowa, zainspirowana odpowiedzią 05AB1E firmy carusocomputing :
Wypróbuj online!
Wyjaśnienie:
źródło
Brachylog , 4 bajty
Wypróbuj online!
źródło
TeaScript , 12 bajtów
Pierwszy post od TeaScript, odkąd zabiłem TeaScript: s
Wypróbuj online
Nie golfił
źródło
JavaScript ES6,
124114113 bajtówJestem pewien, że można więcej grać w golfa.
Generuje anonimową funkcję.
źródło
C, 107 bajtów
źródło
ES6, 68 bajtów
Ta struna wygląda okropnie marnotrawczo, ale nie znam lepszego sposobu.
źródło
s=>[...Array(x=9,26)].every(z=>RegExp((++x).toString(36),"i").test(s))
Scala,
594846 bajtówźródło
Bash,
4542 bajtówProgram 41 bajtów plus 1, ponieważ należy go wywołać za pomocą
bash -e
:O dziwo, udało mi się odpowiedzieć na Bash bez znaków cudzysłowu! (tak, sprawdziłem z
-f
danymi wejściowymi zaczynającymi się od i podobnymi).Zakłada to lokalizację, w której małe litery angielskie są ciągłe od
a
doz
. Dane wejściowe są przekazywane przez pierwszy argument programu.Działa to w ten sposób, że dla każdej litery alfabetu
$i
sprawdzamy, czy ciąg zawiera$i
lub jego odpowiednik wielkich liter${i^}
, usuwając wszystkie pozostałe znaki. Jeśli wynikiem tego jest pusty ciąg, wówczas dane wejściowe nie zawierały tej litery, a my kończymy na1
(false). Jeśli otrzymamy niepusty wynik, zdamy test i przejdziemy do następnej litery. Jeśli ciąg wejściowy zawiera każdą literę angielską, dojdziemy do końca programu, kończąc tym samym na0
(prawda).źródło
Perl 5, 33 bajtów
źródło
-pl61e '$i=$_;map$\*=$i=~/$_/i,a..z}{'
.PlatyPar , 14 bajtów
Objaśnienie (funkcja wizualizatora stosu już wkrótce!):
Gdybym miał niedorzeczną funkcję „pchnij wszystkie litery alfabetu”, byłoby to 10 ...
Wypróbuj online !
źródło
Pyke, 6 bajtów
Wypróbuj tutaj!
źródło