Me encanta BATCH, a pesar de su sorprendente falta de comandos funcionales, a pesar de su falta de soporte no entero. ¿Por qué? Porque esto funciona:
SET var=SET
%var% i=0
Esto evaluaría para:
SET var=SET
SET i=0
Fantástico, ¿no es así? He usado esta técnica en un programa BATCH antes, ¡porque ahorra bytes!
Su desafío, si lo acepta, sería "jugar" a los programas BATCH de esta manera. Debe disminuir el tamaño de byte de un programa BATCH de entrada al incluir SET
declaraciones que evaluarían partes del programa y de ninguna otra manera modificar el programa. (Esto no permite, por ejemplo, cambiar el nombre de una variable a algo más corto. Tenga en cuenta que BATCH, además de las variables, no distingue entre mayúsculas y minúsculas). Su puntaje se calcula de la siguiente manera:
score = # of characters in your program + 5*(net result bytes in test cases below)
Me reservo el derecho de agregar más casos de prueba, a fin de desalentar el trabajo para optimizar el programa para los casos de prueba.
En aras de este desafío, sus SET
declaraciones no pueden contener caracteres de control ( |
, <
, >
, %
) o saltos de línea. No puede modificar el código que no sea para mover piezas de código dentro de una instrucción establecida. (Es decir, no puede eliminar espacios en blanco innecesarios, reemplazar EQU
con ==
, etc.) Asumiremos que las líneas terminan con \n
.
Casos de prueba
Cada caso de prueba está en un bloque de código separado, y cada caso de prueba es autónomo, lo que significa que debe jugar al golf solo asumiendo lo que se proporciona dentro de él. (Es decir, si está SET d=SET
en un programa, esa declaración no se dará automáticamente a ningún otro programa). Cada resultado de ejemplo se puede encontrar después de cada caso de prueba. Hay una línea entre los casos de prueba.
@ECHO OFF Incremento SET = 10 :lazo SI% incremento% EQU 0 GOTO final ECHO% incremento% SET / A% de incremento% - = 1 GOTO loop :fin SALIDA
@ECHO OFF SET / p INPUT = Ingrese la entrada aquí: SET R =% 1 ECHO Último carácter de entrada aquí:% R: ~ -1%
@ECHO OFF Incremento SET = 10 :mi GOTO f ECHO f :F GOTO g ECHO g :sol GOTO h ECHO h : h GOTO i ECHO i :yo GOTO j ECHO j : j SI 3 == 4 (ECHO 4) ELSE (ECHO 5) SI 5 == 3 (GOTO l) ELSE (GOTO k) : k Eco hecho. ECHO BATCH OUT !! SALIDA : l GOTO g
ECHO Hola, hola, hola, hola, hola, hola, hola !, hola, ello !, Lello.
Salidas de ejemplo:
@ECHO OFF Incremento SET = 10 :lazo SI% incremento% EQU 0 GOTO final ECHO% incremento% SET / A% de incremento% - = 1 GOTO loop :fin SALIDA(0 bytes guardados)
@ECHO OFF SET% i% = ingrese aquí: SET / p INPUT = Ingrese% i% SET R =% 1 ECHO Último carácter de% i %% R: ~ -1%(3 bytes ganados)
@ECHO OFF Incremento SET = 10 SET g = GOTO SET e = ECHO :mi % g% f % e% f :F % g% g %p.ej :sol % g% h % e% h : h %soldado americano % e% i :yo % g% j % e% j : j SI 3 == 4 (% e% 4) ELSE (% e% 5) SI 5 == 3 (% g% l) ELSE (% g% k) : k % e% Listo. % e% LOTE !! SALIDA : l % g% g(10 caracteres guardados)
SET% h% = ello, ECHO H% h% H% h% H% h% h% h% h% h% H% h% ¡Hola !, h% h% ello !, Lello.(1 personaje guardado)
AAA %increment%
→ set a=increment¶AAA %%a%%
no es válido y AAA %1 BBB %2
→ set a= BBB ¶AAA %1%a%%2
es válido. (iirc) Entonces necesitas formalizarlo. ( ¶
representa una nueva línea)
@
antes SET
), ¿es aceptable una salida externa del programa de golf?