El reto
Dadas dos cadenas, cada una de hasta 30, que consiste en caracteres ASCII imprimibles (códigos ), ¡colóquelos en una balanza en la menor cantidad de bytes de código! Esto consta de los siguientes pasos:
- Calcular y comparar los pesos de las cuerdas.
- Elija la escala de arte ASCII inclinada adecuadamente
- Coloque las dos cuerdas en la escala.
Las cadenas se pueden pasar como una matriz, dos argumentos o cualquier otro método razonable.
El peso de una cadena se define como la suma de los pesos de los caracteres de esa cadena, donde:
- Los espacios tienen un peso de 0 (
)
- Las letras minúsculas tienen un peso de 2 (
abcdefghijklmnopqrstuvwxyz
) - Las letras mayúsculas tienen un peso de 4 (
ABCDEFGHIJKLMNOPQRSTUVWXYZ
) - Todos los demás símbolos tienen un peso de 3 (
!"#$%&'()*+,-./0123456789:;<=>?@[\]^_`{|}~
)
Las escalas se ven así:
. _ _ El | _- * / \ | - * / \ _- * | / \ _- * | / \ / \ | * ------ * / \ | / \ | / \ | * ------ * | ______ | ______
_. / \ * -_ | / \ * - | / \ | * -_ / \ | * -_ * ------ * | / \ El | / \ El | / \ El | / \ El | * ------ * ______ | ______
. El | ______ | ______ / \ | / \ / \ | / \ / \ | / \ / \ | / \ * ------ * | * ------ * El | El | ______ | ______
Si la primera cadena es más pesada, use el primer dibujo como base de su salida; si la segunda cuerda es más pesada, use el segundo dibujo; Si las cuerdas tienen el mismo peso, use la tercera. Se permite el espacio en blanco al final.
Usaré un segmento del tercer dibujo como base para todos los siguientes ejemplos.
La primera cuerda debe colocarse en la bandeja izquierda y la segunda cuerda en la bandeja derecha.
Coloque una cadena en una bandeja colocando sus caracteres no espaciales dentro del área de 6x5 inmediatamente arriba de los guiones, como se marca con #
s aquí (puede terminar sobrescribiendo parte de la escala de equilibrio, eso está bien):
###### _ ###### ###### ###### / ###### \ * ------ *
Todos estos caracteres deben "resolverse", es decir. ya sea encima de un -
carácter u otro carácter de la cadena:
Incorrecto Incorrecto Correcto ____ ____ ____ f / \ / \ / \ l \ / \ / \ / \ / hov \ / s \ / oating \ / eri ng \ / ettled \ * ------ * * ------ * * ------ *
Además, toda la pila debe ser lo más plana posible, lo que significa que de las seis columnas de 1 ancho, la altura de la más alta y la más baja no deben diferir en más de 1:
INCORRECTO INCORRECTO CORRECTO CORRECTO [más alto: 5] [más alto: 4] [más alto: 5] [más alto: 2] [más corto: 0] [más corto: 2] [más corto: 4] [más corto: 2] 5__5_ ____ 5_5__ ____ 45445 y / \ 445454 / \ 45445 $% & $ @ 445454 / \ / 45445 &% @% $ & 445454% & $ @% & / 45445 \ / & $ @ $ &% \ / 445454 \ / $ @ $% $$ \ * ------ * * ------ * * ------ * * ------ *
El orden exacto / disposición de los personajes no importa. Los siguientes son todos los arreglos válidos para la cadena "¡Sopesa tus palabras!":
____ ____ ____ ____ / \ / \ / \ / \ ds! \ / owd oe \ u! Wd \ ourwor Wihuos yoiwgr eghioo / Weighy \ / egyrr! \ / Wrhd! S \ / rrsuwy \ * ------ * * ------ * * ------ * * ------ *
Casos de prueba
ENTRADA: "CODE GOLF", "desafíos de codificación" PESOS: 32, 32 EJEMPLO DE SALIDA: . El | ______ | ______ / \ | / \ / \ | nge \ s / OO \ | desafíos / CFGLED \ | /codificación\ * ------ * | * ------ * El | El | ______ | ______
ENTRADA: "", "$" PESOS: 0, 3 EJEMPLO DE SALIDA: _. / \ * -_ | / \ * - | / \ | * -_ / \ | * -_ * ------ * | / \ El | / \ El | / \ El | PS El | * ------ * ______ | ______
ENTRADA: "¡SABES LO QUE DICEN!", "There_always_a_relevant_xkcd" PESOS: 75, 65 EJEMPLO DE SALIDA: . tr_a_s El | _hekx_y | - * elcdta _- * | renovar _- * | / e's_al \ T / \ | * ------ * AUYOHY | A! HWYK | / OTSMEW \ | * ------ * | ______ | ______
+1
. Primero: si los espacios no "pesan" nada y no se incluyen en la obra de arte, ¿por qué incluirlos? Es una sobrecarga innecesaria filtrarlos primero. En segundo lugar: esto se siente como un desafío "2 en 1" / camaleón para mí - Desafío 1: Determine qué cuerda es "más pesada", Desafío 2: Genere algo de arte ASCII.Respuestas:
Carbón , 110 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Toma la entrada como una matriz de dos cadenas. Explicación:
Elimina los espacios de ambas cadenas.
Asumir el equilibrio de los pesos.
Pase sobre ambas cuerdas.
Resta la diferencia de carrera del peso de la cuerda.
Imprime la base de la balanza.
Suponga que ambas bandejas están 3 del suelo.
Si los pesos no se equilibraban ...
... calcule la altura de la bandeja izquierda ...
... dibuje la balanza inclinada hacia la derecha ...
... y reflexionar si la sartén izquierda era más pesada.
De lo contrario, dibuje un equilibrio de nivel.
Salta a la primera bandeja de escala.
Pase sobre las entradas.
Dibuja la bandeja de escala.
Corte la entrada en subcadenas de longitud 6 e imprímalas al revés para que llenen la bandeja hacia arriba.
Salta a la segunda bandeja de escala.
fuente
Python 2 ,
11011071855837 bytes-216 bytes con compresión de cadena
-18 bytes al reducir algunas repeticiones
Pruébalo en línea!
Corre como
A(string_one, string_two
.w
calcula el peso de la cadena de forma recursiva.t
es el texto comprimido y entrelazado de las seis escalas posibles, que se comprime muy bien.p
toma la cadena (con espacios eliminados), el peso de la cadena y el lado del equilibrio en el que está la cadena, y crea un bloque de caracteres de 5x6.A
toma las cuerdas y construye sus bloques conp
. La cadena gigante en la parte inferior tiene tres cadenas de formato entrelazadas y comprimidas.fuente
JavaScript (ES6),
340337 bytesToma la entrada como una matriz de 2 matrices de caracteres. Dibuja el carácter de salida por carácter.
Pruébalo en línea!
¿Cómo?
Ahora invocamos la segunda función auxiliar para dibujar la salida:
Donde
INDEX
se calcula de la siguiente manera:fuente
Java 10,
1043993988983 bytes-5 bytes gracias a @ceilingcat .
Las entradas son dos cadenas, lo que dará como resultado una matriz de caracteres como resultado.
Pruébalo en línea.
Explicación:
fuente