¿Es un número cíclico?

20

Un número cíclico es un número de "n" dígitos que cuando se multiplica por 1, 2, 3, ... n, da como resultado los mismos dígitos pero en un orden diferente.

Por ejemplo, el número 142,857 es un número cíclico ya que 142,857 x 2 = 285,714, 142,857 x 3 = 428,571, 142,857 x 4 = 571,428, y así sucesivamente. Dada una entrada entera, determine si es un número cíclico al generar un valor verdadero si es así, y un valor falso si no lo es.

Además, para ser claros, la entrada puede contener ceros iniciales: por ejemplo, 0344827586206896551724137931

Esto se debe a que, si los ceros iniciales no están permitidos en los números, entonces 142857 es el único número cíclico en decimal.

Como se trata de código de golf, ¡la respuesta más corta en bytes gana!

FantaC
fuente
1
Hola y bienvenidos a PPCG. Esta no es una mala pregunta, pero si echa un vistazo a algunas de las preguntas publicadas recientemente, creo que verá que podría ser mejor. Específicamente, sería muy beneficioso para la comunidad si proporcionara más casos de prueba para trabajar. Cuando publique desafíos futuros, considere usar el sandbox .
FryAmTheEggman

Respuestas:

3

05AB1E , 9 6 bytes

¡Gracias a Emigna por guardar 3 bytes!

ā*€{ïË

Explicación:

ā        # Push range(1, len(input) + 1)
 *       # Multiply by the input
  €{     # Sort each element
    ï    # Convert to int to remove leading zeros
     Ë   # Check if all elements are equal

Utiliza la codificación 05AB1E . Pruébalo en línea!

Adnan
fuente
1
¿Cuál es el motivo ¦‚˜?
kalsowerus
1
@kalsowerus Si la entrada tiene un cero inicial, multiplicar por 1 lo haría desaparecer, lo que hace que no funcione 0588235294117647.
Adnan
2
@tfbninja Oh, vale, ¿agregar ceros a la izquierda después de la multiplicación también es algo a tener en cuenta? Estos son los resultados individuales ordenados que obtengo después de la multiplicación, con algunos ceros iniciales que faltan, lo que probablemente indicaría el problema aquí.
Adnan
1
Considere el número 0212765957446808510638297872340425531914893617como se menciona en los comentarios de otra respuesta. Mirando los números ordenados, supondría que devuelve falso, pero al eliminar ceros se vuelve verdadero.
Emigna
2
@tfbninja ¿El resultado del caso de prueba de Emigna es verdadero o falso?
Adnan
4

En realidad , 18 bytes

;;ru@≈*♂$♂S♂≈╔@S≈=

Pruébalo en línea! (espera entrada citada)

Explicación:

;;ru@≈*♂$♂S♂≈╔@S≈=
;;                  duplicate input twice
  ru                range(1, len(input)+1)
    @≈              convert input to an integer
      *             multiply input by each element in range
       ♂$♂S♂≈       convert each product to a string, sort the digits, and convert back to int
             ╔      uniquify: remove duplicate elements
              @S≈   sort input and convert to int
                 =  compare equality
Mego
fuente
1
@tfbninja Publiqué esto antes del bit sobre ceros iniciales. Tengo otra solución de 15 bytes que funcionará con ceros iniciales que editaré pronto.
Mego
1
¿Qué codificación de caracteres utiliza para lograr 18 bytes? Intenté UTF-8 y pesaba 32 bytes. EDITAR: Oh, ya veo, es la página de códigos 437.
Seudónimo
3

Python, 86 bytes

lambda n:all(sorted(n)==sorted(str(int(n)*i).zfill(len(n)))for i in range(2,len(n)+1))

Pruébalo en línea!

Ingrese los números como cadenas.

Uriel
fuente
1
@tfbninja debería funcionar en cualquier pitón (2 y 3)
Uriel
1
¿por qué falla con 0212765957446808510638297872340425531914893617?
J42161217
@Jenny_mathy ahora no lo hace.
Uriel
2

PHP, 64 bytes

for(;$i++<9;)$r+=($c=count_chars)($argn)==$c($argn*$i);echo$r>1;

Versión en línea

Jörg Hülsermann
fuente
2

Haskell, 36 33 32 45 bytes

c n=let l=length n in(10^l-1)`div`read n==l+1

Ejemplo de uso:

*Main> c "142857"
True

No creo que este algoritmo necesite ninguna explicación.

TOL

Gracias por las sugerencias: Nombre para mostrar genérico, Laikoni.

Gracias por la corrección: Antony Hatchkins.

EDITAR No, falla en "33".

Seudónimo
fuente
1
¿funciona para 052631578947368421?
J42161217
Sí, devuelve True en ese caso.
Seudónimo
2
Guarde algunos bytes reemplazando ns con n
Nombre genérico para mostrar
1
¿Se puede usar en <1lugar de ==0? También aquí hay un enlace TIO: ¡ Pruébelo en línea!
Laikoni
¿Qué tal 111111?
Antony Hatchkins
2

dc, 24 25 bytes

[1]sa0?dZd10r^1-r1+/rx=ap

Imprime "0" si el número no es cíclico; de lo contrario, "1". Requiere que el número se ingrese como una cadena.

Ejemplo de uso:

$ echo "[052631578947368421]" | dc -e '[1]sa0?dZd10r^1-r1+/rx=ap'
1
$ echo "[052631578947368422]" | dc -e '[1]sa0?dZd10r^1-r1+/rx=ap'
0

TOL

Explicación: Mismo algoritmo que mi envío de Haskell.

EDITAR No, falla en "33".

Seudónimo
fuente
1

Mathematica, 81 bytes

Length@Union@PadLeft[Sort/@IntegerDigits[ToExpression@#*Range@StringLength@#]]<2&

Pruébalo en línea!

cadena de entrada

Entrada

"010309278350515463917525773195876288659793814432989690721649484536082474226804123711340206185567"

Salida

Cierto

J42161217
fuente
FromDigitses más corto queToExpression
JungHwan Min
1
porque en este desafío necesita trabajar con entradas como 034324 ...
J42161217