티스토리 뷰

matlab

매트랩 콰인

게으른 the lazy 2024. 8. 6. 17:30

https://curiosamathematica.tumblr.com/post/94322510707/a-quine-is-a-self-replicating-computer-program

 

 

콰인은 자기 자신의 코드를 출력하는 코드이다. 즉, 실행 결과가 자신의 코드와 동일해야 한다.

 

생각보다 간단하지 않다. 무지성으로 아래처럼 짜면

 

disp('disp')

 

출력은 disp만 되므로, 다시 아래처럼 고쳐야 하고,

 

disp('disp(''disp'')')

 

 

이렇게 해봤자 다시 코드가 늘어났으므로 다시 코드를 늘려야 한다.

 

아래는 chatGPT가 알려준 매트랩 콰인이다.

 

quine = 'fprintf(''%s%s%s'', char(10), ''quine = '';, quine, char(10), quine);';
fprintf('%s%s%s', char(10), 'quine = ', quine, char(10), quine);

 

그런데 틀렸다. 따옴표 2개는 따옴표 1개로 바뀌기 때문이다.

 

다시 물어봤다. 이렇게 알려준다.

 

s = 's = %c%s%c; fprintf(s, 39, s, 39);'; fprintf(s, 39, s, 39);

 

 

 

잘 나온다.

 

사실 %s%s%s라도 써도 상관은 없다. %s가 %c를 포함하기 때문이다. 39는 따옴표의 아스키 코드이다.

 

위 코드에는 교묘한 트릭이 있다. fprintf에 '%s%s%s'라는 하나의 포맷, 각 %s에 들어갈 3개의 char array를 입력으로 넣었는데, 처음과 마지막 %s에 따옴표를 넣었다. 더 짧게는 안 될 것 같긴 한데, 또모르지.

 


 

아, 물론 줄넘김을 무시한다면 아래와 같은 장난도 가능하다.

 

a = 1

 

 

 

아래는 파이썬 콰인이다.

 

 

 

 

글 작성에 도움 주신 안젤로님께 감사 말씀 드립니다.

댓글