Esse problema é sobre a separação de uma sequência que representa um identificador de produto em três componentes.
- A primeira parte consiste em letras maiúsculas e minúsculas de comprimento arbitrário que representam o armazém.
- A segunda parte são dígitos que representam o número do produto. Esta parte também é de comprimento arbitrário.
- A última parte são qualificadores como tamanho e cores, e essa parte continua até o final da sequência. É garantido que os qualificadores começam com uma letra maiúscula e consistem em caracteres alfanuméricos.
Cada parte deve ser impressa claramente separada. É garantido que cada parte não esteja vazia.
O vencedor é quem usa menos bytes para resolver esse problema.
Exemplo:
Entrada: UK7898S14
Saída:
UK
7898
S14
Aqui UK é Reino Unido, 7898 é o código do produto e S14 é o tamanho 14.
Exemplo 2:
Entrada: cphDK1234CYELLOWS14QGOOD
Saída:
cphDK
1234
CYELLOWS14QGOOD
Aqui cphDK é Copenhague, Dinamarca, 1234 é o código do produto, CYELLOWS14QGOOD representa cor amarela, tamanho 14 e boa qualidade.
Respostas:
Perl, 12 bytes
11 bytes de código + 1 byte para
-p
sinalizador.Para executá-lo:
fonte
APL, 18
Funciona pesquisando os 2 primeiros pontos em que há uma mudança de caractere para dígito ou vice-versa e usando-os para dividir a sequência.
fonte
Retina ,
2814108 bytesEconomizou 4 bytes graças a Dom Hastings .
Economizou 2 bytes graças a Martin Ender .
Experimente online!
fonte
Haskell, 36 bytes (sem regex)
Isso fornece o resultado no formato
("UK",("7898","S14"))
. A idéia é dividir no primeiro dígito e depois dividir o restante no primeiro não dígito. Experimente em Ideone .fonte
JavaScript,
3836 bytesExemplo
Mostrar snippet de código
fonte
JavaScript (ES6),
2826 bytesGuardado 2 bytes graças a @Grax
Exemplos
Mostrar snippet de código
fonte
s=>s.replace(/\d+/,` $& `)
Gema,
1712 caracteres(O truque de não lidar com o código do país explicitamente descaradamente emprestado de Dada 's Perl solução . Apreciação deve ser expresso lá.)
Exemplo de execução:
fonte
Python 2, 40 bytes
Eu não sei muito Regex, mas felizmente esse problema é bastante simples :) Separa a string de entrada em uma lista de comprimento 3 que contém cada parte.
fonte
05AB1E ,
39.37.16 bytesEconomizou muitos bytes graças a Emigna.
Ele usa a codificação CP-1252.
Experimente online!
(Este é o meu primeiro post aqui!)
fonte
.páà¬
para conseguir a primeira parte, mas não parece ajudar no resto à primeira vista.JavaScript (ES6), 36 bytes
Exemplos
Mostrar snippet de código
fonte
Java 7,
200185174167 bytesUngolfed & código de teste:
Experimente aqui.
Resultado:
fonte
C #,
191177 bytesGolfe:
Ungolfed:
EDIT1: @Link Ng salvou 14 bytes.
fonte
PHP, 48 bytes
Com seu
$limit
parâmetro, e o fantasticamente útil\K
,preg_split()
é perfeito para esse desafio.fonte
MATLAB,
8173 bytesFunção que aceita uma string e retorna uma matriz de células de três strings. Testado na versão R20105b.
Exemplo de uso:
Explicação
A expressão regular
(?<=^\D+)\d+')
corresponde a um grupo de dígitos precedidos por não-dígitos desde o início da string; os últimos não fazem parte da partida.A quarta saída de
regexp
é o'match'
; e a sétima saída são as'split'
duas partes da sequência antes e depois da partida.fonte
Ruby, 28 bytes
Isso envolve o primeiro cluster de dígitos com novas linhas.
fonte
jq, 47 caracteres
(Código de 43 caracteres + opções de linha de comando de 4 caracteres.)
(Novamente a história antiga: razoavelmente elegante no início, torna-se dolorosamente detalhada.)
Exemplo de execução:
Teste on-line (a passagem do
-r
URL não é suportada - verifique você mesmo Raw Output.)fonte
PHP,
61 59 5655 bytesIsso também gera o código inicial:
Editar
Obrigado a @manatwork por salvar alguns bytes para mim
Obrigado a @ RomanGräf por mais alguns bytes salvos
fonte
[\d]
? : o\d
é suficiente.[a-z]
com\D
?[a-z]
, ai
bandeira também não é necessária.JavaScript sem regex,
848179 bytesp=>{for(i=n=o='';i<p.length;){if(n==isNaN(c=p[i++])){o+=' ';n++}o+=c}return o}
fonte
o=n=i=''
.isNaN(c=p[i++])
.p=>{for(i=n=o=0;i<p.length;){c=p[i++];if(n++==c<59){o+=' '}o+=c}return o}
''
porque o, ao qual o resultado será concatenado. Mas, infelizmente, seu código não está funcionando para mim, n precisa ser incrementado condicionalmente.p=>{for(i=n=0,o='';i<p.length;){c=p[i++];if(n==c<59){o+=' ';n++}o+=c}return o}
Mathematica, 39 bytes
Função anônima. Pega uma string como entrada e retorna uma lista de strings como saída.
fonte
Raquete 274 bytes
Ungolfed:
Teste:
Resultado:
fonte
R,
6352 bytesEdit: salvou um monte de bytes graças a @JDL
Leva a entrada de stdin e imprime em stdout:
Exemplo de saída:
fonte
gsub (...,"\\1 \\2 \\3")
seria mais eficiente?gsub("([A-Za-z]+)([0-9]+)(.+)","\\1 \\2 \\3",scan())
, embora o primeiro argumento provavelmente pode ser expressa como algo menor do que isso ..."\\1 \\2 \\3"
substituição funciona. Também atualizou um pouco o padrão regex e o utilizouignore.case = TRUE
.()
suportes.Gelatina , 14 bytes
TryItOnline!
Quão?
fonte
C, 107 bytes
Ligue para:
fonte
Python 2,
1039488 bytesSolução sem usar regex
Simplesmente extrai os números do meio e corta a entrada usando o número como um índice. Requer aspas ao redor da entrada, mas não vi em nenhum lugar que as aspas não sejam permitidas.
-9 dividindo a no número do meio e imprima os componentes com b no meio
-6 Obrigado a @Shebang
Casos de teste
fonte
b!="" -> b>""
ec=a.split(b) -> c,d=a.split(b) ... print c[0],b,c[1] -> print c,b,d
salva 5 bytes.elif b:
;)C #, 74 bytes
Substitua o 1º conjunto de dígitos por retorno de carro, conjunto de dígitos e outro retorno de carro, como Johan Karlsson fez pelo JavaScript.
fonte