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


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.


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.


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.


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.

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).


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.


1

Python 2, 46,55 bajtów

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

Obsługuje ujemne wskaźniki.


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

1

Befunge 93, 5 bajtów

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

&0g,@

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.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.