Dado un entero de entrada n >= 10
, genera el promedio de todas las rotaciones deduplicadas del entero.
Por ejemplo, para la entrada 123
, las rotaciones son 123
(sin rotación), 231
(una rotación) y 312
(dos rotaciones). El promedio de esos es (123 + 231 + 312) / 3
o 222
.
Como otro ejemplo, tómalo 4928
. Las rotaciones son 4928
, 9284
, 2849
, y 8492
. Tomar el promedio de esos cuatro números es igual 6388.25
.
Para otro ejemplo, para la entrada 445445
, las rotaciones deduplicados son 445445
, 454454
, y 544544
, por lo que la salida es 481481
.
Para la entrada 777
, solo hay una rotación deduplicada, por lo que la salida es 777
.
Reglas
- Si corresponde, puede suponer que la entrada / salida se ajustará al tipo entero nativo de su idioma.
- La entrada y salida se pueden dar por cualquier método conveniente .
- Un programa completo o una función son aceptables. Si es una función, puede devolver el resultado en lugar de imprimirlo.
- Las lagunas estándar están prohibidas.
- Este es el código de golf, por lo que se aplican todas las reglas habituales de golf, y gana el código más corto (en bytes).
code-golf
math
number-theory
AdmBorkBork
fuente
fuente
Respuestas:
Python 3 ,
3836 bytesToma los dígitos como argumentos separados. Gracias a @Rod por sugerir Python 3, ahorrando 2 bytes.
Pruébalo en línea!
fuente
APL (Dyalog) , 9 bytes
Una función monádica que toma un vector de dígitos como argumento.
Pruébalo en línea!
Tomo el promedio de los dígitos
+/÷≢
, luego lo repito por la longitud de la entrada≢⍴
y finalmente convierto desde la base 10.Conceptualmente, estoy tomando la suma de las rotaciones (sin llevar):
Esto solo se
4+2+9+8
repite 4 veces. Luego, convertir desde la base10
(que hace el transporte por mí) y dividir por la longitud. Aunque divido por la longitud anterior porque es equitativo y guarda bytes.fuente
Java 10,
163137767271 bytes-36 bytes gracias a @Nevay .
-61 bytes gracias a @ OlivierGrégoire al crear un puerto de @Dennis 'Python 3 respuesta .
-1 bytes tomando la entrada como una Lista de dígitos en lugar de String.
Explicación:
Pruébalo en línea.
fuente
n->{var s=new java.util.HashSet();var r=0d;for(int l=n.length(),x;l-->0;)if(s.add(x=new Integer(n=n.substring(1)+n.charAt(0))))r+=x;return r/s.size();}
, enfoque de flujo con 137 bytes:n->java.util.stream.IntStream.range(0,n.length()).map(i->new Integer(n.substring(i)+n.substring(0,i))).distinct().average().getAsDouble()
orElse(0)
lugar degetAsDouble()
.(int)
5 bytes de mote, si es necesario.Math.pow
ya se encarga de eso. Eso te ahorrará 3 bytes.(int)
y*.1
, por ejemplo, saldrá en6388.888...
lugar de6388.25
la entrada4928
. Y si lanzo todo o solo.pow
a unint
en su lugar, saldrá6388
.Casco , 5 bytes
Pruébalo en línea!
Explicación
Casco , 7 bytes
Pruébalo en línea!
Explicación
fuente
5
solución de byteṙ
oŀ
, y el primer personaje (a la izquierda) no esA
R ,
847364 bytesPruébalo en línea!
Entrada como lista de dígitos.
¡Gracias a MickyT por reducir 11 bytes! 8 bytes afeitados por la prueba de Dennis de que la deduplicación es innecesaria.
fuente
array(D,K+1:0)
es más corto quematrix(D,K+1,K)
un byte.05AB1E , 9 bytes
Pruébalo en línea!
fuente
v
con noy
, interesantegFÀD})¨Osg/
fue donde estaba pensando..æ = pop a compute permutations by function, usage: .æ<FUNC>}
comando? Yo tampoco, pero parece adecuado para esto.Stax , 6 bytes
Ejecutar y depurarlo
Este programa toma una cadena delimitada por comillas como entrada y expresa el promedio como una fracción reducida. Por ejemplo
777/1
, no es necesario desduplicar las rotaciones. Nunca cambia el resultado.Desempaquetado, sin golf y comentado, se ve así.
Ejecute este
fuente
Perl 6 , 15 bytes
Pruébalo en línea!
El promedio es el promedio de dígitos aplicado a cada posición decimal, por lo que el promedio de dígitos multiplicado por 111 ...
1 x $_
produce una cadena de 1s que se multiplican por cadenas.Toma una lista de dígitos como entrada. Una secuencia requeriría un .cache antes de la suma, y una entrada de número o cadena necesitaría un .comb.
fuente
Wolfram Language (Mathematica) , 22 bytes
Pruébalo en línea!
fuente
JavaScript (Node.js) , 43 bytes
Pruébalo en línea!
fuente
Jalea ,
65 bytesPruébalo en línea!
Cómo funciona
fuente
Japt , 8 bytes
Toma la entrada como una matriz de cadenas de un solo dígito.
Intentalo
Explicación
fuente
APL (Dyalog Unicode) ,
2114 bytes SBCSPruébalo en línea!
Función de prefijo tácito. Toma la entrada como una cadena.
Gracias a Adám por un ahorro esclarecedor de 7 bytes .
¿Cómo?
fuente
Python 2,
8377 bytesEDITAR: -6 bytes gracias a @ovs
fuente
Carbón , 11 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
fuente
J , 10 bytes
Este es un puerto de la gran solución APL de H.PWiz para J.
Toma una lista de dígitos como argumento.
Explicación:
+/%#
el promedio de los dígitos (divida%
la suma de los dígitos+/
por su número#
)#$
crea una lista de copias del promedio de acuerdo con el número de dígitos10#.
convertir formulario base 10Pruébalo en línea!
fuente
Perl 5
-lpF
,2422 bytesPruébalo en línea!
Hacerlo como una lista de dígitos es solo 1 byte más corto y se siente como hacer trampa:
Pruébalo en línea!
fuente
usrt
? : P/usrt
directorio? De todos modos, arreglado. GraciasRubí , 60 bytes.
Pruébalo en línea!
fuente
Pari / GP , 34 bytes
Toma la entrada como una lista de dígitos.
Pruébalo en línea!
fuente
Rubí , 33 bytes
Pruébalo en línea!
Un puerto de la respuesta Python 3 de Dennis
Aquí está mi intento cojo (74 bytes)
Pruébalo en línea!
fuente
C ++,
218208 bytes-10 bytes gracias a Zacharý
Y, para probar:
fuente
#include
y<
, y puede eliminar el{}
alrededor de ambos++c;
ys+=v;
. Es posible que pueda moverint s=0
al principio con sus otras variables.n=0
bucle for en el segundo, ya que debería haber llegado0
para entonces.m/=10;m+=std::pow(10.f,c-1)*t;
=>m=m/10+std::pow(10.f,c-1)*t
. ¿Y no usaría enint
lugar deauto
trabajar?int s=0;
con tus otras variables, ¿y necesitas las llaves alrededor dels+=v;
?n>0
=>n
podría funcionar.Pyth, 12 bytes
Probablemente mejorable.
Pruébalo aquí!
fuente
o
. Si hace eso y hace E / S como listas de dígitos, puede reducirlo a 8 bytes .Q
.J, 23 bytes
Toma la entrada como una cadena
Explicación
fuente
Matlab, 65 bytes
Voy a trabajar en esto, bastante seguro de que se puede hacer mejor.
fuente
Clojure, 139 bytes
Funciones de lenguaje bastante subóptimas para convertir secuencias de caracteres en enteros.
fuente
cc, 37 bytes
Este es un programa completo, que lee la entrada e imprime la salida:
Funciona separando el número en sus dígitos y multiplicando la media de los dígitos por el digito de longitud apropiado (que se acumula a
d
medida que avanzamos).fuente