El reto
Dada una cadena de entrada (o matriz) que consta de <
y >
, genera una secuencia (matriz o cadena) de enteros de manera que:
- todos los operadores son correctos cuando se aplican en orden entre números consecutivos en la salida
- todos los enteros son positivos (1 o mayor)
- la suma de los enteros es tan pequeña como es matemáticamente posible
Las entradas pueden variar para coincidir con "mayor que" y "menor que" en el idioma elegido.
Como salida alternativa, solo especifique la suma de los números en la salida. Indique qué versión está resolviendo en su título de Respuesta.
Se aplican las exclusiones y reglas habituales, gana los bytes más pequeños.
Puede suponer que la cadena de entrada nunca conducirá a un desbordamiento de enteros en su idioma, si eso ayuda.
Ejemplos
>
da2 1
qué sumas a3
>>>
da4 3 2 1
qué sumas a10
><
da2 1 2
qué sumas a5
da
1
qué sumas a1
>>>>>>>>>
da10 9 8 7 6 5 4 3 2 1
qué sumas a55
>><<>><>>>
da3 2 1 2 3 2 1 4 3 2 1
qué sumas a24
><>><>><>
da2 1 3 2 1 3 2 1 2 1
qué sumas a18
<<<<>
da1 2 3 4 5 1
qué sumas a16
<<<<><<>
da1 2 3 4 5 1 2 3 1
qué sumas a22
>><<
da3 2 1 2 3
qué sumas a11
code-golf
sequence
mathematics
simonalexander2005
fuente
fuente
>
y<
?><>
Respuestas:
Jalea , 19 bytes
Pruébalo en línea!
El valor de cada número es max ( número de
>
inmediatamente a su derecha , número de<
inmediatamente a su izquierda ) + 1 .Alternativamente...
Pruébalo en línea!
fuente
> <> ,
4038 bytesPruébalo en línea!
Un lenguaje apropiado. Para referencia
><>
sí mismo rinde 2,1,2,1.Cómo funciona:
fuente
Python 3, 93 bytes
Pruébalo en línea!
Descifrado:
fuente
Haskell , 119 bytes
Pruébalo en línea!
Explicación
La idea aquí es que tenemos carreras de cualquiera de
>
s o<
s, que cada mapa para ascender y descender rangos. Entonces usamosgroup
para dividir la cadena en grupos de caracteres consecutivos. Nuestro trabajo es unirlos de la manera adecuada.Cuando tengamos
<>
, queremos unir las dos listas, tomando el valor final más grande, por ejemplose divide
mapeado a rangos
Luego, cuando cosimos, lo dejamos caer
3
porque es más pequeño (3
no es más grande que7
).Cuando tenemos
><
que hacemos lo contrario, soltamos el valor más grande.El código real logra esto haciendo un operador
%
. La definición de%
es bastante compleja, pero básicamente se lee de izquierda a derecha haciendo un seguimiento de cuántos caracteres consecutivos son iguales. Hace esto a la izquierda tenía valor del operador. Cuando llegamos a un lugar donde los personajes cambian, realizamos la costura como describí.fuente
(2%)
?%
con2
como primer argumento.main
implementación completa ?Retina 0.8.2 , 36 bytes
Pruébalo en línea! El enlace incluye casos de prueba. Explicación:
Inserte
1
s antes, entre y después de<
s y>
s.Incremente repetidamente los enteros hasta que se satisfagan todas las comparaciones.
Suma los enteros y convierte a decimal.
fuente
Java 10,
198181bytesPruébalo en línea.
Explicación:
fuente
Haskell , 87 bytes
Pruébalo en línea!
Un puerto de mi respuesta Jelly.
fuente
Stax , 21 bytes
Ejecutar y depurarlo
Funciona mediante la codificación de la longitud de ejecución y luego concatenando los rangos generados juntos. Desempaquetado, sin golf y comentado, se ve así.
Ejecute este
fuente
Perl 5
-p
, 53 bytesPruébalo en línea!
fuente
Rojo , 185 bytes
Después de la explicación del usuario 202729 ...
Pruébalo en línea!
fuente