Quine indexável

14

O objetivo desse desafio é criar um programa que produza a enésima letra do seu código-fonte, onde n é dado como entrada para o programa. Como a maioria dos desafios de quine, você não tem permissão para ler seu código-fonte como um arquivo ou usar quaisquer funções embutidas de quine.

Entrada

Um número inteiro 0 <= n <len (programa).

Resultado

O enésimo caractere (não byte) do seu programa.

Ganhando

Como a maioria das perguntas sobre codegolf, você vence o desafio usando o menor número de bytes para resolvê-lo.

Bónus

-5% Se o seu programa suportar índices negativos no estilo python (por exemplo, -1 seria o último caractere do seu programa). Se usado com o bônus abaixo, seus intervalos devem suportar índices negativos.
-20% Se o seu programa suportar intervalos como entrada (qualquer formato), além dos requisitos acima.
-25% Se o seu programa concluir os dois bônus.

Classificação

Aqui está um snippet de pilha para gerar uma classificação regular e uma visão geral dos vencedores por idioma.

Para garantir que sua resposta seja exibida, inicie-a com um título, usando o seguinte modelo de remarcação:

# Language Name, N bytes

onde Nestá o tamanho do seu envio. Se você melhorar sua pontuação, poderá manter as pontuações antigas no título, identificando-as. Por exemplo:

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

Se você quiser incluir vários números no cabeçalho (por exemplo, porque sua pontuação é a soma de dois arquivos ou você deseja listar as penalidades do sinalizador de intérpretes separadamente), verifique se a pontuação real é o último número no cabeçalho:

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

Você também pode transformar o nome do idioma em um link que será exibido no snippet do placar de líderes:

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

O número um
fonte
São proibidos os embutidos?
Mego
@Ego sim, eles são.
TheNumberOne
Os bônus são acumulados (100% - 20% - 5% = 75%) ou multiplicados (100% * 80% * 95% = 76%)?
ETHproductions
Os programas que realmente não lêem sua entrada contam?
Neil
@ETHproductions Stack.
TheNumberOne

Respostas:

12

Pitão, 0,75

(Também é um poliglota CJam e provavelmente muitos outros idiomas.)

0

Espera entrada no STDIN:

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

Qualquer dígito funciona, é claro. Não é exatamente o desafio mais interessante em Pyth.

Maçaneta da porta
fonte
1
Por acaso também é poliglota em muitos outros idiomas.
Mama Fun Roll
trabalha em PlatyPar também
Cyoce
1
e Japt e Jolf, e quase todas as línguas com saída implícita
ETHproductions
9
E PHP, que é claramente a melhor linguagem para jogar golfe.
user253751
8

Javascript ES6, 31 bytes

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

Explicação

A estrutura padrão do quine:

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

[prompt()], que é o complemento, obtém o valor no índice de entrada da sequência quine resultante.

Mama Fun Roll
fonte
6

𝔼𝕊𝕄𝕚𝕟, 9 caracteres / 19 bytes

⟮ɕṡ+ᶈ0)⎖ï

Try it here (Firefox only).

Ah, 19 bytes!

0 funciona também (e é muito melhor), mas é muito trivial para o meu gosto.

Além disso, ℹ ï,⧺ïtambém funcionaria, mas funções quine não são permitidas.

Explicação

A estrutura padrão do quine é ⟮ɕṡ+ᶈ0.

)⎖ï pega a sequência quine resultante e obtém o caractere no índice de entrada.


Solução de bônus, 11,4 caracteres / 25,65 bytes

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

Try it here (Firefox only).

Este se qualifica para o bônus de 5%, mas ainda não bate o meu envio original.

Explicação

Este usa a pilha. ᵖ…ɕṡ+ᶈ0;apenas envia os caracteres individuais da sequência de caracteres para a pilha e ôᵍïemite diretamente o caractere no índice de entrada (positivo ou negativo) na pilha.

Mama Fun Roll
fonte
Por que você não fez uma codificação para isso ainda?
Addison Crump #
As atualizações estão chegando muito rápido! Não consegue acompanhar!
Mama Fun Roll
5

CJam, 12,35 bytes

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

O programa tem 13 bytes de comprimento e se qualifica para o bônus × 0,95 . Experimente online!

Como funciona

{         }      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
fonte
4
Claro, 0teria sido ligeiramente mais curto ...
Dennis
4

Ruby, 53 * 0,75 = 39,75

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

Gera uma string HEREDOC delimitada por a 2em sua própria linha, concatena ( *2) e depois adiciona a final 2por meio de um literal de caractere. Fatias nele usando Ruby embutido String#[], que suporta números inteiros positivos, números negativos e intervalos (entrada no formulário m..n). $><<é produzido. ( putsexigiria um espaço extra aqui).

histocrata
fonte
Eu acho gets.to_ique faria a mesma coisa eval getse seria mais claro. Não seria manipular a entrada não-inteiro, mas isso não é de qualquer maneira necessária
Ação do Fundo Monica
Isso é normalmente o que eu faria, mas isso recebe o bônus por lidar com intervalos. (Também o bônus inexistente por estar completo).
histocrat
Ah, eu senti falta disso. Foi mal.
Fund Monica's Lawsuit
3

Ruby, 38,25 bytes

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

Suporte a índices e intervalos negativos. Peguei descaradamente os dois $><<e o evaltruque do histocrata, e o truque do quine era de outra pessoa, então eu vou fazer essa CW.

Lynn
fonte
1

Python 2, 46,55 bytes

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

Suporta índices negativos.

Lynn
fonte
Sim, isso suporta indicações negativas.
gato
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
fonte
1

Befunge 93, 5 bytes

Isso é muito (muito) tarde, mas eu vou postá-lo de qualquer maneira:

&0g,@
Daniel
fonte
1
Isso está prestes a ser legal na OMI. Ele não lê seu próprio código-fonte como um arquivo , mas lê seu próprio código-fonte.