Индексируемая квинна


14

Цель этой задачи - создать программу, которая выводит n-ую букву своего исходного кода, где n задается в качестве входных данных для программы. Как и в случае с большинством вызовов quine, вы не можете читать исходный код в виде файла или использовать любые встроенные функции quine.

вход

Целое число 0 <= n <len (программа).

Выход

N-й символ (не байт) вашей программы.

выигрыш

Как и большинство вопросов по Codegolf, вы выигрываете испытание, используя для решения задачи наименьшее количество байтов.

Бонусы

-5% Если ваша программа поддерживает отрицательные индексы в стиле Python (например, -1 будет последним символом вашей программы). При использовании с приведенным ниже бонусом ваши диапазоны должны поддерживать отрицательные индексы.
-20% Если ваша программа поддерживает диапазоны в качестве входных данных (любой формат) в дополнение к вышеуказанным требованиям.
-25% Если ваша программа завершит оба бонуса.

Leaderboards

Вот фрагмент стека, который генерирует как регулярную таблицу лидеров, так и обзор победителей по языкам.

Чтобы убедиться, что ваш ответ обнаружен, начните его с заголовка, используя следующий шаблон уценки:

# Language Name, N bytes

где Nразмер вашего представления. Если вы улучшите свой счет, вы можете сохранить старые результаты в заголовке, вычеркнув их. Например:

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

Если вы хотите включить в заголовок несколько чисел (например, потому что ваш счет равен сумме двух файлов или вы хотите перечислить штрафы за флаг интерпретатора отдельно), убедитесь, что фактический результат является последним числом в заголовке:

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

Вы также можете сделать название языка ссылкой, которая затем будет отображаться в фрагменте списка лидеров:

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


Запрещены ли встроенные квайны?
Мего

@ Да, конечно.
TheNumberOne

Суммируются ли бонусы (100% - 20% - 5% = 75%) или умножаются (100% * 80% * 95% = 76%)?
ETHproductions

Есть ли программы, которые на самом деле не читают свои входные данные?
Нил

Стек @ETHproductions.
TheNumberOne

Ответы:


12

Pyth, 0,75

(Также случается, что это полиглот CJam и, возможно, многие другие языки.)

0

Ожидается ввод на STDIN:

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

Любая однозначная цифра работает, конечно. Не совсем самый интересный вызов в Pyth.


1
Это также полиглот во многих других языках.
Mama Fun Roll

работает и в PlatyPar
Cyoce

1
и Джапт, и Джольф, и почти каждый язык с неявным выводом
ETHproductions

9
И PHP, который явно лучший язык для игры в гольф.
user253751

8

Javascript ES6, 31 байт

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

объяснение

Стандартная структура Quine:

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

[prompt()], который является аддоном, получает значение по входному индексу результирующей строки quine.


6

𝔼𝕊𝕄𝕚𝕟, 9 символов / 19 байтов

⟮ɕṡ+ᶈ0)⎖ï

Try it here (Firefox only).

Да, 19-й байт!

0 работает тоже (и намного лучше), но это слишком тривиально на мой взгляд.

Кроме того, ℹ ï,⧺ïтакже будет работать, но функции Quine не допускаются.

объяснение

Стандартные рамки Quine есть ⟮ɕṡ+ᶈ0.

)⎖ï принимает полученную строку квин и получает символ по входному индексу.


Бонусное решение, 11,4 символа / 25,65 байта

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

Try it here (Firefox only).

Этот претендует на 5% бонус, но все еще не превосходит мою первоначальную заявку.

объяснение

Этот использует стек. ᵖ…ɕṡ+ᶈ0;просто помещает отдельные символы строки квина в стек и ôᵍïнапрямую выводит символ по входному индексу (положительному или отрицательному) в стеке.


Почему ты еще не сделал кодировку для этого?
Эддисон Крамп

Обновления идут слишком быстро! Не могу идти в ногу!
Mama Fun Roll

5

CJam, 12,35 байта

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

Программа имеет длину 13 байт и получает бонус × 0,95 . Попробуйте онлайн!

Как это устроено

{         }      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
Конечно, 0было бы немного короче ...
Деннис

4

Рубин, 53 * 0,75 = 39,75

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

Создает строку HEREDOC, разделенную символом a 2в своей строке, объединяет ее ( *2) и затем добавляет в финал 2символьный литерал. Нарезает его с помощью встроенного в Ruby String#[], который поддерживает положительные целые числа, отрицательные целые числа и диапазоны (ввод в форме m..n). $><<это выход. (здесь putsпотребуется дополнительное место).


Я думаю, gets.to_iчто сделал бы то же самое eval gets, и был бы яснее. Он не будет обрабатывать нецелочисленный ввод, но в любом случае это не нужно
Фонд Моника Иск

Обычно это то, что я делаю, но это дает бонус за обработку диапазонов. (Также несуществующий бонус за завершение Тьюринга).
гистократ

Ах, я пропустил это. Виноват.
Фонд Моники Иск

3

Рубин, 38,25 байт

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

Поддержка отрицательных индексов и диапазонов. Я нагло взял $><<и evalгистократ, и трюк, и трюк с Куайном был кем-то другим, поэтому я сделаю этот CW.


1

Python 2, 46,55 байта

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

Поддерживает отрицательные показатели.


Да, это поддерживает отрицательные признаки.
кот

1

Haskell, 122 байта

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

Ungolfed:

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 байт

Это довольно (очень) поздно, но я все равно выложу:

&0g,@

1
Это на грани легального ИМО. Он не читает собственный исходный код в виде файла , но читает собственный исходный код.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.