התגובות שלי בפורום
-
מאתתגובות
-
yoavsrמשתתף
קוד קצר ב-Kotlin שמוצא פתרון ללא שימוש בסוגרים (שימוש בסוגרים יהיה יותר מורכב). לא אפרסם את הפתרונות כדי לא לעשות ספויילרים 🙂
הערה: בשביל להמיר טקסט לתרגיל ואז למספר, אני משתמש בספרייה https://github.com/uklimaschewski/EvalEx , אבל אפשר להשתמש בכל מנוע אחר כמובן.
- התגובה הזו עודכנה לפני לפני 8 שנים, 5 חודשים ע"י yoavsr.
yoavsrמשתתףבגרסה החדשה לא נערך שינוי בפונקציונליות של המנוע עצמו, ככה שכל מה שהיה נכון לשנה שעברה נכון גם השנה.
הדבר היחיד ששונה הוא מה נעשה עם התוצאות של ההרצה.
אני מצרף לדוגמה הרצה של שלב הבתים: https://github.com/yoavst/corewars8086/blob/master/src/main/java/il/co/codeguru/corewars8086/runner/GroupsRunner.kt
yoavsrמשתתףמערכת הבנייה היא maven.
yoavsrמשתתףאנחנו (NightMare) כולנו מכיתה י' ואין כוכבית ליד השם שלנו.
בנוסף גם קבוצת NOVA כולה מכיתה י'.- התגובה הזו עודכנה לפני לפני 9 שנים, 9 חודשים ע"י yoavsr.
yoavsrמשתתףאתה יכול להשתמש בסקריפט הזה בשביל בנייה אוטומטית
https://gist.github.com/yoavst/68e4042aba897604af50package com.yoavst.autocompile; import javax.swing.*; import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.nio.file.StandardCopyOption; import java.util.ArrayList; public class AutoCompile { public static boolean USE_DOSBOX = System.getProperty("sun.arch.data.model").contains("64"); public static void main(String[] args) throws IOException { File[] warriorFiles = new File("work").listFiles(); assert warriorFiles != null; ArrayList<File> files = new ArrayList<File>(warriorFiles.length); for (File file : warriorFiles) { if (getFileExtension(file).equalsIgnoreCase(".asm")) { files.add(file); } } if (files.size() > 0) { // User need to have dosbox in path String currentPath = new File(".").getAbsolutePath(); for (File asm : files) { String name = stripExtension(asm.getName()); // FIXME use USE_DOSBOX Process command = Runtime.getRuntime().exec("dosbox -noconsole " + "-c \"mount g: " + currentPath + "\" " + "-c \"g:\" " + "-c \"copy work\\" + name + ".asm asm\\" + name + ".asm\" " + "-c \"cd asm\" " + "-c \"tasm -zi " + name + ".asm\" " + "-c \"tlink /t " + name + ".obj\" " + "-c \"del " + name + ".obj\" " + "-c \"del " + name + ".map\" " + "-c \"del " + name + ".asm\" " + "-c \"exit\"\n"); try { command.waitFor(); } catch (InterruptedException e) { JOptionPane.showMessageDialog(null, "Error - cant compile asm file " + asm.getName()); System.exit(1); } File compiledFile = new File("asm", name + ".com"); if (!compiledFile.exists()) { JOptionPane.showMessageDialog(null, "Error - cant compile asm file " + asm.getName()); System.exit(1); } else { Files.move(Paths.get(compiledFile.getAbsolutePath()), Paths.get(new File("survivors", name).getAbsolutePath()), StandardCopyOption.REPLACE_EXISTING); } } } } public static String getFileExtension(File file) { String name = file.getName(); int lastIndexOf = name.lastIndexOf("."); if (lastIndexOf == -1) { return ""; // empty extension } return name.substring(lastIndexOf); } public static String stripExtension(String str) { // Handle null case specially. if (str == null) return null; // Get position of last '.'. int pos = str.lastIndexOf("."); // If there wasn't any '.' just return the string as is. if (pos == -1) return str; // Otherwise return the string, up to the dot. return str.substring(0, pos); } }
אתה צריך לקמפל, ולהוסיף את ההרצה של ה-class לbat שפותח את התוכנה.
בעיקרון זה לכל קובץ בתקיית work פותח dosbox ומקמפל אותו באמצעות tasm (אצלי זה פשוט 64 ביט, אז אני חייב DOSBOX).
כדי שזה יעבוד:
צריך תקיית WORK שבא כל קבצי ה-ASM
צריך תקיית ASM שבא TASM של 16ביט נמצא
כמובן שאתה יכול לשנות את הפקודה ולהשתמש במה שאתה רוצה. -
מאתתגובות