Un número agradable (de acuerdo con esta definición) es un número que se puede pasar a través del siguiente proceso (usemos 41802000
como ejemplo):
- Separe los números idénticos finales (
41802000 => [41802, 000]
) - Ordene la primera mitad de los dígitos y tome el máximo (
[41802, 000] => [8, 000]
) - Toma la longitud del elemento final. Llame a los elementos resultantes A y B (
[8, 000] => A=8, B=3
) - ¿Es N B = A para cualquier número entero
N
? (True
en este ejemplo; 2 3 = 8)
Si la entrada resulta True
del siguiente proceso, se considera agradable.
Su tarea es tomar un número entero x
y mostrar si x
es un número agradable. Puede generar dos valores distintos para verdadero y falso, pero indique lo que está utilizando en su respuesta. x
se garantiza que tiene al menos dos dígitos distintos (por ejemplo, 111
es una entrada no válida). Como con la mayoría de los desafíos, puede tomar x
como una cadena o una lista de dígitos.
Este es un código de golf, por lo que el código más corto en bytes gana.
Casos de prueba
Input Output
41802000 1
100 1
123456788 0
451111111 0
234543454545444 0
12 1
41902000 0
92599 1
code-golf
math
decision-problem
caird coinheringaahing
fuente
fuente
list of digits
- ¿sería esta una lista de los caracteres numéricos ASCII, o una lista de enteros del 0 al 9Respuestas:
APL (Dyalog) , 36 bytes
Pruébalo en línea!
¿Cómo?
Casi un poema
⌽⍵
- invierta la entrada una vez,1,2=/
- Obtenga la lista de diferencias.⌊\
- mantener solo el primer grupo de unos,⌽
- y voltéalo para completar.o←
- asignar ao
,~o
- cambiar unos y cero (s),⍵/⍨
- filtrar la entrada con ella,⍎¨
- convertir el resultado en una lista de cada dígito,⌈/
- Y obtener el máximo. (eso es un)⍵/⍨o
- filtrar la entrada cono
unalt (ered),≢
- y toma la longitud, eso sería B.÷
- obtener uno dividido por este resultado,*
- y lleva A a ese poder para ti.⊢≡⌊
- entero?fuente
05AB1E , 11 bytes
Pruébalo en línea!
Explicación
Emigna guardó 1 byte.
Se basa en el hecho de que si A es un número entero positivo N elevado a la potencia de B , entonces N = A 1 / B , por lo tanto, debe ser un número entero.
fuente
UZX
debería funcionar en lugar des{θs
41902000
(debería ser falso).418802000
Haskell ,
85757271 bytesEditar : -10 bytes tomando una lista de dígitos en lugar de una cadena. Gracias a WhatToDo por señalar que esto está permitido. -3 bytes gracias a la solución de Ourous en Clean . -1 byte gracias al usuario 28667 .
Pruébalo en línea! Toma la entrada como una lista de dígitos. Ejemplo de uso:
f [4,1,8,0,2,0,0,0]
rendimientosTrue
.Explicación:
Dada una entrada
s=[4,1,8,0,2,0,0,0]
, quereverse
la lista y separar los elementos principales conspan(==last s)
:([0,0,0],[2,0,8,1,4])
. La coincidencia de patrones en(b,a)
rendimientosb=[0,0,0]
ya=[2,0,8,1,4]
.La comprensión de la lista
or[n^length b==maximum a|n<-[1..a]]
verifica si cualquier número enteron
en el rango de1
a9
satisfacen^length b==maximum a
, es decirn^3=8
.fuente
a
fallaría en casos como477
.b
, pero verifico cada número enteron
desde0
hasta9
(anteriormente desde0
hastaa
). Esa es exactamente la especificación por lo que veo.Haskell ,
10489 bytes@Laikoni encontró una solución más corta , pero esto es lo mejor que pude hacer. Gracias @Laikoni por informarme que también podemos aceptar listas de dígitos como entrada.
Explicación:
Pruébalo en línea!
fuente
any(==a)
cuando podrías usarelem a
?2888
?head.maximum
aún es más corto quemaximum.concat
2 bytes y mantiene la funcionalidad.R , 80 bytes
Pruébalo en línea!
Utiliza
utf8ToInt - 48
para dividir el número en dígitos. Esto arroja una advertencia de la conversión a una cadena.Usando rle obtenga el recuento de los dígitos finales y el valor máximo de los primeros dígitos. Devuelve verdadero si cualquiera del rango 0 al valor máximo de la potencia del recuento final es igual al valor máximo.
Creo que hay más oportunidades de golf, pero eso puede esperar hasta mañana.
fuente
function(x,R=rle(rev(utf8ToInt(x)-48)))!max(R$v[-1])^(1/R$l[1])%%1
(66 bytes, tomandox
como una cadena)Jalea , 11 bytes
Toma la entrada como una lista de dígitos.
Pruébalo en línea!
Cómo funciona
fuente
R, 66 bytes
Esta respuesta es más o menos una mezcla de las respuestas de MickyT y NofP , y a pedido, aquí está:
Toma x como una cadena.
fuente
JavaScript (ES7), 66 bytes
Toma la entrada como una cadena o una matriz de caracteres. Devuelve un booleano.
Casos de prueba
Mostrar fragmento de código
fuente
Limpias ,
13012811893 bytesDefine la función
@
, tomando una lista de dígitos enteros.Pruébalo en línea!
fuente
Python 2 ,
9578 bytesPruébalo en línea!
fuente
i
, puede soltar ellen
alcance de 78 bytesR , 93 bytes
Pruébalo en línea!
El código toma un entero como entrada y devuelve FALSO si el número es agradable, y VERDADERO de lo contrario.
fuente
Python 3 ,
8885 bytesSin golf:
True
oFalse
.a ** (1 / b)
esté desactivada en al menos 0.5 de b √a, lo que requiere un valor por encima de 2 53 (o cualquier otra raíz flotante y mantisa longitud que Python utiliza, versys.float_info
).fuente
int
yrange
. (En algún momento sería más factible estimar el rango de búsqueda en base a esoa^(1/b)
que calcular grandes cantidades de poderes.)C (gcc) ,
144126117 bytesPruébalo en línea!
fuente
Ruby , 64 bytes
Entrada como una cadena, devuelve verdadero si:
Pruébalo en línea!
fuente
Perl 6 , 55 bytes
Pruébalo en línea!
Después de la evaluación de la expresión regular inicial, que solo puede tener éxito si la entrada es un número entero positivo,
$0
contiene la parte inicial del número y$1
los dígitos repetidos finales.El
comb
método sin argumentos, aplicado a una cadena, devuelve una lista de los caracteres, que en contexto numérico se evalúa según la longitud de la lista. Entonces$0.comb.max
es el mayor de los dígitos en el prefijo, y$1.comb
es la longitud del sufijo.Luego verificamos si
any(^10)
(es decir, la unión o de los números del 0-9), cuando se eleva a la potencia de la longitud del sufijo, es igual al dígito más grande en el prefijo. Laso
evaluación booleana de las fuerzas de la unión resultante, que de otro modo estaría bien por sí sola como un valor verdadero, pero el desafío requiere que solo se devuelvan dos valores distintos.fuente
.
lugar de\d
.Kotlin , 106 bytes
Salida: verdadero / falso
Pruébalo en línea!
fuente
Agregar ++ , 21 bytes
Pruébalo en línea!
Han pasado 3 meses y medio, espero no estar ninja a nadie.
fuente
C # (.NET Core) , 132 bytes
Pruébalo en línea!
Expresiones de gratitud
-12 bytes gracias a @KevinCruijssen
DeGolfed
fuente
i=n.Length-2;for(;i>=0;i--)
se puede jugar golfi=n.Length-1;for(;i-->0;)
y&&
golf&
.using System;
y usandoSystem.Math.Pow
directamente.-48
se puede jugar golf por -3 bytes.Japt ,
2618 bytesPruébalo en línea!
Toma la entrada como una cadena, devuelve
1
números agradables, de lo0
contrario.Breve explicación:
Tome la primera entrada y divídala por valores donde
(x,y) => x===y
sea verdadero. Por ejemplo'41802000'
a['4','1','8','0','2','000']
.Tome la matriz desde el primer paso, eliminar el último elemento y obtener su longitud, produciendo B .
Encuentre el elemento más grande en la matriz restante, produciendo A , llévelo a la potencia
1/B
y luego regrese si el resultado es divisible por uno.Primera vez que trabaja con Japt, muy abierto a cualquier recomendación.
Afeitado de 8 bytes gracias a ETHproductions .
fuente
ó¶
. 2) No estoy seguro de por qué tiene elv
en la segunda línea, ya que solo convierte la cadena a minúsculas y no tiene ningún efecto en la longitud ;-) 3) Puede evitar el!(U
en la última línea cambiando%1
av1
, que devuelve1
si el asunto es divisible por 1 o de lo0
contrario.Clojure, 168 bytes
Pruébalo en línea!
fuente
Carbón , 33 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Salidas a
-
para números agradables. Explicación:Divide la entrada
q
en caracteres.Elimine el último carácter
q
y empújelo au
(predefinido en una lista vacía).Haga estallar y empujar repetidamente mientras que el último carácter de
q
es el primer carácter deu
.Toma el dígito máximo de
q
y elevalo a la potencia del recíproco de la longitud deu
, luego verifique si el resultado es un número entero.fuente
Pitón 2 ,
9185 bytesPruébalo en línea!
fuente
Perl 5 , 73 + 1 (
-p
) = 74 bytesPruébalo en línea!
fuente
Java 8, 125 bytes
Puerto de la respuesta de C # .NET de @ Ayb4btu .
Pruébalo en línea.
Explicación:
fuente
Pip ,
322221 bytesUsos
1
para falsey y0
para la verdad , guardando un byte. Pruébalo en línea!fuente
Pyth, 29 bytes
Banco de pruebas
Traducción de Python 3:fuente