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


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.


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.


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.


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.

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


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.


1

Python 2, 46,55 Bytes

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

Unterstützt negative Indizes.


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

1

Befunge 93, 5 Bytes

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

&0g,@

1
Dies steht kurz davor, legal zu sein. Es liest seinen eigenen Quellcode nicht als Datei , aber es liest seinen eigenen Quellcode.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.