FizzBuzz es tan simple, apuesto a que puedes hacerlo al revés. En este desafío, se le dará la longitud de la cadena FizzBuzz y deberá dar el entero positivo que produjo esa cadena.
Descripción
Para desglosar esto, una cadena FizzBuzz para n
se genera el siguiente algoritmo.
Comience con una cadena vacía y, para cada i=1..n
(inclusive):
- Si
i
es divisible por3
y por5
, anexadosFizzBuzz
a la cadena. - Si
i
es simplemente divisible por3
agregarFizz
. - Si
i
es simplemente divisible por5
agregarBuzz
. - Si
i
es divisible por ninguno de los dos, agregue la representación decimal dei
.
Entonces, por ejemplo, FizzBuzz(15)
es el siguiente:
12Fizz4BuzzFizz78FizzBuzz11Fizz1314FizzBuzz
Se le dará Length(FizzBuzz(n))
y debe determinar n
. Puede suponer que la entrada es positiva y siempre tendrá la longitud de una cadena de FizzBuzz.
Reglas
Su solución puede ser un programa completo o una definición de función en cualquier lenguaje estándar aceptable. Su programa / función puede tomar argumentos y devolver respuestas de cualquier manera estándar aceptada . Las lagunas estándar están prohibidas.
Puede suponer que la entrada es positiva y válida (describe la longitud de alguna cadena de FizzBuzz) y es más pequeña que el entero más grande representable de forma nativa en su idioma.
Este es el código de golf, por lo que el conteo de bytes más corto gana.
Ejemplos
Aquí hay algunos casos de ejemplo
Length(FizzBuzz(n)) -> n
1 -> 1
6 -> 3
15 -> 6
313 -> 100
3677 -> 1001
Editar
Se corrigió el último caso de prueba. Gracias @SteadyBox.
Respuestas:
Jalea ,
1614 bytes2 bytes guardados con funciones de idioma más recientes
)
paraµ€
yÄ
para+\
Pruébalo en línea! o ver los casos de prueba .
¿Cómo?
Crea una lista de las longitudes de cada elemento desde
1
la entrada, la reduce por adición y luego encuentra el índice basado en uno de la entrada en la lista. (Esto también significa que una entrada no válida da como resultado0
"no en la lista").fuente
C,
8178 bytes68 bytes si no te importa convertir
double
y volver:fuente
return i;
es necesario, porque esa es una forma estándar aceptada de generar en el golf de código, mientras que solo modificar una variable global no lo es. Pensé en usarlog10(i)+1
, pero pensé que podría causar algunos problemas debido a la conversión a doble y viceversa (por ejemplo,pow(i)
no es confiable con enteros). Ahora parece que funciona bien para todos los valores positivos queint
puede representar, por lo que probablemente podría usarlo. (Con valores mayores que los queint
puede contener un simple , a veces falla, pero eso no importa aquí.)n
como un puntero y luego modificar el valor al que apunta al final, pero eso requeriría más código en el sitio de la llamada para poder imprimir el valor, por lo que parece un poco como engañarmeMATL ,
312827 bytesPruébalo en línea!
Explicación
fuente
Mathematica, 67 bytes
Esto es más rápido y más corto que mi solución inicial:
o mi intento desesperado de acortarlo:
Explicación
For
Bucle estándar que aumentan
hasta ques := Length(FizzBuzz(n))
es al menos igual a la entrada#
. Lo único interesante es cómo calculo la longitud del(n+1)
enésimo término de la secuencia FizzBuzzfuente
MATL,
31 3028 bytesUtiliza la misma idea que la solución Jelly de Jonathan Allen.
¡Pruébalo en matl.suever.net !
fuente
Java 8,
10097 bytesGolfizado:
Sin golf:
Salida:
fuente
JavaScript (ES6),
6257 bytesCasos de prueba
Mostrar fragmento de código
fuente
(!(++k%3)+!(k%5)<<2||`${k}`.length)
.Javascript (ES6), 56 bytes
fuente
Python 3, 78 bytes
Función recursiva. Necesitará aumentar el límite de recursividad para cualquier resultado superior a 1000.
Explicación:
fuente
Python, 93 bytes
fuente
k, 33 bytes
Breve explicación (python-ish):
Ejemplo usando kmac 2016.06.28:
fuente
dc ,
7670 bytesPruébalo en línea!
fuente
Ruby,
6966 bytesOriginalmente, estaba evitando la monstruosidad del operador ternario anidado y obtuve 69 bytes:
fuente
Java 8,
9593 bytesEsta es la versión optimizada de la respuesta de @ Snowman
fuente
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 lo mismo que la respuesta de @ Snowman , pero usa algunas magias / diferencias Groovy para reducir el conteo de bytes.
fuente
Perl 6 ,
5552 bytesPruébalo en línea!
Cómo funciona
fuente
Japt , 20 bytes
Intentalo
fuente
Perl 5
-p
, 48 bytesPruébalo en línea!
fuente
C (gcc) , 68 bytes,
stdout
-spammingPruébalo en línea!
C (gcc) , 74 bytes
Pruébalo en línea!
fuente
05AB1E , 17 bytes
Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
fuente