오류 404 : 문자를 찾을 수 없습니다


74

대본

친구 중 한 명이 숙제에 어려움을 겪고 있습니다. 그는 최초의 404 자연수를 인쇄하는 간단한 프로그램이 필요합니다.

1 2 3 4 5 6 7 8 9 10 11 ... 401 402 403 404

당신의 도전은 간단합니다. 그를 위해이 프로그램을 작성하십시오.

그러나 연결이 끔찍하므로 프로그램을 보낼 때마다 1 개의 임의 문자가 손실됩니다. 제거 있도록 프로그램을 깨는에서이를 방지하기 위해, 당신은 그것을해야 모든 단일 문자 것은 없을 것이다 : 영향 에 관계없이, 프로그램이 작동합니다. (원래 프로그램도 작동해야합니다.)

연결이 너무 작아서 큰 파일을 보낼 수 없으므로 코드는 가능한 짧아야합니다.

TL : DR-방사선 강화 프로그램을 작성하여 1에서 404까지의 숫자를 출력합니다.


규칙 / 세부 사항

  • 출력은 임의의 적절한 형식 (공백, 줄 바꿈, 쉼표 등으로 구분 된)의 정수 목록 일 수 있습니다. 그러나 출력이 일관성이 있어야하며 프로그램 수정시 변경되지 않아야합니다 .
  • 논리를 포함하고 실제 코드를 실행하며 숫자 목록을 생성하는 등의 명령 줄 플래그는 금지됩니다.
  • 이것은 이므로 가장 짧은 제출 (바이트)이 이깁니다!


16
문자를 제거하지 않은 원래 프로그램도 작동해야합니까?
Adnan

5
프로그램이 여전히 1-404를 인쇄하면 오류를 무시할 수 있습니까?
jrich

4
아마도 방사선 경화 와 같은 태그가 있어야 할까요 ?
Vi.

5
투표는 우리가 XD 당신을 위해 당신의 숙제를하지 않는, 닫습니다
チーズパン

답변:


16

05AB1E , 12 바이트

암호:

XX440044ÔÔŸŸ

정상적인 코드 설명 :

X             # Pushes the number 1.
 X            # Pushes the number 1 again.
  440044      # Pushes the number 440044.
        Ô     # Connected uniquify.
         Ô    # Connected uniquify.
          Ÿ   # Inclusive range of the top two elements.
           Ÿ  # Inclusive range on the array, which leaves it intact.

이것은 다음과 같은 골프 코드로 이어집니다 X404Ÿ.

숫자 404 는 다음 변형 중 하나에 의해 생성됩니다.

440044ÔÔ
40044ÔÔ
44044ÔÔ
44004ÔÔ
440044Ô

포함 범위는 다음 두 숫자로 작동합니다.

`1 5Ÿ`             ->    [1, 2, 3, 4, 5]
[1, 5]Ÿ            ->    [1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]Ÿ   ->    [1, 2, 3, 4, 5]

항상 두 번째 Ÿno-op로 만듭니다.

CP-1252 인코딩을 사용합니다 . 온라인으로 사용해보십시오!


34

자바 스크립트, 228 바이트

etInterval=stInterval=seInterval=setnterval=setIterval=setInerval=setIntrval=setInteval=setInteral=setIntervl=setInterva=top=>4

setInterval
`405>(i=this.i?i:1)?alert(i++):0`///`
setInterval
`405>(i=this.i?i:1)?alert(i++):0`///`

설명

에서 코드를 평가 setInterval하면 오류가 있어도 프로그램을 계속 진행할 수 있습니다. 단일 문자가 제거되면 전달 된 코드에서 오류가 발생하는지 확인합니다. setInterval괄호없이 상수 문자열을 사용하여 템플릿 문자열 구문을 악용 할 수 있습니다 . 운 좋게도 템플릿 문자열이 다음 줄에 있더라도 여전히 그러한 구문을 사용하는 함수 호출로 구문 분석합니다.

우리가 겪는 첫 번째 문제는 setInterval함수입니다. 따라서 문자가 제거되고 프로그램이 setInteval대신 호출하려고 하면 오류가 발생합니다. 물론의 두 가지 인 덴셜 호출이 있기 때문에 setInterval오류를 피하지 않는 한 실제로 제대로 작동하는 것에 대해 걱정할 필요가 없습니다. 따라서 첫 번째 줄은 모든 setTimeout유효한 "맞춤법 철자"를 유효한 함수로 정의 합니다.

