소스의 MD5 합계를 다음 형식으로 인쇄하는 프로그램을 작성하십시오.
MD5 sum of my source is: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
부정 행위 없음-소스 파일을 읽고 합계를 계산할 수 없습니다. 프로그램은 외부 정보를 읽지 않아야합니다.
물론 해당 언어에 맞는 MD5 라이브러리를 사용할 수 있습니다.
소스의 MD5 합계를 다음 형식으로 인쇄하는 프로그램을 작성하십시오.
MD5 sum of my source is: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
부정 행위 없음-소스 파일을 읽고 합계를 계산할 수 없습니다. 프로그램은 외부 정보를 읽지 않아야합니다.
물론 해당 언어에 맞는 MD5 라이브러리를 사용할 수 있습니다.
답변:
r='r=%r;import md5;print "MD5 sum of my source is: "+md5.new(r%%r).hexdigest()';import md5;print "MD5 sum of my source is: "+md5.new(r%r).hexdigest()
MD5 sum of my source is: bb74dfc895c13ab991c4336e75865426
이데온 에서의 검증
24ba0a79636297dab8803f571d4e3b44 md.py
은 리눅스에서 md5sum을 사용합니다
\n
내 프로그램 끝에 줄 바꿈 ( )을 추가하면 @slackwear @ 게시 한 해시가 표시 24ba0a79636297dab8803f571d4e3b44
됩니다. 추가 줄 바꿈이 있다고 확신합니다. (저는 일부 편집자가 자동으로이를 수행한다고 생각합니다)
$_=q(use Digest::MD5 md5_hex;say"MD5 sum of my source is: ",md5_hex"\$_=q($_);eval");eval
Digest :: MD5가 TIO에 설치되어 있지 않으므로 TIO 링크가 없습니다. 이를 위해서는 언어 적합성 수준을 5.10 이상으로 설정해야합니다 ( -M5.010
; PPCG 규칙에 따라 바이트 패널티는 적용되지 않습니다).
이것은 또 다른 "소스 코드의 함수를 인쇄하는 것"문제이며, 이는 보편적 인 quine 생성자를 통해 쉽게 해결할 수 있음을 의미합니다.
$_=q(…"\$_=q($_);eval");eval
우리는 q()
문자열 표기법 (네스트)을 $_
사용하여 Perl이 누락 된 인수에 사용하는 "기본"변수 를 초기화 합니다. 그런 다음 eval
인수가 누락되어 내부의 문자열 q()
이 평가됩니다.
안의 문자열 q()
은 전체 프로그램을 작성하는 방법에 대한 설명입니다. 우리는 프로그램의 나머지 부분을 문자 그대로 지정한 다음 이스케이프 처리되지 않은 $_
것을 사용 하여 내부의 전체 문자열을 대체합니다.
따라서이 기술은 전체 프로그램 소스와 동일한 내용의 문자열을 만듭니다. 우리는 그것을 인쇄하여 퀴네를 만들 수 있습니다. 그러나 보편적 인 quine 생성자를 만들어서 다른 일을 먼저 할 수도 있습니다.
use Digest::MD5 md5_hex;say"MD5 sum of my source is: ",md5_hex
매우 간단합니다 : MD5 내장을 가져온 다음 질문에 지정된 고정 문자열을 인쇄하십시오 (압축 할 가치가 없으며 펄에서는 압축 해제 기가 문자 그대로 문자열을 나타내는 것보다 더 많은 공간을 차지할 것이라고 생각합니다). 범용 quine 생성자를 통해 얻은 문자열
이 챌린지가 게시되었을 때 존재했던 Node.js의 마지막 버전을 사용합니다. Node.js의 암호화 모듈에 대한 2012 년 11 월 9 일 문서 를 추적 했으며,이 날 다시 사용했던 모든 기능을 지원했습니다.
function x(s){return require("crypto").createHash("md5").update(s+";x(x)").digest("hex")};x(x)
이 코드를 테스트 하기 위해 골동품 버전의 Node.js를 설치 하고 싶지 않다면 최신 버전에서도 작동합니다.
그리고 여기 ES6의 화살표 기능을 사용하는 버전이 있습니다.
x=s=>require("crypto").createHash("md5").update(`x=${s};x(x)`).digest("hex");x(x)
편집 : Node.js 0.9.3 버전의 오류를 지적하여 2 바이트를 절약 한 Anders Kaseorg 에게 감사드립니다 .
`${s};x(x)`
은 지원되지 않았습니다.