Eu amo BATCH, apesar de sua falta chocante de comandos funcionais, apesar de ainda devido à falta de suporte não inteiro. Por quê? Porque isso funciona:
SET var=SET
%var% i=0
Isso avaliaria:
SET var=SET
SET i=0
Fantástico, não é? Eu usei essa técnica em um programa BATCH antes, porque salva bytes!
Seu desafio, se você o aceitar, seria "jogar golfe" nos programas BATCH dessa maneira. Você deve diminuir o tamanho de byte de um programa BATCH de entrada incluindo SET
instruções que seriam avaliadas em partes do programa e de nenhuma outra maneira modificar o programa. (Isso proíbe, por exemplo, renomear um nome de variável para algo mais curto. Lembre-se de que BATCH, além das variáveis, não diferencia maiúsculas de minúsculas.) Sua pontuação é calculada da seguinte forma:
score = # of characters in your program + 5*(net result bytes in test cases below)
Reservo-me o direito de adicionar mais casos de teste, para desencorajar o trabalho de otimizar o programa para os casos de teste.
Por causa deste desafio, suas SET
declarações não podem conter caracteres de controle ( |
, <
, >
, %
) ou quebras de linha. Você não pode modificar o código senão mover partes do código dentro de uma instrução set. (Ou seja, você não pode remover espaços em branco desnecessários, substituir EQU
por ==
etc.) Assumiremos que as linhas terminam com \n
.
Casos de teste
Cada caso de teste está em um bloco de código separado e cada caso de teste é independente, o que significa que você deve jogar golfe apenas assumindo o que é fornecido dentro dele. (Ou seja, se você estiver SET d=SET
em um programa, essa declaração não será dada automaticamente a nenhum outro programa). Cada exemplo de resultado pode ser encontrado após cada caso de teste. Há uma linha entre os casos de teste.
@ECHO OFF SET incremento = 10 : loop IF% incremento% EQU 0 GOTO final ECHO% incremento% SET / A% incremento% - = 1 Loop GOTO :fim SAÍDA
@ECHO OFF SET / p INPUT = Insira a entrada aqui: SET R =% 1 ECHO Último caractere de entrada aqui:% R: ~ -1%
@ECHO OFF SET incremento = 10 : e GOTO f ECHO f : f GOTO g ECHO g : g GOTO h ECHO h : h GOTO i ECHO i :Eu GOTO j ECHO j : j IF 3 == 4 (ECHO 4) ELSE (ECHO 5) SE 5 == 3 (GOTO l) MAIS (GOTO k) : k ECHO Feito. ECHO BATCH OUT !! SAÍDA :eu GOTO g
Olá, olá, olá, olá, olá, olá, olá !, olá, ello !, olá.
Exemplo de saídas:
@ECHO OFF SET incremento = 10 : loop IF% incremento% EQU 0 GOTO final ECHO% incremento% SET / A% incremento% - = 1 Loop GOTO :fim SAÍDA(0 bytes salvos)
@ECHO OFF SET% i% = entrada aqui: SET / p INPUT = Digite% i% SET R =% 1 Último caractere do ECHO de% i %% R: ~ -1%(3 bytes ganhos)
@ECHO OFF SET incremento = 10 SET g = GOTO SET e = ECHO : e % g% f % e% f : f % g% g %por exemplo : g % g% h %Eh : h % g% i % e% i :Eu % g% j % e% j : j IF 3 == 4 (% e% 4) ELSE (% e% 5) IF 5 == 3 (% g% l) ELSE (% g% k) : k % e% Concluído. % e% BATCH OUT !! SAÍDA :eu % g% g(10 caracteres salvos)
SET% h% = ello, ECHO H% h% H% h% H% h% h% h% h% h% H% h% Olá !, h% h% ello !, Lello.(1 caractere salvo)
AAA %increment%
→ set a=increment¶AAA %%a%%
é inválido e AAA %1 BBB %2
→ set a= BBB ¶AAA %1%a%%2
é válido. (IIRC) Então você precisa formalizá-lo. ( ¶
representa uma nova linha)
@
antes do SET
), a saída estranha é aceitável no programa de golfe?