오류 감지자가 수리 프로그램


14

하나의 문자가 삭제되면 어떤 문자가 삭제되었는지 감지 한 다음 삭제 된 문자를 자체 소스 파일에 다시 삽입하는 프로그램을 작성해야합니다.

예를 들어, 프로그램이 RadiationHardened이고로 수정 된 경우 프로그램은 RadiaionHardened5 번째 바이트 (0 인덱스)가 수정되었다고 출력 한 다음 프로그램 소스는 RadiationHardened실행 직후에 있어야합니다 .

메모 및 규칙

  • 실행 전에 소스 코드에서 정확히 하나의 문자가 삭제되었다고 가정 할 수 있습니다. 수정되지 않은 프로그램의 동작은 정의되어 있지 않습니다.
  • 변경된 바이트가 삭제, 바꿈, 삽입 또는 교체되지 않는다고 가정 할 수 있습니다.
  • 동일한 문자를 여러 번 실행하는 경우 실행의 첫 번째 또는 마지막 인덱스를보고 할 수 있지만 사용하는 대상에 대해 일관성이 있습니다. 예를 들어 baaad, 삭제하여 baad1 또는 3 (제로 색인화 됨)을보고 할 수 있지만 전체 프로그램에서 동일해야합니다.
  • 전체 소스를 자체 파일에 쓸 필요는 없습니다. 삭제 된 바이트 만 다시 삽입하면됩니다.
  • 방사선 경화 퀴인에 대한 일반적인 규칙과 달리 프로그램 자체 소스 코드를 읽음으로써 변경된 바이트를 감지하는 것은 공정한 게임입니다.
  • 합리적인 형식을 통해 변경된 바이트 인덱스를 출력 할 수 있습니다. 0 색인인지 1 색인인지 또는 다른 표기법인지 일관성을 유지하십시오. 템플릿 문자열 내에서 숫자를 출력 할 수도 있습니다.

이것은 이므로 가장 짧은 프로그램이 승리합니다.

행운을 빕니다!

EDIT1 : 교체에서 삭제로 요구 사항 변경

EDIT2 : 중복 실행 규칙 추가


4
이것은 임의 삭제를 처리하는 것보다 훨씬 어렵습니다 . 대부분의 비 esolangs은 (는 쓰기하는 것이 불가능 밖으로 분명히 있습니다 어떤 그 아래 syntactially 유효 프로그램을 임의의 1 바이트 수정). Fungeoid조차도 대부분 저지됩니다 (0 바이트가 quit program 명령 으로 변경되면 아무것도 할 수 없습니다 ). 나는 두 IP 중 하나가 Fission 과 같은 방식으로 살아남을 수 있다고 생각 했지만 그 *명령으로 모든 IP를 죽였습니다. 인해 추기경도 할 수 없습니다 @.
Lynn

이것은 code-challenge각 프로그램이 방사선으로부터 보호되는 바이트 목록을 선언 할 수 있는 곳 으로 바뀔 수 있습니다 (그러나 전체 크기의 50 % 이하). 간단한 스코어링 시스템은 각각의 방사선으로 보호 된 바이트를 10 바이트 또는 이와 유사한 것으로 계산할 수 있습니다.
Arnauld

(그러나 그것은 사소하고 흥미롭지 않은 답변으로 이어질 수 있습니다.)
Arnauld

1
@JoKing, 일관성없는 한 누락 된 것으로보고하는 것이 좋습니다.
Beefster

2
"파일 이름을 특정 이름으로 지정하고 특정 디렉토리에서 실행해야 할 수도 있습니다."-누군가 파일 이름이 올바른 프로그램 일 것을 요구할 수 있습니다.
ASCII 전용

답변:


9

비 펀지-98 (FBBI) , 344 (296) 248 바이트

20020xxnngg33%%!!2200gg''00--3300gg33%%!!4400gg55%%!!22kk++55##rr55kk::00gg\\11pp00gg\\11++11pp22++00::pp00gg\\11++00gg--!!zz!!22**++00::gg00gg8844**--!!55++jj..''gg::00rr00::gg\\--..''220011''0011::''002211''223311''00441144kkppgg11001100::99oo@@

온라인으로 사용해보십시오!

확인!

Befunge-98은 2D이며 파일 출력을 가진 최초의 난해한 언어입니다. 이것은 탭 문자로 이름이 지정된 파일에 저장된 전체 솔루션 (후행 줄 바꿈)입니다. 0 인덱싱으로 출력하고 문자 쌍으로 첫 번째 인덱스를 출력합니다 (쌍은 없지만).

특히 코드에 15 개의 no-ops가 있고 이제는 하나의 no-op 가 있기 때문에 몇 가지 골프를 만들 수 있습니다 ! 200 바이트 이하의 목표로 이것을 짧게 만드는 작업을 할 것입니다.


오 와우! 나는 이것이 가능하지 않다고 생각했다
MilkyWay90

3

Unefunge-98 (PyFunge) , 118 바이트

22xx00##rr33kk::gg\\11--pp22++00ppgg\\11++gg--!!zz!!22**--00gg::gg8844**--!!22++jj##''rr++..gg''2200pp0011--00::99oo@@

온라인으로 사용해보십시오!

확인!

내 Befunge-98 답변을 골퍼하는 동안 Unefunge로 포팅하여 일부 바이트를 절약 할 수 있다는 것을 깨달았습니다. 이것은 또한 가능한 많은 지름길과 골프를 열어 새로운 솔루션을 훨씬 많이 만들었 습니다. 작게 .

설명 (중복 제거됨) :

2x        Set the delta of the movement to 2
          This means the pointer moves 2 cells every step
          This will also initialise a counter as 2 (unless a 2 has been removed)
  0       Create the cell counter  (This will be stored at cell 0)
   #r     Enter the loop
     3k:                 Create 3 more copies of the counter
        g                Get the cell at the counter's position
         \1-p            Put it in the cell before that position
             2+0p        Add 2 to the counter and put it in cell 0
                 g       Get the cell at the counter's position
                  \1+g   Get the next cell
                      -!z!2*      If they are identical, push two, else 0
                            --    Subtract it from the total counter
                              0g:g84*-!   If the next character is a space
                                       2+j  r   Exit loop
                                         j#'    Else jump back to the start

Once the loop is over
+      Add the negative counter to the total counter
 .     And print
   '20p          Replace the 2 in cell 0 that was overwritten
             o   Write to a file named
            9    Tab
       01-       The cells from -1 to
  g              The total number of cells
              @  And exit the program
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.