첫 번째 줄은 이러한 "맞춤법 철자"를 모두 함수에 할당하여 작동 top=>4합니다. ES6 구문에 주목하십시오. 이것은 단순히 "top"이라는 매개 변수를 취하고 4를 리턴합니다. 왜 "top"입니까? 글쎄, 첫 번째 줄은 문자가 제거 되더라도 절대 오류를 발생시키지 않아야합니다. 이 경우 =수 있도록 제거 top>4하기 때문에,이 부울 표현식은 유효합니다 top단순히 산출 브라우저에 미리 정의되어있다 false. 4가 제거되면 함수 본문은 단순히 첫 번째 setInterval세그먼트가되고 두 ​​번째는 무해합니다.

이제 걱정할 것은`를 제거하는 것입니다.

처음부터 제거 setInterval하면 아무 것도하지 않고 자체 표현으로 평가됩니다. 그런 다음 나머지 두 번째 줄은 루프의 단일 반복을 실행하여 다른 setInterval조각이 작업을 완료 하도록합니다 . 끝에서 제거하면 나머지 백틱은 주석 끝에서 선택됩니다.

줄 바꿈은 제거하는 것이 프로그램 동작에 영향을 미치지 않지만 선행 백틱과 같은 일부 문자 제거의 경우 오류를 방지합니다.


3
나는 a의 숫자 중 하나 405가 제거 되면 어떻게 될지 숙고 했지만 404 숫자가 이미 인쇄되었거나 두 번째 루프가 누락 된 숫자를 인쇄하기 때문에 아무것도 알지 못했습니다. 화려한 작품.
ETHproductions

"상단"의 일부가 손실되면 어떻게됩니까?
Scimonster

@Scimonster "to"또는 "op"또는 "tp"라는 이름의 사용되지 않은 매개 변수를 사용하여 4를 반환하는 함수로 여전히 구문 분석합니다.
jrich

1
물론 @jrich. 뇌 경련. : P
Scimonster

당신이 일부를 잃으면 어떻게됩니까 this?
dkudriavtsev

25

Pyth-16 바이트

이것의 기본 아이디어 404는의 숫자를 빼면 숫자가 작기 때문에 404올바른 숫자 를 얻으려면 최대 2 를 가져와야한다는 것입니다. 분명히, 중복이 더 많습니다.

SSsetSS[404  404

설명:

SS                       First one does 1-index range, second one sorts, which is no-op 
 s                       If the e is there, this is no-op, if only t is there, it sums a one element list, which is the item
  et                     e picks last element in list, and if e is gone, then t gets you the list without the first element which is good enough when combined with s
   SS                    Sorting twice is no-op
    [                    Start list, this can't be two element because if we get rid of initial 4, the 0 becomes third element which neeeds to be captured
     404                 One of the 404's
     <space><space>404   Need two spaces for redundancy, because 404404 *is* bigger than 404

여기에서 온라인으로 사용해보십시오 .


23

Befunge-98 , 37 바이트

20020xx##;;11++::''ee44**``kk@@::..;;

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

설명

를 사용하여 "델타"(예 : 명령 포인터의 단계 크기)를 수동으로 설정할 수 있기 때문에 Befunge-98에서 방사선 강화 코드를 만드는 것은 그리 나쁘지 않습니다 x. 델타를로 설정하면 (2,0)다른 모든 문자는 건너 뛰고 모든 명령을 두 배로 늘릴 수 있습니다. 까다로운 것은 2 0안정적인 방법으로 스택 위에 올라가는 것입니다 . 우리는 실제로 0 2 0나머지 프로그램이 올바르게 작동해야하지만 무료로 할 것입니다. 우리가 이것을하는 방법은 다음과 같습니다.

20020xx

각 숫자는 자체적으로 푸시되므로 전체 프로그램에는 2 0단순히 무시할 시작이 있습니다 .

결과적으로 프로그램에서 첫 번째 또는 두 번째 문자를 삭제하는 것은 관련이 없습니다. 마찬가지로 세 번째 문자를 제거하는 것도 두 번째 문자를 제거하는 것과 동일하므로 걱정할 필요가 없습니다.

다른 두 경우에 어떤 일이 발생하는지 생각해 봅시다. 네 번째 문자 삭제 :

2000xx

델타가로 설정되어 (0,0)있습니다. 그러나 이것은 명령 포인터를 전혀 움직이지 않으므로 동일한 명령 x이 즉시 다시 실행되고 이번에는 팝업이 나타나고 (2,0)모두 잘됩니다 (나중에 목적을 위해 스택의 맨 아래에 암시 적 0이 있음).

대신 다섯 번째 문자를 삭제합시다.

2002xx

이제 델타가로 설정됩니다 (0,2). 그러나 여전히 수평 이동이 없으므로 IP가 즉시 계속해서 다시 랩핑 x되고 올바른 델타가 설정됩니다.

이 시점부터는 기본적으로 문자 중복과이 초기 부분은 항상 건너 뛰므로 무시할 수 있습니다.

...#;1+:'e4*`k@:.;

