Inspirado pelo Codewars Kata .
Seu objetivo é usar uma string de entrada como esta:
"'Twas a dark and stormy night..."
e retorne uma string contendo a posição de cada caractere no alfabeto, separada por espaços e ignorando caracteres não alfabéticos, como este:
"20 23 1 19 1 4 1 18 11 1 14 4 19 20 15 18 13 25 14 9 7 8 20"
Para um desafio adicional, você pode substituir qualquer caractere numérico na sequência original por eles mesmos + 27. Por exemplo, "25"
se tornaria "29, 32"
. Isto é completamente opcional.
Você deve usar 1-indexação ( 'a'==1
, 'b'==2
, etc)
Regras adicionais:
Você deve retornar uma sequência, não uma matriz.
O espaço em branco à direita está OK.
O vencedor tem a menor contagem de bytes.
Boa sorte!
Respostas:
05AB1E , (5?) 7 bytes
Dois bytes à direita são formatação de saída
Uma porta da minha resposta Jelly , mas o O5AB1E é mais conciso para a filtragem do alfabeto.
Experimente online!
Como?
fonte
ðý
possível adicionar um final . Mas desde a metade das listas de respostas, acho que é só deixar por enquanto.Java 8,
8278726962 bytes-13 bytes graças a @ OlivierGrégoire .
Experimente online.
Explicação:
fonte
s->s.chars().forEach(c->{if(c>64&~-c%32<26)System.out.print(c%32+" ");})
(72 bytes).s->{for(int c:s)System.out.print(c>64&~-c%32<26?c%32+" ":"");}
(62 bytes) usando achar[]
como entrada em vez de aString
.Python 3 ,
626049 bytes-5 bytes graças a Jo King .
-8 bytes graças a pLOPeGG .
Após estas melhorias, esta resposta agora é semelhante ao Jonathan Allan 's resposta .
Experimente online!
fonte
%32
funciona tambémR ,
5550 bytesExperimente online!
Lê a entrada do stdin,
converte para maiúsculas,removeletrasalfabéticas nãomaiúsculas, converte para pontos de código,subtrai para 64mods por 32 e imprime para stdout, separados por espaços.Obrigado a Kevin Cruijssen pelo golfe!
fonte
[^A-z]
APL (Dyalog Unicode) ,
24, 20, 1413 bytes-4 bytes graças ao Zacharý (e ao Sr. Xcoder)!
-6 bytes graças a Adám!
-1 byte graças a ngn!
Experimente online!
Explicação:
Minha solução inicial:
APL (Dyalog Unicode) ,
2420 bytesExperimente online!
Explicação:
Não ria de mim, eu sou novo no APL :)
fonte
{1(819⌶)⍵}
pode ser1(819⌶)⊢
. Caso contrário, trabalho incrível! Espero que você goste da APL no futuro!1
ao819⌶
e salvar cinco removendo 27s diretamente:27~⍨⎕A⍳819⌶⍨∘1
; ou pegue a interseção com o alfabeto:⎕A⍳⎕A∩⍨819⌶⍨∘1
Python 2 , (45?) 55 bytes
11 bytes adicionados para formatar a saída, o que também torna isso incompatível com o Python 3)
Outra porta da minha resposta Jelly.
Experimente online!
Versão não formatada (retornando uma lista de números inteiros):
fonte
JavaScript (Node.js) ,
695554 bytesExperimente online!
Explicação:
11 bytes salvos graças a @Kevin
Mais 1 bytes graças a @Neil
Você pode adicionar suporte para números para alguns bytes adicionais (graças a @neil)
JavaScript (Node.js) , 62 bytes
Experimente online!
fonte
a-z
paraA-Za-z
ei.toLowerCase().charCodeAt()-96
parai.charCodeAt()%32
parseInt(i,36)-9
salva outro byte..match(/[^_\W]/g).map(i=>(parseInt(i,36)+26)%36+1)
permite que você suporte números, embora não tenha certeza se essa é a melhor maneira.Gelatina , (7?) 8 bytes
Byte mais à direita é a formatação de saída
Um programa completo que aceita uma string no formato Python que imprime o resultado em STDOUT
Experimente online!
Como?
fonte
Japt v2.0a0
-S
,1210 bytesTente
Explicação
fonte
x86 opcode, 35 bytes
Supondo que o resultado contenha pelo menos uma letra e não
{|}~
40 bytes, permitindo todos os caracteres ASCII
fonte
Stax ,
9109 bytesExecute e depure
-1 byte graças a @recursive
Explicação:
Stax , 7 bytes
Execute e depure
Este gera uma nova linha separada. Descompactada:
vmVaI^|c
. Semelhante, mas com o mapa, que gera implicitamente com a nova linha à direita.fonte
Espaço em branco ,
152117 bytes-35 bytes graças a @Lynn .
Letras
S
(espaço),T
(tabulação) eN
(nova linha) adicionadas apenas como destaque.[..._some_action]
adicionado apenas como explicação.Experimente online (apenas com espaços brutos, guias e novas linhas).
Explicação em pseudo-código:
fonte
05AB1E , 8 bytes
Experimente online!
ou, se pudermos retornar uma matriz:
05AB1E , 6 bytes
Explicação:
Experimente online!
ou se você quiser contar números:
05AB1E , 13 bytes
Experimente online!
fonte
05AB1E , 14 bytes
Lida com números também
Experimente online!
fonte
Carvão , 21 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
Anexe os dígitos à variável de letras minúsculas predefinidas.
Faça um loop sobre a entrada em minúsculas.
Se o caractere atual for uma letra ou dígito,
imprima seu índice indexado em 1,
e deixe um espaço para o próximo valor.
fonte
Vermelho , 93 bytes
Experimente online!
fonte
#"a"-#"z"
ser alterado para letras maiúsculas e minúsculas; e então olowercase
pode ser removido; e-96 + to-char c
pode ser modulo-32? Mas não tenho certeza se isso salva os bytes em vermelho.parse
função @KevinCruijssen coleta seqüências de caracteres mesmo quando a correspondência é um único caractere, é por isso que eu sempre preciso doto-char
. Para as letras maiúsculas, eu precisaria adicionar ao conjunto de caracteres # "A" - # "Z", que estraga o ganho (se houver) da eliminaçãolowercase
.#"A"-#"Z"
não ganhar muito em comparaçãolowercase
, já que é apenas 1 byte menor. E eu sabia que você precisariato-char
, mas não tinha certeza se o-96 +
módulo 32 seria semelhante em tamanho.Perl 5 , 47 bytes
Com o desafio adicional de analisar dígitos:
Experimente online!
Reduzido para 38 bytes ignorando dígitos
fonte
PHP , 70 bytes
Experimente online!
-5 bytes graças a Kevin
fonte
&&
pode ser&
eord(strtolower($c))-96
pode serord($c)%32
. Além disso, acho que você pode remover o~
antes$c
, mas não tenho certeza. Ainda não programamos muito em PHP e, de qualquer forma, não sabemos o que~
é usado aqui.Perl 5
-p
, 35 bytesExperimente online!
Inclui a parte extra sobre os dígitos.
fonte
/\w/
inclui_
-F/[^0-9\pL]|/
: Experimente online!Japt 2.0
-S
, 9 bytesExecute on-line
Explicação:
fonte
Perl 6 , 32 bytes (alfa), 41 bytes (alfa + dígito)
Experimente (alfa de 32 bytes)
Experimente (41 bytes alfa + dígito)
Expandido:
Alfa de 32 bytes
41 bytes alfa + dígito
fonte
Э
, mas solicitei esclarecimentos ao OP sobre se a entrada é apenas ASCII ou não.Tcl , 93 bytes
Experimente online!
fonte
PHP
108105 BytesExperimente online (108 bytes)
Tri-lo online (105 bytes)
-3 bytes, graças a @manassehkatz (altere o nível do strtolower e remova o AZ do regex)
Código, tentou evitar qualquer loop
Explicação
fonte
strtolower($argv)
de capital e remoçãoA-Z
do regex.$argv[1]
ou em$argn
vez de$argv
?join
é 3 bytes menor queimplode
.Python 3 , 84 bytes
Experimente online!
fonte
Python 2,
110 bytes104 bytes , com entrada do usuárioExperimente Online!
Python 2,
105 bytes 104 bytes96 bytes , ondet
é predefinido:Experimente Online!
Vamos dividir com uma versão mais legível:
Primeiro, definimos
alphabet
como sendo, bem, o alfabeto.Em seguida, usamos a compreensão da lista para:
t
Finalmente, juntamos tudo e imprimimos.
Editar: alterado para
print
(e perdeu a portabilidade) para salvar bytes e fazê-lo funcionar fora de uma funçãoEditar 2: adicionada uma versão com
input()
variáveis predefinidas em vez deEdit 3: Removidos 8 bytes nas Soluções 1 e 2 graças a Jo King
fonte
+
), onde estão os outros?if
,for
e" "
[]
nojoin
PowerShell , 63 bytes
Experimente online!
(Parece longo ...)
Pega entrada
$args
, converte.ToUpper
maiúsculas e minúsculas, lança como umachar
matriz, alimenta isso em umfor each
loop. Dentro do loop, subtraímos por si própria ou 64 a partir do valor (ASCII int), com base em se ou não o valor atual é-in
a gama65
de90
(ou seja, é uma letra maiúscula ASCII). Esses valores são deixados no pipeline e usamos-n
ot ote
para eliminar os valores que não são letras (porque todos são zero). Esses números são encapsulados em uma cadeia de caracteres, pois a string padrão de uma matriz é separá-la com espaço, de modo que obtemos isso muito mais barato. Essa cadeia é deixada no pipeline e a saída é implícita.fonte
MS-SQL, 133 bytes
De acordo com nossas regras de IO , a entrada é obtida por meio de uma tabela preexistente t com campos varchar s .
É necessário o SQL 2017 ou posterior. Também deve ser executado no
master
banco de dados, porque estou aproveitando uma tabela do sistema chamadaspt_values
, que (quando filtrada portype='P'
) contém números contados de 0 a 2047.Basicamente, estou ingressando em uma tabela numérica com a string de entrada using
SUBSTRING()
, que retorna uma linha separada para cada caractere individual. Isso é filtrado apenas para letras usandoLIKE'[a-z]'
, então obtemos seu valor ASCII e subtraímos 64. Esses números são reunidos novamente em uma string usando a função (new to SQL 2017)STRING_AGG
.fonte
Pitão , 10 bytes
Tenho certeza de que isso pode ser jogado um pouco ... -2 bytes, se eu puder exibir como uma lista, algumas respostas parecem, mas não estão na especificação
Experimente online!
fonte
d
(jdfTmhGr0
, 10 bytes).C (gcc) , 67 bytes
Experimente online!
Converte cada caractere em minúscula, compensa o código em -96 e, se estiver no intervalo do alfabeto indexado em 1, imprime o código de deslocamento
fonte
jq , 45 bytes
Experimente online
fonte