O FizzBuzz é muito simples, aposto que você pode fazer isso ao contrário. Neste desafio, você receberá o comprimento da sequência do FizzBuzz e deverá fornecer o número inteiro positivo que produziu essa sequência.
Descrição
Para dividir isso, uma string do FizzBuzz para n
é gerada pelo seguinte algoritmo.
Comece com uma string vazia e, para cada i=1..n
(inclusive):
- Se
i
é divisível por3
e por5
, acrescenteFizzBuzz
à sequência. - Se
i
é apenas divisível por3
acréscimoFizz
. - Se
i
é apenas divisível por5
acréscimoBuzz
. - Se não
i
é divisível por nenhum, acrescente a representação decimal dei
.
Então, por exemplo, FizzBuzz(15)
é o seguinte:
12Fizz4BuzzFizz78FizzBuzz11Fizz1314FizzBuzz
Você será dado Length(FizzBuzz(n))
e deve determinar n
. Você pode assumir que a entrada é positiva e sempre terá o comprimento de alguma string do FizzBuzz.
Regras
Sua solução pode ser um programa completo ou uma definição de função em qualquer idioma padrão aceitável. Seu programa / função pode receber argumentos e retornar respostas de qualquer maneira aceita de maneira padrão . As brechas padrão são proibidas.
Você pode assumir que a entrada é positiva e válida (descreve o comprimento de alguma string do FizzBuzz) e é menor que o maior número inteiro representável nativamente no seu idioma.
Este é o código de golfe, portanto, o menor número de bytes vence.
Exemplos
Aqui estão alguns exemplos de casos
Length(FizzBuzz(n)) -> n
1 -> 1
6 -> 3
15 -> 6
313 -> 100
3677 -> 1001
Editar
Corrigido o último caso de teste. Obrigado @SteadyBox.
Respostas:
Geléia ,
1614 bytes2 bytes salvos usando recursos de idioma mais recentes
)
paraµ€
eÄ
para+\
Experimente online! ou veja os casos de teste .
Quão?
Cria uma lista dos comprimentos de cada item da
1
entrada, reduz por adição e localiza o índice baseado em uma entrada na lista. (Isso também significa que uma entrada inválida resulta em0
"fora da lista").fonte
C,
8178 bytes68 bytes se você não se importa em converter para
double
e voltar:fonte
return i;
é necessário, porque essa é uma maneira aceita como padrão de saída no código golf, enquanto apenas a modificação de uma variável global não é. Pensei em usarlog10(i)+1
, mas achei que isso poderia causar alguns problemas devido à conversão para duplo e para trás (por exemplo,pow(i)
não é confiável com números inteiros). Parece agora que funciona bem para todos os valores positivos que umint
pode representar, então eu provavelmente poderia usá-lo. (Com valores maiores do que um simplesint
pode conter, às vezes falha, mas isso não importa aqui.)n
ponteiro como ponteiro e apenas modificar o valor para o qual está apontando no final, mas isso exigiria mais código no site da chamada para poder imprimir o valor, para que ele pareça um pouco como me traindo.MATL ,
312827 bytesExperimente online!
Explicação
fonte
Mathematica, 67 bytes
Isso é mais rápido e mais curto que minha solução inicial:
ou minha tentativa desesperada de encurtá-lo:
Explicação
For
Loop padrão que é incrementadon
até ques := Length(FizzBuzz(n))
seja pelo menos igual à entrada#
. A única parte interessante é como eu calculo a duração do(n+1)
-ésimo termo da sequência do FizzBuzzfonte
MATL,
31 3028 bytesUsa a mesma idéia que a solução Jelly de Jonathan Allen.
Experimente no matl.suever.net !
fonte
Java 8,
10097 bytesGolfe:
Ungolfed:
Saída:
fonte
JavaScript (ES6),
6257 bytesCasos de teste
Mostrar snippet de código
fonte
(!(++k%3)+!(k%5)<<2||`${k}`.length)
.Javascript (ES6), 56 bytes
fonte
Python 3, 78 bytes
Função recursiva. Será necessário aumentar o limite de recursão para qualquer resultado acima de 1000.
Explicação:
fonte
Python, 93 bytes
fonte
k, 33 bytes
Breve explicação (python-ish):
Exemplo usando o kmac 2016.06.28:
fonte
dc ,
7670 bytesExperimente online!
fonte
Ruby,
6966 bytesOriginalmente, eu estava evitando a monstruosidade do operador ternário aninhado e cheguei a 69 bytes:
fonte
Java 8,
9593 bytesEsta é a versão otimizada da resposta de @ Snowman
fonte
Groovy, 76 bytes
def f(n){i=0;for(s='';s.size()<n;)s+=++i%15<1?"1"*8:i%5<1||i%3<1?"1"*4:i;i;}
Principalmente o mesmo que a resposta de @ Snowman , mas usa algumas mágicas / diferenças do Groovy para reduzir a contagem de bytes.
fonte
Perl 6 ,
5552 bytesExperimente online!
Como funciona
fonte
Japonês , 20 bytes
Tente
fonte
Perl 5
-p
, 48 bytesExperimente online!
fonte
C (gcc) , 68 bytes, -
stdout
spamExperimente online!
C (gcc) , 74 bytes
Experimente online!
fonte
05AB1E , 17 bytes
Experimente online ou verifique todos os casos de teste .
Explicação:
fonte