Quine có thể lập chỉ mục


14

Mục tiêu của thử thách này là tạo ra một chương trình xuất ra chữ cái thứ n của mã nguồn của nó trong đó n được đưa ra làm đầu vào cho chương trình. Giống như hầu hết các thử thách về quine, bạn không được phép đọc mã nguồn của mình dưới dạng tệp hoặc sử dụng bất kỳ hàm quine dựng sẵn nào.

Đầu vào

Một số nguyên 0 <= n <len (chương trình).

Đầu ra

Ký tự thứ n (không phải byte) của chương trình của bạn.

Chiến thắng

Giống như hầu hết các câu hỏi về codegolf, bạn chiến thắng thử thách bằng cách sử dụng số byte thấp nhất để giải quyết thử thách.

Tiền thưởng

-5% Nếu chương trình của bạn hỗ trợ các chỉ số tiêu cực kiểu python (ví dụ -1 sẽ là ký tự cuối cùng của chương trình của bạn). Nếu được sử dụng với phần thưởng dưới đây, phạm vi của bạn phải hỗ trợ các chỉ số tiêu cực.
-20% Nếu chương trình của bạn hỗ trợ các phạm vi làm đầu vào (bất kỳ định dạng nào) ngoài các yêu cầu trên.
-25% Nếu chương trình của bạn hoàn thành cả hai phần thưởng.

Bảng xếp hạng

Dưới đây là một Stack Snippet để tạo cả bảng xếp hạng thông thường và tổng quan về người chiến thắng theo ngôn ngữ.

Để đảm bảo rằng câu trả lời của bạn hiển thị, vui lòng bắt đầu câu trả lời của bạn bằng một tiêu đề, sử dụng mẫu Markdown sau:

# Language Name, N bytes

nơi Nlà kích thước của trình của bạn. Nếu bạn cải thiện điểm số của mình, bạn có thể giữ điểm số cũ trong tiêu đề, bằng cách đánh chúng qua. Ví dụ:

# Ruby, <s>104</s> <s>101</s> 96 bytes

Nếu ở đó bạn muốn bao gồm nhiều số trong tiêu đề của mình (ví dụ: vì điểm của bạn là tổng của hai tệp hoặc bạn muốn liệt kê riêng các hình phạt cờ phiên dịch), hãy đảm bảo rằng điểm thực tế là số cuối cùng trong tiêu đề:

# Perl, 43 + 2 (-p flag) = 45 bytes

Bạn cũng có thể đặt tên ngôn ngữ thành liên kết sau đó sẽ hiển thị trong đoạn trích bảng xếp hạng:

# [><>](http://esolangs.org/wiki/Fish), 121 bytes


Được xây dựng quine bị cấm?
Mego

@Mego vâng, họ có.
TheNumberOne

Do tiền thưởng xếp chồng (100% - 20% - 5% = 75%) hoặc nhân (100% * 80% * 95% = 76%)?
Sản xuất ETH

Các chương trình không thực sự đọc số lượng đầu vào của họ?
Neil

@ETHproductions Ngăn xếp.
TheNumberOne

Câu trả lời:


12

Bình, 0,75

(Cũng xảy ra là một polyglot CJam, và có thể nhiều ngôn ngữ khác.)

0

Yêu cầu đầu vào trên STDIN:

llama@llama:~$ echo 0..0 | pyth -c '0'
0

Bất kỳ chữ số duy nhất làm việc, tất nhiên. Không hẳn là thử thách thú vị nhất ở Pyth.


1
Nó cũng là một polyglot trong nhiều ngôn ngữ khác.
Mama Fun Roll

cũng hoạt động trong PlatyPar
Cyoce

1
và Japt, và Jolf, và hầu hết mọi ngôn ngữ có đầu ra ngầm định
ETHproductions

9
Và PHP, rõ ràng là ngôn ngữ tốt nhất để chơi gôn.
dùng253751

8

Javascript ES6, 31 byte

$=_=>`$=${$};$()`[prompt()];$()

Giải trình

Khung quine tiêu chuẩn:

$=_=>`$=${$};$()`;$()

[prompt()], là addon, nhận giá trị tại chỉ mục đầu vào của chuỗi quine kết quả.


6

, 9 ký tự / 19 byte

⟮ɕṡ+ᶈ0)⎖ï

Try it here (Firefox only).

Ay, 19 byte!

0 hoạt động quá (và tốt hơn nhiều), nhưng nó quá tầm thường đối với sở thích của tôi.

