Skip to content

📃 partial.cpp

Nepumi-Jr edited this page May 25, 2024 · 2 revisions

เป็นไฟล์ Script ที่เริ่มจากการแข่งขัน THACO (หรือป่าววะไม่แน่ใจ 5555+) โดยข้อมูลที่ partial.cpp จะรู้คือ

  1. ที่อยู่ของไฟล์ .in ของเคสแต่ละเคส
  2. ที่อยู่ของไฟล์ .sol ของเคสแต่ละเคส (คำตอบที่ถูก)
  3. ที่อยู่ของไฟล์ output ของผู้ส่งแต่ละเคส
  • ซึ่งรับจากการอ่าน argv ที่ส่งเข้ามาตามลำดับดังนี้ argv[1] คือ .sol, argv[2] คือ .in, argv[3] คือ output ของผู้ส่ง
  • การส่งออก จะมีการส่งสองส่วน
    • ส่วนคะแนน โดยส่งผ่าน STDOUT โดยการส่งคะแนนออกมาเป็นทศนิยม ซึ่งค่าต่ำสุดคือ 0.0 และสูงสุดคือ 1.0
    • ส่วน Comment โดยส่งผ่าน STDERR โดยเป็นการบอกผลตรวจว่าผ่าน, ไม่ผ่าน หรือ ผ่านบางส่วน ซึ่งจะแสดงเป็นข้อความดังนี้ translate:success translate:fail translate:partial ตามลำดับ

ตัวอย่างโจทย์

แมวของคุณชอบเลข 69 มาก ๆ ซึ่งหากเกินนั้น แมวของคุณจะไม่สนใจทันที แต่หากต่ำกว่านั้น ยิ่งตัวเลขเข้าใกล้ 69 มากเท่าไหร่ แมวของคุณก็จะสนใจมากขึ้น (คะแนนคำนวณจาก ตัวเลข / 69)

งานของคุณคือ ให้เขียนโปรแกรมแสดงตัวเลข 69 หรือต่ำกว่า บนหน้าจอ

Input

(ไม่มี)

Output

จำนวนเต็ม

ตัวอย่าง partial.cpp ของข้อนี้ (จำไม่ได้ละใครเริ่มต้นเขียนลักษณะนี้)

#include <bits/stdc++.h>

//ชุดคำสั่งที่ใช้ในการส่งผลตรวจคำตอบ
//กรณีถูกบางส่วน
void pc(double score){
    std::cout << std::fixed << score << std::endl;
    std::cerr << "translate:partial" << std::endl;
    exit(0);
}

//กรณีผิด
void wa(){
	std::cout << "0.0" << std::endl;
	std::cerr << "translate:wrong" << std::endl;
	exit(0);
}

//กรณีถูก
void ok(){
	std::cout << "1.0" << std::endl;
	std::cerr << "translate:success" << std::endl;
	exit(0);
}

// ชุดคำสั่งอ่าน string จาก stream
std::string readWord(std::istream& in){
	std::string out;
	if(in >> out) return out;
	else return FAILSTR;
}

// ชุดคำสั่งอ่าน int จาก stream
int readInt(std::istream& in, int mn = INT_MIN, int mx = INT_MAX){
	int tmp;
    in >> tmp;
	if(tmp < mn || tmp > mx){
		wa();
	}
	return tmp;
}


int main(int argc, char* argv[]) {
	std::ifstream inf(argv[1]); //อ่าน .in ไฟล์จาก argv ข้อที่ 1
	std::ifstream ans(argv[2]); //อ่าน .sol ไฟล์จาก argv ข้อที่ 2 (ที่เป็นคำตอบที่ถูก)
	std::ifstream ouf(argv[3]); //อ่าน output ที่ Output ออกมาในข้อที่ 3

	int num = readInt(ouf);
    if (num > 69) wa();
	else if (num == 69) ok();
    else {
		pc((double)num / 69.0);
	}
}

📁 ตัวอย่างโครงสร้างของไฟล์โจทย์

706 อะไรก็ได้ อย่าเรียงก็พอ
 |- 1.in
 |- 1.sol
 |- 2.in
 |- 2.sol
 |- 3.in
 |- ...
 |- 10.sol
 |- partial.cpp
 .
Clone this wiki locally