Número de entrada; Número da linha de saída

18

Code Golf

História totalmente real : sou um contratado trabalhando em um site www. O Sky.Net e uma de nossas tarefas é criar algum programa autoconsciente ou algo assim, não sei se realmente não estava ouvindo o chefe. De qualquer maneira, em um esforço para tornar nosso código mais autoconsciente, precisamos da TI para saber qual código está em cada número de linha.


Desafio

Crie um programa ou função que receba uma entrada ne retorne o código do referido programa ou função on-line n.


Regras

Program O seu programa ou função deve ter pelo menos 4 linhas. Cada linha deve ser única.

➋ Você pode supor que a entrada sempre será um número inteiro positivo maior ou igual a 1 e menor ou igual ao número de linhas em seu programa / função.

➌ A primeira linha do seu programa / função é a linha 1, não a linha 0.

➍ Você não pode acessar o arquivo em que seu programa está. (Se alguém precisar perguntar "Esta regra tecnicamente não está infringindo a regra 4"; provavelmente é)

➎ As linhas não podem estar vazias (isso inclui um espaço se os espaços não fizerem nada no seu idioma)

➏ As linhas não podem ser // comentários (/ * de qualquer estilo <! -)


Este é um desafio tipo
Este é o , então a submissão com o menor número de bytes vence!

Albert Renshaw
fonte
Vamos continuar esta discussão no chat .
Conor O'Brien
1
Eu gostaria de ver isso feito em 99 :)
Jonathan Allan
2
@JonathanAllan Você pode correr para o problema onde não cada linha é único
MildlyMilquetoast
"As linhas não podem ser comentários, mas acho que as operações não eficazes são boas" (mas, honestamente, às vezes é difícil dizer se uma linha deve ser considerada como não operacional ou não; por exemplo, minha resposta do Ruby tem a última linha como apenas uma colchete para finalizar o lambda)
Value Ink
O título pode ser melhor "Número de entrada; linha de saída com esse número de linha"? Ou mesmo "Linha de saída por número".
Pa Elo Ebermann 27/02

Respostas:

16

Vim, 7 bytes

1
2
3
4

Experimente online!

Tanto quanto posso dizer, isso está em conformidade com todas as regras. No vim por padrão, o programa vazio imprime todas as entradas. Desde a

<N><CR>

É um noop, nada altera o texto de entrada e, como cada entrada corresponde à saída desejada, essa mesma abordagem funciona com qualquer número de linhas.

DJMcMayhem
fonte
2
Trabalhará em outros idiomas - primeira adição: Pyth
Jonathan Allan
Espera, bytes? O Vim é medido com pressionamentos de tecla.
Pavel
@ JonathanAllan Parece que o Pyth está configurado errado no TIO. Se você observar a saída de depuração, poderá ver que o código que está realmente sendo executado é o que está no campo de argumento, não o que está no campo de código. Isto é o que realmente está executando esse código.
Isaacg
1
@Pavel apenas em desafios de golfe editor
Martin Ender
2
Isso também funciona em Brachylog
Fatalize
9

Ruby, 71 70 66 bytes

Experimente online!

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

Modo "trapaça": 7 + 1 = 8 bytes

Requer a -psinalização para +1 byte. Literalmente, uma cópia da resposta V . Imprime o número digitado; todo o programa é efetivamente apenas não operacional.

1
2
3
4
Value Ink
fonte
O que -pfaz?
Pavel
@Pavel Faz com que o programa leia cada linha de STDIN $_, executa o conteúdo do programa e depois imprime o conteúdo $_na tela (repetindo por linha de STDIN). Como o programa não faz nada, é praticamente apenas o Unix cat, mas isso significa que todas as entradas de 1 a 4 produzirão o conteúdo da linha, porque cada linha é literalmente seu número de linha.
Value Ink
@Pavel para obter mais informações, consulte robm.me.uk/ruby/2013/11/20/ruby-enp.html
Value Ink
Eu gosto da sua resposta "trapaça". O Perl também possui -p, mas 1\n2\n3\n4não é um programa Perl válido.
carregar a caixa de mensagens
7

