Indizierbare Quine

14

Das Ziel dieser Herausforderung ist es, ein Programm zu erstellen, das den n-ten Buchstaben seines Quellcodes ausgibt, wobei n als Eingabe für das Programm angegeben wird. Wie bei den meisten Quine-Herausforderungen ist es Ihnen nicht gestattet, Ihren Quellcode als Datei zu lesen oder integrierte Quine-Funktionen zu verwenden.

Eingang

Eine ganze Zahl 0 <= n <len (Programm).

Ausgabe

Das n-te Zeichen (nicht Byte) Ihres Programms.

Gewinnen

Wie die meisten Codegolf-Fragen gewinnen Sie die Herausforderung, indem Sie die Herausforderung mit der geringsten Anzahl von Bytes lösen.

Boni

-5% Wenn Ihr Programm negative Indizes unterstützt, verwenden Sie den Python-Stil (z. B. -1 ist das letzte Zeichen Ihres Programms). Bei Verwendung mit dem folgenden Bonus müssen Ihre Bereiche negative Indizes unterstützen.
-20% Wenn Ihr Programm zusätzlich zu den oben genannten Anforderungen Bereiche als Eingabe (beliebiges Format) unterstützt.
-25% Wenn Ihr Programm beide Boni erfüllt.

Bestenlisten

Hier ist ein Stack-Snippet, um sowohl eine reguläre Rangliste als auch eine Übersicht der Gewinner nach Sprache zu generieren.

Um sicherzustellen, dass Ihre Antwort angezeigt wird, beginnen Sie Ihre Antwort mit einer Überschrift. Verwenden Sie dazu die folgende Markdown-Vorlage:

# Language Name, N bytes

Wo Nist die Größe Ihres Beitrags? Wenn Sie Ihren Score zu verbessern, Sie können alte Rechnungen in der Überschrift halten, indem man sich durch das Anschlagen. Zum Beispiel:

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

Wenn Sie mehrere Zahlen in Ihre Kopfzeile aufnehmen möchten (z. B. weil Ihre Punktzahl die Summe von zwei Dateien ist oder wenn Sie die Strafen für Interpreter-Flags separat auflisten möchten), stellen Sie sicher, dass die tatsächliche Punktzahl die letzte Zahl in der Kopfzeile ist:

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

Sie können den Namen der Sprache auch als Link festlegen, der dann im Leaderboard-Snippet angezeigt wird:

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

Die Nummer eins
quelle
Sind Quine Builtins verboten?
Mego
@ Mego ja, das sind sie.
TheNumberOne
Stapeln sich die Boni (100% - 20% - 5% = 75%) oder multiplizieren sie sich (100% * 80% * 95% = 76%)?
ETHproductions
Zählen Programme, die ihre Eingaben nicht lesen?
Neil
@ETHproductions Stack.
TheNumberOne

Antworten:

12

Pyth, 0,75

(Zufällig ist es auch ein CJam-Polyglot und wahrscheinlich viele andere Sprachen.)

0

Erwartet Eingabe auf STDIN:

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

Natürlich funktioniert jede einzelne Ziffer. Nicht gerade die interessanteste Herausforderung in Pyth.

Türknauf
quelle
1
Es ist auch in vielen anderen Sprachen ein Polyglott.
Mama Fun Roll
arbeitet auch in PlatyPar
Cyoce
1
und Japt und Jolf und fast jede Sprache mit impliziter Ausgabe
ETHproductions
9
Und PHP, die eindeutig die beste Sprache zum Golfen ist.
user253751
8

Javascript ES6, 31 Bytes

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

Erläuterung

Das Standard-Quine-Framework:

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

[prompt()]Das Addon ruft den Wert am Eingabeindex des resultierenden Quine-Strings ab.

Mama Fun Roll
quelle
6

𝔼𝕊𝕄𝕚𝕟 9 Zeichen / 19 Byte

⟮ɕṡ+ᶈ0)⎖ï

Try it here (Firefox only).

Ja, 19. Byte!

0 funktioniert auch (und ist viel besser), aber es ist viel zu trivial für meinen Geschmack.

Darüber hinaus ℹ ï,⧺ïwürde auch funktionieren, aber quine Funktionen sind nicht zulässig.

Erläuterung

Das Standard-Quine-Framework ist ⟮ɕṡ+ᶈ0.

)⎖ï Nimmt die resultierende Quine-Zeichenfolge und ruft das Zeichen am Eingabeindex ab.


Bonuslösung, 11,4 Zeichen / 25,65 Byte

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

Try it here (Firefox only).

Dieser qualifiziert sich für den 5% -Bonus, übertrifft aber immer noch nicht meine ursprüngliche Einreichung.

Erläuterung

Dieser nutzt den Stapel. ᵖ…ɕṡ+ᶈ0;Drückt einfach die einzelnen Zeichen des Quine-Strings auf den Stapel und ôᵍïgibt das Zeichen direkt am Eingabeindex (positiv oder negativ) im Stapel aus.

Mama Fun Roll
quelle
Warum hast du noch keine Kodierung dafür gemacht?
Addison Crump
Updates kommen zu schnell! Kann nicht mithalten!
Mama Fun Roll
5

CJam, 12,35 Bytes

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

Das Programm ist 13 Byte lang und qualifiziert sich für den Bonus × 0,95 . Probieren Sie es online!

Wie es funktioniert

{         }      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
quelle
4
Natürlich 0wäre etwas kürzer gewesen ...
Dennis
4

Rubin, 53 × 0,75 = 39,75

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

Erzeugt einen HEREDOC-String, der durch eine 2eigene Zeile begrenzt ist, verkettet ihn ( *2) und fügt ihn im Finale 2über ein Zeichenliteral hinzu . Verwenden Sie Ruby's Built-In String#[], das positive Ganzzahlen, negative Ganzzahlen und Bereiche unterstützt (Eingabe in das Formular m..n). $><<ausgegeben wird. ( putswürde hier zusätzlichen Platz benötigen).

Histokrat
quelle
Ich denke, gets.to_iwürde das Gleiche tun eval getsund klarer sein. Nicht ganzzahlige Eingaben würden nicht verarbeitet, aber das ist ohnehin nicht erforderlich
Fund Monicas Klage vom
Normalerweise würde ich das tun, aber das bringt den Bonus für den Umgang mit Reichweiten. (Auch der nicht vorhandene Bonus für das Abschließen).
Histokrat
Ah, das habe ich verpasst. Mein Fehler.
Fund Monica's Lawsuit
3

Ruby, 38,25 Bytes

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

Unterstützt negative Indizes und Bereiche. Ich habe beide $><<und den evalTrick des Histokraten unverblümt aufgegriffen, und der Quine-Trick war von Anfang an der Trick eines anderen, also mache ich diesen CW.

Lynn
quelle
1

Python 2, 46,55 Bytes

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

Unterstützt negative Indizes.

Lynn
quelle
Ja, dies unterstützt negative Angaben.
Katze
1

Haskell, 122 Bytes

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="
HEGX64
quelle
1

Befunge 93, 5 Bytes

Das ist ziemlich (sehr) spät, aber ich werde es trotzdem posten:

&0g,@
Daniel
quelle
1
Dies steht kurz davor, legal zu sein. Es liest seinen eigenen Quellcode nicht als Datei , aber es liest seinen eigenen Quellcode.