Inserire il numero; Numero riga di uscita


18

Codice Golf

Backstory totalmente reale : sono un appaltatore che lavora su un sito Web www. Sky.Net e uno dei nostri compiti è creare un programma consapevole o qualcosa del genere, non so che non stavo davvero ascoltando il capo. Ad ogni modo, nel tentativo di rendere il nostro codice più autocosciente, abbiamo bisogno che l' IT sia in grado di sapere quale codice è presente su ogni numero di riga.


Sfida

Creare un programma o una funzione che accetta un input ne restituisce il codice di detto programma o funzione in linea n.


Regole

➊ Il programma o la funzione deve essere lungo almeno 4 righe. Ogni riga deve essere unica.

➋ Puoi presumere che l'ingresso sarà sempre un numero intero positivo maggiore o uguale a 1 e minore o uguale al numero di righe nel tuo programma / funzione.

➌ La prima riga del programma / funzione è la riga 1, non la riga 0.

➍ Non è possibile accedere al file su cui si trova il programma. (Se qualcuno deve chiedere "Non sta infrangendo tecnicamente la regola # 4"; probabilmente lo è)

➎ Le linee non possono essere vuote (questo include uno spazio se gli spazi non fanno nulla nella tua lingua)

➏ Le righe non possono essere // commenti (/ * di qualsiasi <! - stile)


Si tratta di un -come sfida
Questo è , quindi la presentazione con il minor byte vince!



1
Mi piacerebbe vederlo fatto in 99 :)
Jonathan Allan il

2
@JonathanAllan Potresti imbatterti nel problema in cui non tutte le righe sono uniche
MildlyMilquetoast

"Le righe non possono essere commenti, ma immagino che le no-op efficaci siano OK" (ma onestamente, a volte è difficile dire se una riga debba essere considerata no-op o no; per esempio la mia risposta su Ruby ha l'ultima riga solo come parentesi graffa per terminare la lambda)
Valore inchiostro

Il titolo potrebbe essere migliore "Input number; Output line with that line number"? O anche "Output line by number".
Paŭlo Ebermann,

Risposte:


16

Vim, 7 byte

1
2
3
4

Provalo online!

Per quanto ne so, questo è conforme a tutte le regole. In vim per impostazione predefinita, il programma vuoto stampa tutto l'input. Da

<N><CR>

È un noop, nulla cambia il testo di input e poiché ogni input corrisponde all'output desiderato, questo stesso approccio funziona con qualsiasi numero di righe.


2
Funzionerà in altre lingue - prima aggiunta: Pyth
Jonathan Allan,

Aspetta, byte? Vim viene misurato con i tasti.
Pavel,

@JonathanAllan Sembra che Pyth sia configurato in modo errato su TIO. Se guardi l'output di debug, puoi vedere che il codice che viene effettivamente eseguito è la cosa nel campo dell'argomento, non la cosa nel campo del codice. Ecco come appare effettivamente quel codice.
isaacg,


2
Questo funziona anche in Brachylog
Fatalizza il

9

Rubino, 71 70 66 byte

Provalo online!

->n{
k=["}", "k[-n]%%k.inspect", "k=%s", "->n{"]
k[-n]%k.inspect
}

Modalità "Cheating": 7 + 1 = 8 byte

Richiede il -pflag per +1 byte. Letteralmente una copia della V risposta . Stampa il numero immesso; l'intero programma è effettivamente inoperoso.

1
2
3
4

Cosa fa -p?
Pavel,

@Pavel Fa sì che il programma legga ogni riga di STDIN $_, esegue il contenuto del programma e quindi stampa il contenuto dello $_schermo (ripetendo per riga di STDIN). Dal momento che il programma non fa nulla, è praticamente solo Unix cat, ma ciò significa che ogni input da 1-4 produrrà il contenuto della riga, perché ogni riga è letteralmente il suo numero di riga.
Value Ink

@Pavel per ulteriori informazioni, consultare robm.me.uk/ruby/2013/11/20/ruby-enp.html
Value Ink

Mi piace la tua risposta "barare". Anche Perl ha -p, ma 1\n2\n3\n4non è un programma Perl valido.
ThisSuitIsBlackNon

7

Haskell, 69 59 byte

(lines(s++show
 s)
 !!)
s="\n(lines(s++show\n s)\n !!)\ns="

Basato sullo standard Haskell Quine. La prima espressione (distribuita sulle prime tre righe) è una funzione senza nome che seleziona l'ennesima riga dalla stringa quinificata s(s++show s ). +2 byte per eseguire l'indicizzazione in base 1 (imho una regola non necessaria).

Per provarlo online! versione devo nominare la funzione che aggiunge 4 byte.


Questa infrazione regola 6? :)
Albert Renshaw,

L'indicizzazione di linea non dovrebbe essere basata su 0, le regole richiedono esplicitamente 1-indicizzazione.
Valore inchiostro

