Esta pregunta contará con una mecánica del juego "Path Of Exile". En este juego hay cosas llamadas MAPAS , son elementos que puedes usar para abrir áreas de alto nivel, también puedes combinar 3 de ellos para obtener uno mejorado que será La tarea de este desafío. Las combinaciones de actualización son las siguientes:
A Crypt Map 68 -> Sewer Map
E Dungeon Map 68 -> Channel Map
I Grotto Map 68 -> Thicket Map
O Dunes Map 68 -> Mountain Ledge Map
U Pit Map 68 -> Cemetery Map
T Tropical Island Map 68 -> Arcade Map
N Desert Map 68 -> Wharf Map
S Sewer Map 69 -> Ghetto Map
H Channel Map 69 -> Spider Lair Map
R Thicket Map 69 -> Vaal Pyramid Map
D Mountain Ledge Map 69 -> Reef Map
L Cemetery Map 69 -> Quarry Map
C Arcade Map 69 -> Mud Geyser Map
M Wharf Map 69 -> Museum Map
W Ghetto Map 70 -> Arena Map
F Spider Lair Map 70 -> Overgrown Shrine Map
G Vaal Pyramid Map 70 -> Tunnel Map
Y Reef Map 70 -> Shore Map
P Quarry Map 70 -> Spider Forest Map
B Mud Geyser Map 70 -> Promenade Map
V Museum Map 70 -> Arena Map
K Arena Map 71 -> Underground Sea Map
J Overgrown Shrine Map 71 -> Pier Map
X Tunnel Map 71 -> Bog Map
Q Shore Map 71 -> Graveyard Map
Z Spider Forest Map 71 -> Coves Map
Ó Promenade Map 71 -> Villa Map
É Underground Sea Map 72 -> Temple Map
Á Pier Map 72 -> Arachnid Nest Map
Í Bog Map 72 -> Strand Map
Ú Graveyard Map 72 -> Dry Woods Map
Ü Coves Map 72 -> Colonnade Map
Ö Villa Map 72 -> Catacomb Map
Ä Temple Map 73 -> Torture Chamber Map
Ë Arachnid Nest Map 73 -> Waste Pool Map
Ï Strand Map 73 -> Mine Map
Æ Dry Woods Map 73 -> Jungle Valley Map
Œ Colonnade Map 73 -> Labyrinth Map
Ñ Catacomb Map 73 -> Torture Chamber Map
Ÿ Torture Chamber Map 74 -> Cells Map
1 Waste Pool Map 74 -> Canyon Map
2 Mine Map 74 -> Dark Forest
3 Jungle Valley Map 74 -> Dry Peninsula Map
4 Labyrinth Map 74 -> Orchard Map
5 Cells Map 75 -> Underground River Map
6 Canyon Map 75 -> Arid Lake Map
7 Dark Forest Map 75 -> Gorge Map
8 Dry Peninsula Map 75 -> Residence Map
9 Orchard Map 75 -> Underground River Map
0 Underground River Map 76 -> Necropolis Map
? Arid Lake Map 76 -> Plateau Map
! Gorge Map 76 -> Bazaar Map
( Residence Map 76 -> Volcano Map
) Necropolis Map 77 -> Crematorium Map
- Plateau Map 77 -> Precinct Map
/ Bazaar Map 77 -> Academy Map
\ Volcano Map 77 -> Springs Map
| Crematorium Map 78 -> Shipyard Map
= Precinct Map 78 -> Overgrown Ruin Map
* Academy Map 78 -> Village Ruin Map
† Springs Map 78 -> Arsenal Map
‡ Shipyard Map 79 -> Wasteland Map
§ Overgrown Ruin Map 79 -> Courtyard Map
[ Village Ruin Map 79 -> Excavation Map
] Arsenal Map 79 -> Waterways Map
_ Wasteland Map 80 -> Palace Map
~ Courtyard Map 80 -> Shrine Map
{ Excavation Map 80 -> Maze Map
} Waterways Map 80 -> Palace Map
© Palace Map 81 -> Abyss Map
€ Shrine Map 81 -> Abyss Map
< Maze Map 81 -> Colosseum Map
> Vaal Temple Map 81 -> Colosseum Map
µ Abyss Map 82
» Colosseum Map 82
Estas líneas siguen este esquema:
Symbol of the map | Name of the map | Level of the map | Map received from combining
Tenga en cuenta que el mapa del abismo y el coliseo no se combinan en los de nivel superior, ya que son el nivel más alto.
ENTRADA:
su entrada será una cadena de símbolos que corresponden a los símbolos del mapa, por ejemplo, AAAEE que significaría 3 x mapa de criptas y 2 x mapa de mazmorras.
SALIDA:
La salida volverá a ser una cadena de símbolos que representaría la combinación más alta posible de los mapas de entrada. Se permite cualquier combinación de resultados siempre que presente todos los mapas.
EJEMPLOS
INPUT: A
OUTPUT: A
INPUT: AAA
OUTPUT: S
INPUT: AAAEEEIII
OUTPUT: SHR or HRS or RHS or SRH
INPUT: AAAAAAAAAE
OUTPUT: WE or EW
INPUT: »»»»»
OUTPUT: »»»»»
PUNTUACIÓN:
Tu puntuación se calculará a través de esta fórmula, que también se usa en el juego para calcular la reducción de daños:
POINTS = 1000 - (ByteCount / (ByteCount + 1000) * 1000);
PUNTOS EXTRA:
Si agrega codificación de longitud de ejecución tanto a la entrada como a la salida, multiplique sus puntos por 1.2, por ejemplo, entrada 3A en lugar de AAA. Puede omitir la entrada estándar si su respuesta lo respaldará.
Si su programa permitirá los nombres de mapas reales como entrada / salida y luego multiplique sus puntos por 1.5, puede omitir la parte "mapa" del nombre del mapa para que como entrada de ejemplo " cripta cripta cripta " y salida " alcantarilla " esté bien. Su script tampoco necesita entender la entrada estándar si usa este método. Este método también requiere un espacio entre los nombres tanto en la entrada como en la salida.
Si su cadena de salida va del mapa del nivel más bajo al más alto, entonces multiplique sus puntos por 1.08, los mapas con el mismo nivel no necesitan ser ordenados de ninguna manera en particular.
Puedes combinar los 3 puntos de bonificación.
¡RESPUESTA CON LA MAYORÍA DE GANANCIAS!
fuente
AEIAEIAEI
?2AEA
paraAAEA
? O será3AE
?Respuestas:
Haskell, 306 bytes, puntos = 766 * 1.2 * 1.08 = 992.343Podría exprimir algunos bytes más si alguien me ganara, pero por ahora lo dejaré como está.
Haskell, 284 bytes, puntos = 779 * 1.2 * 1.08 = 1009.346Exprimí algunos bytes más independientemente.
Haskell, 248 bytes, puntos = 801 * 1.2 * 1.08 = 1038.462
También voy a dejar algunas tablas que hice para que otros las usen:
Lo lees de arriba abajo, dos letras a la vez (o ignoras columnas impares). Tres A hacen una S, Tres S-es hacen una W y así sucesivamente. Las cadenas que terminan simplemente se envuelven a la primera columna en la siguiente línea. No hay tres mapas hace un>.
Aquí están las cadenas de mapas que puede hacer sin repeticiones:
fuente
C#,
364361 bytes, puntos = 734.754 x 1.08 = 793.534También podría hacer que la pelota ruede con una grande ...
Todavía tengo que pensar en una forma inteligente de mapear los caracteres codificados aparentemente aleatorios a su valor relativo, por lo que he utilizado un método de fuerza bruta por ahora.
Esto implementa la función de bonificación 3 en virtud del método de agrupación, que me da unos 58 puntos geniales.
Editar: reescribió el bucle de salida en join / zip
fuente
SWI-Prolog, 354 bytes, puntos = 738.552 * 1.08 = 797.64
Espera entradas como cadenas de códigos, por ejemplo,
a(`AAAEEEIII`,Z).
saldráZ = "SRH"
.Veré qué puedo hacer con los otros dos bonos ...
fuente
Javascript, 432 bytes, puntos = 698.32 * 1.08 * 1.2 = 905.02ECMAScript 6, 417 bytes, puntos = 705.72 * 1.08 * 1.2 = 914.61
Sin versión de minificador en línea: (la última versión se pasó a través de un minificador )
Corre con Babel
Probado con las siguientes entradas:
AAA
AAAEEEIII
3A3E3I
»»»»»
5»
Solución general
Básicamente, utilizando expresiones regulares siempre que sea posible
Nada lujoso aquí, solo reemplaza una coincidencia para la salida respectiva.
Por el 1.2 Bono
Regexing los números y la siguiente letra, el código legible es así:
Como puede ver,
s.match(y) - 0
la cadena coincidente se resta por 0, es decir, forzar un análisis int sin llamar realmenteparseInt()
.También
Array(p).join(s.match(z)[1])
básicamente se une a una serie de elementosp
vacíos , con el carácter encontrado en la coincidencia, esa es una manera fácil de imprimir una letra (digamosE
)p
cantidad de veces.Por la bonificación 1.08
Algoritmo de clasificación:
fuente
Javascript (ES6), 389 bytes, puntos = 719.942 * 1.08 * 1.2 = 933.045
A la cabeza, al menos por ahora ...
Pruébalo aquí:
Mostrar fragmento de código
El bono 1.2 es algo complicado en su formato. Si desea ingresar un número regular, coloque un
1
antes.Básicamente, esto escanea a través de cada personaje que tiene una actualización (todos excepto
µ
y»
), luego encuentra todos los conjuntos de tres de este personaje y los reemplaza con el personaje mejorado. Ordenar después de cada uno.replace
era la mejor manera de asegurarse de que esto siempre funcionara correctamente, por lo que era un bono automático. El bono 1.2 fue un poco más difícil, pero lo resolví en 45 bytes. La bonificación de 1.5 simplemente no vale la pena, ya que requiere una tonelada más de codificación y al menos duplicaría la longitud.¡Como siempre, las sugerencias son bienvenidas!
fuente