INTERCAL은 훌륭한 언어이지만 다른 사람들의 코드를 이해하는 것이 항상 쉬운 것은 아닙니다. COME FROM 문을 사용하는 경우에 특히 그렇습니다.
도전 정의
- INTERCAL 프로그램의 소스 코드를 텍스트 / 데이터 스트림으로 사용 하는 프로그램 또는 함수 를 작성하십시오 . 함수를 작성하는 경우 함수를 호출하는 프로그램도 제공하는 것이 좋지만 점수에는 포함되지 않습니다.
- 기능 출력은 다음 지침에 따라 프로그램이 수행 한 점프의 텍스트 / 데이터 스트림입니다. 출력물을 인쇄 할 필요 는 없지만 문자열 배열이 아닌 단일 텍스트 여야합니다 (예 :).
각 출력 라인은 COME FROM이 될 명령문과 COME FROM 명령문의 라인 번호로 구성됩니다
->
. 예를 들면 :(310) DO .4 <- .3 -> 55
이러한 소스 코드 줄을 다듬을 수 있지만 반드시 그럴 필요는 없습니다.
- 테스트 사례는 계산되지 않은 레이블 (예 : 정수 레이블) 로만 구성됩니다 .
- 출력은 레이블이 아닌 COME FROM이 될 명령문의 소스 코드 순서 나 COME FROM 문 또는 레이블의 순서에 따라 정렬되어야합니다.
- 여러 명령문이 동일한 레이블에서 COME FROM으로 올 수 있습니다. 이러한 경우 COME FROM 행 번호를 정렬하고 쉼표로 구분해야합니다.
- 명령문이 COME FROM 자체로 오는 것이 가능합니다.
- COME FROM 문 앞에 NOT 문이 붙을 수 있습니다. 이러한 경우 줄 번호는 대괄호로 묶어야합니다.
- COME FROM이라는 단어는 주석에 나타날 수 있으며 무시해야합니다. 파일을 완전히 구문 분석 할 필요는 없습니다. 파일 뒤에 레이블 (괄호 안의 숫자)이 있으면 실제 명령문이라고 가정 할 수 있습니다.
채점
참가자는 프로그램이나 기능 의 문자 길이 에 따라 점수가 매겨집니다 .
테스트 사례
이 테스트 사례는 모두 calvinmetcalf / intercal Github 저장소에서 제공 됩니다. 유용한 응용 프로그램은 모든 입력을 안전하게 받아들이지 만이 문제의 목적을 위해이 5 가지 테스트 사례 만 설명하면됩니다.
(10) PLEASE DON'T GIVE UP -> 87
(33) DON'T GIVE UP -> 92
(15) DO (13) NEXT -> 26
(16) DO .12 <- .1 -> 6
(23) DO (21) NEXT -> 3
(7202) DO RETRIEVE .203+,202 -> 75
(4202) DO ,202SUB.201.202#7 <- ,201SUB.201.202#7 -> 108
(6202) DO ,201SUB.201.202#7 <- ,202SUB.201.202#7 -> 117
(4203) DO READ OUT ,201SUB.201.202#7 -> 133
(4302) DO .302 <- .2 -> 181
(5410) DO ,400SUB#124 <- #4 $ #17 -> 293
(3410) PLEASE (4410) NEXT -> 288
(5402) DO (412) NEXT -> 328
(4412) PLEASE (3412) NEXT -> 334
(3423) DO FORGET #2 -> 375
(4404) DO RETRIEVE .311+.312 -> 411
(5404) PLEASE DO (414) NEXT -> 430
(4434) DO FORGET #1 -> 441
(3454) DO (103) NEXT -> 451
(5502) DO .512 <- .312 -> 520
(8503) PLEASE RETRIEVE .311+.312 -> 621
(7503) DO (302) NEXT -> 515
(3622) DO (302) NEXT -> 514
(603) PLEASE FORGET #2 -> 622
(10) DO NOTHING -> 5, 11
(20) PLEASE (100) NEXT -> 6
(30) PLEASE (200) NEXT -> 12
(103) DO (104) NEXT -> 27
(104) DO (105) NEXT -> 19
(1) DO (2) NEXT -> 36
(2) DO (105) NEXT -> 194
(202) DO NOT .2 <- #2 AGAIN -> [196]
(203) DO (204) NEXT -> 167
(204) DO (205) NEXT -> 159
(8201) DO NOTHING -> 165, 271
(8202) PLEASE NOTE Fork threads, one dormant, one alive -> 53, 58
(8211) DO COME FROM (8211) -> 60
(8216) DO NOTHING -> 71
(8215) DO NOTHING -> 68
(8217) DO COME FROM (8217) AGAIN -> 118
(8299) DO COME FROM (8299) AGAIN -> 141
(8274) DO (8273) NEXT ONCE -> 158
(8259) PLEASE DO NOTHING -> 166
(8276) DO COME FROM (8276) AGAIN -> 199
(8278) PLEASE DO COME FROM (8278) AGAIN -> 237
2
아무도 코튼 아이드 조를 아직 언급하지 않았다는 사실에 당황합니다. :-).
—
mınxomaτ
INTERCAL is a wonderful language
불쾌감을주는 언어로
문자 길이로 점수를 매기고 싶지 않습니까? 챌린지는 일반적으로 여기에서 바이트 길이로 점수가 매겨집니다.
—
페이탈 라이즈
@Fatalize 나는 두 가지 방법에 대해 생각했습니다. 유니 코드 문자로 큰 숫자를 인코딩하는 것과 같은 문자 스코어링의 일반적인 이점은 유용하지 않을 수 있지만 누군가가 스코어링을 활용할 수 있다면 그들이 할 수있는 일에 관심이 있다고 생각했습니다.
—
curiousdannii
레이블이 줄의 시작이라고 가정 할 수 있습니까? 그런
—
orlp
^(\d+)
라벨 을 잡아?