Ngoài ra, ℹ ï,⧺ïcũng sẽ hoạt động, nhưng chức năng quine không được phép.

Giải trình

Khung quine tiêu chuẩn là ⟮ɕṡ+ᶈ0.

)⎖ï lấy chuỗi quine kết quả và nhận được ký tự ở chỉ mục đầu vào.


Giải pháp tiền thưởng, 11,4 ký tự / 25,65 byte

⟮ᵖ…ɕṡ+ᶈ0;ôᵍï

Try it here (Firefox only).

Điều này đủ điều kiện cho phần thưởng 5%, nhưng vẫn không đánh bại trình ban đầu của tôi.

Giải trình

Cái này sử dụng stack. ᵖ…ɕṡ+ᶈ0;chỉ cần đẩy các ký tự riêng lẻ của chuỗi quine vào ngăn xếp và ôᵍïtrực tiếp xuất ký tự ở chỉ mục đầu vào (dương hoặc âm) trong ngăn xếp.


Tại sao bạn chưa thực hiện mã hóa cho điều này chưa?
Addison Crump

Cập nhật đang đến quá nhanh! Không thể theo kịp!
Mama Fun Roll

5

CJam, 12,35 byte

{s"_~"+ri=}_~

Chương trình dài 13 byte và đủ điều kiện nhận phần thưởng × 0,95 . Hãy thử trực tuyến!

Làm thế nào nó hoạt động

{         }      Define a code block.
           _~    Push a copy and execute the copy.
 s               Cast the original code block to string.
  "_~"+          Append "_~".
       ri        Read an integer from STDIN.
         =       Retrieve the character at that index.

4
Tất nhiên, 0sẽ ngắn hơn một chút ...
Dennis

4

Hồng ngọc, 53 * 0,75 = 39,75

$><<(<<2*2+?2)[eval gets]
$><<(<<2*2+?2)[eval gets]
2

Tạo một chuỗi HEREDOC được phân tách bằng một 2dòng trên chính nó, nối chuỗi nó ( *2) và sau đó thêm vào cuối cùng 2thông qua một ký tự bằng chữ. Các lát cắt sử dụng tích hợp của Ruby String#[], hỗ trợ các số nguyên dương, số nguyên âm và phạm vi (đầu vào trong biểu mẫu m..n). $><<là đầu ra. ( putssẽ yêu cầu thêm một không gian ở đây).


Tôi nghĩ gets.to_isẽ làm điều tương tự nhưeval gets , và rõ ràng hơn. Nó sẽ không xử lý đầu vào không nguyên, nhưng dù sao điều đó cũng không cần thiết
Vụ kiện của Quỹ Monica

Đó thường là những gì tôi sẽ làm, nhưng điều này nhận được tiền thưởng cho việc xử lý Phạm vi. (Cũng là phần thưởng không tồn tại khi được hoàn thành).
lịch sử

Ah, tôi đã bỏ lỡ điều đó. Lỗi của tôi.
Vụ kiện của Quỹ Monica

3

Ruby, 38,25 byte

a="a=%p;$><<(a%%a)[eval gets]";$><<(a%a)[eval gets]

Hỗ trợ các chỉ số và phạm vi tiêu cực. Tôi ngang nhiên nhặt cả hai $><<evalmánh khóe từ lịch sử, và mánh khóe này là của người khác để bắt đầu, vì vậy tôi sẽ thực hiện CW này.


1

Python 2, 46,55 byte

a="a=%r;print(a%%a)[input()]";print(a%a)[input()]

Hỗ trợ các chỉ số tiêu cực.


Có, điều này hỗ trợ các chỉ dẫn tiêu cực.
mèo

1

Haskell, 122 byte

main=getLine>>= \i->putChar$(!!(read i))$p++show p where p="main=getLine>>= \\i->putChar$(!!(read i))$p++show p where p="

Ung dung:

main=getLine>>= \i->putChar$(!!(read i))$p++show p
 where p="main=getLine>>= \\i->putChar$(!!(read i))$p++show p\n where p="

1

Befunge 93, 5 byte

Điều này khá (rất) muộn nhưng dù sao tôi cũng sẽ đăng nó:

&0g,@

1
Đây là một khía cạnh của IMO hợp pháp. Nó không đọc mã nguồn riêng của mình dưới dạng tệp , nhưng nó đọc mã nguồn của chính nó.
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.