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 n
e 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 quine
Este é o código-golfe , então a submissão com o menor número de bytes vence!
Respostas:
Vim, 7 bytes
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
É 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.
fonte
Ruby,
717066 bytesExperimente online!
Modo "trapaça": 7 + 1 = 8 bytes
Requer a
-p
sinalização para +1 byte. Literalmente, uma cópia da resposta V . Imprime o número digitado; todo o programa é efetivamente apenas não operacional.fonte
-p
faz?$_
, 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 Unixcat
, 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.-p
, mas1\n2\n3\n4
não é um programa Perl válido.Haskell,
6959 bytesBaseado 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.
fonte
PowerShell ,
184172 bytesExperimente online!
Explicação
Inicia criando uma matriz
$v
na primeira linha. Na mesma linha, o primeiro (0
th) elemento é definido como0
e 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 (índice3
) 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.
fonte
Python 2,
1047367 bytesAgradecimentos a Jonathan Allan por salvar 6 bytes!
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):
fonte
n
: TIOCJam ,
191817 bytesExperimente online!
Baseado no CJam-quine padrão. O
{...}_~
executa o...
com o próprio bloco na pilha (e, neste caso, também1
abaixo disso). Então fazemos:fonte
PHP, 261 bytes
Experimente online !!
A cadeia codificada é:
fonte
Perl, 52 bytes
Esta é uma variação simples da quine clássica
A "carga útil" é
split
em novas linhas e a linha correta é selecionada pela indexação na lista resultante.Perl,
4948 bytes (não concorrente)38 bytes para o código (excluindo o shebang, mas incluindo
-d:A
) mais 10 bytes para o nome do arquivo, que deve serDevel/A.pm
. ODevel
diretório deve estar em@INC
.Tecnicamente, isso viola a Regra # 4 porque
-d:A
faz 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.fonte