다음 ;명령이 나타날 때까지 모든 것을 건너 뛰는 일종의 주석 명령입니다 ;. 그러나 우리는 첫 번째 ;로 뛰어 넘기 #때문에 ;그 시점부터 의지 사이의 부분 만 실행됩니다.

1+    Increment the top of the stack.
:     Duplicate it.
'e    Push 101.
4*    Multiply by 4 to get 404.
`     Greater-than check. Pushes 1 once the top
      reaches 405, otherwise 0.
k@    Terminate the program that many times.
:.    Print a copy of the top of the stack (and a space).

16

> <> , 103 60 51 바이트

               vv
;?=*4o" e"n:ll<<
;?=*4o" e"n:ll<<

여기서 테스트했습니다.

이 프로그램 과 동일한 전술을 사용합니다 . 첫 번째 줄에서 문자를 삭제해도 두 번째 줄이 계속 실행됩니다. 두 번째 줄의 문자가 삭제되면 v두 번째 줄이 더 짧은 문자이므로 실행이 세 번째 줄로 이동합니다. 세 번째 줄의 삭제는 두 번째 줄에서 삭제 한 후에 만 ​​실행되므로 프로그램 제어에 영향을 미치지 않습니다.

줄 바꿈이 삭제 된 경우에도 프로그램이 작동합니다.

사례 1 :

두 번째 줄이 실행됩니다.

               vv;?=*4o" e"n:ll<<
;?=*4o" e"n:ll<<

사례 2 :

두 줄은 두 번의 명령으로 한 줄이됩니다.

               vv
;?=*4o" e"n:ll<<;?=*4o" e"n:ll<<

설명:

프로그램의 핵심은 다음과 같습니다. a 1는 이미 첫 번째 줄에 의해 스택에 푸시됩니다.

ll:n        Push length of the stack twice, duplicate, print as number
"e "o       Push 101, 32, output 32 as space
4*          101 * 4 is 404
=?;         Pop twice, if equal, halt
            (Execution wraps around)

사용할 수 있습니까 o" e"?
Martin Ender

그리고 +1당신 대신에 사용할 수 있습니다 l. 또한 fishlanguage.com 인터프리터는 약간 이상합니다 (디버깅 기능은 물론 유용하지만 성가신 사용). TIO는 다소 온건 파이썬 인터프리터를 사용하여, 나는 생각 : tio.run/nexus/fish#@m9oqIAMysq4AMuxtrfVMslXUkhVssqzsrHBEPj/HwA
마틴 청산

@MartinEnder 1첫 번째 줄 에서 s 중 하나를 제거하면 작동하지 않습니다 .
mbomb007

아 맞아, 어쨌든 나를 귀찮게했다 : tio.run/nexus/fish#@q@ACsrKuKztAbPVMslXUkhVysnLybGxwRD4/x8A
Martin Ender

12

> <> , 42 38 34 바이트

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

8 바이트를 줄인 @Martin Ender@Teal Pelican 에게 감사 합니다!

<<;?=*4o" e"lnll/
 ;?=*4o" e"lnll<

유사 mbomb007의 대답 ,하지만이 개 라인을 사용합니다.

단일 메모리 값을 사용하여 1에서 404까지 카운트하는 대신 스택 길이를 계속해서 밀어 넣었습니다. 루프가 시작되기 전에 스택에 아무것도 넣지 않아도되어 훨씬 쉽게 만들 수 있습니다.

원래 코드

<들 주변의 IP를 설정하고,이 /는 IP 주위에 감싸고 정상 경로의를 따라 계속, no-op입니다. 따라서 관련 코드는 다음과 같습니다.

          lnll   Prints the size of the stack + 1 and pushes the stack size twice
     o" e"       Prints a space and pushes 101
   *4            Multiplies to get 404
;?=              If the number we just printed was 404, end the program

그리고 이것은 반복됩니다.

삭제

여기서 가장 큰 열쇠는 거울 /입니다. 두 번째 줄이 수정되면 아무 것도하지 않습니다. 다시 줄 바꿈되어 본질적으로 작동하지 않습니다. 그러나 첫 번째 줄의 문자가 제거되면 줄이 아래로 이동하여 미러가 화살표에 닿아 <동일한 수정되지 않은 루프가됩니다.

다른 중요한 삭제는 \n캐릭터입니다. 이 코드를 생성 할 때도 설명됩니다.

<<;?=*4o" e"lnll/ ;?)*4o" e"lnll<

이제 우리는 원래 루프의 사본 ;?=*4o" e"lnll을 그 자체에 추가했습니다. 이것은 루프이므로 실행에 아무런 영향을 미치지 않으며 아무것도 변경되지 않은 것처럼 실행됩니다.


1
그것을 2 줄로 줄이는 정말 좋은 방법입니다. 내가 볼 수있는 유일한 문제는 38 바이트가 아니라 42입니까? 내부 코드를 다음과 같이 줄입니다. ;? = * 4o "e": n : + 1l은 38 바이트로 줄입니다. 이것은 84 *를 별개의 문자열 대신 "e"안에 넣습니다.
청록 펠리컨

1
또한 대체 할 수 :+1및 다른 :하나 l각.
Martin Ender

예, 둘 다 감사합니다!
MildlyMilquetoast

;?=*4o" e"n:ll작동합니다.
mbomb007

11

배나무 , 34 바이트

이 프로그램에는 제어 문자가 포함되어 있으므로 xxd덤프는 다음과 같습니다.

00000000: 7072 696e 7420 312e 2e34 3034 2327 108a  print 1..404#'..
00000010: af70 7269 6e74 2031 2e2e 3430 3423 2710  .print 1..404#'.
00000020: 8aaf                                     ..

배나무는 기본적으로 "흥미로운"기능을 가진 Perl 파생물입니다. 나는 그것을 농담으로 함께 던졌습니다 (그래서 폴리 글롯이 a partridge배나무에 인쇄되었다고 말할 수 있습니다 . 사실 거의 모든 프로그램이 그렇게합니다). 그러나 그것은 Turing-complete이고 실제로 이런 종류의 도전에 친절합니다.

우리가 여기서 가장 중요하게 생각하는 기능은 코드의 일부 하위 문자열에 CRC-32가있는 경우에만 Pear Tree가 프로그램을 실행한다는 것입니다 00000000. 하위 문자열을 시작할 때 코드가 회전됩니다. 이와 같이 코드의 두 (동일한) 절반에는 각각 CRC-32가 있습니다 (끝에 의심스러운 모양의 이진 주석으로 인해). 따라서 소스에서 문자를 삭제하면 (CRC 끊기), 다른 절반은 시작으로 회전 #하고 끝 근처 의 부호는 이진 정크 외에 손상된 절반을 주석으로 표시합니다.

또 다른 기능은 프로그램을 약간 작게 만듭니다. A Pear Tree는 대부분 Perl로 해석되지만 Python처럼 작동하도록 약간 변경되었습니다. 여기서 중요한 것은 Perl의 print진술 과 달리 (수를 함께 실행하는) Pear Tree의 print진술은 공백으로 인수를 분리하고 마지막 줄 바꿈을 인쇄한다는 것입니다. 이것은 공간적으로 분리 된 출력을 제공합니다. 즉, 포맷팅에 바이트를 낭비 할 필요가 없습니다. (프로그램에 입력을 제공하지 않아야합니다. 언어가 입력을 수신하면 기본적으로 해당 입력으로 무언가를 수행한다고 가정합니다.)

물론, 이것은 실제 골프 언어와 경쟁 할 수 없지만 (나도 기대하지는 않겠지 만) 사람들이 흥미로울 것이라고 생각했습니다.


9

Befunge 98 , 34 바이트

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

<<.:@k`*4e':+1[

