Escreva um programa que não aceite entrada e imprima Hello, World!
no stdout ou na alternativa mais próxima do seu idioma. O problema é que cada linha do seu programa deve conter apenas caracteres ASCII imprimíveis e deve estar em ordem lexicográfica, também conhecida como classificada.
Aqui estão todos os 95 caracteres imprimíveis ASCII em ordem:
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
Portanto, por exemplo, a linha !!A0~
seria inválida porque A
e 0
está fora de ordem. A linha !!0A~
seria válida.
Cada linha do seu programa pode ter qualquer comprimento e pode haver qualquer número de linhas. Linhas vazias são consideradas classificadas. Cada uma das novas linhas do seu programa deve ser a mesma (sem mistura \n
e \r\n
). Guias e outros caracteres ASCII não imprimíveis são proibidos.
Devido à demanda popular , a condição de vitória foi alterada:
a finalização com o menor número de linhas vence. O desempatador vai para o programa mais curto (as novas linhas contam como caracteres únicos).
Somente Hello, World!
uma nova linha à direita opcional deve ser impressa. Observe que o HQ9 + é inválido, pois é geradohello, world
. Posso proibir idiomas semelhantes ao HQ9 + que tenham um caractere "Olá, mundo!" comandos devido à sua trivialidade.
Dica:
Definitivamente, isso é possível em Unary e Lenguage , embora não seja muito conciso.
fonte
Respostas:
Headsecks , 1 linha, 366 bytes
Headsecks é uma substituição trivial do Brainfuck, onde a única coisa que importa é o módulo de ponto de código 8. O Brainfuck equivalente é apenas
Felizmente essa abordagem ingênua apenas se encaixa. Existe algum potencial para obter bytes de golfe, mas pode ser difícil.
Testado usando este intérprete Python .
Gerando código
fonte
/// , 7 linhas, 22 bytes
Uma rara chance de /// ser competitivo (desde que ninguém comece com Unary e Lenguage ...).
O código encontra primeiro um
/
e analisa ocomo uma instrução de substituição que remove todas as novas linhas do restante do programa. Posteriormente, o programa apenas lê
que é impresso literalmente, pois não contém mais barras.
fonte
JavaScript (
6766.62 linhas,227269 bytes)(Nota: testado apenas no Firefox 36 e Safari 8, contém recursos menores do ES6 (a
Set
classe))O código acima basicamente:
Obviamente
alert
não está classificado. Então, em vez disso, precisamos gerar a instrução como uma string e "eval":Como gerar a string? O ES5 suporta a continuação da linha para que
Mas o código do caractere
\
aparece antes de todas as letras minúsculas, portanto, precisamos gerar as letras minúsculas usando outros métodos.Nós emprestamos alguma idéia do JSFuck aqui. As letras minúsculas envolvidas nas instruções de alerta são:
tudo isso pode ser extraído de caracteres de objetos padrão, que podem ser expressos em termos de alguma sequência classificada:
Como avaliamos a string? Certamente não podemos usar,
eval(s)
pois não está classificado. Como alternativa, poderíamos usarFunction(s)()
, mas não podemos usá-Function
lo, pois também não é classificado. No entanto,Function
é o construtor de todas as funções, o que significaSet.constructor === Function
.Adicionar o identificador
constructor
faz com que a lista de letras minúsculas se torne:que felizmente ainda poderia ser gerado por
"truefalseundefinedfunction"
:Após a pré-justificação, o código acima deve ter a seguinte redação:
Update: Renomeado
E
,L
,O
,R
,T
a vários repetição de$
reduzir 4 linhas.fonte
=Z[3*7]
pode ser escrito como o=Z[~-22]
que precisa apenas de uma quebra de linha em vez de duas.Insônia , 4 linhas, 59 bytes
Este programa é gerado otimizando a contagem de linhas.
10 linhas, 43 bytes
O programa acima é gerado otimizando a contagem de bytes.
fonte
Cygwin bash, 16 linhas, 60 bytes
Isso funciona apenas devido ao nome do arquivo que não diferencia maiúsculas de minúsculas no Windows e pelo fato de o Cygwin procurar os utilitários sem diferenciação de maiúsculas e minúsculas, mesmo que você não o configure para reconhecer o caminho sem maiúsculas e minúsculas.
Tome nota disso
ECHO
no final.fonte
> <> , 6 linhas, 111 bytes
Estou tendo problemas para jogar fora uma linha extra, mas, de qualquer forma, estou feliz por ter vencido o método das 7 linhas.
Explicação
> <> é uma linguagem 2D baseada em pilha em que as instruções são caracteres simples e o fluxo do programa pode ser ativado, desativado, esquerdo ou direito. A
"
instrução alterna a análise de strings, pressionando chars até que um fechamento"
seja alcançado, mas devido à natureza de> <> não existe "análise de strings com várias linhas", como as strings de CJam ou as triplas citadas no Python. Isso acabou sendo um grande problema, porque iniciar e terminar uma linha com a"
e ter outros caracteres no meio (por exemplo"some chars"
) não é permitido!Observe que
/
e\
refletimos o fluxo do programa, portanto, na verdade, executamos a primeira linha e todas as linhas na ordem inversa, e a maioria das linhas é realmente executada ao contrário!Em uma nota lateral, aqui está uma tentativa divertida de> <> menos bytes (23 linhas, 47 bytes):
fonte
CJam,
54 linhas, 162 bytesMesmo número de linhas que Insomnia! (mas muito mais bytes)
Experimente online .
Explicação
O CJam imprime automaticamente a pilha posteriormente.
Agradeço ao @Optimizer por me lembrar que
Sc
funciona, porque, caso contrário,SX|
falha (faz um setwise ou, ao contrário, fornece a matriz que consiste em um espaço e 1).fonte
> <> (Peixe) , 5 linhas, muitos bytes
O código é extremamente longo, quando digo
[6535529689086686142930090 '+' signs]
e[6535529689086686142930090 'd' characters]
na primeira linha do código, quero dizer que existem literalmente6535529689086686142930090
sinais de mais em uma linha!(E para as seguintes linhas, adicione os espaços de prefixo necessários.)
Uma alternativa testável mais curta que apenas imprime
Hi
:Método:
:1(?;:882**%:o-288**,
.(Podemos imprimir uma sequência longa de 2 + caracteres arbitrários com esse método.)
fonte
[6535529689086686142930090 '+' signs]
e[6535529689086686142930090 'd' characters]
literalmente na primeira linha do código." (Se claro o que quero dizer com isso cheque a segunda parte do código.)PHP (7/17 linhas, 36/59 bytes):
Devido à quantidade de resposta inválida, reescrevi esta resposta.
A versão do navegador? Se foi.
Mas eu tenho 2 soluções, ambas baseadas em bit a bit
xor
(^
) de strings em PHP.Esta é uma solução extremamente poderosa! Às vezes, permite economizar muitos bytes.
Primeiro, a resposta mais curta:
Eu sei, parece horrível, mas funciona!
O próximo depende de novas linhas.
Sim, ele usa novas linhas (o
\n
estilo / UNIX é necessário)!As novas linhas desta são necessárias para funcionar.
Não é perfeito, mas funciona!
Ambas as respostas foram baseados em @ MartinBüttner 's solução :
Um agradecimento especial a @ n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳ , @CJDennis , @ MartinBüttner e @skagedal por detectar todos os meus erros e por suas sugestões.
fonte
Hello , Wor l d !
. Observe os espaços extras! Infelizmente, esta não é uma resposta válida.<?php
é inválida! No entanto, eu vou te perdoar por isso! OK, acabei de testar o<?Php
que funciona, então aprendi que a tag de início não diferencia maiúsculas de minúsculas!"!<br
- isso não está classificado. O segundo tem como linha 10:."!
- não classificado.Pitão, 7 linhas, 23 bytes
Muito simples, basta usar uma sequência de múltiplas linhas e remover as novas linhas.
Experimente aqui.
fonte
Quarto, 41 linhas, 143 bytes
Experimente online.
Eu estou muito orgulhosa disso. Eu o peguei rapidamente, assim que descobri que podia fazê-lo, depois que o Google pesquisou idiomas que não diferenciam maiúsculas de minúsculas e já conheço a Forth decentemente. Definitivamente, pode ser reduzido, bytes e linhas. Sugestões são apreciadas. : D
Esse programa basicamente empurra o valor decimal de cada caractere ASCII e depois imprime cada um. Tentei otimizar enquanto escrevia, portanto é menos legível do que gostaria.
fonte
Emit
linhas não funcionam, poisi
(105) é menor quem
(109).Marbelous, 9 linhas, 94 bytes
Teste online aqui.
Using spaces for blank cells
deve ser verificado.Representação visual da fonte:
Explicação: Cada valor hexadecimal neste programa se move para baixo a cada "tick" (a menos que esteja ativado
\\
, caso em que se move para a direita).++
aumentará o valor,--
diminuirá, não~~
aplicará um bit a bit, etc. Os valores que caem da parte inferior são impressos como um caractere ASCII.Por exemplo: O
33
no canto superior se torna(((0x33 +1 +1) << 1) +1 +1 = 0x6C (l)
.fonte
Perl, 17 linhas
fonte
Rebol - 15 linhas (51 bytes)
As palavras em Rebol não diferenciam maiúsculas de minúsculas (por exemplo
PRINT
,Print
eprint
todas chamariam a mesma função).O código acima arrumado:
NB
sp
retorna o caractere de espaço !fonte
{
não pode ser anterior a nenhuma letra.{,}
. Isto é agoraSp + 12
(mais de três linhas) que é equivalente de carácter de espaço + 12 (ou seja, vírgula.)Unário , 1 linha, muitos bytes
Todos os personagens deste programa são
0
. A fonte é muito longa para ser inserida aqui, mas consiste em uma sequência de muitos zeros:Esta é a representação decimal para este número binário:
Que foi criado a partir deste programa BrainF ***:
Veja como eu o gerei : http://ideone.com/lMT40p
fonte
Lote - 39 linhas (202 bytes)
Eu queria reduzir o tamanho, permitindo a expansão atrasada executando o código dentro de uma
cmd
chamada usando o/v on
comutador, mas não consegui superar todos os quilates.Sem as novas linhas (e quilates para escapar das novas linhas):
fonte
Ruby, 19 linhas, 95 bytes
Possivelmente a segunda restrição de código mais difícil para Ruby que eu já vi neste site, depois da monstruosidade aqui .
Editar para explicação: o único método de saída Ruby classificado é o
<<
método STDOUT. Infelizmente, a constante para STDOUT é$>
e>
é maior em ASCII do que a maioria dos símbolos; portanto, não é possível chamar um método nele. Precisamos de uma declaração de atribuição de várias linhas para obter um nome de variável mais tratável$;
(ponto-e-vírgula ainda é bastante alto, mas a maioria das variáveis desse formulário é não atribuível ou pode ser apenas uma sequência de caracteres).Símbolos (
:Wor
, etc.) são a maneira mais fácil de fazer um literal, e não vejo uma maneira de remover novas linhas de uma string, portanto, preciso de várias instruções de impressão. O espaço e a pontuação não podem ser literalmente simbolizados, mas, felizmente, ochr
método dos números é legal, para que eu possa obter um caractere do seu valor ASCII.::
é uma maneira alternativa de chamar métodos. O espaço é complicado porque não consigo escrever32
, portanto, subtraio 1 de 33 e o atribuo a uma variável.fonte
Retina, 12 linhas, 29 bytes (não concorrente)
A linguagem é mais nova que o desafio.
Experimente online
fonte