Quine indexable

14

Le but de ce défi est de créer un programme qui génère la nième lettre de son code source où n est donné en entrée au programme. Comme la plupart des défis de quine, vous n'êtes pas autorisé à lire votre code source en tant que fichier ou à utiliser des fonctions de quine intégrées.

Contribution

Un entier 0 <= n <len (programme).

Production

Le nième caractère (pas l'octet) de votre programme.

Gagnant

Comme la plupart des questions de codegolf, vous remportez le défi en utilisant le plus petit nombre d'octets pour résoudre le défi.

Bonus

-5% Si votre programme prend en charge le style python à indices négatifs (par exemple, -1 serait le dernier caractère de votre programme). S'ils sont utilisés avec le bonus ci-dessous, vos plages doivent prendre en charge les indices négatifs.
-20% Si votre programme prend en charge les plages en entrée (tout format) en plus des exigences ci-dessus.
-25% Si votre programme complète les deux bonus.

Classements

Voici un extrait de pile pour générer à la fois un classement régulier et un aperçu des gagnants par langue.

Pour vous assurer que votre réponse s'affiche, veuillez commencer votre réponse avec un titre, en utilisant le modèle de démarque suivant:

# Language Name, N bytes

Nest la taille de votre soumission. Si vous améliorez votre score, vous pouvez conserver les anciens scores dans le titre, en les barrant. Par exemple:

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

Si vous souhaitez inclure plusieurs nombres dans votre en-tête (par exemple, parce que votre score est la somme de deux fichiers ou que vous souhaitez répertorier les pénalités de drapeau d'interprète séparément), assurez-vous que le score réel est le dernier numéro de l'en-tête:

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

Vous pouvez également faire du nom de la langue un lien qui apparaîtra ensuite dans l'extrait de classement:

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

Le numéro un
la source
Les quine builtins sont-ils interdits?
Mego
@Mego oui, ils le sont.
TheNumberOne
Les bonus s'accumulent-ils (100% - 20% - 5% = 75%) ou se multiplient-ils (100% * 80% * 95% = 76%)?
ETHproductions
Les programmes qui ne lisent pas réellement leur entrée comptent-ils?
Neil
@ETHproductions Stack.
TheNumberOne

Réponses:

12

Pyth, 0,75

(Il se trouve également qu'il s'agit d'un polyglotte CJam et probablement de nombreuses autres langues.)

0

Attend une entrée sur STDIN:

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

Tout chiffre unique fonctionne, bien sûr. Pas exactement le défi le plus intéressant en Pyth.

Poignée de porte
la source
1
Il se trouve que c'est aussi un polyglotte dans de nombreuses autres langues.
Mama Fun Roll
fonctionne aussi dans PlatyPar
Cyoce
1
et Japt, et Jolf, et presque toutes les langues avec sortie implicite
ETHproductions
9
Et PHP, qui est clairement le meilleur langage pour le golf.
user253751
8

Javascript ES6, 31 octets

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

Explication

Le cadre standard de quine:

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

[prompt()], qui est l'addon, obtient la valeur à l'index d'entrée de la chaîne quine résultante.

Mama Fun Roll
la source
6

𝔼𝕊𝕄𝕚𝕟, 9 caractères / 19 octets

⟮ɕṡ+ᶈ0)⎖ï

Try it here (Firefox only).

Oui, 19e octet!

0 fonctionne aussi (et c'est beaucoup mieux), mais c'est beaucoup trop trivial à mon goût.

En outre, ℹ ï,⧺ïcela fonctionnerait également, mais les fonctions de quine ne sont pas autorisées.

Explication

Le cadre standard quine est ⟮ɕṡ+ᶈ0.

)⎖ï prend la chaîne quine résultante et obtient le caractère à l'index d'entrée.


Solution bonus, 11,4 caractères / 25,65 octets

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

Try it here (Firefox only).

Celui-ci se qualifie pour le bonus de 5%, mais ne bat toujours pas ma soumission d'origine.

Explication

Celui-ci utilise la pile. ᵖ…ɕṡ+ᶈ0;pousse simplement les caractères individuels de la chaîne de quine vers la pile, et ôᵍïsort directement le caractère à l'index d'entrée (positif ou négatif) dans la pile.

Mama Fun Roll
la source
Pourquoi n'avez-vous pas encore créé d'encodage pour cela?
Addison Crump
Les mises à jour arrivent trop vite! Je ne peux pas suivre!
Mama Fun Roll
5

CJam, 12,35 octets

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

Le programme est de 13 octets et se qualifie pour le bonus × 0,95 . Essayez-le en ligne!

Comment ça fonctionne

{         }      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
la source
4
Bien sûr, 0cela aurait été un peu plus court ...
Dennis
4

Rubis, 53 * 0,75 = 39,75

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

Génère une chaîne HEREDOC délimitée par un 2sur sa propre ligne, la concatène ( *2), puis ajoute la finale 2via un littéral de caractère. Tranche dedans en utilisant Ruby intégré String#[], qui prend en charge les entiers positifs, les entiers négatifs et les plages (entrée dans le formulaire m..n). $><<est sortie. ( putsnécessiterait un espace supplémentaire ici).

histocrate
la source
Je pense que gets.to_icela ferait la même chose eval getset serait plus clair. Il ne gérerait pas les entrées non entières, mais ce n'est pas nécessaire de toute façon
Fund Monica's Lawsuit
C'est normalement ce que je ferais, mais cela donne le bonus pour la gestion des gammes. (Aussi le bonus inexistant pour être complet).
histocrate
Ah, j'ai raté ça. Ma faute.
Fund Monica's Lawsuit
3

Rubis, 38,25 octets

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

Prend en charge les indices et les plages négatifs. J'ai manifestement repris les deux $><<et le evaltour de l'histocrate, et le tour de quine était celui de quelqu'un d'autre, donc je vais faire cette CW.

Lynn
la source
1

Python 2, 46,55 octets

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

Prend en charge les indices négatifs.

Lynn
la source
Oui, cela prend en charge les indices négatifs.
chat
1

Haskell, 122 octets

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

Non golfé:

main=getLine>>= \i->putChar$(!!(read i))$p++show p
 where p="main=getLine>>= \\i->putChar$(!!(read i))$p++show p\n where p="
HEGX64
la source
1

Befunge 93, 5 octets

C'est assez (très) tard mais je le posterai quand même:

&0g,@
Daniel
la source
1
Ceci est sur le point d'être légal à l'OMI. Il ne lit pas son propre code source en tant que fichier , mais il lit son propre code source.