2.:@k`*4e':+1<^^j

이것은 내 > <> answer 와 매우 유사하게 작동 하지만 미러 대신 /좌회전 작업 [을 사용한 다음 IP 방향을 뒤집습니다.이 경우 기능적으로 미러와 같습니다.

원래 코드

<<                 Reverses code direction, sending IP to right
               [   Turns the IP left, into the ^, which reverses it.
                   It then hits this again, turning left to go West. (No-op)
            :+1    Adds 1 to the sum
        *4e'       Pushes 404
     @k`           Ends the program if (sum > 404)
   .:              Prints the sum

삭제

두 번째 줄의 내용이 삭제되면 위로 이동하여 상단에 전혀 영향을 미치지 않습니다.

첫번째 라인의 어떤 삭제하면은 [에 IP 보낼 <동일한 루프 (제외한 중 시작 2j^^되는 피할 ^탠덤에 사용들 [)

2 개의 줄이 있기 때문에 하나를 삭제해도 코드에 아무런 영향을 미치지 않습니다 ( @ masterX244 덕분에 ).


코드에서 빈 줄은 어떻게됩니까? 아마 당신은 라인 피드를 두 배로 늘려 면역시킬 수도 있습니다
masterX244

귀하는 @ masterX244 감사합니다. 그것에 대해 생각하지 않았다.
MildlyMilquetoast

lol, 언어를 전혀 사용하지 않았지만 어떤 이유로 6 번째 감각이 저에게 그런 아이디어를주었습니다 ...
masterX244

5

Befunge-93, 54 51 바이트

3 바이트를 절약 해 준 Mistah Figgins 에게 감사드립니다 .

111111111111111vv
+1_@#-*4"e":.:<<
+1_@#-*4"e":.:<<

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

이것은 본질적으로 Fault-Tolerant Hello World 챌린지 에서 사용 된 것과 동일한 트릭 입니다. 첫 번째 줄은 시퀀스의 시작 부분에 스택 맨 위에 1이 있는지 확인한 다음 v줄 끝의 화살표 중 하나가 코드 경로를 줄 2의 기본 루틴의 시작 부분으로 리디렉션합니다. 오른쪽에서 왼쪽으로 실행합니다.

첫 번째 줄에서 문자를 제거하면 v화살표가 한 줄씩 이동 하지만 여전히 코드가 두 번째 줄로 리디렉션됩니다. 두 번째 줄에서 문자를 제거하면 줄 <끝의 화살표가 v위 의 경로 밖으로 이동 하므로 코드 경로는 3 번째 줄의 백업 루틴으로 리디렉션됩니다.

첫 번째 줄 바꿈을 제거해도 두 번째 줄을 교체하기 위해 세 번째 줄을 제자리로 이동하기 때문에 아무런 해가 없습니다. 그리고 두 번째 줄의 끝 이후에 아무것도 제거해도 효과가 없습니다. 백업 코드 일뿐입니다.


The first line starts by making sure there is a 1 on the top of the stack...첫 번째 줄은 그 점에서 꽤 확실합니다. 또한 <code> _ @ #을 줄일 수 있습니다! </code> to _ @ #-`하고 인쇄하기 전에 3 바이트를 저장하십시오.
MildlyMilquetoast

5

자바 스크립트 + HTML + 스택 스 니펫, 167 158 154 바이트

Stack Snippets의 JavaScript가 <script>요소 내부의 웹 페이지에 배치된다는 사실을 남용합니다 .

or(x="",i=405,d=document;--i;)d[i]||(x=d[i]=i+' '+x);d.write(x)</script></script><script>for(x="",i=405,d=document;--i;)d[i]||(x=d[i]=i+' '+x);d.write(x)


@ Flp.Tkc 수정되었습니다.
user2428118

4

실제로 18 바이트

:404::404kMkMMRRSS

실제로 스택 기반 골프 언어입니다.

관련 명령에 대한 설명 (위의 컨텍스트에서 작동 함) :

Numbers are indicated by round brackets () and lists by square brackets []

:         - pushes the longest string of characters in '0123456789+-.ij' as a numeric
k         - pop all the elements on the stack into a list [l] and push [l]
M         - pop [l], push max([l])
            pop (a), push (a)
R         - pop [l], push reverse([l])
            pop (a), push range([1,a])
S         - pop [a], push sorted([a])
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.