Квітка, що індексується


14

Мета цього завдання - зробити програму, яка виводить n-ту букву свого вихідного коду, де n задається як вхід до програми. Як і більшість проблем з quine, вам не дозволяється читати вихідний код як файл або використовувати будь-які вбудовані функції quine.

Вхідні дані

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

Вихідні дані

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

Перемога

Як і більшість питань, що стосуються кодегольфа, ви виграєте виклик, використовуючи найменшу кількість байтів для вирішення завдання.

Бонуси

-5% Якщо ваша програма підтримує негативні індекси стилю python (наприклад, -1 буде останнім символом вашої програми). Якщо використовується з наведеним нижче бонусом, ваші діапазони повинні підтримувати негативні показники.
-20% Якщо ваша програма підтримує діапазони як введення (будь-якого формату) на додаток до вищезазначених вимог.
-25% Якщо ваша програма заповнить обидва бонуси.

Табло лідерів

Ось фрагмент стека для створення як звичайного табло, так і огляду переможців за мовою.

Щоб переконатися, що ваша відповідь відображається, будь ласка, почніть свою відповідь із заголовка, використовуючи наступний шаблон Markdown:

# 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


Чи заборонено вбудовувати хіни?
Мего

@Mego так, вони є.
TheNumberOne

Чи зберігаються бонуси (100% - 20% - 5% = 75%) чи множуються (100% * 80% * 95% = 76%)?
ETHproductions

Чи вважаються програми, які насправді не читають вхідні дані?
Ніл

@ETHproductions Стек.
TheNumberOne

Відповіді:


12

Піта, 0,75

(Також трапляється поліглот CJam і, мабуть, багато інших мов.)

0

Очікує введення на STDIN:

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

Будь-яка однозначна робота, звичайно. Не зовсім найцікавіший виклик в Pyth.


1
Це, можливо, є поліглотом і в багатьох інших мовах.
Mama Fun Roll

працює і в PlatyPar
Cyoce

1
і Japt, і Jolf, і майже кожна мова з неявним результатом
ETHproductions

9
І PHP, що, очевидно, найкраща мова для гольфу.
користувач253751

8

Javascript ES6, 31 байт

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

Пояснення

Стандартний каркас Quine:

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

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


6

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

⟮ɕṡ+ᶈ0)⎖ï

Try it here (Firefox only).

Ай, 19-й байт!

0 працює теж (і набагато краще), але це занадто банально на мій смак.

Крім того, ℹ ï,⧺ïце також працюватиме, але функції quine заборонені.

Пояснення

Стандартний каркас Quine є ⟮ɕṡ+ᶈ0.

)⎖ï приймає отриману рядок quine і отримує символ у вхідному індексі.


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

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

Try it here (Firefox only).

Цей кваліфікується на 5% бонус, але все ще не перемагає моє первісне подання.

Пояснення

Цей використовує стек. ᵖ…ɕṡ+ᶈ0;просто висуває окремі символи рядка quine до стеку та ôᵍïбезпосередньо виводить символ у вхідному індексі (позитивному чи негативному) у стеці.


Чому ви ще не зробили кодування для цього?
Аддісон Кримп

Оновлення надходять дуже швидко! Не можна йти в ногу!
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хитрість у гістократа, і хитрощів хитрості було з когось іншого, тому я зроблю це КВ.


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="

Безголівки:

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.