@AlbertRenshaw: fisso
Nome del modello

@ValueInk: fisso
Nome del modello

@nimi lol, " soluzioni " come questa sono il motivo per cui sono stato tentato di rendere questo un concorso di popolarità ahah. Tuttavia, buon lavoro!
Albert Renshaw,

5

PowerShell , 184 172 byte

$v=0,
'$v=0,',
"'`$v=0',",(($q='"{0}`$v=0{0},",(($q={0}{1}{0})-f([char]39),$q)')-f([char]39),$q),
(($z='(($z={0}{1}{0})-f([char]39),$z;$v[$args]')-f([char]39),$z);$v[$args]

Provalo online!

Spiegazione

Inizia creando un array $vsulla prima riga. Su quella stessa riga, il primo ( 0th) elemento è impostato su 0e una virgola ,continua la sua definizione.

La riga successiva imposta l'elemento successivo ( 1) dell'array su una stringa che rappresenta il contenuto della prima riga dello script, in modo che $v[1]restituisca la prima riga.

La 3a riga imposta prima il 3o elemento dell'array (indice 2) su una stringa che rappresenta la 2a riga dello script, quindi sulla stessa riga imposta il 4o elemento (indice 3) utilizzando uno snippet quine che utilizza l'operatore formato ( -f) per sostituire alcune istanze di virgolette singole ([char]39 ) e la stringa del modello di formato, in se stessa, per riprodurre l'intera terza riga.

La riga 4 fa sostanzialmente la stessa cosa, ma termina anche la creazione dell'array e quindi si indicizza in esso utilizzando l'argomento fornito.


4

Python 2, 104 73 67 byte

Grazie a Jonathan Allan per aver salvato 6 byte!

s=\
['print s[input()]or s', 's=\\', 0, 'exec s[', '0]']
exec s[
0]

Modifica: stesso numero di byte, ma questa soluzione mi piace di più

Provalo online!

Versione Python della risposta Ruby di Value Ink .

Risposta precedente (67 byte):

1
s=\
['print s[-input()]or s', 0, 's=\\', 1]
print s[-input()]or s

Salva 6 eliminando n: TIO
Jonathan Allan il

@ovs il requisito della sfida richiede almeno 4 righe di codice sorgente: V
Value Ink

2

CJam , 19 18 17 byte

1
{'_'~]ri(=}
_
~

Provalo online!

Basato sullo standard CJam-quine. La {...}_~corre il ...con il blocco stesso in pila (e in questo caso, anche 1inferiore a quello). Quindi facciamo:

'_'~  e# Push the third and fourth line.
]     e# Wrap all four lines in a list.
ri    e# Read input and convert to integer.
(=    e# Use as index into the lines.

Questo è bellissimo. Piace anche il finale della faccina della logica (= haha
Albert Renshaw,

1

PHP, 261 byte

<?php function f($l){
$a="aWYoJGw9PTEpJG09Ijw/cGhwIGZ1bmN0aW9uIGYoXCRsKXsiO2lmKCRsPT0yKSRtPSJcJGE9XCIkYVwiOyI7aWYoJGw9PTMpJG09IlwkYj1cIiR";
$b="iXCI7IjtpZigkbD09NCkkbT0iZXZhbChiYXNlNjRfZGVjb2RlKFwkYS5cJGIpKTt9Pz4iO2VjaG8gJG07";
eval(base64_decode($a.$b));}?>

Provalo online !!

La stringa codificata è:

if($l==1)$m="<?php function f(\$l){";
if($l==2)$m="\$a=\"$a\";
if($l==3)$m="\$b=\"$b\";
if($l==4)$m="eval(base64_decode(\$a.\$b));}?>";
echo $m;

Interessante! Quali sono le stringhe codificate?
Albert Renshaw,

1
@Albert Renshaw L'ho modificato per aggiungere la versione decodificata della stringa.
Divcy

0

Perl, 52 byte

$_=q{print+(split/
/,"\$_=q{$_};
eval")[<>-1]};
eval

Questa è una semplice variante del classico quine

$_=q{print"\$_=q{$_};eval"};eval

Il "payload" è split su newline e la linea corretta viene selezionata indicizzando nell'elenco risultante.

Perl, 49 48 byte (non concorrenti)

#!/usr/bin/perl -d:A
sub DB'DB{
print${"_<$0"}[<>]}
1

38 byte per il codice (escluso lo shebang ma incluso -d:A) più 10 byte per il nome file, che deve essere Devel/A.pm. La Develdirectory deve essere in @INC.

Tecnicamente, questo viola la Regola n. 4 perché -d:Afa analizzare due volte il file, quindi è una soluzione non competitiva.

Utilizza un hook di debugger per accedere alle righe del file, che perl memorizza @{"_<$filename"}nell'array in fase di compilazione.

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.