Nesse desafio, você deve escrever um programa ou função que não aceite entrada e imprima ou retorne uma sequência com o mesmo número de bytes que o próprio programa. Existem algumas regras:
- Você só pode enviar bytes no intervalo ASCII imprimível (0x20 a 0x7E, inclusive) ou novas linhas (0x0A ou 0x0D).
- Seu código não deve ser quine; portanto, o código e a saída devem diferir em pelo menos um byte.
- Seu código deve ter pelo menos um byte.
- Se sua saída contiver novas linhas à direita, elas farão parte da contagem de bytes.
- Se o seu código exigir sinalizadores de linha de comando não padrão, conte-os como de costume (ou seja, adicionando a diferença a uma invocação padrão da implementação do seu idioma na contagem de bytes), e o comprimento da saída deverá corresponder à pontuação da sua solução. Por exemplo, se o seu programa é
ab
e requer um sinalizador não padrão-n
(presumimos que ele não possa ser combinado com sinalizadores padrão, portanto são 3 bytes), você deve gerar 5 bytes no total. - A saída nem sempre precisa ser a mesma, desde que você possa mostrar que todas as saídas possíveis atendem aos requisitos acima.
- Regras habituais de quine não se aplicam. Você pode ler o código fonte ou seu tamanho, mas duvido que seja mais curto do que codificá-lo na maioria dos idiomas.
Você pode escrever um programa ou uma função e usar qualquer um dos métodos padrão de fornecimento de saída. Observe que, se você imprimir o resultado, poderá optar por imprimi-lo na saída padrão ou no fluxo de erros padrão, mas apenas um deles conta.
Você pode usar qualquer linguagem de programação , mas observe que essas brechas são proibidas por padrão.
Isso é código-golfe , então a resposta mais curta e válida - medida em bytes - vence.
Entre os melhores
code-golf
self-referential
Martin Ender
fonte
fonte
Respostas:
C (Linux moderno), 19 bytes
Quando compilado e executado, isso imprime:
fonte
Excel, 11 bytes
Versão em idioma norueguês:
Versão em inglês (12 bytes):
Gera um número de n dígitos e converte em texto convertendo para minúsculas.
fonte
=9^7&""
que gera um número de 7 dígitos em qualquer idioma e tem apenas 7 bytes.Labirinto , 4 bytes
Experimente online!
Impressões
0000
Explicação
fonte
Bash (somente interno), 8 bytes
Imprime
cho cho
e uma nova linha.fonte
Retina , 2 bytes
Experimente online!
Imprime
0
e um avanço de linha.Existem muitas soluções de 2 bytes, mas acredito que isso é ideal. Por padrão, a retina sempre imprime uma nova linha à direita e a remoção dela leva muitos bytes. Portanto, teríamos que encontrar um programa de 1 byte que deixasse a entrada vazia inalterada. Eu acredito que o único programa que faz isso é o programa que contém um único avanço de linha, que é, portanto, igual à saída e, portanto, não é permitido pelo desafio.
A próxima coisa mais simples a fazer é conviver com a Retina produzindo um único dígito (o número de correspondências de alguma regex contra a entrada vazia), e podemos fazer isso com muitos padrões de 2 bytes com falha (ou correspondência).
fonte
Mathematica, 2 bytes
fatorial
fonte
C, 20 bytes
Produz algum número, preenchido com espaços até 20 (Qual número? O que acontecerá a seguir na memória).
Alguns exemplos são executados no meu sistema:
É uma pena que a saída não possa ter bytes arbitrários, porque isso teria permitido esta solução de 19 bytes:
que gera 19 bytes de lixo eletrônico, começando no
f
endereço de.fonte
%esi
registro.Bash no Linux, 6
(seguido por uma nova linha)
Saídas
Linux
seguidas por uma nova linha.fonte
uname
não é um builtin festa - é um executável separadouname
bash? Toda distro em que eu posso colocar minhas mãos agora é um binário separado, incluindo o TIO . Por outro lado, como mostra sua resposta vinculada,umask
está embutido na maioria / todas as conchas.uname
como um embutido. Quando eu disse "-1, e realmente um builtin", quis dizer "Esta resposta usaumask
-1 bytes eumask
é realmente um builtin".Javascript ES6, 9 bytes
Usando seqüências de caracteres de modelo
fonte
undefined
considerado uma string?(_=>_+'')
.Esquema da pirâmide ,
744342 bytesEconomizou 31 bytes graças a Khuldraeseth na'Barya! Economizou 1 byte graças à solução redesenhada do JoKing!
Experimente online! Produz o número de 41 dígitos
28^28 = 33145523113253374862572728253364605812736
, seguido por uma nova linha à direita.Versão antiga
Experimente online!
Saídas
71277303925397560663333806233294794013421332605135474842607729452115234375
=160651015 ** 9
, ou aproximadamente 10 74 .fonte
Python 2 , 9 bytes
Isso imprime
set([1])
e um avanço de linha.Experimente online!
fonte
print
, não há soluções mais curtas, e os únicos de 9 bytes são variantes disso e de Luis Mendoprint 1e5
.Python 2 , 9 bytes
A saída exibida contém uma nova linha à direita.
Experimente online!
fonte
brainfuck , 25 bytes
Experimente online! Nota: Requer uma implementação com células não assinadas de 8 bits
Resultado:
Explicação
fonte
.
que imprime oNULL
caractere não imprimível ?C (Ideona), 14 bytes
No Ideone , que nomeia seu executável
prog
, isso gera o seguinte com uma nova linha à direita.C (GCC), 15 bytes
Como o GCC grava um executável nomeado
a.out
por padrão (na ausência de sinalizadores adicionais que custariam bytes), isso gera o seguinte com uma nova linha à direita.fonte
C (gcc) ,
1817 bytesObserve que há um byte STX ( 0x02 ) entre
@
eC
.Experimente online!
Portabilidade
Isso foi testado com o gcc 6.3.1 e clang 3.9.1 no Fedora 25, gcc 4.8.4 no Ubuntu 14.04.4 e gcc 4.8.3 no openSUSE 13.2, onde imprime a seguinte saída.
Espero que isso produza a mesma saída com todas as versões do gcc, desde que seja compilado para um executável do tipo a seguir.
Plataformas diferentes exigirão um endereço de memória diferente e possivelmente uma ordem diferente para os bytes na constante de caracteres com vários caracteres.
Por exemplo, substituindo
@\2C
por@\2\4
impressõesexec/ld-elf.so.1
e uma nova linha no FreeBSD 11 pelo clang 3.8.0.Verificação offline
Como funciona
Por padrão, ld usa 0x400000 como o endereço base do segmento de texto, o que significa que podemos encontrar o conteúdo do ELF começando no endereço de memória 0x400000 .
Os primeiros 640 bytes do ELF são amplamente independentes do código-fonte real. Por exemplo, se a declaração de f for seguida por
main(){f();}
e mais nada, elas terão a seguinte aparência.Usar, por exemplo,
main(int c, char**v){f();}
altera alguns bytes, mas não o deslocamento da string/lib64/ld-linux-x86-64.so.2
, que usaremos para produzir saída.O deslocamento da referida string é 0x238 e tem 27 bytes. Queremos imprimir apenas 17 bytes (e o último será uma nova linha se usarmos
puts
); portanto, adicionamos 11 ao deslocamento para obter 0x243 , o deslocamento deinux-x86-64.so.2
. A adição de 0x400000 e 0x243 fornece 0x400243 , o local da memória deinux-x86-64.so.2
.Para obter esse endereço de memória, podemos usar constantes de caracteres com vários caracteres, que exibem um comportamento definido pela implementação. 0x400243 é (64) (2) (67) na base 256 e as constantes de caracteres com vários caracteres do gcc usam a ordem de bytes big-endian, portanto,
'@\2C'
gera o endereço de memória da string desejada.Por fim,
puts
imprime a picada (terminada por nulo) nesse local da memória e em uma nova linha à direita, criando 17 bytes de saída.fonte
U
ao compilar com-Df=main
.U
ao compilar commain(){f();}
.Brainfuck auto-modificável , 5 bytes
Experimente online!
Resultado:
Explicação:
Realmente simples, imprime a fonte ao contrário. No SMBF, o conteúdo do programa é armazenado na fita, à esquerda da posição inicial do ponteiro. Deslizar para a esquerda e imprimir imprimirá o código-fonte para trás.
Como a fonte de leitura é permitida neste desafio, isso definitivamente deve estar dentro das regras.
fonte
Calculadora aritmética básica , 2 bytes
1=
impressões
1.
ou:naqueles displays bobos de sete segmentos.
Para reproduzir, pegue qualquer calculadora aleatória; todos eles têm essa linguagem de programação instalada de alguma forma.
fonte
1.
vez de1x
? Além disso, este é um quine, que não é permitido pelas regras.1=
eu errei. Eu quis dizer1x
que é igual a implícito, mas esqueci que=
é um botão.1
nas minhas TI-36 e TI-84 CE. Não contam como calculadoras "básicas"?Fourier,
262220 bytesExperimente no FourIDE!
Saídas:
Para uma capitalização adequada, são 4 bytes extras:
Experimente no FourIDE!
RIP Adam West
fonte
Braquilog , 1 byte
Experimente online!
Explicação
w
é a "gravação" interna. Aqui, ele escreverá a entrada. Como a Entrada é uma variável livre,w
a rotulará como um número inteiro antes da impressão. O primeiro número inteiro que ele tenta é0
.fonte
Here, it will write the Input.
'Input' é o próprio programa? Isso não conta como ler a fonte, que, por padrão, é trapaça em um quine?Java (OpenJDK 8) , 11 bytes
Experimente online!
Resultado:
Apenas um pouco mais elaborado do que a resposta óbvia
()->"".format("%23s",0)
.Economizar
fonte
()->1E10-1+""
,"9.999999999E9" (13)
salva mais três bytes1e10
para1e9
ou 2 bytes usando uma entrada vazia em vez de()
:o->1e8-1+""
(saídas9.9999999E7
; comprimento & contagem de bytes 11 ).05AB1E , 1 byte
Gera uma única nova linha.
õ
empurra uma string vazia e é implicitamente gerada com uma nova linha.Experimente online!
Algumas outras soluções de 2 bytes, para seu prazer visual (a saída está entre parênteses e toda a saída possui uma nova linha à direita):
Existem muito mais soluções de 2 bytes.
fonte
V / vim, 1 byte
Isso imprime uma única nova linha.
Experimente online!
Há muitas variantes nisso que também funcionariam. Por exemplo,
no vim, e
em V.
Existem também muitas soluções de três bytes. Por exemplo:
Tudo isso é específico de V.
fonte
4ii<ESC>
entanto, V implicitamente preenche a fuga no final do programa.Lote, 12 bytes
A contagem de bytes inclui uma nova linha à direita para script e saída, que é
fonte
cmd.exe
é claro, ecoará um CRLF após oWindows_NT
, portanto, 12 bytes.Hexagonia , 3 bytes
Experimente online!
Impressões
111
.Desdobrado:
Mas o código é realmente executado apenas na ordem
o!@
.fonte
/// , 12 bytes
Experimente online!
Isso é impresso
bcdbcdbcdbcd
e, como são 12 bytes, adicionei um inofensivo/
ao final do código para preenchê-lo.fonte
R, 7 bytes
Imprime "lógico"
fonte
MATL , 2 bytes
Há uma nova linha à direita.
Experimente online!
Explicação
A área de transferência H contém o número
2
por padrão.H
envia esse conteúdo para a pilha, que é exibida implicitamente com uma nova linha à direita.fonte
Carvão , 2 bytes
Experimente online!
Imprime uma linha horizontal de comprimento 1
-
da direita e uma nova linha.fonte
Geléia , 1 byte
Um número considerável de Jelly one byters - este é um - avalia o argumento esquerdo que, quando nada é fornecido como entrada, o padrão é zero, que por sua vez avalia zero e o resultado é implicitamente impresso, a
0
.Experimente online!
De fato, dos 256 bytes na página de códigos, existem apenas 95 que atualmente não produzem uma saída de um byte diferente dentro do intervalo especificado quando executados como um programa completo; são eles (como caracteres da página de código em ordem de bytes):
Notas:
A maioria dos programas de 1 byte imprime a
0
(no-ops / produzindo uma lista com um único zero in, que imprime a0
), a maioria dos outros imprime a1
(0=0
e similares)Ọ
é o programa que faz produzir um byte diferente, mas um que está fora do alcance de acordo com as especificações - produz o nulo de byte (a lança0
para personagem)⁶
produz um espaço (um literal)⁷
produz um feed de linha (um literal)Alguns bytes que funcionam agora podem não o fazer no futuro - existem alguns bytes reservados (acredito) para valores niládicos que, quando atribuídos, quase certamente não produzirão uma saída de um byte.
fonte
byte
Befunge , 2 bytes
Experimente online!
Imprime
0
com um espaço à direita. Também funciona no Befunge 98.fonte