Quine indicizzabili


14

L'obiettivo di questa sfida è creare un programma che emetta l'ennesima lettera del suo codice sorgente in cui n viene dato come input al programma. Come la maggior parte delle sfide di Quine, non ti è permesso leggere il tuo codice sorgente come file o utilizzare alcuna funzione di Quin integrata.

Ingresso

Un numero intero 0 <= n <len (programma).

Produzione

L'ennesimo carattere (non byte) del tuo programma.

vincente

Come la maggior parte delle domande su codegolf, vinci la sfida utilizzando il minor numero di byte per risolvere la sfida.

bonus

-5% Se il tuo programma supporta gli indici negativi in ​​stile python (es. -1 sarebbe l'ultimo carattere del tuo programma). Se utilizzato con il bonus sottostante, i tuoi range devono supportare indici negativi.
-20% Se il programma supporta intervalli come input (qualsiasi formato) oltre ai requisiti di cui sopra.
-25% Se il programma completa entrambi i bonus.

Classifiche

Ecco uno snippet di stack per generare sia una classifica regolare che una panoramica dei vincitori per lingua.

Per assicurarti che la tua risposta venga visualizzata, ti preghiamo di iniziare la risposta con un titolo, usando il seguente modello Markdown:

# Language Name, N bytes

dov'è Nla dimensione del tuo invio. Se si migliora il punteggio, è possibile mantenere i vecchi punteggi nel titolo, colpendoli. Per esempio:

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

Se si desidera includere più numeri nell'intestazione (ad esempio perché il punteggio è la somma di due file o si desidera elencare separatamente le penalità del flag dell'interprete), assicurarsi che il punteggio effettivo sia l' ultimo numero nell'intestazione:

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

Puoi anche rendere il nome della lingua un collegamento che verrà quindi visualizzato nello snippet della classifica:

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


Sono vietati i quine builtin?
Mego

@Mego sì, lo sono.
TheNumberOne

I bonus si accumulano (100% - 20% - 5% = 75%) o si moltiplicano (100% * 80% * 95% = 76%)?
ETHproductions

I programmi che in realtà non leggono il loro input contano?
Neil,

@ETHproductions Stack.
TheNumberOne

Risposte:


12

Pyth, 0,75

(Capita anche di essere un poliglotta CJam, e probabilmente molte altre lingue.)

0

Prevede input su STDIN:

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

Qualsiasi cifra singola funziona, ovviamente. Non è esattamente la sfida più interessante in Pyth.


1
Capita di essere un poliglotta anche in molte altre lingue.
Mama Fun Roll,

funziona anche in PlatyPar
Cyoce,

1
e Japt e Jolf e quasi tutte le lingue con output implicito
ETHproductions

9
E PHP, che è chiaramente la lingua migliore per giocare a golf.
user253751

8

Javascript ES6, 31 byte

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

Spiegazione

Il framework quine standard:

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

[prompt()], che è l'addon, ottiene il valore nell'indice di input della stringa quine risultante.


6

𝔼𝕊𝕄𝕚𝕟, 9 caratteri / 19 byte

⟮ɕṡ+ᶈ0)⎖ï

Try it here (Firefox only).

Sì, 19 byte!

0 funziona anche (ed è molto meglio), ma è troppo banale per i miei gusti.

Inoltre, ℹ ï,⧺ïfunzionerebbe anche, ma le funzioni di quine non sono consentite.

Spiegazione

Lo standard quine framework è ⟮ɕṡ+ᶈ0 .

)⎖ï prende la stringa quine risultante e ottiene il carattere nell'indice di input.


Soluzione bonus, 11,4 caratteri / 25,65 byte

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

Try it here (Firefox only).

Questo si qualifica per il bonus del 5%, ma non batte ancora la mia presentazione originale.

Spiegazione

Questo usa lo stack. ᵖ…ɕṡ+ᶈ0;spinge semplicemente i singoli caratteri della stringa quine nello stack e ôᵍïgenera direttamente il carattere nell'indice di input (positivo o negativo) nello stack.


Perché non hai ancora creato una codifica per questo?
Addison Crump,

Gli aggiornamenti stanno arrivando troppo velocemente! Non riesco a tenere il passo!
Mama Fun Roll,

5

CJam, 12,35 byte

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

Il programma è lungo 13 byte e si qualifica per il bonus × 0,95 . Provalo online!

Come funziona

{         }      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
Certo, 0sarebbe stato leggermente più corto ...
Dennis

4

Rubino, 53 * 0,75 = 39,75

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

Genera una stringa HEREDOC delimitata da a 2sulla propria riga, la concatena ( *2) e quindi aggiunge in finale 2tramite un carattere letterale. Seziona in esso usando il built-in di Ruby String#[], che supporta numeri interi positivi, numeri interi negativi e intervalli (input nel modulo m..n). $><<viene emesso. ( putsrichiederebbe uno spazio extra qui).


Penso che gets.to_ifarebbe la stessa cosa eval gets, ed essere più chiaro. Non gestirà input non interi, ma non è comunque necessario
Fund Monica's Lawsuit

Questo è normalmente quello che farei, ma questo ha il vantaggio di gestire gli intervalli. (Anche il bonus inesistente per il completamento del turing).
istocrato

Ah, l'ho perso. Colpa mia.
Fondo Monica's Lawsuit

3

Rubino, 38,25 byte

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

Supporta indici e intervalli negativi. Ho palesemente raccolto sia $><<il evaltrucco che l'istocratico, e il trucco del quine era che qualcun altro doveva iniziare, quindi farò questo CW.


1

Python 2, 46,55 byte

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

Supporta indici negativi.


Sì, questo supporta indicazioni negative.
gatto

1

Haskell, 122 byte

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 byte

È piuttosto (molto) in ritardo, ma lo posterò comunque:

&0g,@

1
Questo è al limite di essere l'IMO legale. Non legge il proprio codice sorgente come file , ma legge il proprio codice sorgente.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.