Suponha que tenhamos uma string e queremos encontrar a sequência máxima repetida de cada letra.
Por exemplo, dada a entrada de amostra:
"acbaabbbaaaaacc"
A saída para a entrada de amostra pode ser:
a=5
c=2
b=3
Regras:
- Seu código pode ser uma função ou um programa - para você escolher
- A entrada pode ser por stdin, arquivo ou parâmetro de função
- A saída deve conter apenas caracteres que aparecem na entrada
- O comprimento máximo de entrada é 1024
- A ordem de saída não importa, mas deve ser impressa no formato [char] = [sequência máxima repetida] [delimitador]
- A cadeia pode conter qualquer caractere
A competição termina na quinta-feira 3 às 23:59 UTC.
l:S_&{'=L{2$+_S\#)}g,(N}/
nos sistemas de produção! E amaldiçoarei seu nome.Respostas:
Código de máquina 8086,
8280Conteúdo do
x.com
arquivo:Ele suporta apenas repetições de até 99 caracteres.
Código fonte (servido como entrada para o
debug.com
assembler), com comentários!Aqui estão algumas técnicas de golfe usadas aqui que eu acho divertidas:
3d00
onde3d
está o código ASCII=
. Dessa forma, o endereço para a entrada da matriz para caracterex
é3d78
. Quando interpretado como uma sequência de 2 caracteres, éx=
.104
; ele substitui o código de inicialização que não é mais necessário. A sequência de fim de linha0D 0A 24
é executada como código inofensivo.aam
instruções aqui não fornecem golfe, embora possam ...11b
, que contém o código de máquina necessárioC3
por sorte.fonte
CJam,
272625 bytesExperimente online.
Exemplo
Como funciona
fonte
J - 52 bytes
Bem, uma abordagem simples novamente.
Explicação:
Exemplo:
Se a saída de forma livre for permitida (como em muitas outras respostas), também tenho uma versão de 45 bytes . Essas caixas representam uma lista de caixas (sim, são impressas assim, embora a altura da linha da SE as quebre).
fonte
Ruby, 72
Isso leva a entrada dos argumentos da linha de comando e as saídas para o stdout.
fonte
chars
é um pouco menor quesplit("")
.chars
dá um enumerador em vez de uma matriz. Estou no 1.9.3, então é uma coisa 2.0?chars
retorna uma matriz.p
vez deputs
?GolfScript, 26 bytes
Experimente online.
Explicação:
:s
salva a string de entrada na variávels
para uso posterior..&
extrai os caracteres únicos na entrada, os quais o restante do código no{ }%
loop itera.61
coloca o número 61 (código ASCII para um sinal de igual) em cima do caractere atual na pilha, para atuar como um delimitador de saída.{2$=}s%
pega a strings
e substitui seus caracteres por 1 se eles igualarem o caractere atual que está sendo iterado ou 0 se não o fizerem. (Ele também deixa o caractere atual na pilha para saída).1,/
pega essa sequência de uns e zeros e a divide em zeros.$
classifica as substrings resultantes,-1=
extrai a última substring (que, uma vez que todas consistem em repetições do mesmo caractere, é a mais longa) e,
retorna o comprimento dessa substring.n+
especifica o comprimento e acrescenta uma nova linha a ele.Ps. Se os sinais de igual na saída forem opcionais, eles
61
poderão ser omitidos (e2$
substituídos por1$
), para um comprimento total de 24 bytes :fonte
61
primeiro::s.&{61{2$=}s%1,/$-1=,n+}%
.CoffeeScript, 109 bytes
Eu gosto de regex.
Aqui está o JavaScript compilado que você pode experimentar no console do seu navegador
Então você pode ligar
para obter
fonte
aaaabaa
.Pyth , 24
2526(ou 29)O teste pode ser feito aqui: link
Saídas no formato:
Explicação:
Python:
Para uma saída adequada (a = 5), use:
29 caracteres
fonte
k=''
é definida em outro lugar.C,
126125119 bytesCorrida:
fonte
getchar()>0
por~getchar()
como nesta respostaless than zero
está perfeitamente correto, mas== EOF
é mais claro.EOF
é garantido como negativo e -1 é usado mesmo sechar
for assinado; veja aquiMathematica ,
747269Não é muito bom, mas as strings não são a melhor área do Mathematica . Melhorando embora. :-)
fonte
First@*MaximalBy[Length] /@ GroupBy[First]@Split@Characters[#] &
pelo menos, é bem direta e legível.GroupBy
eGatherBy
?GroupBy
retorna umAssociation
. Ainda não estudei as outras diferenças em detalhes. reference.wolfram.com/language/ref/GroupBy.html Você pode experimentá-lo na nuvem com uma conta gratuita (é assim que estou jogando com eles).C # (LinQPad)
146
Esta é a resposta de tsavino, mas mais curta. Aqui, eu usei em
Distinct()
vez deGroupBy(c=>c)
. Tambémforeach-loop
são excluídos os chavetas do :136
Tentei usar uma
lambda expression
sintaxe de consulta em vez da normal, mas como eu precisava daCast<Match>
primeira, o código se tornou um caractere mais longo ... De qualquer forma, como ele pode ser executado no LinQPad, você pode usar emDump()
vez deConsole.WriteLine()
:Um estudo mais aprofundado do código me fez pensar sobre o
Max()
. Esta função também aceita aFunc
. Dessa forma, eu poderia pular aSelect
parte ao usar a lambda epxression:Assim, resultado final:
128
Atualizar:
Graças à dica de Dan Puzey, pude salvar outros 6 caracteres:
Comprimento:
122
fonte
Dump()
método recentemente, poupa-lhe 10 + caracteres cada vez :) As chaves foi fácil e o resto foi um pouco de braincracking: DIEnumerable
estilo de exibição você pode economizar mais 8 caracteres, com este como o seu corpo:i.Distinct().Select(c=>c+"="+Regex.Matches(i,"["+c+"]+").Cast<Match>().Max(m=>m.Value.Length)).Dump();
Python 3 (70)
Até o Python jogado no golfe pode ser muito legível. Eu acho que esse código é totalmente idiomático, exceto pelas variáveis de uma letra e um loop while de uma linha.
Exemplo é executado:
fonte
Ruby, 58
Pega a entrada de STDIN e a envia para STDOUT no formato
{"a"=>5, "c"=>2, "b"=>3}
fonte
C # no LINQPad - 159 bytes
Bem, pelo menos eu venci o T-SQL; P Não vencerei mais ninguém, mas pensei em compartilhá-lo de qualquer maneira.
Uso:
Sugestões são sempre bem-vindas!
fonte
Powershell
807772Você precisa executá-lo no console ...
fonte
$x
é supérfluo. Você tem três bytes a menos de não usá-lo. Tambémsort -u
é suficiente. Raramente é necessário especificar os nomes completos dos parâmetros. No entanto, isso falhará para determinados caracteres devido ao uso sem escape na regex. Dependendo de como »a string pode conter qualquer caractere« deve ser entendida, isso pode ser um problema.[char[]]"$args"|sort -u|%{"$_="+($args-split"[^$_]"|sort)[-1].length}
, parece a segunda $ args vem vazio ... - darkajax 17 mins ago$args
ocorre porque ele está em um bloco de script, que possui seus próprios argumentos (o que não existe mais no script).Perl - 65
7176caracteresMeu primeiro código de golfe!
Para cada resposta, copie para golf.pl e execute como:
Minha solução mais curta imprime cada caractere quantas vezes aparecer, pois isso não é proibido pelas regras.
Minha próxima solução mais curta (85
90caracteres) imprime cada caractere apenas uma vez:fonte
F # - 106
No FSI, chamar
dá
No entanto, para imprimi-lo sem as informações extras, chame-o assim:
que dá
fonte
Javascript, 116 bytes
Saída de amostra:
fonte
T-SQL (2012)
189171Editar: removido
ORDER BY
porque as regras permitem qualquer ordem de saída.Recebe a entrada de uma variável CHAR
@a
, e usa uma CTE recursiva para criar uma linha para cada caractere na sequência e descobrir ocorrências sequenciais.Depois disso, é simples
SELECT
eGROUP BY
leva em consideração a ordem da saída.Experimente no SQL Fiddle.
Atribuindo a variável:
Saída de amostra:
fonte
str
função, em vez deltrim
. Você também pode nomear sua variável@
para salvar um caractere. Isso permite que você perca ai
variável no rcte. Eu acho que você pode raspar alguns caracteres dessa maneira. Você também pode reescrever a consulta usando uma função de janela como a soma das linhas anteriores ou atrasadas. Ainda não formou o quanto você se importa.str
sempre gera 10 caracteres, mas isso é jogar golfe: PHaskell - 113
120bytesTestado com
fonte
.
função (compor) para evitar a criação de uma lambda onde o parâmetro só aparece após o final de uma cadeia de$
funções conectadas. Para fazer isso, basta alterar todos os$
s para.
s (exemplo: se(\i->reverse$sort$group i)
transforma emreverse.sort.group
.JavaScript [83 bytes]
Execute esse código no console do navegador.
Para entrada "
acbaabbbaaaaacc
", o console deve enviar "Object {a: 5, b: 3, c: 2}
".fonte
JavaScript - 91
EDIT: Minha primeira solução obedece às regras, mas imprime várias vezes ocorrências de caracteres únicos como
abab
=>a=1,b=1,a=1,b=1
então eu vim com isso ( 101 caracteres), para aqueles que não estão satisfeitos com o meu primeiro:fonte
Julia, 85
fonte
Python3 -
111,126,115114111 bytesCódigo executável que lerá 1 linha (use apenas letras minúsculas az)
Editar: saída desnecessária excluída a pedido do @Therare
A saída parece boa
fonte
for
ouif
.l=2
eo=1
para "helloworld"JavaScript -
141137125Eu não gosto de regex :)
Corre
saídas
fonte
Javascript,
10910410098 bytesExemplo de uso:
saídas:
fonte
PHP,
10410296uso
impresso
fonte
Java 247
fonte
import java.util.*;
em Java?acbaabbbaaaaacc
saídas ema=8; b=4; c=3
vez dea=5; b=3; c=2
.C 169
Repete cada caractere imprimível na tabela ASCII e conta o máximo da sequência de entrada.
fonte
JavaScript 116
fonte
Groovy - 80 caracteres
Baseado nesta resposta inteligente do xnor :
Saída:
Ungolfed:
fonte