Escreva uma função ou programa que tenha como entrada uma sequência e imprima um valor verdadeiro se a sequência for um pangram (uma sequência de letras contendo pelo menos uma de cada letra no alfabeto inglês) e um valor falsey caso contrário.
Letras maiúsculas devem ser ignoradas; Se a sequência for abcdefghijklmnopqrstuvwXYZ
, a função ainda deve retornar um valor verdadeiro. Observe que a string pode conter outros caracteres, portanto 123abcdefghijklm NOPQRSTUVWXYZ321
, retornaria um valor verdadeiro. Uma entrada vazia deve retornar um valor falsey.
Casos de teste
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
Isso é código de golfe. Aplicam-se regras padrão. O menor código em bytes vence.
code-golf
string
decision-problem
Arcturus
fonte
fonte
Respostas:
Pitão, 7 bytes
Explicação:
Experimente a versão completa do programa, aqui .
fonte
L!-Grb0
.!-Grs.z0
também funcionaria, mas é mais longo.Perl 6 , 20 bytes
uso:
Eu usei a versão "francesa" (3
⊆
) doU+2286 SUBSET OF OR EQUAL TO
operador ( ) em vez da versão "texas" (4) da bytes ((<=)
), que também exigiria um espaço extra à sua frente.fonte
GS2,
119 bytesObrigado a @MitchSchwartz por jogar fora 2 bytes!
O código fonte usa a codificação CP437. Experimente online!
Como funciona
fonte
m2
(\xe9
) economiza 2 bytes.JavaScript ES6, 51
57Editar 6 bytes, salvar thx @ user81655
Snippet de teste
fonte
a.replace(/[^A-Z]|[^a-z]/g,'')
oua.replace(/[^A-Z]/gi,'')
trabalho?A
ea
deve tornar-se o mesmo personagem, então o conjunto irá mantê-los como distinto eo tamanho será> 26[...a.toUpperCase().replace(/[^A-Z]/g,'')].length>25
?R
50,4639 bytesEditar elimina a necessidade
tolower
adicionandoignore.case=TRUE
(T
)fonte
ignore.case=TRUE (T)
ser incluído na contagem também?T
o final, graças à correspondência do posicionamento do argumento, não há realmente necessidade de especificar o nome do argumento (eT
é o alias padrãoTRUE
). O código escrito aqui executa a ação necessária como está, sem a necessidade de adicionar nada.O, 11 bytes
Experimente online.
Infelizmente, O não definiu a diferença: /
Explicação
fonte
Julia, 38 bytes
Isso é simples -
lowercase
lida com a questão de letras maiúsculas / minúsculas,'a':'z'
mantém todas as letras minúsculas,∩
é interseção, remove qualquer caractere que não seja uma letra e, como'a':'z'
vem primeiro, terá apenas uma de cada letra que apareces
.endof
é a maneira mais curta de obter o comprimento da matriz resultante e, se for 26, é um pangram (não pode ser superior a 26 e>25
salva um byte em relação a==26
).fonte
Python 2,
5351 bytesSoluções alternativas:
Agradecemos ao xnor por apontar que os conjuntos têm um
<=
operador, por um 51 alternativo:fonte
lambda s:set(range(65,91))<=set(map(ord,s.upper()))
, também para 51.p=lambda s:{*range(65,91)}<={*map(ord,s.upper())}
. A propósito, não consigo encontrar nenhuma regra sobre alambda
necessidade de atribuir uma (como no seu primeiro caso) ou não (como nos seus últimos). Socorro?Retina , 22 bytes
Experimente online.
A primeira linha corresponde a qualquer letra que não apareça mais tarde na sequência. Isso garante que não correspondamos a cada letra no máximo uma vez, não importa com que frequência ela ocorra. Por padrão, o modo de correspondência substitui a sequência pelo número de correspondências encontradas. Portanto, no segundo estágio, comparamos
26
com o resultado da primeira entrada, que fornecerá um0
ou outro1
, dependendo se encontramos o máximo de 26 correspondências ou não.fonte
Minkolang 0.14 , 18 bytes
Experimente aqui.
Explicação
fonte
Python 3.5, 47 bytes
Mesmo princípio que a resposta de Mitch Schwartz , mas usando as melhorias do PEP 0448 para
*
descompactar, introduzido pela primeira vez no Python 3.5.Esta versão difere um pouco do que escrevi no meu comentário no post de Mitch, na medida em que transformo os números em letras em vez de vice-versa. Foi por isso que escrevi minhas tentativas originais de solução, antes de descobrir que não conseguia vencer Mitch sem copiar completamente sua abordagem. Portanto, considere que ajustar meu único pedaço de originalidade restante!
fonte
Ruby,
4133Uso
Obrigado a Vasu Adari por me salvar 8 bytes
fonte
R,
5345 bytesVersão antiga em 53 bytes:
Uso:
fonte
MATLAB / Oitava ,
3533 bytesExperimente online!
A função anônima retorna um lógico 1 se a entrada
x
for um pangram ou um lógico 0 se não for.Essencialmente, ele usa a mesma abordagem que a solução Pyth da @ ThomasKwa. A diferença definida entre todos os caracteres no intervalo de letras maiúsculas (
65:91
) e a sequência de entrada (convertida em maiúsculas). Quaisquer caracteres que estão no alfabeto, mas não na sequência de entrada, são retornados porsetdiff
. Somente se a matriz retornada pela diferença definida estiver vazia a sequência será um pangram.Usar maiúsculas em vez de minúsculas economiza alguns bytes em comparação com
'a':'z'
porque o valor ASCII pode ser usado para fazer o intervalo.fonte
Haskell ,
59565351 bytesExperimente online!
Explicação:
Forneça uma sequência de entrada
s
, para cada um dosa
intervalos de 65 a 90 (os códigos ASCII paraA
toZ
) é verificado se algum caracteres
é igual aa
(o caractere em maiúsculas) oua+32
(o caractere em minúsculas), convertido em um caractere portoEnum
. Isso gera uma lista de booleanos.and
verifica se são todosTrue
.Versão antiga:
Para cada letra maiúscula do alfabeto, verifique se alguma letra
s
maiúscula é igual a ela.any(==a)s
é o mesmo queelem a s
permite modificar os elementoss
anteriores à comparação - nesse caso, oculte-os em maiúsculas.fonte
Japonês , 14 bytes
Experimente online!
Como funciona
fonte
CJam, 11 bytes
Este é um programa completo. Experimente online .
Explicação:
fonte
Javascript,
110109999593 bytesEconomizou 6 bytes graças a Thomas Kwa e 10 graças em parte ao ev3.
fonte
for(i=65;i++<91;)b+=!~a.indexOf(String.fromCharCode(i));alert(!b)
?05AB1E , 4 bytes (provavelmente não concorrente)
Experimente online!
fonte
2sable ,
65 bytesVersão de 6 bytes:
Experimente online!
Explicação:
Versão de 5 bytes, inspirada na resposta 05AB1E da carusocomputing :
Experimente online!
Explicação:
fonte
Braquilog , 4 bytes
Experimente online!
fonte
TeaScript , 12 bytes
Primeira postagem do TeaScript desde que eu matei o TeaScript: p
Experimente online
Ungolfed
fonte
JavaScript ES6,
124114113 bytesTenho certeza que isso pode ser jogado mais.
Gera uma função anônima.
fonte
C, 107 bytes
fonte
ES6, 68 bytes
Essa corda parece terrivelmente inútil, mas não conheço nenhuma maneira melhor.
fonte
s=>[...Array(x=9,26)].every(z=>RegExp((++x).toString(36),"i").test(s))
Scala,
594846 bytesfonte
Bash,
4542 bytesPrograma de 41 bytes, mais 1 porque deve ser chamado com
bash -e
:Surpreendentemente, consegui uma resposta do Bash sem caracteres de aspas! (sim, eu verifiquei com entradas começando com
-f
e afins).Isso pressupõe uma localidade em que as letras em minúsculas em inglês são contíguas de
a
paraz
. A entrada é feita através do primeiro argumento do programa.Assim, para cada letra alfabética
$i
, testamos se a string contém$i
ou seu equivalente em maiúscula${i^}
removendo todos os outros caracteres. Se isso resultar na cadeia vazia, a entrada não continha essa letra e sairemos com1
(false). Se tivermos um resultado não vazio, passamos no teste e passamos para a próxima letra. Se a string de entrada contiver todas as letras em inglês, chegaremos ao final do programa, saindo com0
(true).fonte
Perl 5, 33 bytes
fonte
-pl61e '$i=$_;map$\*=$i=~/$_/i,a..z}{'
.PlatyPar , 14 bytes
Explicação (recurso do visualizador de pilhas em breve!):
Se eu tivesse uma ridícula função "empurrar todas as letras do alfabeto", isso seria 10 ...
Experimente online !
fonte
Pyke, 6 bytes
Experimente aqui!
fonte