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.