NULL (프로그래밍 언어)

NULL은 0차원의 난해한 프로그래밍 언어이다. 하나의 양의 정수를 소인수분해하여 명령을 만들어낸다.

 런타임 환경 
NULL 프로그램에서 사용할 수 있는 환경은 초기에 비어있는 3개의 큐와 임의의 2개의 양의 정수인 변수 'x'와 'y'로 구성된다. 'x'는 프로그램에 설정되고 'y'는 1로 설정된다.

그런 다음, 'x'를 'x'의 가장 작은 소인수로 나누고 'y'를 곱한 다음 소수 요소에 해당하는 명령어가 실행된다.

 명령어 
 2 다음 (마지막일 경우 첫 번째) 큐 선택. 3 이전 (첫 번째일 경우 마지막) 큐 선택. 5 선택한 큐의 앞에 있는 바이트를 (큐가 비어있으면 NUL을) 출력한다. 이 때 NUL은 '\0' 이다(아스키 코드 0). 7 한 바이트를 입력받고 선택한 큐의 앞의 값을 덮어쓰며, 선택한 큐가 비어 있다면 입력받은 값을 큐에 추가한다. 현재 EOF를 입력받았을 때의 동작에 대해서는 정의되어 있지 않다. 11 선택한 큐의 앞에 있는 바이트를 (큐가 비어있다면 0을) y에 뺀다. 만약 y가 음수가 되면 y를 0으로 설정한다. 13 선택한 큐의 앞에 있는 바이트를 (큐가 비어있다면 0을) y에 더한다. 17 선택한 큐의 앞에 y를 256으로 나눈 값을 집어넣는다. 19 선택한 큐의 앞에 있는 바이트를 (선택한 큐가 비어있을 경우에는 0을) 꺼내서 다음 (마지막일 경우 첫 번째) 큐의 뒤에 추가한다. 23 선택한 큐의 앞에 있는 바이트를 (선택한 큐가 비어있을 경우에는 0을) 꺼내서 이전 (첫 번째일 경우 마지막) 큐의 뒤에 추가한다. 29 선택한 큐의 앞에 있는 바이트를 제거한다. 31 선택한 큐의 끝에 y를 256으로 나눈 값을 추가한다. 37 만약 선택한 큐가 비어있거나 선택한 큐의 앞의 바이트 값이 0이면 x를 가장 작은 소인수로 나누고 y에 곱한다. 41 두 변수(x, y)의 값을 서로 변경. 43 프로그램 종료

이 명령어는 항상 14번째 소수마다 반복된다. 예를 들어, 47은 2와 같은 역할을 한다.

 예제 
 Hello, world! 
이 199자리 수는 Hello, world!를 출력한다.
 50056520978563208516819797718881283032143646116073595166114838703987562227081772
 27277884468665934749909633552472002670467760272184148189288786549011066838407636
 978909259289001144030816758344442315793

 Cat 프로그램 
이 5자리 수는 cat 프로그램이다. 파일을 끝내는 동작은 정의되지 않았다.
 42539

 외부 링크 

 Python으로 구현된 NULL 인터프리터 과 the Esoteric File Archive의 미러 사이트
 Rust에서 구현된 NULL 인터프리터

분류:난해한 프로그래밍 언어
분류:소인수 분해 알고리즘