Quine indeksowane

14

Celem tego wyzwania jest stworzenie programu, który wypisze n-tą literę swojego kodu źródłowego, gdzie n jest podane jako dane wejściowe do programu. Podobnie jak większość wyzwań quine, nie możesz czytać kodu źródłowego jako pliku ani używać wbudowanych funkcji quine.

Wejście

Liczba całkowita 0 <= n <len (program).

Wynik

N-ty znak (nie bajt) twojego programu.

Zwycięski

Jak większość pytań o codegolf, wygrywasz wyzwanie, używając najmniejszej liczby bajtów do rozwiązania problemu.

Bonusy

-5% Jeśli twój program obsługuje negatywne indeksy, styl pythonowy (np. -1 byłby ostatnim znakiem twojego programu). Jeśli użyjesz z poniższą premią, twoje zakresy muszą obsługiwać ujemne wskaźniki.
-20% Jeśli twój program obsługuje zakresy jako dane wejściowe (dowolny format) oprócz powyższych wymagań.
-25% Jeśli twój program ukończy oba bonusy.

Liderów

Oto fragment kodu, który pozwala wygenerować zarówno zwykłą tabelę wyników, jak i przegląd zwycięzców według języka.

Aby upewnić się, że twoja odpowiedź się pojawi, zacznij od nagłówka, korzystając z następującego szablonu Markdown:

# Language Name, N bytes

gdzie Njest rozmiar twojego zgłoszenia. Jeśli poprawić swój wynik, to może zachować stare porachunki w nagłówku, uderzając je przez. Na przykład:

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

Jeśli chcesz umieścić w nagłówku wiele liczb (np. Ponieważ twój wynik to suma dwóch plików lub chcesz osobno wymienić kary za flagi tłumacza), upewnij się, że rzeczywisty wynik jest ostatnią liczbą w nagłówku:

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

Możesz także ustawić nazwę języka jako link, który pojawi się we fragmencie tabeli wyników:

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

Numer jeden
źródło
Czy wbudowane quine jest zabronione?
Mego
@Mego tak, są.
TheNumberOne
Czy premie kumulują się (100% - 20% - 5% = 75%), czy mnożą się (100% * 80% * 95% = 76%)?
ETHprodukcje
Czy liczą się programy, które tak naprawdę nie czytają danych wejściowych?
Neil
@ETHproductions Stack.
TheNumberOne

Odpowiedzi:

12

Pyth, 0,75

(Zdarza się również, że jest to poliglota CJam i prawdopodobnie wiele innych języków).

0

Oczekuje danych wejściowych STDIN:

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

Oczywiście każda pojedyncza cyfra działa. Niezupełnie najciekawsze wyzwanie w Pyth.

Klamka
źródło
1
Zdarza się, że jest to poliglot w wielu innych językach.
Mama Fun Roll
działa również w PlatyPar
Cyoce
1
i Japt, Jolf i prawie każdy język z dorozumianymi wynikami
ETHproductions
9
I PHP, który jest zdecydowanie najlepszym językiem do gry w golfa.
user253751
8

JavaScript ES6, 31 bajtów

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

Wyjaśnienie

Standardowe ramy quine:

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

[prompt()], który jest dodatkiem, pobiera wartość z indeksu wejściowego wynikowego ciągu znaków quine.

Mama Fun Roll
źródło
6

𝔼𝕊𝕄𝕚𝕟, 9 znaków / 19 bajtów

⟮ɕṡ+ᶈ0)⎖ï

Try it here (Firefox only).

Tak, 19 bajt!

0 działa również (i jest znacznie lepszy), ale jest to zbyt trywialne dla moich upodobań.

Ponadto ℹ ï,⧺ïdziałałoby również, ale funkcje quine są niedozwolone.

Wyjaśnienie

Standardowe ramy quine to ⟮ɕṡ+ᶈ0.

)⎖ï pobiera wynikowy ciąg znaków quine i pobiera znak z indeksu wejściowego.


Rozwiązanie premiowe, 11,4 znaków / 25,65 bajtów

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

Try it here (Firefox only).

Ten kwalifikuje się do premii 5%, ale nadal nie bije mojego oryginalnego zgłoszenia.

Wyjaśnienie

Ten używa stosu. ᵖ…ɕṡ+ᶈ0;po prostu wypycha poszczególne znaki łańcucha quine na stos i ôᵍïbezpośrednio wyprowadza znak na indeks wejściowy (dodatni lub ujemny) na stosie.

Mama Fun Roll
źródło
Dlaczego jeszcze tego nie zrobiłeś?
Addison Crump
Aktualizacje nadchodzą zbyt szybko! Nie mogę nadążyć!
Mama Fun Roll
5

CJam, 12,35 bajtów

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

Program ma 13 bajtów długości i kwalifikuje się do premii × 0,95 . Wypróbuj online!

Jak to działa

{         }      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.
Dennis
źródło
4
Oczywiście 0byłby nieco krótszy ...
Dennis
4

Rubin, 53 * 0,75 = 39,75

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

Generuje łańcuch HEREDOC rozdzielany przez a 2we własnej linii, konkatenuje go ( *2), a następnie dodaje w końcowej postaci 2za pomocą literału znaku. Wycina na niego za pomocą wbudowanego Ruby String#[], który obsługuje dodatnie liczby całkowite, ujemne liczby całkowite i zakresy (dane wejściowe w formularzu m..n). $><<jest wyprowadzany. ( putswymagałoby tutaj dodatkowego miejsca).

histocrat
źródło
Myślę, że gets.to_izrobiłbym to samo eval getsi byłby jaśniejszy. Nie poradzi sobie z wprowadzaniem liczb całkowitych, ale i tak nie jest to konieczne
pozew Fund Moniki
Zwykle tak robię, ale dostaje to bonus za obsługę Zasięgu. (Również nieistniejąca premia za ukończenie Turinga).
histocrat
Ach, tęskniłem za tym. Mój błąd.
Pozew Fund Moniki w
3

Rubinowy, 38,25 bajtów

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

Obsługuje ujemne wskaźniki i zakresy. Rażąco podniosłem oba $><<i evallewę od histokraty, a na początku quine trik był od kogoś innego, więc zrobię to CW.

Lynn
źródło
1

Python 2, 46,55 bajtów

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

Obsługuje ujemne wskaźniki.

Lynn
źródło
Tak, obsługuje to negatywne sygnały.
kot
1

Haskell, 122 bajty

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

Nie golfowany:

main=getLine>>= \i->putChar$(!!(read i))$p++show p
 where p="main=getLine>>= \\i->putChar$(!!(read i))$p++show p\n where p="
HEGX64
źródło
1

Befunge 93, 5 bajtów

Jest dość (bardzo) późno, ale mimo to opublikuję:

&0g,@
Daniel
źródło
1
Jest to na granicy legalnej IMO. Nie odczytuje własnego kodu źródłowego jako pliku , ale odczytuje własny kod źródłowy.