보스를위한 영어 컴파일


16

상사는 최근에 영어 라는 흥미로운 프로그래밍 언어에 대해 배웠습니다 . 그는이 "혁명적 인"아이디어를 가지고 있으며, 코드 작성 속도를 두 배로 늘리기 위해 코드를 작성하려고합니다! 그는 기술에 정통한 사람이 아니기 때문에 코드를 작성할 수 있도록 컴파일러를 작성하기를 원합니다!

이제, 당신은 사악한 게으른 프로그래머이며,이 엄청나게 복잡한 언어를 컴파일하는 프로그램을 작성하지 않을 것입니다. 대신 상사의 코드에 항상 오류가 있는지 확인하여 실제 컴파일에 도달하지 못하도록하고 코딩 대신 문법 오류를 수정합니다.

문제는 터미널에서 실행할 수있는 프로그램을 작성하고 파일 경로를 인수로 허용하는 것입니다. 이 프로그램은 다음을 수행해야합니다.

  1. 오타를 도입하여 파일 입력을 수정하십시오.
  2. 소개 한 오타가 발생하여 컴파일에 실패한 것처럼 가장하십시오.
  3. 같은 파일의 복사본에서 프로그램을 실행하면 같은 오타가 연속으로 두 번 나오지 않아야합니다.

이 파일에서 프로그램을 실행하여 문제를 설명하려면 다음을 수행하십시오.

Take an array as input.
Sort the array.
Output the array.

라인을 따라 무언가를 출력해야합니다

Error on line 1:
'Take an arqay as input.'
         ^
arqay is not a valid identifier.

프로그램에 컴파일하도록 지시 한 파일은 이제 다음과 같아야합니다.

Take an arqay as input.
Sort the array.
Output the array.

다음은 프로그램 사양에 대한 자세한 내용입니다.

귀하의 프로그램은 보스가 입력 한 프로그램의 문자를 다른 임의의 문자로 바꾸면 문법 오류가 발생한다고 가정 할 수 있습니다. 프로그램은 보스 코드에서 오류를 생성하기 위해 알파벳이 아닌 문자를 사용해서는 안됩니다. 당신의 상사는 절대 숫자 나 기호를 사용하지 않을 것이고, 뭔가 무언가가 있다는 것을 알게 될 것입니다. 귀하의 프로그램은 상사의 프로그램에있는 단어에만 오류를 가져와야합니다. 문장이나 구두점에서 공백을 바꾸지 마십시오. 당신의 프로그램은 상사가 컴파일하려고하는 프로그램의 경우를 바꾸어서는 안됩니다 arQay. 이렇게하면 발생하는 take대신 Take또는 Array대신 같은 오류가 발생하지 않습니다 array. 프로그램은 오류가있는 행을 먼저 지정하여 오류를 출력해야합니다.

Error on line <insert line number here>:

그런 다음 '기호 안에 오류가있는 줄을 인쇄해야합니다 . 다음 줄 에는 오류가 ^있는 단어 아래 에 기호가 있어야하며 마지막으로 오류를 설명하는 텍스트가 있어야합니다 (이 부분은 귀하에게 달려 있습니다. 오류를 설명하는 한 원하는 것을 말할 수 있습니다).

입력 파일이 존재하고 비어 있지 않다고 가정 할 수 있습니다. 입력 파일에 문법 오류가없는 것으로 가정 할 수도 있습니다.

보너스 :

코드에서 소개하는 오류가 완전히 임의적이지는 않지만 질문 에서와 같이 오타가있는 경우 -60 바이트 입니다.

5 개 이상의 서로 다른 오류 메시지에 대해 -60 바이트, 임의로 교대로 표시합니다.

당신의 프로그램이 보스에게 일부 파괴적인 메시지를 출력 할 확률이 100 분의 1 이하이면 -60 바이트.

편집 : 메시지의 바이트 수는 점수에 포함되지 않습니다. (이 좋은 아이디어에 대해 Martin Büttner에게 감사드립니다)

이것은 코드 골프, 최단 바이트 카운트 승리입니다. 오류 메시지 내용을 골라 내지 마십시오. 상사는 오류 메시지를 이해할 수 없으면 기뻐하지 않으며, 문제 해결을 요청합니다.


글자가없는 줄을 처리해야합니까?
OUurous

알파벳 문자로만 오타를 만들 수 있으며 입력 파일이 비어 있지 않은 유효한 파일이라고 가정 할 수 있습니다.
rodolphito

7
나는 우리에게 오류 메시지를 남기는 팬이 아닙니다. 우리가 "오류 메시지를 골라 내지 않더라도"두 번째 보너스를받을 경우 여전히 20 바이트 정도의 차이를 만들 수 있습니다. 꽤 많을 수 있습니다. 공정한 골프 경연 대회에서는 5 개의 오류 메시지와 데모 메시지를 지정 하거나 바이트 수에서 문자열 길이를 빼야한다고 생각합니다.
Martin Ender

팁 주셔서 감사합니다, 나는 미리 정의 된 메시지를 가지고 생각했지만, 그것으로 조금 더 자유를주고 싶었습니다. 점수에서 메시지 바이트 수를 빼는 것이 좋습니다.
rodolphito

답변:


3

TI-BASIC, 77-34 (오류 텍스트) = 43

TI-83 / 84 계산기를 사용하려는 경우;)

함수의 표준으로 파일 문자열이 있어야 Ans출력을 반환하고 표시 할 수 있습니다.

Ans->Str1:If 1=inString(Ans,"A
Then:"B
Else:"A
End:Disp "ERROR ON LINE 1","'"+Ans+sub(Str1,2,-1+length(Str1))+"'"," ^ INVALID

많은 토큰은 1 바이트입니다.


이 코드는 어디에서 실행할 수 있습니까?
rodolphito

TI-83 / 84 계산기 또는 에뮬레이터
Timtech

inString, Ans, sub, Else, Then, End, Disp , Str1... 사람들은 계산기에 대한 모든 1 바이트 아닌가요?
Ismael Miguel

4
뭐????????????????? 그것은 8 비트가 1 바이트가 아니라고 말하는 것과 같습니다 !!!!!!!!! 바이너리 형식을 사용하여 어셈블리에 코드를 제시하면 바이트도 5 + 바이트의 1 매크로로 계산됩니까? 그것은 분명히 바보입니다! (강한 단어는 미안하지만 정말 견고합니다!) 이것은 코드를 나타내지 않습니다. 의미 Ans하는 바이트와 동일하지 않습니다 Ans. 하나는 A*n*s계산기가 원하는 결과를 생성하고 다른 하나는 마지막 산술 표현식의 값을 반환합니다. 이것을 고려할 때, REAL 카운트를 받아들이지 않으면 이것이 코드의 잘못된 표현 이라고 생각합니다 .
Ismael Miguel

5
파일을 무작위로 수정하는 것 같지 않고 항상 1 행에 변경 사항을 표시하는 것처럼 보이고 첫 번째 문자가 A 인 경우 B, 그렇지 않은 경우 A로 변경됩니다.
rodolphito
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.