Số đầu vào; Số dòng đầu ra


18

Mã Golf

Hoàn toàn có cơ sở : Tôi là một nhà thầu làm việc trên một trang web www. Sky.Net và một trong những nhiệm vụ của chúng tôi là tạo ra một số chương trình tự nhận thức hoặc một cái gì đó, tôi không biết rằng tôi đã không thực sự lắng nghe ông chủ. Dù sao, trong nỗ lực làm cho mã của chúng tôi tự nhận thức hơn, chúng tôi cần CNTT để có thể biết mã nào trên mỗi số dòng.


Thử thách

Tạo một chương trình hoặc chức năng nhận đầu vào nvà trả về mã của chương trình hoặc chức năng đã nói trên mạng n.


Quy tắc

Chương trình hoặc chức năng của bạn phải dài ít nhất 4 dòng. Mỗi dòng phải là duy nhất.

Bạn có thể giả sử đầu vào sẽ luôn là số nguyên dương lớn hơn hoặc bằng 1 và nhỏ hơn hoặc bằng số lượng dòng trong chương trình / hàm của bạn.

Dòng đầu tiên trong chương trình / chức năng của bạn là dòng 1, không phải dòng 0.

Bạn không thể truy cập tệp mà chương trình của bạn đang bật. (Nếu ai đó phải hỏi "Đây không phải là quy tắc vi phạm kỹ thuật số 4"; có lẽ là như vậy)

Các dòng không thể trống (điều này bao gồm một khoảng trắng nếu khoảng trắng không làm gì trong ngôn ngữ của bạn)

Các dòng không thể là // nhận xét (/ * của bất kỳ <! - style)


Đây là một thử thách giống như
Đây là , vì vậy bài nộp có ít byte nhất sẽ thắng!



1
Tôi muốn thấy điều này được thực hiện vào năm 99 :)
Jonathan Allan


"Các dòng không thể là nhận xét, nhưng tôi đoán các no-op hiệu quả vẫn ổn" (nhưng thành thật mà nói, đôi khi thật khó để nói liệu một dòng có nên được tính là không có hay không; ví dụ: câu trả lời Ruby của tôi có dòng cuối cùng chỉ là một dấu ngoặc nhọn để kết thúc lambda)
Ink Ink

Tiêu đề có thể tốt hơn "Số đầu vào; Dòng đầu ra với số dòng đó"? Hoặc thậm chí "Dòng đầu ra theo số".
Paŭlo Ebermann

Câu trả lời:


16

Vim, 7 byte

1
2
3
4

Hãy thử trực tuyến!

Theo như tôi có thể nói, điều này tuân thủ tất cả các quy tắc. Trong vim theo mặc định, chương trình trống sẽ in ra tất cả các đầu vào. Kể từ khi

<N><CR>

Là một noop, không có gì thay đổi văn bản đầu vào và vì mỗi đầu vào khớp với đầu ra mong muốn, cách tiếp cận tương tự này hoạt động với bất kỳ số dòng nào.


2
Sẽ hoạt động với các ngôn ngữ khác - bổ sung đầu tiên: Pyth
Jonathan Allan

Chờ đã, byte? Vim được đo bằng tổ hợp phím.
Pavel

@Jonathan ALLan Có vẻ như Pyth bị cấu hình sai trên TIO. Nếu bạn nhìn vào đầu ra gỡ lỗi, bạn có thể thấy rằng mã thực sự đang được chạy là thứ trong trường đối số, không phải là thứ trong trường mã. Đây là những gì thực sự chạy mã đó trông như thế nào.
isaacg


2
Điều này cũng hoạt động trong Brachylog
Fatalize 27/2/2017

9

Ruby, 71 70 66 byte

Hãy thử trực tuyến!

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

Chế độ "gian lận": 7 + 1 = 8 byte

Yêu cầu -pcờ cho +1 byte. Nghĩa là một sao chép của câu trả lời V . In số được nhập; toàn bộ chương trình có hiệu quả chỉ là không có.

1
2
3
4

Không gì -plàm gì?
Pavel

@Pavel Nó khiến chương trình đọc từng dòng STDIN vào $_, chạy nội dung chương trình và sau đó in nội dung $_ra màn hình (lặp lại trên mỗi dòng của STDIN). Vì chương trình không làm gì cả, thực tế nó chỉ là Unix cat, nhưng điều đó có nghĩa là mọi đầu vào từ 1-4 sẽ xuất ra nội dung của dòng, bởi vì mỗi dòng có nghĩa là số dòng của nó.
Mực giá trị

@Pavel để biết thêm thông tin, xem robm.me.uk/ruby/2013/11/20/ruby-enp.html
Ink Ink

