우아!
이거 정말로 유용하겠는데요??
일일히 반례 찾을 필요가 없는 프로그램!
정말 감사합니다~!
2839번 - 설탕 배달
@factories 님 안녕하세요! 우선 관심 가져주셔서 감사합니다. testcase.ac에서는 제출한 코드가 틀린 반례만 보여주고 있습니다. 때문에 제출하신 코드가 정답출력이 1인 케이스에서 많이 틀린다면, 보여지는 반례가 모두 정답출력이 1로 나올 수 있습니다. 특히 사용자의 편의를 위해 크기가 작은 반례부터 보여주고 있는데, 11000번 문제의 특성상 반례의 크기가 작을수록 정답출력이 1일 확률이 더 커질 것 같습니다.
이 말인즉슨 제출하는 코드마다 다른 반례를 보여주게 됩니다. 예를 들어서, 아래와 같이 정답이 5 이상일때만 오답을 내는 코드가 있다면 그런 경우가 반례로 출력됩니다. 한번 https://testcase.ac/problems/11000 에서 제출하셔서 확인해 보세요 :)
저는 테스트로 1005번 ACM Craft 문제를 넣어 보고 있었습니다.
제네레이터 코드와
정답 코드 모두
동일하며
python3로 작성한 코드 입니다.
(심지어 정답코드가 안되서 GPT에게 물어봐 수정된 코드입니다)
저는 테스트케이스를 추가하던 도중에,
다른 계정으로 정답 코드를 올려보니
{"success": false, "reason": "RTE", "returncode": 1, "stdout": "", "stderr": "Traceback (most recent call last):\n File \"/tmp/generator/Main.py\", line 6, in <module>\n t = int(input())\nValueError: invalid literal for int() with base 10: ''\n", "time": 0.016352176666259766, "input": ""}
런타임 에러 : ValueError가 나옵니다.
백준에서는 정답 처리된 코드인데 왜 여기서는 안될까요?
참고로 테스트 케이스는 1005번 문제 예제 입력 1 입니다.
@factories 님, 제네레이터 코드란 아무런 입력도 받지 않고, 문제의 올바른 테스트케이스를 랜덤하게 출력하는 프로그램을 의미합니다. factories님이 제네레이터 란에 제출해주신 코드는 정답 코드 같습니다. 테스트케이스를 생성해주는 제네레이터 코드가 있어야 반례를 찾을 수 있습니다.
제네레이터의 예시로 1000번, A+B 문제의 제네레이터는 https://testcase.ac/codes/21 이렇게 작성할 수 있습니다.
아직 웹페이지 내에서 제네레이터란 무엇인지와 같은 개념에 대한 설명이 부족하고, 제네레이터 자체에 대한 검증도 시스템화되어 있지 않아 기여자에 전적으로 의존하고 있어서 오해할 여지가 있을 것 같은데, 이런 부가적인 내용도 차차 추가해보도록 하겠습니다.
재밌는 작업물이네요!
개발하시느라 고생 많으셨습니다.
네 이번엔 제대로 된 제네레이터 코드를 완성했습니다.
다만
ACM Craft 문제 특성 상
그래프는 1과 1이 연결 되어 있으면 안되니
제네레이터 코드에서 while 문을 사용해 중복이 안 나오도록
뽑았습니다.
그러나 문제는
검증 시 제네레이터 시간초과 가 뜨더라고요
시간이 2초 이상이면 제네리이터도 강제 종료 되는 것 같은데
제네레이터 시간제한을 10초로 늘려주셨으면 합니다.
@factories 님, 작성해주신 코드는 가능한 고유한 쌍의 수보다 k가 클 경우 새로운 쌍을 찾을 수 없어 무한 루프에 빠지게 됩니다. 예를 들어, n이 2일 때 가능한 고유한 쌍은 단 하나뿐인데, k가 2 이상이면 새로운 쌍을 더 이상 찾을 수 없어 무한 루프에 빠지게 됩니다.
이렇게 무한루프에 빠질 수 있는 가능성을 방지하기 위해, 그리고 다른 코드들의 빠른 실행을 위해, 제네레이터의 시간제한은 일괄적으로 2초로 설정되어 있습니다.
@knen 님, 체커 코드는 "스페셜 저지" 태그가 달려 있는 문제에 대해 반례를 찾기 위해 필요한 코드입니다. 스페셜 저지가 필요한 문제는 한 테스트케이스에 여러 가지 정답이 가능하기 때문에, 정답 출력과의 단순 텍스트 비교로는 정답 여부를 알 수 없습니다. 이때 제출한 코드가 출력한 답이 정답인지 판정해주는 코드가 체커(checker)입니다.
예를 들어서 스페셜 저지가 있는 A/B (1008번) 문제의 체커 코드는 이렇게 구현할 수 있습니다: https://testcase.ac/codes/226
체커 코드를 C++과 testlib.h으로 작성하는 것에 대한 대한 더 자세한 정보는 https://codeforces.com/blog/entry/18431 를 참고해보시길 추천드립니다. 현재 testcase.ac에 제출하는 체커는 C++과 testlib.h을 사용하는 것을 강력히 추천드립니다.
@dgddgd 님 안녕하세요, 해당 옵션은 아직 없지만 개발 예정 기능 중 높은 우선순위에 있습니다.
관련해서 질문이 하나 있는데, 혹시 dgddgd님이 필요로 하는 옵션이 둘 중에 어느 쪽에 더 가까울까요?
- 1. 코드의 내용 자체는 나만 볼 수 있지만, 문제에 들어갔을 때 "정답 코드" 목록에서는 모두가 선택할 수 있고, 모두가 해당 정답을 이용해 반례를 찾을 수 있다
- 2. 코드의 내용 자체를 나만 볼 수 있을 뿐만 아니라, 문제에 들어갔을 때 "정답 코드" 목록에서도 나에게만 보이고, 나만 해당 정답을 이용해 반례를 찾을 수 있다
궁금한 점이 있습니다.
혹시 시간 초과나 메모리 초과 등은 어떻게 하나요?
지금 testcase.ac에서 당신의 코드는 TLE(시간초과) 입니다!
라고 출력이 안되네요....
메모리 초과 역시 마찬가지 일 듯 합니다...
또한 번외 문제도 추가 가능한가요? (가능한 걸로 보겠습니다)
수정 부탁드려요!
다 같이 쓸 수 있게 만들어진 플랫폼이니 1번이 나을 듯 합니다~ 2번으로 하면 로컬에서 실행하는 TC generator랑 다를게 아무것도 없을 거 같아요!
코드 공개를 바라지 않는 이유는 계속해서 이슈가 되고 있는 무지성 Ctrl CV를 방지하고 싶어서 입니다. 블랙박스 느낌으로 코드만 공개하지 않고, 헤딩 코드를 이용해 반례를 찾는 것은 누구에게나 가능하게 하는 것이 낫지 않을까 생각합니다.
아마 많은 사람들이 비슷한 생각을 가지고 있을 것이라고 생각을 하긴 하는데, 그래도 일단은 저의 개인적인 의견입니다! 가장 좋은 건 두 옵션을 개개인이 설정할 수 있도록 하는 기능을 추가하는 것일텐데, (private, public repo 랑 비슷하게요) 아무래도 개발 인력이 한정되어 있을테니 힘들겠죠? ㅎㅎ
@factories 님, 제보 감사합니다. 원래는 시간 초과나 메모리 초과 같은 경우는 그에 맞는 오류가 떠야 하는데, 채점 서버 설정 오류로 InternalServerError라고 노출되고 있는 점 확인했습니다. 해당 부분 수정했고, 지금은 아래와 같이 시간 초과가 되는 코드를 제출하면 정상적으로 "시간 초과(TLE)" 같은 표시를 볼 수 있습니다!
@factories 번외 문제 추가를 따로 막아놓지는 않았습니다. 다만 대부분의 번외 문제는 반례를 찾는 의미가 크게 없을 것 같네요..
@dgddgd 아하 이해했습니다! 지금 개발 계획은 백준과 비슷하게 코드별로 공개 / 비공개를 설정할 수 있도록 하는 것입니다. 빠른 시일 내로 개발 소식 전해드릴 수 있도록 해보겠습니다ㅎㅎ
@sk14cj 오.. 로컬에서 돌리는 분들은 많이 봤어도 코포 폴리곤까지 가서 돌리는줄은 몰랐네요.. ㅎㅎ validator는 당장은 반례를 찾는 데 필수가 아니라서 빠졌는데 개발 계획에는 있습니다. 아주 장기적으로는 폴리곤과 비슷한 수준의 플랫폼을 만드는 것을 목표로 생각하고 있습니다ㅎㅎ 좋은 의견 감사합니다!!
@dgddgd 님, 코드 비공개 기능 구현해 보았습니다. 예시로 https://testcase.ac/problems/1002 번 문제 아래처럼 비공개로 설정해 보았는데 한번 시간되실때 테스트해보고 피드백 주시면 감사합니다 👍
@factories 네 지금 누구나 기여 창에서 자신의 코드에 대한 공개 여부 설정할 수 있으니 한번 확인해 보세요~ ㅎㅎ
@dlwocks31 님 기능 추가한 거 정말 좋은 것 같습니다!
저는 보통 generator는 open하고 ACcode는 닫은 채로 쓸듯 하긴 합니다 ㅋㅋ
잘 모르는 프론트 지식 가지고 열심히 끙끙거려봤는데 안 뚫리네요 ㅋㅋ
백엔드에서 유저 검증한 뒤에 보내주는 방식이겠죠? 잘 짜신 듯 합니다!
지금 태그 지원하는게
스페셜 저지 뿐이더라고요
꽤 자주 나오는 서브태스크 , 점수 , 전체 채점
등 부분 점수가 나오는 문제 또는
자주는 아니여도 나오는
투 스텝, 인터랙티브
정도는 추가 부탁드립니다.
제가 인터랙티브도 도전 하고 있어서...
@factories 의견 감사합니다! 그런 특수한 문제 유형도 차차 추가될 수 있도록 해보겠습니다
@factories 안녕하세요, 제보해 주셔서 감사합니다. 지금 어떤 상황에서 그렇게 잘못되게 나오는지 모르겠어서 그런데 혹시 구체적인 반례 알려주실 수 있으실까요? https://testcase.ac/codes/92 정답 코드에서 52줄에 assert 추가해서도 테스트해봤는데 문제를 못 찾았네요
제너레이터가 추가되었습니다. https://testcase.ac/problems/14425
필요한 제너레이터가 없는 경우에는 누구나 로그인 후 추가할 수 있으니 많은 사용 부탁드립니다. 감사합니다.
Kotlin 언어도 추가 건의 드립니다
의견 감사합니다. Kotlin 언어가 추가되었으니 한번 사용해 보세요. 더불어 Go / Rust도 추가되었습니다.
댓글을 작성하려면 로그인해야 합니다.
dlwocks31 1년 전 36
https://testcase.ac/
틀린 코드를 제출하면, 해당 문제의 제네레이터를 사용해 정답과 다른 출력이 나오는 테스트케이스를 찾아줍니다. 예를 들어서, 설탕 배달 문제는 https://testcase.ac/problems/2839 에서 반례를 찾아볼 수 있습니다.
정답 코드와 제네레이터 코드가 등록이 되어 있는 문제에 대해서는 로그인 없이도 누구나 틀린 코드를 제출해 반례를 찾아볼 수 있습니다. 또한, 로그인 된 사용자라면 누구나 정답 코드와 제네레이터 코드를 기여할 수 있습니다.
크롬 확장 프로그램을 설치하면 정답 코드와 제네레이터가 등록이 되어 있는 문제를 쉽게 확인할 수 있습니다.
지금까지는 주로 제가 질문 게시판의 질문에 대해 반례를 찾기 위해 혼자서 사용해왔는데, 여러분들의 피드백을 받고 싶어 공개합니다. 아직 초기 프로젝트라 부족한 점이 많습니다. 틀린 코드에 대해 반례를 찾고 있거나, 가지고 있는 제네레이터와 정답 코드가 있다면 한번 사용해보시고 언제든지 피드백 / 의견 / 질문 주세요!