J'adore BATCH, malgré son manque choquant de commandes fonctionnelles, malgré même en raison de son manque de support non entier. Pourquoi? Parce que cela fonctionne:
SET var=SET
%var% i=0
Cela permettrait d'évaluer:
SET var=SET
SET i=0
Fantastique, non? J'ai déjà utilisé cette technique dans un programme BATCH , car elle économise des octets!
Votre défi, si vous l'acceptez, serait de "jouer" aux programmes BATCH de cette manière. Vous devez diminuer la taille en octets d'un programme BATCH d'entrée en incluant des SET
instructions qui évalueraient des parties du programme et en aucun cas modifier le programme. (Cela interdit, par exemple, de renommer un nom de variable en quelque chose de plus court. Gardez à l'esprit que BATCH, à part les variables, est insensible à la casse.) Votre score est calculé comme suit:
score = # of characters in your program + 5*(net result bytes in test cases below)
Je me réserve le droit d'ajouter plus de cas de test, afin de décourager de travailler pour optimiser le programme pour les cas de test.
Par souci de ce défi, vos SET
déclarations ne peuvent pas contenir des caractères de contrôle ( |
, <
, >
, %
) ou linebreaks. Vous ne pouvez pas modifier le code autrement que pour déplacer des morceaux de code à l'intérieur d'une instruction set. (Autrement dit, vous ne pouvez pas supprimer les espaces inutiles, les remplacer EQU
par ==
, etc.) Nous supposerons que les lignes se terminent par \n
.
Cas de test
Chaque scénario de test est dans un bloc de code distinct et chaque scénario de test est autonome, ce qui signifie que vous ne devez jouer au golf qu'en supposant ce qui y est contenu. (C'est-à-dire, si vous SET d=SET
dans un programme, cette déclaration ne sera pas automatiquement donnée à un autre programme). Chaque exemple de résultat peut être trouvé après chaque test élémentaire. Il y a une ligne entre les cas de test.
@ÉCHO OFF Incrément SET = 10 :boucle IF% increment% EQU 0 GOTO end ECHO% increment% SET / A% increment% - = 1 Boucle GOTO :fin SORTIE
@ÉCHO OFF SET / p INPUT = Entrez l'entrée ici: SET R =% 1 ECHO Dernier caractère d'entrée ici:% R: ~ -1%
@ÉCHO OFF Incrément SET = 10 : e GOTO f ECHO f :F GOTO g ECHO g :g GOTO h ECHO h : h GOTO i ECHO i :je GOTO j ECHO j : j SI 3 == 4 (ECHO 4) AUTRE (ECHO 5) SI 5 == 3 (GOTO l) AUTRE (GOTO k) : k ECHO Terminé. ECHO BATCH OUT !! SORTIE : l GOTO g
ECHO Bonjour, bonjour, bonjour, bonjour, bonjour, bonjour, bonjour !, bonjour, bonjour !, Lello.
Exemples de sorties:
@ÉCHO OFF Incrément SET = 10 :boucle IF% increment% EQU 0 GOTO end ECHO% increment% SET / A% increment% - = 1 Boucle GOTO :fin SORTIE(0 octets enregistrés)
@ÉCHO OFF SET% i% = entrez ici: SET / p INPUT = Entrez% i% SET R =% 1 ECHO Dernier caractère de% i %% R: ~ -1%(3 octets gagnés)
@ÉCHO OFF Incrément SET = 10 SET g = GOTO SET e = ECHO : e % g% f % e% f :F % g% g %par exemple :g % g% h % e% h : h % g% i % e% i :je % g% j % e% j : j SI 3 == 4 (% e% 4) AUTRE (% e% 5) SI 5 == 3 (% g% l) AUTRE (% g% k) : k % e% Terminé. % e% BATCH OUT !! SORTIE : l % g% g(10 caractères enregistrés)
SET% h% = bonjour, ECHO H% h% H% h% H% h% h% h% h% h% H% h% Bonjour !, h% h% ello !, Lello.(1 caractère enregistré)
AAA %increment%
→ set a=increment¶AAA %%a%%
n'est pas valide et AAA %1 BBB %2
→ set a= BBB ¶AAA %1%a%%2
est valide. (iirc) Vous devez donc le formaliser. ( ¶
représente une nouvelle ligne)
@
avant SET
), la sortie étrangère est-elle acceptable du programme joué?