Tôi thích câu trả lời "gian lận" của bạn. Perl cũng có -p, nhưng 1\n2\n3\n4không phải là một chương trình Perl hợp lệ.
ThisSuitIsBlackNot

7

Haskell, 69 59 byte

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

Dựa trên tiêu chuẩn Haskell. Biểu thức đầu tiên (trải rộng trên ba dòng đầu tiên) là một hàm không tên, chọn dòng thứ n từ chuỗi quinified s( s++show s). +2 byte để tạo lập chỉ mục dựa trên 1 (imho một quy tắc không cần thiết).

Để dùng thử trực tuyến! phiên bản tôi phải đặt tên cho hàm có thêm 4 byte.


Điều này có phá vỡ quy tắc 6 không? :)
Albert Renshaw

Lập chỉ mục dòng không được coi là dựa trên 0, các quy tắc rõ ràng yêu cầu lập chỉ mục 1.
Mực giá trị

@AlbertRenshaw: cố định
Tên mẫu

@ValueInk: cố định
Tên mẫu

@nimi lol, " giải pháp " như thế này là lý do tại sao tôi bị cám dỗ biến đây thành một cuộc thi nổi tiếng haha. Tuy nhiên, công việc tốt!
Albert Renshaw

5

PowerShell , 184 172 byte

$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]

Hãy thử trực tuyến!

Giải trình

Bắt đầu bằng cách tạo một mảng $vtrên dòng đầu tiên. Trên cùng một dòng, 0phần tử ( th) đầu tiên được đặt thành 0và dấu phẩy ,tiếp tục định nghĩa của nó.

Dòng tiếp theo đặt phần tử tiếp theo ( 1) của mảng thành một chuỗi biểu thị nội dung của dòng đầu tiên của tập lệnh, để $v[1]trả về dòng đầu tiên.

Dòng thứ nhất trước tiên đặt phần tử thứ 3 của mảng (chỉ mục 2) thành một chuỗi đại diện cho dòng thứ 2 của tập lệnh, sau đó trên cùng một dòng đặt phần tử thứ 4 (chỉ mục 3) bằng cách sử dụng đoạn mã quine sử dụng toán tử định dạng ( -f) để thay thế một số trường hợp nhất định của dấu ngoặc đơn ( [char]39) và chuỗi mẫu định dạng, vào chính nó, để tái tạo toàn bộ dòng thứ 3.

Dòng 4 về cơ bản thực hiện điều tương tự, nhưng cũng kết thúc việc tạo mảng và sau đó lập chỉ mục vào nó bằng cách sử dụng đối số được cung cấp.


4

Python 2, 104 73 67 byte

Cảm ơn Jonathan Allan vì đã tiết kiệm 6 byte!

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

Chỉnh sửa: Cùng số byte, nhưng tôi thích giải pháp này tốt hơn

Hãy thử trực tuyến!

Phiên bản Python của câu trả lời Ruby của Value Ink .

Câu trả lời cũ hơn (67 byte):

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

Lưu 6 bằng cách loại bỏ n: TIO
Jonathan Allan

@ovs yêu cầu thử thách yêu cầu tối thiểu 4 dòng mã nguồn: V
Giá trị mực

2

CJam , 19 18 17 byte

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

Hãy thử trực tuyến!

Dựa trên tiêu chuẩn CJam-quine. Việc {...}_~chạy ...với khối chính nó trên ngăn xếp (và trong trường hợp này, cũng 1ở dưới đó). Sau đó, chúng tôi làm:

'_'~  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.

Thật là đẹp Cũng giống như kết thúc khuôn mặt cười của logic (= haha
Albert Renshaw

1

PHP, 261 byte

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

Hãy thử trực tuyến !!

Chuỗi được mã hóa là:

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;

Hấp dẫn! Các chuỗi được mã hóa là gì?
Albert Renshaw

1
@Albert Renshaw Tôi đã chỉnh sửa nó để thêm phiên bản giải mã của chuỗi.
Ly hôn

0

Perl, 52 byte

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

Đây là một biến thể đơn giản trên quine cổ điển

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

"Tải trọng" nằm splittrên dòng mới và dòng chính xác được chọn bằng cách lập chỉ mục vào danh sách kết quả.

Perl, 49 48 byte (không cạnh tranh)

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

38 byte cho mã (không bao gồm shebang nhưng bao gồm -d:A) cộng với 10 byte cho tên tệp, phải là Devel/A.pm. Thư mục Develphải ở trong @INC.

Về mặt kỹ thuật, điều này vi phạm Quy tắc số 4 vì -d:Akhiến tệp bị phân tích cú pháp hai lần, do đó, đây là một giải pháp không cạnh tranh.

Nó sử dụng một trình gỡ lỗi để truy cập vào các dòng của tệp, mà perl lưu trữ trong @{"_<$filename"}mảng tại thời gian biên dịch.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.