Tarefa
Dada uma String como entrada, sua tarefa é produzir 42
apenas se a String de entrada for exatamente o seguinte:
abbcccddddeeeeeffffffggggggghhhhhhhhiiiiiiiiijjjjjjjjjjkkkkkkkkkkkllllllllllllmmmmmmmmmmmmmnnnnnnnnnnnnnnoooooooooooooooppppppppppppppppqqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrrsssssssssssssssssssttttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzz
Ele pode gerar qualquer outro valor, produzir um erro ou não produzir, se a entrada não for igual à String mencionada acima.
Critério vencedor
Isso é código-golfe , então o código mais curto em bytes vence!
abbcccddddeeeee...zzabc
, não satisfaz o que eu suponho e posso ver alguns programas dando sim nessa entrada.Respostas:
Golfscript, 20
com nova linha, 21 caracteres (da Nabb)
Na verdade, a Nabb venceu a minha, aqui está a solução original para a nova linha, 22 caracteres
Isso é simplesmente gerar a string de origem e apenas compará-la com a string do stdin.
fonte
26,{).[96+]*}%n+=42`*
para 21 (incluindo nova linha).n+
porque o array não é plano. Você precisará manter seus 20 caracteres originais ou adicionar um~
para achatar os termos internos da matriz.Ruby 1.9,
46 4239 caracteresSupõe que a entrada não seja finalizada com uma nova linha.
fonte
Programa C -
7889Editar: Não imprima 42 quando houver caracteres extras.
Assume que a entrada não possui uma nova linha à direita.
Se o prefixo não corresponder, o programa será encerrado. Se o prefixo corresponder, mas houver 1 a 3 caracteres extras, imprime 2. Caso contrário, produz um comportamento indefinido.
Isso pode reduzir um caractere, alterando
exit(1)
parafork()
. Ah, e em uma nota não relacionada, lembre-se de salvar todos os documentos abertos, caso, por qualquer motivo , seu sistema seja bloqueado.fonte
PHP (60)
Supondo que a entrada seja fornecida na linha de comandos:
Explicação : você pode visualizar a sequência como uma estrutura de triângulo.
A linha
j
começa no índicei = j*(j+1)/2
(essa é a fórmula numérica triangular). A resolução da equação quadrática resulta no índicei
estar on-linej = int((sqrt(8*i+1)-1)/2)
e, portanto, conter caracteres97 + int((sqrt(8*i+1)-1)/2)
. O0-350
intervalo de índice nos permite simplificar isso96.5 + sqrt(2*(i+1))
, mas isso não é mais válido para valores maiores.Editar : alternado para a entrada da linha de comando, conforme sugerido nos comentários.
Editar : usa operador condicional para salvar um personagem
fonte
$s.=chr(96.5+sqrt($i+=2));
funciona?Perl, 35
43Precisa do Perl 5.10 ou posterior (executado com
-E
), sem nova linha na entrada.Gostei mais do meu regex de efeitos colaterais, mas o código mais curto já falou. Aqui está como uma lembrança. Também destinado ao Perl 5.10 ou posterior, mas apenas para os recursos regex avançados / experimentais, portanto, apenas uma
p
opção de linha de comando é necessária.fonte
$a++."{$b}"
vez de apenas$a++.$b
?05AB1E , 7 bytes (não concorrente)
Experimente online!
Explicação
Apenas passando por alguns desafios para aprender 05AB1E (e golfe em geral). Esse desafio foi marcado como ativo ontem e eu encontrei uma solução curta. Por que não compartilhar? :)
fonte
Programa Haskell -
71676457Não assume nenhuma nova linha à direita e também não gera uma.
Uso:
fonte
zipWith
para quando chega ao final da lista mais curta, você pode substituir['a'..'z']
por['a'..]
e salvar 3 caracteres.[c|c<-['a'..'z'],_<-['a'..c]]
J, 29
exemplo:
fonte
D: 94 caracteres
Mais legivelmente:
fonte
Delphi,
164132Este cria uma string e a compara com o primeiro argumento da linha de comando. É mais curto e menos complicado do que minha outra submissão:
(Observe que esta versão pressupõe que as variáveis
c
ei
iniciam com 0, como é o caso na minha versão de Delphi (2010).)Como minha outra submissão, este precisa de menos caracteres se a construção de string não ocorrer em uma função, como eu fiz antes:
Delphi, 181
Observe que a saída não precisa de uma nova linha, então WriteLn () se tornou Write ().fonte
PHP - 45 caracteres
Estou surpreso que ninguém tenha postado nenhuma resposta que usasse hash. É uma maneira muito eficiente de testar a string exata.
É difícil copiar / colar os dados, pois existe um byte nulo no meio do código. Aqui está um hex-dump do código para fins de teste.
fonte
Scala 79
fonte
Pyth, 14
Apenas constrói a sequência necessária, depois se compara com a entrada e multiplica por 42.
fonte
m
me causa problemas ...m
, que aplica uma função a cada elemento de sua entrada. A entrada éG
, o alfabeto.xGd
encontra a posição ded
, o caractere no alfabeto, noG
alfabeto.h
aumenta isso em um e*d
replica o caractere assim muitas vezes. Fora dam
função,s
combina a lista resultante de seqüências de caracteres em uma única sequência eqz
verifica se o resultado é igual à entrada. Os booleanos são representados como0
se False e1
se true,*42
resultando em um valor de42
se True e0
se False.Brachylog (2), 15 bytes, desafio de pós-datas de idiomas
Experimente online!
E agora, uma resposta que funcione segundo um princípio completamente diferente do mais visto aqui. Este é um envio de função (a pergunta não especifica que tipo de envio é desejado, mas as funções são permitidas por padrão).
Explicação
Essa resposta funciona definindo um tipo de sequência: as que: a) contêm todas as letras minúsculas do alfabeto; b) estão na ordem de classificação; ec) para as quais tomar o número de ocorrências de cada caractere na sequência produz uma sequência consecutiva. números inteiros a partir de 1. (Deve ficar claro que existem muitas dessas strings, mas a que queremos para casos especiais é a mais curta.) Então, se a string atender a esses critérios, adicionaremos 16 ao número de caracteres distintos no corda; isso produzirá 42 se a string for a que a pergunta nos pede para casos especiais e pelo menos 43 em todos os outros casos. (Se a sequência falhar em algum dos critérios da categoria, a função terminará em falha, o que é como lançar uma exceção.)
Veja como interpretar o código fonte:
fonte
R,
6058Obrigado pela sugestão de @giusppe
fonte
paste
está bem aqui, e você pode usar emscan(,"")
vez dereadline()
.Python (84)
Pressupõe uma nova linha à direita no final da entrada.
fonte
raw_input
, em vezsys.stdin.read
?raw_input
lê apenas uma linha; Eu não tinha certeza se "a entrada" seria sempre uma única linha ou se poderia haver entrada desqualificante nas linhas posteriores.Python - 62 caracteres
fonte
print("".join(x*chr(x+96)for x in range(27))==input())*42
.Perl,
4946 caracterespara ser usado em um programa, não na linha de comando
$..=chr($+96)x$ for 1..26;$.eq(pop)&&print '42'Saudações
rbo
Editar: Idéia extraída de Ventero
fonte
PHP
928887 caracteresEDITAR
Substituído
$j<0
por$j
ereturn $b==$a?42:0;
porecho $b==$a?42:0;
Substituído
echo $b==$a?42:0;
porecho($b==$a)*42;
fonte
ECLiPSe Prolog - 173
fonte
JavaScript (91
939498102116)Uso:,
a('string')
retorna42
se válido de acordo com as especificações, ou0
.http://jsfiddle.net/g25M3/6/
Edit : Removido
var
e eliminado dois espaços nofor (
.Editar 2 : alterado
j>0
paraj
ereturn (z==r)?42:0;
parareturn z==r?42:0
Editar 3 : Inicializar
i
comi=''
, alterar(z==r)?42:0
para(z==r)*42
Editar 4 : Alterar
for(;i<27;i++)
parawhile(i++<26)
Editar 5 : Alterar
i=r='';while(i++<26)
parafor(i=r='';i++<26;)
efor(j=i;j;j--)
parafor(j=i;j--;)
fonte
var
para declarar variáveis;)for (
.return(z==r)?42:0;
porreturn z==r?42:0
j>0
poderia ser apenasj
eu acho.JavaScript 1.8, 99 caracteres
Eu desafio você a entender isso :)
fonte
PHP - 59
Assume que pelo menos 1 entrada é fornecida sobre cli
Funciona mais ou menos, exceto que o md5 is pode tecnicamente ter duplicações com o hash algo.
fonte
PowerShell v2 +, 47 bytes
Constrói um intervalo
1..26
, alimenta isso através de um loop com|%{...}
. A cada iteração, usamos o operador vírgula para construir uma matriz literal da corrente[char]
multiplicada pelo número do loop atual. Nós, então,-join
todos juntos para construir a stringabbcccdddd...
e, em seguida, usamos uma-ceq
comparação que diferencia maiúsculas de minúsculas em relação a nossa entrada$args
, o que resultará em um$TRUE
ou outro$FALSE
. No PowerShell, os valores booleanos podem ser convertidos implicitamente como1
ou0
, respectivamente, o que acontece aqui com o42*
. Será impressa42
se a entrada forabbccc...zzzzzzzzzzzzzzzzzzzzzzzzzz
e sairá em0
contrário.fonte
K, 26 bytes
obrigado
fonte
{$[x~.Q.a@&1+!26;42;]}
por 22 bytes.42*(&!27)~-96+"j"$
por 18 bytes (portando minha resposta ok ).VBA 91
Não havia respostas do VBA, mas isso funciona:
fonte
o="":For i=1To 26:o=o &String(i,Chr(i+96)):Next:?-42*([A1]=o)
A1
como entrada.APL (Dyalog) ,
1817 bytesExperimente online!
Quatro bytes óbvios podem ser salvos se for permitido usar letras maiúsculas.
42
42./⍨
se (literalmente replicado por)⍞
entrada de caracteres≡
é idêntico a819⌶
as minúsculas⎕A
Um alfabeto/⍨
replicado por⍳
um a26
26fonte
Clojure - 61 caracteres
Explora os seguintes fatos:
fonte
Javascript 144
Provavelmente pode ser significativamente melhorado, a recursão sempre foi um problema para mim.
Comprimido
Menos comprimido
fonte
Delphi, 127
Este lê a string da entrada, compara-a como está, escreve 42 quando a entrada corresponde até a última
z
.Delphi, 157
Delphi, 188
Esta versão não usa uma função, que salva alguns caracteres quando comparada à versão anterior desta técnica:
Delphi, 213
É um pouco longo, principalmente porque as palavras-chave longas do Delphi e a necessidade de inicializar aplicativos de console antes que eles possam escrever a saída.Observe também que eu incrementei o CmdLine em 77 caracteres, pois esse era o deslocamento necessário para pular o meu caminho executável local (o Delphi não possui ponteiro de argumento direto). Ajuste para corresponder à sua própria configuração (pode levar a 1 caractere a menos quando o deslocamento for <10).
fonte
program a;
linha. E os suportes ao redorb^<>Char(c)
,i>0
ei=27
podem ser removidos.if i>0then
seria compilar!)