powershell批處理——io校驗

powershell批處理——io校驗

在刷題時,時常回想,OJ平臺是如何校驗競賽隊員提交的代碼的,OJ平臺并不看代碼,而是使用“黑盒測試”,用測試數據來驗證。對于每題,都事先設定了很多組輸入數據(datain)和輸出數據(dataout),OJ主要是看輸入datain,看產生的輸出是否與dataout一致。

如果需要一次性知道自己的所有測試輸入數據是否能得到正確輸出,一個一個測試就太慢了,批處理操作就能很好解決這個問題。本篇文章主要介紹一下這個ioCode小項目,主要用于批處理校驗輸入輸出,搭建本地的評測平臺。

項目目錄結構

在這里插入圖片描述

  1. input目錄:存放輸入數據文件,以.in后綴結尾
  2. output目錄:存放輸出數據文件,以.out后綴結尾,每個輸出的文件名與對應的輸入的文件名相同
  3. start.ps1:編寫的腳本文件

start.ps1源代碼:

function ioCheck{param($content, #程序輸出內容$answer #輸出的答案內容)$cnt = $answer.lengthif($content.length -ne $cnt){return 0  #內容行數不等,直接返回0}for($i=0;$i -lt $cnt;$i++){if($answer[$i] -ne $content[$i]){return 0} }return 1
}function ioCode{param([string]$command,[string]$inPath = './input',[string]$outPath = './output')$list = New-Object System.Collections.ArrayList  #創建正確輸出的文件名集合$inFiles = Get-ChildItem -Path $inPath -Filter *.in  #獲取輸入文件集$len = $inFiles.length$cnt = 0 foreach($file in $inFiles){try {$fullOut = cmd.exe /c "$command < $($file.fullName)"  #獲取程序實際輸出內容$answerPath = Join-Path -Path $outPath -ChildPath ($file.BaseName + '.out')$answer = Get-Content -Path $answerPath  #獲取該輸入文件的對應輸出文件的內容if(ioCheck $fullOut $answer){$list.add($file.Name) | Out-Null  #Out-Null表示丟棄輸出$cnt++}}catch {Write-Host "處理文件 $($file.Name) 時出現錯誤: $_"}}Write-Host "正確輸出 $cnt/$len:"return @{CorrectCount = $cntTotalCount = $lenCorrectFiles = $list}
}

首先測試輸入兩個數,看能否成功輸出兩數之和

在input目錄中創建三個文件分別為001.in,002.in,003.in

內容分別為

001.in

3 4

002.in

35749 47985

003.in

544 6755

對應的在output目錄創建三個同名的.out文件,分別為001.out002.out003.out

內容就是對應.in文件中兩個輸入數據的相加的結果。

使用

編寫好測試用例,就是可以測試我們寫好的代碼了,這里不僅可以測試C/C++生成的.exe可執行文件,還可以測試java生成的.class可執行字節碼文件(前提是電腦具備java環境)。

測試.exe文件

在當前目錄下準備一個test.cpp文件,代碼如下:

#include<iostream>
using namespace std;
int main()
{int a, b;cin >> a >> b;cout <<a<<"+"<<b <<"=" << a + b;return 0;
}

將其編譯為可執行文件test.exe

g++ -o test.exe test.cpp

在當前目錄下打開powershell控制臺

  1. 通過點加載start.ps1文件
. './start.ps1'
  1. 輸入命令ioCode {command} {inPath} {outPath},command為可執行命令,inPath為輸入文件目錄(默認為當前目錄的input目錄),outPath為輸出答案文件目錄(默認為當前目錄的output目錄)
ioCode test.exe

示例:

在這里插入圖片描述

控制臺輸出顯示我們的三個測試用例都通過了。

測試可執行.class文件

在當前目錄下準備一個Main.java文件,代碼如下:

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int a = scanner.nextInt();int b = scanner.nextInt();System.out.println(a+b);}
}

將其編譯為可執行文件Main.class

javac Main.java

將其編譯為可執行文件test.exe

g++ -o test.exe test.cpp

在當前目錄下打開powershell控制臺

  1. 通過點加載start.ps1文件
. './start.ps1'
  1. 輸入命令ioCode {command} {inPath} {outPath},command為可執行命令,inPath為輸入文件目錄(默認為當前目錄的input目錄),outPath為輸出答案文件目錄(默認為當前目錄的output目錄)
ioCode 'java Main'  #注意java Main是一個完整的命令,中間帶有空格,需要用引號引起來

