자체 소스 코드를 렌더링하는 “해커 입력기”프로그램을 만듭니다. 기반 청크를 출력하는 프로그램입니다.

해커 입력기에 익숙하지 않은 경우 hackertyper.net을 참조하십시오 . 간단히 말해, 코믹 효과를 위해 키 스트로크 당 하나의 코드 기반 청크를 출력하는 프로그램입니다. 그러나 hackertyper.net 버전은 구현하기가 너무 쉽습니다. 임의 의 코드 조각 에서 한 번에 세 문자 만 출력 합니다. 이 문제를 해결하려면 프로그램에서 자체 소스 코드를 출력하고 구분 된 공백을 인쇄해야합니다 키 스트로크마다 코드 덩어리를 .

세부

  • 프로그램의 파일 이름을 하드 코딩 할 수 없습니다. 이름을 동적으로 결정해야합니다. 프로그램이 실행 파일로 컴파일되면 표준 파일 확장자를 실행 파일 이름에 추가하고 (Windows를 사용하는 경우 .exe 제외) 소스 파일이 실행 파일의 디렉토리에 있다고 가정합니다. 예를 들어 C 실행 파일의 이름이 “hacker”인 경우 동일한 디렉토리의 “hacker.c”파일에서 소스 코드를 가져와야합니다. 컴파일 된 프로그램에 확장명이 있으면 소스 코드의 이름 ( “typer.exe”-> “typer.cs”)을 결정하기 전에 삭제해야합니다.
  • 프로그램은 각 공백 사이에 하나 이상의 문자를 포함하여 최소 5 개의 공백을 포함해야합니다. 이것은이 챌린지에 가능한 가장 작은 크기가 9 바이트임을 의미합니다. 공간은 프로그램 기능에 중요하지 않아도됩니다.
  • 모든 형식 (들여 쓰기, 줄 바꿈 등)은 출력에서 ​​유지되어야합니다. 이 형식은 코드를 진행하거나 따라가는 형식으로 인쇄 될 수 있습니다. 중요한 것은 서식이 유지되어야한다는 것입니다.
  • 선택한 언어로 공백을 구현할 다른 방법이없는 경우 주석을 사용하여 5 개의 공간 요구 사항을 충족하지 마십시오.

편집 : 줄 대신 청크 구분 기호로 줄 바꿈을 사용할 수 있습니다.



답변

강타, 51 58

for w in $(<$0);do read -sn 1;printf -- "$w ";done

답변

HTML 및 자바 스크립트, 123

<head></head><body onload="s=(a=document.all)[i=0].innerHTML" onkeyup="a[2].textContent += s.split(/(?= )/)[i++%6]"></body>

이것은 해커 입력기와 비슷하지만 자체 소스 코드로 작동합니다. 규칙을 이해하지 못했다면 알려주십시오.

다음은 스타일 버전 (170 자)입니다.

<head></head>
<body style="background:#000;color:lime" onload="s=(a=document.all)[i=0].innerHTML" onkeyup="a[3].textContent+=s.split(/(?=\s)/)[i++%6]">
<pre></pre></body>

데모를 만들었습니다 . JS Bin이 많은 추가 코드를 추가하기 때문에 수정되었지만 일반적인 아이디어는 동일합니다.


답변

Perl + Term :: ReadKey, 56 바이트

use
Term'ReadKey;ReadMode
4;open
0;ReadKey,print
for
<0>

덕분에 ThisSuitIsBlackNot 원래의 영감과에 프리모 제안에 open 0<0>.

공백 문자 수를 지정된 최소 5까지 가져 오려면 어딘가에for 한 줄을 추가해야한다는 점을 제외하고는 이후 줄 바꿈 이 실제로 필요하지 않습니다.

또한 ThisSuitIsBlackNot의 제출과 같이이 프로그램에는 CPAN 의 Term :: ReadKey 모듈 이 필요합니다 . 데비안 / 우분투 리눅스에서이 모듈은 아직 없으면 다음 명령으로 쉽게 설치할 수 있습니다sudo apt-get install libterm-readkey-perl .

또한 일부 문자를 저장하기 위해이 프로그램은 종료시 입력 모드를 정상으로 복원하지 않으므로 나중에 입력하는 내용을 볼 수 없습니다. 쉘 명령을 실행 stty sane하거나 reset수정해야합니다. 이 문제는 10 바이트의 추가 비용으로 다음과 같이 해결할 수 있습니다.

use
Term'ReadKey;ReadMode
4;open
0;ReadKey,print
for<0>;ReadMode
0

보너스 : 퓨어 퀴니, 81 바이트

$_=q{use
Term'ReadKey;ReadMode
4;ReadKey,say
for
split$/,
"\$_=q{$_};eval"};eval

다시, 쉼표 뒤의 개행 문자는 최소 5 개의 공백을 충족시키기 위해 필요합니다.

위의 56 바이트 프로그램과는 달리이 버전은 실제로 소스 코드를 읽을 필요가 없습니다. 왜냐하면 소스는 quine을 기반으로하기 때문입니다.

$_=q{say"\$_=q{$_};eval"};eval

이 quine의 좋은 점은 q{ }반복하지 않고도 블록 내에서 임의의 “페이로드”를 쉽게 전달할 수 있다는 것입니다. <0>짧게 이길 수는 없지만 꽤 가깝습니다.

참고 :이 프로그램은 Perl 5.10+ say기능을 사용 하므로 -M5.010(또는 -E) 명령 행 스위치를 사용하여 호출해야합니다 . 메타에 대한 기존 합의에 따라 현대 언어 기능을 활성화하는 데 사용되는 이러한 스위치 는 추가 문자로 계산되지 않습니다 . 내가 찾을 수없는 가장 짧은 해결책 say은 83 바이트입니다.

$_=q{use
Term'ReadKey;ReadMode
4;ReadKey,print
for
split/^/,
"\$_=q{$_};eval"};eval

이 두 가지 모두 (마지막 두 줄을 연결하고) 삽입하여 터미널 친화적으로 만들 수 있습니다.

;ReadMode
0

마지막 전에 }.


답변

파이썬 3-124 바이트-7 공백


암호:

from curses import*
s=initscr();noecho()
for x in open(__file__).read().split(" "):s.getch();s.addstr(x+" ")
echo();endwin()

언 골프 드 :

from curses import*
# init curses
screen=initscr()
noecho()
# split code into spaces
code = open(__file__).read().split(" ")
for x in code:
    # wait for keypress
    screen.getch()
    # print a bit
    screen.addstr(x+" ")
# deactivate curses
echo()
endwin()

스타일 버전 :

from curses import*
s=initscr();noecho();start_color();init_pair(2,COLOR_GREEN,COLOR_BLACK)
for x in open(__file__).read().split(" "):s.getch();s.addstr(x+" ",color_pair(2))
echo();endwin()

답변

루비, 85 , 71

require"io/console";f=File.open __FILE__;loop{STDIN.raw &:getc;print f.read(3)||exit}

너무 나쁘다 IO#raw표준 라이브러리의 일부가 아닌 .

개량

require"io/console";24.times{|q|STDIN.raw &:getc;$><<IO.read($0,3,q*3)}

이것은 커널 #exit에 대한 호출을 제거하고 전역 변수를 사용하여 코드를 줄입니다.


답변

베 펀지-21

~ $ g , 1 +:54*`#@_:0

방금 Befunge에 대해 알게 되었기 때문에 이것에 상당히 만족합니다. 팝업 창에 “입력”하는 것이 마음에 들지 않으면 더 나은 온라인 통역사를 찾을 때까지 여기 또는 여기에서 실행할 수 있습니다 .