Escriba un programa o función para producir la siguiente salida en el orden correcto.
EDITAR: ¡ Los símbolos no son matemáticos! Los números solo representan datos únicos y los +
y -
podrían ser dos símbolos arbitrarios.
Tome una entrada entera no negativa n. La primera línea es siempre -
, incluso para n = 0.
- Si la línea actual es
-
, la siguiente línea es1+2+ ... (n-1)+n-
- n = 4:
-
=>1+2+3+4-
- n = 4:
- Si el último entero es igual a n, elimine todos los enteros del final seguidos inmediatamente por a
-
, luego cambie el último+
a-
- n = 4:
1-2+3-4-
=>1-2-
- EDITAR: cuando la cadena está llena (se incluyen todos los enteros del 1 al n), elimine todos los enteros del final seguidos de a
-
, hasta llegar a un entero seguido de a+
. Deje ese número entero pero cambie su seguimiento+
a un-
- Usando el mismo ejemplo que el anterior (que no sigue
-
), elimine4-
, elimine3-
, cambie2+
a2-
.1-
no cambia desde que nos detenemos en2
. Resultado:1-2-
- n = 4:
- Si el último entero es menor que n, agregue los enteros restantes con un
+
después de cada uno, excepto el entero final que debería haber-
agregado- n = 4:
1+2-
=>1+2-3+4-
- EDITAR: si la cadena actual no está llena (no contiene todos los enteros del 1 al n), agregue cada entero que no esté incluido en orden ascendente hasta n-1 con un
+
después de cada uno, y luego agregue el último entero n seguido por un-
- Si la línea actual es
1-
, agregar2+
, agregar3+
que es n-1 si n = 4. Entonces anexar4-
. Resultado:1-2+3+4-
- n = 4:
- Si la línea actual contiene todos los enteros y cada uno es seguido inmediatamente por un
-
, salga del código- n = 4:
1-2-3-4-
=> FIN
- n = 4:
No debe haber espacios iniciales o finales en ninguna línea. Debe haber un salto de línea entre cada línea. Puede haber o no un salto de línea en la última línea.
EDITAR: debe probar su código hasta al menos n = 10 (más de 1000 líneas de salida, por lo que no puedo incluirlo aquí). ¡Cualquier número que no haga que su código se quede sin recursos debería (eventualmente!) Producir el resultado correcto, ¡pero no tiene que esperar a que termine el universo!
Este es el código de golf , por lo que gana el código más corto en bytes.
Entrada n = 0:
-
Entrada n = 1:
-
1-
Entrada n = 2:
-
1+2-
1-
1-2-
Entrada n = 4:
-
1+2+3+4-
1+2+3-
1+2+3-4-
1+2-
1+2-3+4-
1+2-3-
1+2-3-4-
1-
1-2+3+4-
1-2+3-
1-2+3-4-
1-2-
1-2-3+4-
1-2-3-
1-2-3-4-
s*=<condition>
Python 2 ,
136141133 bytesPruébalo en línea!
El primero
-
(des) sorprendentemente agregó unos pocos bytes al código.fuente
-
líneas.Python 2 ,
150164159154146118 bytes115112 bytesPruébalo en línea!
Editar: ¡Uy! También tiene que funcionar para números mayores que 4 ... luego escamotear ... hasta que me di cuenta de que estaba pensando demasiado y ahorré 28 bytes ... y luego 6 más a través de pequeños campos de golf.
fuente
Pyth, 23 bytes
Demostración
La base de este programa es notar que, aparte de la inicial
-
, la secuencia más y menos corresponde a la secuencia estándar de combinaciones de+
y-
con reemplazo, con todo el resto+
eliminado.Explicación:
fuente
Python 2 , 73 bytes
Pruébalo en línea!
fuente
Haskell , 70 bytes
Pruébalo en línea!
fuente
Python 3 , 305 bytes
Pruébalo en línea!
fuente
<tab><space>
cuando<space><space>
sería el mismo número de bytes? Supongo que si<space>
<tab>
q[-1]
aq[0]
. Por cierto: mezclar pestañas y espacios no funciona en Python 3, por lo que el código actual produce un error.