입력 번호; 출력 라인 번호


18

코드 골프

완전히 실제 뒷이야기 : 나는 웹 사이트 www에서 일하는 계약자입니다. Sky.Net 과 우리의 임무 중 하나는 자기 인식 프로그램이나 무언가를 만드는 것입니다. 어쨌든 코드를보다 자각하기 위해 각 라인 번호에 어떤 코드가 있는지 IT 가 알아야합니다.


도전

입력을 받아 해당 프로그램이나 함수 n의 코드를 온라인으로 반환 하는 프로그램이나 함수를 만듭니다 n.


규칙

➊ 프로그램 또는 기능의 길이는 4 줄 이상이어야합니다. 각 줄은 고유해야합니다.

the 입력이 항상 1보다 크거나 같고 프로그램 / 함수의 행 수보다 작거나 같은 양의 정수라고 가정 할 수 있습니다.

program 프로그램 / 기능의 첫 번째 행은 0 행이 아닌 1 행입니다.

➍ 프로그램이있는 파일에 액세스 할 수 없습니다. (누군가 "기술적으로 위반하는 규칙 # 4가 아닙니까?"

➎ 줄은 비워 둘 수 없습니다 (여기서 공백이 사용자 언어로 작동하지 않는 경우 공백이 포함됨)

➏ 줄은 // 주석이 될 수 없습니다 (<!-스타일의 / *).


이것은 도전입니다.
이것은 이므로 가장 적은 바이트로 제출하면 승리합니다!



1
이 작업을 99 에서 수행하고 싶습니다 :)
Jonathan Allan

2
하지 모든 라인이 독특한 어디 있는지 문제로 실행 할 수 @JonathanAllan
MildlyMilquetoast

"줄은 주석이 될 수 없지만 효과적인 no-ops는 괜찮을 것 같습니다."(그러나 솔직히 말해서, 줄이 no-op로 계산되어야하는지 여부를 말하기가 어렵습니다. 예를 들어, Ruby 응답의 마지막 줄은 괄호를 끝내는 중괄호)
Value Ink

제목이 더 좋을 수도 있습니다 "입력 번호; 해당 줄 번호를 가진 출력 줄"? 또는 "숫자로 출력".
Paŭlo Ebermann

답변:


16

Vim, 7 바이트

1
2
3
4

온라인으로 사용해보십시오!

내가 알 수있는 한, 이것은 모든 규칙을 준수합니다. vim에서 빈 프로그램은 기본적으로 모든 입력을 인쇄합니다. 이후

<N><CR>

noop이며 입력 텍스트를 변경하지 않으며 각 입력이 원하는 출력과 일치하기 때문에 동일한 접근 방식이 여러 줄에서 작동합니다.


2
다른 언어로도 사용 가능-첫 번째 추가 : Pyth
Jonathan Allan

잠깐만 바이트? Vim은 키 입력으로 측정됩니다.
Pavel

@JonathanAllan TIO에서 Pyth가 잘못 구성된 것 같습니다. 디버그 출력을 보면 실제로 실행중인 코드가 코드 필드가 아니라 인수 필드에있는 것임을 알 수 있습니다. 이것이 실제로 코드를 실행하는 모습입니다.
isaacg


2
이것은 Brachylog
Fatalize

9

루비, 71 70 66 바이트

온라인으로 사용해보십시오!

->n{
k=["}", "k[-n]%%k.inspect", "k=%s", "->n{"]
k[-n]%k.inspect
}

"Cheating"모드 : 7 + 1 = 8 바이트

-p+1 바이트에 대한 플래그가 필요합니다 . 말 그대로 V 답변 의 사본 . 입력 된 숫자를 인쇄합니다. 전체 프로그램은 사실상 아무런 문제가 없습니다.

1
2
3
4

무엇을 -p합니까?
Pavel

@Pavel 프로그램이 STDIN의 각 행을로 읽어 들여 $_프로그램 내용을 실행 한 다음 $_화면 의 내용을 인쇄합니다 (STDIN의 행당 반복). 프로그램은 아무것도하지 않기 때문에 실제로는 유닉스 일뿐입니다 cat. 그러나 1-4의 모든 입력은 줄의 내용을 출력합니다. 각 줄은 문자 그대로 줄 번호이기 때문입니다.
Value Ink


나는 당신의 "속임수"답변을 좋아합니다. Perl은 또한 유효 -p하지만 1\n2\n3\n4Perl 프로그램이 아닙니다.
ThisSuitIsBlackNot

7

하스켈, 69 59 바이트

(lines(s++show
 s)
 !!)
s="\n(lines(s++show\n s)\n !!)\ns="

표준 Haskell quine을 기반으로합니다. 첫 번째 표현식 (처음 세 줄에 걸쳐 퍼짐)은 명명 된 문자열 s( s++show s) 에서 n 번째 줄을 선택하는 이름이없는 함수입니다 . 인덱싱을 1 기반으로 만들기위한 +2 바이트 (불필요한 규칙 포함)

온라인 으로 사용해보십시오! 버전 4 바이트를 추가하는 함수의 이름을 지정해야합니다.


이 규칙 6을 위반합니까? :)
Albert Renshaw

행 인덱싱은 0 기반이 아니어야하며 규칙에 명시 적으로 1 인덱싱이 필요합니다.
Value Ink

