Un número triangular es un número que es la suma de n
números naturales del 1 al n
. Por ejemplo, 1 + 2 + 3 + 4 = 10
así 10
es un número triangular.
Dado un entero positivo ( 0 < n <= 10000
) como entrada (puede tomarse como un entero o como una cadena), devuelve el número triangular más pequeño posible que se puede agregar a la entrada para crear otro número triangular.
Por ejemplo 26
, entrada dada , agregando 10
resultados en 36
, que también es un número triangular. No hay números triangulares más pequeños 10
que se puedan agregar para 26
crear otro número triangular, por lo que 10
es el resultado correcto en este caso.
0
es un número triangular, por lo tanto, si la entrada es en sí misma un número triangular, la salida debería ser 0
Casos de prueba
Los casos se dan en el formato input -> output (resulting triangular number)
0 -> 0 (0)
4 -> 6 (10)
5 -> 1 (6)
7 -> 3 (10)
8 -> 28 (36)
10 -> 0 (10)
24 -> 21 (45)
25 -> 3 (28)
26 -> 10 (36)
34 -> 21 (55)
10000 -> 153 (10153)
Tanteo
Este es el código de golf, por lo que gana menos bytes en cada idioma .
26 -> 2
?Respuestas:
Java 8,
5857 bytesConjunto de pruebas en línea
Gracias a Dennis por un ahorro de 1 byte.
fuente
return-~i*i/2;
guarda un byte.int[]
lugar de unoint
. Pero eso significa tratar con matrices más adelante. Esto podría funcionar:x->{int i=0,m=0,n=x[0];while(n!=0)n+=n<0?++i:--m;x[0]=-~i*i/2;}
pero son 63 bytes.MATL ,
1312 bytes1 byte eliminado usando una idea (establecer intersección) de la respuesta 05AB1E de Emigna
Pruébalo en línea!
Explicación
Deje
t(n) = 1 + 2 + ··· + n
denotar eln
enésimo número triangular.El código explota el hecho de que, dada
n
, la solución está limitada port(n-1)
. Para ver esto, observe quet(n-1) + n
es igualt(n)
y entonces es un número triangular.Considere la entrada
8
como un ejemplo.fuente
Q
con tu argumento sobre la limitación?8
. Cuando la salida es igual al límitet(n-1)
, el código lo obtiene comot(n)-n
. Entoncest(n)
es necesario. Gracias por la idea de todos modos!Java (OpenJDK 8) , 83 bytes
Pruébalo en línea!
Créditos
fuente
m
. Entonces voy dea
abajo a0
. "pero usted está asignando tal vez 100 veces el mismo valora*a+a
quem
en elb
-loop", sí, yo no necesito hacerlo 100 veces, pero estoy ganando bytes por no romper elb
-loop anterior.Mathematica, 46 bytes
fuente
Neim ,
129 bytesEsto toma demasiado tiempo para computar (pero funciona dado un tiempo y memoria infinitos), por lo que en el enlace solo genero los primeros 143 números triangulares, usando
£𝕖
, que es suficiente para manejar una entrada de 10,000, pero no lo suficiente como para agotar el tiempo de espera.Advertencia: esto puede no funcionar en futuras versiones. Si es así, sustituya £ por 143
Explicación:
¡Intentalo!
fuente
9998
, el resultado esperado es3118753
, que está muy por encima del número 143 del triángulo (que es `10296).This takes too long to compute (but works given infinite time and memory)
£
a un número más alto, como 200.PHP , 45 bytes
Pruébalo en línea!
Es la variante más corta de
for(;!$r[$t];$t+=++$i)$r[$argn+$t]=~+$t;echo~$r[$t];
Expandido
PHP , 53 bytes
Pruébalo en línea!
Use el nuevo operador de nave espacial en PHP 7
Expandido
PHP , 55 bytes
Pruébalo en línea!
fuente
Java 8,
1101021009392 bytes-2 bytes gracias a @PeterTaylor .
-7 bytes gracias a @JollyJoker .
-1 byte gracias a @ceilingcat .
Explicación:
Pruébalo en línea.
fuente
Brachylog ,
1715 bytesPruébalo en línea!
Explicación
fuente
Python 2 , 59 bytes
Pruébalo en línea!
Utiliza la siguiente caracterización de los números triangulares
t
que se pueden agregarn
para obtener un número triangular:El código toma el mínimo de todos esos números triangulares.
fuente
Jalea , 8 bytes
Pruébalo en línea!
Cómo funciona
fuente
Japt ,
24231615 bytesPruébalo
1 byte guardado gracias a ETH
Explicación
fuente
æ!øV
. Aparte de eso, se ve muy bien :-)Octava ,
3836 bytes2 bytes de descuento gracias a @Giuseppe!
Función anónima que usa casi el mismo enfoque que mi respuesta MATL .
Pruébalo en línea!
fuente
05AB1E , 12 bytes
Utiliza la codificación 05AB1E . Pruébalo en línea!
fuente
Mathematica, 62 bytes
fuente
Solve[2*#==m(m+1)-n(n+1)
más corto (si funciona).Python 2 ,
787170 bytesSiete bytes guardados, gracias a los ovs y theespinosa
Un byte más salvado debido a la observación de Neil ,
x+9
es suffisant y comprobado para todos los números naturales0 <= n <= 10000
. También se verificó para enx+1
lugar dex+9
, funciona también.Pruébalo en línea!
fuente
n*-~n/2
lugar den*(n+1)/2
{n*(n+1)/2for n in range(999)}
lugar de explícitoset
y también usar en{}
lugar deset
en la tercera líneaJavaScript (ES6),
4342 bytesEditar: guardado 1 byte gracias a @PeterTaylor.
fuente
-++s
con--s
, como hice en mi versión Java derivada de forma independiente pero bastante similar. (Anexo: también debe cambiar la prueba an>0
).n>s
cheque fue un arenque rojo todo el tiempo!node --stack_size=
para aumentar su tamaño de pila.Python 3 ,
6044 bytes¡Gracias a @xnor por una sugerencia que ahorró 16 bytes!
Pruébalo en línea!
Fondo
Sea n un número entero no negativo. Si n es el k número triangular, tenemos
lo que significa que habrá una solución natural si y solo si 1 + 8n es un cuadrado extraño y perfecto. Claramente, no se requiere verificar la paridad de 1 + 8n .
Cómo funciona
La función recursiva n acepta un único entero no negativo como argumento. Cuando se llama con un solo argumento, k se establece de manera predeterminada en 1 .
Primero,
(8*n+1)**.5%1
comprueba si n es un número triangular: si (y solo si) lo es,(8*n+1)**.5
producirá un número entero, por lo que el residuo de la división por 1 producirá 0 .Si el módulo es 0 , la
and
condición fallará, haciendo que f regrese 0 . Si esto sucede en la llamada inicial a f , tenga en cuenta que esta es la salida correcta ya que n ya es triangular.Si el módulo es positivo, la
and
condición se mantiene yf(n+k,k+1)+k
se ejecuta. Esto llama a f nuevamente, incrementando n por k y k por 1 , luego agrega k al resultado.Cuando f (n 0 , k 0 ) finalmente devuelve 0 , retrocedemos de la recursión. El primer argumento en la primera llamada fue n , el segundo n + 1 , el tercero n + 1 + 2 , hasta que finalmente n 0 = n + 1 + ... k 0 -1 . Tenga en cuenta que n 0 - n es un número triangular.
Del mismo modo, todos estos enteros se agregarán al valor de retorno más interno ( 0 ), por lo que el resultado de la llamada inicial f (n) es n 0 - n , como se desee.
fuente
n
recursivo, puede escribir enn
lugar de(n+k)
.C # (.NET Core) ,
291281 bytesPruébalo en línea! Programa que toma una cadena como entrada y salida a través del código de salida.
Guardado 10 Bytes gracias a Kevin Cruijssen
fuente
class p{static int Main(string[]I){string d="0",s=I[0];int c=1,j,k;for(;;){j=k=0;string[]D=d.Split(' '),S=s.Split(' ');for(;j<D.Length;j++)for(;k<S.Length;k++)if(D[j]==S[k])return int.Parse(D[k]);j=int.Parse(D[0])+c++;d=d.Insert(0,$"{j} ");s=s.Insert(0,$"{j+int.Parse(I[0])} ");}}}
( 281 bytes )for(;;)
para hacer un bucle infinito es un buen golpe, y me aseguraré de pensar más detenidamente si usar var es realmente más eficiente que usar un tipo explícito pero combinando las declaraciones, y supongo que será más diligente en eliminar los corchetes innecesarios. En cuanto al programa vs. función, comencé con un lambda pero no pude ejecutarlo en TIO. Sé que un enlace TIO no es realmente necesario, pero es algo que me gusta ver en las respuestas de los demás, así que quería al menos algo similar en la mía.JavaScript (ES7),
4644 bytesIntentalo
fuente
r=x=0
?05AB1E , 8 bytes
Pruébalo en línea! o como un conjunto de pruebas
Explicación
fuente
Dyalog APL, 19 bytes
6 bytes guardados gracias a @KritixiLithos
Pruébalo en línea!
¿Cómo?
o←0,+\⍳⍵
- asignao
los primeros⍵
números triangulareso/⍨
- filtraro
poro∊⍨⍵+o
- números triangulares que se suman con⍵
producir triangulares⊃
- y toma el primerofuente
+\⍳⍵
debería funcionar en lugar de lo que está utilizando para generar los números triangulares.⊃
funciona en lugar de⌊/
Pari / GP , 54 bytes
Pruébalo en línea!
fuente
Haskell , 56 bytes
Pruébalo en línea!
fuente
Agregar ++ , 68 bytes
Pruébalo en línea! , o ver el conjunto de pruebas !
Incluso Java me está ganando. Realmente necesito agregar algunos comandos establecidos para Agregar ++
Cómo funciona
fuente
R ,
46444341 bytesPruébalo en línea!
Una función anónima con un argumento obligatorio
x
; calcula los primerosx+1
números triangulares como argumento opcional para jugar golf con unas llaves. Solíachoose
antes de ver la respuesta de Octava de Luis Mendo .Afeité algunos bytes de la respuesta de Luis Mendo, pero olvidé usar la misma idea en mi respuesta.
fuente
Jalea , 18 bytes
Pruébalo en línea!
fuente
Python 2 ,
8381 bytesPruébalo en línea!
fuente
APL (Dyalog Classic) ,
1614 bytesPruébalo en línea!
fuente
Clojure, 74 bytes
Elige tu favorito :) Los bucles pueden ser más cortos ...
fuente
Python 2 , 82 bytes
Pruébalo en línea
Esto fue creado modificando esta respuesta de la pregunta relacionada.
fuente