Quine indexable

14

El objetivo de este desafío es hacer un programa que genere la enésima letra de su código fuente donde n se proporciona como entrada al programa. Como la mayoría de los desafíos de quine, no puede leer su código fuente como un archivo ni usar ninguna función de quine incorporada.

Entrada

Un entero 0 <= n <len (programa).

Salida

El enésimo carácter (no byte) de su programa.

Victorioso

Como la mayoría de las preguntas de codegolf, ganas el desafío utilizando el menor número de bytes para resolver el desafío.

Bonos

-5% Si su programa admite índices negativos estilo python (por ejemplo, -1 sería el último carácter de su programa). Si se usa con la bonificación a continuación, sus rangos deben admitir índices negativos.
-20% Si su programa admite rangos como entrada (cualquier formato) además de los requisitos anteriores.
-25% Si su programa completa ambos bonos.

Tablas de clasificación

Aquí hay un fragmento de pila para generar una tabla de clasificación regular y una descripción general de los ganadores por idioma.

Para asegurarse de que su respuesta se muestre, comience con un título, usando la siguiente plantilla de Markdown:

# Language Name, N bytes

¿Dónde Nestá el tamaño de su envío? Si mejora su puntaje, puede mantener los puntajes antiguos en el título, tachándolos. Por ejemplo:

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

Si desea incluir varios números en su encabezado (por ejemplo, porque su puntaje es la suma de dos archivos o desea enumerar las penalizaciones de la bandera del intérprete por separado), asegúrese de que el puntaje real sea el último número en el encabezado:

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

También puede hacer que el nombre del idioma sea un enlace que luego aparecerá en el fragmento de la tabla de clasificación:

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

El numero uno
fuente
¿Están prohibidas las acumulaciones de quina?
Mego
@Mego sí, lo son.
TheNumberOne
¿Se acumulan los bonos (100% - 20% - 5% = 75%) o se multiplican (100% * 80% * 95% = 76%)?
ETHproductions
¿Los programas que realmente no leen su entrada cuentan?
Neil
@ETHProductions Stack.
TheNumberOne

Respuestas:

12

Pyth, 0,75

(También es un políglota CJam, y probablemente muchos otros idiomas).

0

Espera entrada en STDIN:

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

Cualquier dígito funciona, por supuesto. No es exactamente el desafío más interesante en Pyth.

Pomo de la puerta
fuente
1
Resulta ser un políglota en muchos otros idiomas, también.
Mama Fun Roll
también funciona en PlatyPar
Cyoce
1
y Japt y Jolf, y casi todos los idiomas con salida implícita
ETHproductions
99
Y PHP, que es claramente el mejor lenguaje para jugar al golf.
user253751
8

Javascript ES6, 31 bytes

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

Explicación

El marco estándar de quine:

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

[prompt()], que es el complemento, obtiene el valor en el índice de entrada de la cadena de quine resultante.

Mama Fun Roll
fuente
6

𝔼𝕊𝕄𝕚𝕟, 9 caracteres / 19 bytes

⟮ɕṡ+ᶈ0)⎖ï

Try it here (Firefox only).

¡Ay, decimonoveno byte!

0 funciona también (y es mucho mejor), pero es demasiado trivial para mi gusto.

Además, ℹ ï,⧺ïtambién funcionaría, pero las funciones de quine no están permitidas.

Explicación

El marco estándar de quine es ⟮ɕṡ+ᶈ0.

)⎖ï toma la cadena de quine resultante y obtiene el carácter en el índice de entrada.


Solución extra, 11.4 caracteres / 25.65 bytes

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

Try it here (Firefox only).

Este califica para la bonificación del 5%, pero aún no supera mi presentación original.

Explicación

Este usa la pila. ᵖ…ɕṡ+ᶈ0;simplemente empuja los caracteres individuales de la cadena de quine a la pila y ôᵍïgenera directamente el carácter en el índice de entrada (positivo o negativo) en la pila.

Mama Fun Roll
fuente
¿Por qué no has hecho una codificación para esto todavía?
Addison Crump
¡Las actualizaciones están llegando demasiado rápido! No puedo seguir el ritmo!
Mama Fun Roll
5

CJam, 12.35 bytes

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

El programa tiene 13 bytes de largo y califica para el bono × 0.95 . Pruébalo en línea!

Cómo 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
fuente
44
Por supuesto, 0habría sido un poco más corto ...
Dennis
4

Rubí, 53 * 0.75 = 39.75

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

Genera una cadena HEREDOC delimitada por a 2en su propia línea, la concatena ( *2) y luego agrega la final a 2través de un carácter literal. Se divide en él utilizando Ruby's incorporado String#[], que admite enteros positivos, enteros negativos y rangos (entrada en el formulario m..n). $><<es salida ( putsrequeriría un espacio extra aquí).

histocrat
fuente
Creo que gets.to_iharía lo mismo eval getsy sería más claro. No manejaría entradas no enteras, pero eso no es necesario de todos modos
Fund Monica's Lawsuit
Normalmente eso es lo que haría, pero esto obtiene la bonificación por manejar Rangos. (También la bonificación inexistente por estar completada).
histocrat
Ah, me perdí eso. Culpa mía.
Financia la demanda de Mónica el
3

Ruby, 38.25 bytes

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

Soporta índices y rangos negativos. Obviamente tomé los dos $><<y el evaltruco del histocrático, y el truco de quine era para empezar por alguien más, así que haré este CW.

Lynn
fuente
1

Python 2, 46.55 bytes

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

Soporta índices negativos.

Lynn
fuente
Sí, esto admite indicios negativos.
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="

Sin 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
fuente
1

Befunge 93, 5 bytes

Esto es bastante (muy) tarde, pero lo publicaré de todos modos:

&0g,@
Daniel
fuente
1
Esto está al borde de ser legal OMI. No lee su propio código fuente como un archivo , pero sí lee su propio código fuente.