@AlbertRenshaw : 고정
nimi

@ValueInk : 고정
nimi

@nimi lol, 이와 같은 " 솔루션 "은 제가이 인기 콘테스트를 하하로 만들려고하는 이유입니다. 그럼에도 불구하고 좋은 일입니다!
Albert Renshaw

5

PowerShell , 184 172 바이트

$v=0,
'$v=0,',
"'`$v=0',",(($q='"{0}`$v=0{0},",(($q={0}{1}{0})-f([char]39),$q)')-f([char]39),$q),
(($z='(($z={0}{1}{0})-f([char]39),$z;$v[$args]')-f([char]39),$z);$v[$args]

온라인으로 사용해보십시오!

설명

$v첫 번째 줄에 배열 을 만들어 시작합니다 . 같은 줄에서 첫 번째 ( 0th) 요소가로 설정되고 0쉼표가 ,계속 정의됩니다.

다음 줄 1은 배열 의 다음 요소 ( )를 스크립트의 첫 번째 줄의 내용을 나타내는 문자열로 설정하여 첫 번째 줄을 $v[1]반환합니다.

세 번째 줄은 먼저 배열의 세 번째 요소 (index 2)를 스크립트의 두 번째 줄을 나타내는 문자열로 설정 한 다음 같은 줄 3에서 형식 연산자 ( -f)를 사용하여 대체 할 quine snippet을 사용하여 네 번째 요소 (index )를 설정합니다. 작은 따옴표 ( [char]39) 및 형식 템플릿 문자열 의 특정 인스턴스 는 3 행 전체를 재현합니다.

4 행은 기본적으로 동일한 작업을 수행하지만 배열 작성을 종료 한 다음 제공된 인수를 사용하여 색인을 작성합니다.


4

파이썬 2, 104 73 67 바이트

6 바이트를 절약 한 Jonathan Allan에게 감사합니다!

s=\
['print s[input()]or s', 's=\\', 0, 'exec s[', '0]']
exec s[
0]

편집 : 동일한 바이트 수이지만이 솔루션이 더 좋습니다.

온라인으로 사용해보십시오!

Value Ink의 Ruby 답변 의 Python 버전 .

이전 답변 (67 바이트) :

1
s=\
['print s[-input()]or s', 0, 's=\\', 1]
print s[-input()]or s

제거하여 6 저장 n: TIO
Jonathan Allan

@ovs 챌린지 요구 사항은 최소 4 줄의 소스 코드가 필요합니다. : V
Value Ink

2

CJam , 19 18 17 바이트

1
{'_'~]ri(=}
_
~

온라인으로 사용해보십시오!

표준 CJam- 퀸을 기반으로합니다. (가) {...}_~실행 ...스택 블록 자체 (이 경우에는, 또한 1그 아래). 그런 다음 우리는 :

'_'~  e# Push the third and fourth line.
]     e# Wrap all four lines in a list.
ri    e# Read input and convert to integer.
(=    e# Use as index into the lines.

이것은 아름답다. 또한 논리의 웃는 얼굴 결말처럼 (= haha
Albert Renshaw

1

PHP, 261 바이트

<?php function f($l){
$a="aWYoJGw9PTEpJG09Ijw/cGhwIGZ1bmN0aW9uIGYoXCRsKXsiO2lmKCRsPT0yKSRtPSJcJGE9XCIkYVwiOyI7aWYoJGw9PTMpJG09IlwkYj1cIiR";
$b="iXCI7IjtpZigkbD09NCkkbT0iZXZhbChiYXNlNjRfZGVjb2RlKFwkYS5cJGIpKTt9Pz4iO2VjaG8gJG07";
eval(base64_decode($a.$b));}?>

온라인으로 사용해보십시오!

인코딩 된 문자열은 다음과 같습니다.

if($l==1)$m="<?php function f(\$l){";
if($l==2)$m="\$a=\"$a\";
if($l==3)$m="\$b=\"$b\";
if($l==4)$m="eval(base64_decode(\$a.\$b));}?>";
echo $m;

흥미 롭습니다! 인코딩 된 문자열은 무엇입니까?
Albert Renshaw

1
@Albert Renshaw 문자열의 디코딩 버전을 추가하기 위해 편집했습니다.
Divcy

0

펄, 52 바이트

$_=q{print+(split/
/,"\$_=q{$_};
eval")[<>-1]};
eval

이것은 고전적인 quine에 대한 간단한 변형입니다.

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

"페이로드"는 split 줄 바꿈에 있으며 결과 목록에 색인을 작성하여 올바른 줄을 선택합니다.

Perl, 49 48 바이트 (비경쟁)

#!/usr/bin/perl -d:A
sub DB'DB{
print${"_<$0"}[<>]}
1

코드의 경우 38 바이트 (shebang 제외하지만 포함 -d:A), 파일 이름의 경우 10 바이트 Devel/A.pm. Devel디렉토리에 있어야합니다@INC .

기술적으로 이것은 규칙 # 4를 위반합니다. -d:A 파일이 두 번 구문 분석되므로 경쟁이 아닌 솔루션 합니다.

그것은 사용하는 디버거 후크 액세스로의 저장을 펄 파일의 라인을 @{"_<$filename"}컴파일시 배열.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.