示例:

在這里插入圖片描述

以上就是這個小項目的內容,通過ioCode可以批處理測試多個輸入輸出用例,并能清晰的看到哪些輸入文件正確輸出方便DeBug。

后面我打算繼續優化一下,主要包括以下內容

  1. 快速構造輸入,輸出數據。
  2. 對于不正確的輸出(與給定的輸出文件不匹配),能清晰地指出出第一個不同的地方。
  3. 顯示批處理執行耗時

更多優化點或不足的地方,期待指教。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/79830.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/79830.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/79830.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

前端面經-webpack篇--定義、配置、構建流程、 Loader、Tree Shaking、懶加載與預加載、代碼分割、 Plugin 機制

看完本篇你將基本了解webpack!!! 目錄 一、Webpack 的作用 1、基本配置結構 2、配置項詳解 1. entry —— 構建入口 2. output —— 輸出配置 3. mode:模式設置 4. module:模塊規則 5. plugins:插件機制 6. resolve:模塊解析配置(可選) 7. devServer:開發服務器…

面試算法刷題練習1(核心+acm)

3. 無重復字符的最長子串 核心代碼模式 class Solution {public int lengthOfLongestSubstring(String s) {int lens.length();int []numnew int[300];int ans0;for(int i0,j0;i<len;i){num[s.charAt(i)];while(num[s.charAt(i)]>1){num[s.charAt(j)]--;j;}ansMath.max…

拉削絲錐,螺紋類加工的選擇之一

在我們的日常生活中&#xff0c;螺紋連接無處不在&#xff0c;從簡單的螺絲釘到復雜的機械設備&#xff0c;都離不開螺紋的精密加工。今天&#xff0c;給大家介紹一種的螺紋刀具——拉削絲錐&#xff1a; 一、拉削絲錐的工作原理 拉削絲錐&#xff0c;聽起來有點陌生吧&#…

數據清洗-電商雙11美妝數據分析(二)

1.接下來用seaborn包給出每個店鋪各個大類以及各個小類的銷量銷售額 先觀察銷量&#xff0c;各店小類中銷量最高的是相宜本草的補水類商品以及妮維雅的清潔類商品&#xff0c;這兩類銷量很接近。而銷售額上&#xff0c;相宜本草的補水類商品比妮維雅的清潔類商品要高得多&#…

【上位機——MFC】對話框

對話框的使用 1.添加對話框資源 2.定義一個自己的對話框類(CMyDlg)&#xff0c;管理對話框資源&#xff0c;派生自CDialog或CDialogEx均可 對話框架構 #include <afxwin.h> #include "resource.h"class CMyDlg :public CDialog {DECLARE_MESSAGE_MAP() publi…

2025東三省C題深圳杯C題數學建模挑戰賽數模思路代碼文章教學: 分布式能源接入配電網的風險分析

完整內容請看文章最下面的推廣群 數據整理與分析 表1&#xff1a;有源配電網62節點系統負荷參數 內容&#xff1a;列出了62個節點的有功負荷&#xff08;單位&#xff1a;kW&#xff09;。 特點&#xff1a; 負荷范圍&#xff1a;24 kW&#xff08;節點19&#xff09;到420 …

【人工智能】邊緣計算技術及應用概述

邊緣計算&#xff08;Edge Computing&#xff09;是一種分布式計算范式&#xff0c;其核心思想是將數據處理、存儲和計算能力從傳統的云端數據中心下沉到靠近數據源的邊緣設備&#xff08;如傳感器、攝像頭、工業設備等&#xff09;或邊緣服務器。這種架構旨在減少數據傳輸延遲…

FAISS(Facebook AI Similarity Search)

First steps with Faiss for k-nearest neighbor search in large search spaces - Davide’s GitHub pages FAISS&#xff08;Facebook AI Similarity Search&#xff09;是由Meta&#xff08;原Facebook&#xff09;AI團隊開發的高效相似性搜索庫&#xff0c;主要用于處理大規…

嵌入式開發學習日志Day15

一、指針指向字符型數組 &#xff08;1&#xff09;【const】&#xff1a;在指針變量中使用時&#xff0c;無法通過該指針修改被指向的變量&#xff1b; &#xff08;2&#xff09;【const】&#xff1a;關鍵字&#xff0c;在C和C中&#xff0c;能加就加&#xff0c;加了一定…

現代卷積神經網絡

一、網絡中的網絡 (NiN: Network in Network) 參考&#xff1a;Network In Network——卷積神經網絡的革新 - 殷大俠 - 博客園 深度學習&#xff08;二十六&#xff09;Network In Network學習筆記-CSDN博客 ① MLPconv 層 參考&#xff1a;深度學習基礎模型NIN(Network in Net…

【大模型面試每日一題】Day 11:參數高效微調方法(如LoRA、Adapter)的核心思想是什么?相比全參數微調有何優缺點?

【大模型面試每日一題】Day 11&#xff1a;參數高效微調方法&#xff08;如LoRA、Adapter&#xff09;的核心思想是什么&#xff1f;相比全參數微調有何優缺點&#xff1f; &#x1f4cc; 題目重現 &#x1f31f;&#x1f31f; 面試官&#xff1a;參數高效微調方法&#xff0…

SSL泄露源IP怎么辦?(教學與防護)

在網絡安全領域&#xff0c;源IP地址的保護至關重要。通常情況下&#xff0c;我們借助CDN&#xff08;內容分發網絡&#xff09;技術來隱藏源IP&#xff0c;使外部通過常規的ping命令無法獲取。然而&#xff0c;由于部分網站模板存在漏洞&#xff0c;當用戶訪問https://ip時&am…

jQuery的學習要領

學習 jQuery 的關鍵要領可以分為以下幾個核心部分&#xff0c;幫助你高效掌握并靈活運用&#xff1a; 1. 理解 jQuery 的核心思想 "Write Less, Do More"&#xff1a;jQuery 通過簡潔的語法封裝復雜操作。 鏈式調用&#xff08;Chaining&#xff09;&#xff1a;通過…

網絡安全的原理和基本知識點

以下是網絡安全的基本原理和知識點&#xff0c;以及如何利用Python進行網絡安全防護&#xff1a; 網絡安全的基本原理和知識點 基本概念 網絡安全&#xff1a;保護網絡系統和數據免受攻擊、損壞或未經授權的訪問&#xff0c;確保其機密性、完整性和可用性。 CIA三要素 機密…

AI:機器學習之無監督學習

無監督學習:讓機器從“混沌”中自我覺醒 ???? ?? 摘要:無監督學習(Unsupervised Learning)是機器學習的重要分支,它不依賴于人工標簽,通過自身“感知”數據結構來發現潛在模式。本文系統梳理了其核心概念、典型算法、實際應用與代碼實戰,既適合入門學習,也適用于…

寫了個腳本將pdf轉markdown

看到有人需要將掃描pdf文檔轉markdown&#xff0c;想起之前寫的一個小工具。 這個腳本是為了將pdf轉成markdown&#xff0c;只需要申請一個智譜的api key&#xff0c;并填到config里&#xff0c;使用的模型是4v flash&#xff0c;免費的&#xff0c;所以可以放心使用。 效果如下…

CSS--圖片鏈接水平居中展示的方法

原文網址&#xff1a;CSS--圖片鏈接居中展示的方法-CSDN博客 簡介 本文介紹CSS圖片鏈接水平居中展示的方法。 圖片鏈接 問題復現 源碼 <html xml:lang"cn" lang"cn"><head><meta http-equiv"Content-Type" content"te…

工具分享:通過滑塊拉取CAN報文信號數值自動發送報文

0. 概述 CAN報文發送工具使用wxpython進行開發,配套Excel模板可以通過修改Excel自定義界面展示的信號名稱和信號的屬性;同時,工具支持導入現場采集的報文數據自動按照配套Excel模板定義的報文發送周期進行模擬發送。 由于是我好幾年前開發的作品,一些開發細節也記得不是很…

【Python】os模塊

os 模塊是 Python 標準庫中用于與操作系統交互的核心模塊&#xff0c;提供了許多操作文件和目 錄的函數。 1. 基本介紹 os 模塊提供了以下主要功能&#xff1a; 文件和目錄操作路徑操作進程管理環境變量訪問 import os2. 常用功能分類 2.1 文件和目錄操作 函數/方法描述o…

ai agent(智能體)開發 python3基礎11: java 調用python waitfor卡死,導致深入理解操作系統進程模型和IPC機制

java 調用python waitfor 卡死 導致瀏覽器無法自動關閉&#xff0c;java &#xff0c;python雙發無限等待 根源在于還是沒有理解 進程之間標準輸入輸出到底是什么含義 系統進程與跨語言調用的核心機制 在跨語言調用&#xff08;如Java調用Python&#xff09;時&#xff0c;理…