도전 과제 : 임의의 Windows 관련 코드를 실행하기 위해 foo.cmd바닐라 Windows cmd.exe프롬프트 (PowerShell이 아닌 관리자 모드가 아님)에서 호출 할 수 있는 단일 스크립트 파일 을 작성하십시오 ...
> .\foo.cmd
Hello Windows!
... 또한 쉘 전형적인 POSIX 호환 (리눅스 / OSX)에서 변경되지 않은 호출 할 프롬프트 ( bash, tcsh또는 zsh), 임의의 POSIX 특정 코드를 실행합니다 :
$ chmod a+x foo.cmd
$ ./foo.cmd
Hello POSIX!
... 타사 통역사 / 도구를 설치하거나 만들 필요가 없습니다.
나는 이것이 가능하다는 것을 알고 있지만 부스러기로 (즉, Windows에서는 하나 또는 두 줄의 쓰레기 / 오류 메시지가 "Hello Windows!"전에 stderr 또는 stdout으로 인쇄됩니다).
이기는 기준은 (첫 번째) 크래프트 라인 수와 (두 번째) 크래프트 문자 수를 최소화하는 것입니다.
크루프 트는 (임의의) 페이로드 코드에 의해 생성되지 않은 콘솔 출력 (stdout 또는 stderr)으로 정의 될 수 있습니다. 빈 줄은 줄 수로 계산됩니다. 줄 바꿈은 문자 수에 포함되지 않습니다. Cruft 점수는 두 플랫폼에서 합산되어야합니다. 이와 같은 메커니즘을 무시 cls하고 부스러기를 제거하지만 이전 터미널 출력을 비워야합니다. @echo off아직 설정 하지 않았기 때문에 Windows가 명령을 에코하는 경우 현재 디렉토리 및 프롬프트를 인쇄하는 데 사용하는 문자를 제외하십시오.
두 번째 기준은 내부 솔루션의 단순성 / 우아함입니다 foo.cmd. "인프라"가 임의의 페이로드 코드에 직접 관련되지 않은 문자로 정의 된 경우 먼저 인프라 문자가 포함 된 행 수를 최소화하고 두 번째로 총 인프라 수 문자.
CRLF 줄 끝이있는 파일에도 불구하고 POSIX 부분이 작동하면 추가로 도움이됩니다! (마지막 부분이 가능한지 확실하지 않습니다.)
다른 사람들이 기회를 얻은 후에 여기에 게시 할 기존 솔루션은 6 줄의 인프라 코드 (줄 바꿈을 제외한 52 자)를 사용합니다. 5 줄의 cruft를 생성하며, 그중 2 줄은 Windows에서 발생합니다 (줄 바꿈을 제외하고 그 줄 중 2 줄에 나타나는 현재 디렉토리 / 프롬프트 문자열을 제외하고 30 자).