Haskell, 69 59 bytes

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

Baseado no padrão Haskell quine. A primeira expressão (espalhada pelas três primeiras linhas) é uma função sem nome que seleciona a enésima linha da sequência quinificada s( s++show s). +2 bytes para tornar a indexação baseada em 1 (imho uma regra desnecessária).

Para experimentar Experimente online! versão Eu tenho que nomear a função que adiciona 4 bytes.

nimi
fonte
Isso quebra a regra 6? :)
Albert Renshaw
A indexação de linha não deve ser baseada em 0; as regras exigem explicitamente a indexação 1.
Value Ink
@AlbertRenshaw: fixado
nimi
@ValueInk: fixado
nimi
@nimi lol, " soluções " como essa é a razão pela qual fiquei tentado a fazer deste um concurso de popularidade haha. No entanto, bom trabalho!
Albert Renshaw
5

PowerShell , 184 172 bytes

$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]

Experimente online!

Explicação

Inicia criando uma matriz $vna primeira linha. Na mesma linha, o primeiro ( 0th) elemento é definido como 0e uma vírgula ,continua sua definição.

A próxima linha define o próximo elemento ( 1) da matriz como uma sequência que representa o conteúdo da primeira linha do script, para que $v[1]retorne a primeira linha.

A terceira linha primeiro define o terceiro elemento da matriz (índice 2) como uma sequência que representa a segunda linha do script e, na mesma linha, define o quarto elemento (índice 3) usando um snippet de quine que usa o operador de formato ( -f) para substituir determinadas instâncias de aspas simples ( [char]39) e a sequência do modelo de formato, para reproduzir a totalidade da terceira linha.

A linha 4 basicamente faz a mesma coisa, mas também finaliza a criação da matriz e depois a indexa usando o argumento fornecido.

briantist
fonte
4

Python 2, 104 73 67 bytes

Agradecimentos a Jonathan Allan por salvar 6 bytes!

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

Editar: contagem de mesmos bytes, mas eu gosto mais desta solução

Experimente online!

Versão Python da resposta Ruby do Value Ink .

Resposta mais antiga (67 bytes):

1
s=\
['print s[-input()]or s', 0, 's=\\', 1]
print s[-input()]or s
viciado em matemática
fonte
Economize 6 ao se livrar de n: TIO
Jonathan Allan
@ o requisito de desafio requer no mínimo 4 linhas de código-fonte: V
Value Ink
2

CJam , 19 18 17 bytes

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

Experimente online!

Baseado no CJam-quine padrão. O {...}_~executa o ...com o próprio bloco na pilha (e, neste caso, também 1abaixo disso). Então fazemos:

'_'~  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.
Martin Ender
fonte
Isso é lindo. Também como o rosto sorridente da lógica terminando (= haha
Albert Renshaw 27/02
1

PHP, 261 bytes

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

Experimente online !!

A cadeia codificada é:

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;
Divcy
fonte
Interessante! Quais são as strings codificadas?
Albert Renshaw,
1
@ Albert Renshaw Eu o editei para adicionar uma versão decodificada da string.
Divcy 28/02
0

Perl, 52 bytes

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

Esta é uma variação simples da quine clássica

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

A "carga útil" é split em novas linhas e a linha correta é selecionada pela indexação na lista resultante.

Perl, 49 48 bytes (não concorrente)

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

38 bytes para o código (excluindo o shebang, mas incluindo -d:A) mais 10 bytes para o nome do arquivo, que deve ser Devel/A.pm. O Develdiretório deve estar em @INC.

Tecnicamente, isso viola a Regra # 4 porque -d:Afaz com que o arquivo seja analisado duas vezes, portanto é uma solução não concorrente.

Ele usa um gancho de depurador para acessar as linhas do arquivo, que o perl armazena na @{"_<$filename"}matriz em tempo de compilação.

ThisSuitIsBlackNot
fonte