Ich liebe BATCH, trotz des schockierenden Mangels an funktionalen Befehlen, trotz des Mangels an nicht ganzzahliger Unterstützung. Warum? Weil das funktioniert:
SET var=SET
%var% i=0
Dies würde zu folgenden Ergebnissen führen:
SET var=SET
SET i=0
Fantastisch, nicht wahr? Ich habe diese Technik schon in einem BATCH-Programm verwendet , weil es Bytes spart!
Ihre Herausforderung, sollten Sie dies akzeptieren, wäre es, BATCH-Programme auf diese Weise zu "golfen". Sie müssen die Bytegröße eines Eingabe-BATCH-Programms verringern, indem Sie SET
Anweisungen einschließen , die Teile des Programms auswerten und das Programm auf keine andere Weise ändern. (Dies verbietet beispielsweise das Umbenennen eines Variablennamens in einen kürzeren Namen. Beachten Sie, dass bei BATCH außer bei Variablen die Groß- und Kleinschreibung nicht berücksichtigt wird.) Ihre Punktzahl wird wie folgt berechnet:
score = # of characters in your program + 5*(net result bytes in test cases below)
Ich behalte mir das Recht vor, weitere Testfälle hinzuzufügen, um nicht daran zu arbeiten, das Programm für die Testfälle zu optimieren.
Im Interesse dieser Herausforderung, Ihre SET
Aussagen können keine Steuerzeichen enthalten ( |
, <
, >
, %
) oder Zeilenumbrüche. Sie dürfen den Code nur ändern, um Teile des Codes in einer set-Anweisung zu verschieben. (Das heißt, dass Sie nicht unnötig Leerzeichen entfernen, ersetzen EQU
mit ==
, etc.) Wir gehen davon aus, dass die Linien am Ende mit \n
.
Testfälle
Jeder Testfall befindet sich in einem separaten Codeblock, und jeder Testfall ist in sich abgeschlossen. Sie sollten also nur unter der Annahme spielen, was darin enthalten ist. (Wenn Sie also SET d=SET
in einem Programm arbeiten, wird diese Anweisung nicht automatisch an ein anderes Programm weitergegeben.) Jedes Beispielergebnis kann nach jedem Testfall gefunden werden. Es gibt eine Linie zwischen Testfällen.
@ECHO AUS SET Inkrement = 10 :Schleife IF% increment% EQU 0 GOTO end ECHO% increment% SET / A% Inkrement% - = 1 GOTO-Schleife :Ende AUSFAHRT
@ECHO AUS SET / p INPUT = Eingabe hier eingeben: SET R =% 1 ECHO Letztes Zeichen der Eingabe hier:% R: ~ -1%
@ECHO AUS SET Inkrement = 10 : e GOTO f ECHO f : f GOTO g ECHO g :G GOTO h ECHO h : h GOTO i ECHO i :ich GOTO j ECHO j : j IF 3 == 4 (ECHO 4) ELSE (ECHO 5) IF 5 == 3 (GOTO l) ELSE (GOTO k) : k ECHO Fertig. ECHO BATCH OUT !! AUSFAHRT : l GOTO g
ECHO Hallo, hallo, hallo, hallo, hallo, hallo !, hallo, hallo !, hallo.
Beispielausgaben:
@ECHO AUS SET Inkrement = 10 :Schleife IF% increment% EQU 0 GOTO end ECHO% increment% SET / A% Inkrement% - = 1 GOTO-Schleife :Ende AUSFAHRT(0 Bytes gespeichert)
@ECHO AUS SET% i% = hier eingeben: SET / p INPUT =% i% eingeben SET R =% 1 ECHO Letztes Zeichen von% i %% R: ~ -1%(3 Bytes gewonnen)
@ECHO AUS SET Inkrement = 10 SET g = GOTO SET e = ECHO : e % g% f % e% f : f % g% g %z.B :G % g% h % e% h : h % g% i % e% i :ich % g% j % e% j : j IF 3 == 4 (% e% 4) ELSE (% e% 5) IF 5 == 3 (% g% l) ELSE (% g% k) : k % e% Fertig % e% BATCH OUT !! AUSFAHRT : l % g% g(10 Zeichen gespeichert)
SET% h% = ello, ECHO H% h% h% h% h% h% h% h% h% h% h% h% Hallo !, h% h% ello !, Lello.(1 Zeichen gespeichert)
AAA %increment%
→set a=increment¶AAA %%a%%
ungültig undAAA %1 BBB %2
→set a= BBB ¶AAA %1%a%%2
gültig. (iirc) Also musst du es formalisieren. (¶
Stellt eine neue Zeile dar)@
vor dem gibtSET
) ist die externe Ausgabe vom Golfprogramm akzeptabel?Antworten:
Java 8, Java 10 ,
3884799/795 Programm + 484 Ausgabe =43681283/1279 gesamtEs gibt zwei Einschränkungen dieses Codes:
Aber hey - da ist ein Profi!
Der Code kann eine bessere Leistung erbringen als die vom Herausforderungsautor bereitgestellten Beispiele.
Diese Golfversion wurde von Kevin erstellt .
Java 8
Probieren Sie es online!
Java 10
Probieren Sie es online! .
Originalfassung
Es wird überhaupt nicht golfen, ich wollte nur ein bisschen Spaß haben, nicht leiden. Wenn Sie, verehrter Leser, diese Antwort Golf spielen möchten, tun Sie es bitte.
Beispielausgabe:
Probieren Sie es online!
quelle
import java.util.*
.