fonte: Dilbert, 8 de setembro de 1992
Espero acrescentar uma nova reviravolta no clássico "Hello World!" programa.
Codifique um programa que saia Hello World!
sem:
- Literais de cadeia / caracteres
- Números (qualquer base)
- Funções pré-criadas que retornam "Hello World!"
- Literais RegEx
Com as exceções de "O" † e 0.
† "O" é maiúsculo, "o" não é aceitável.
code-golf
hello-world
restricted-source
zzzzBov
fonte
fonte
"O"*
significa que elas podem ter uma string literal com qualquer número de O's, incluindo zero. Eu não acho que essa foi a intenção. Por favor, esclareça.Respostas:
Windows PowerShell, demais
Sim, de fato, antigamente, tínhamos que escrever um »Olá, mundo«, usando (quase exclusivamente) zeros ...
Em uma nota mais grave:
Windows PowerShell, 25
Nenhuma string literal. Por
Hello World!
acaso, o item lá dentro é analisado como uma sequência, pois o PowerShell está no modo de análise de argumentos lá.fonte
C, 327 caracteres
Estranhamente, ele não perde sua beleza após o pré-processamento:
fonte
BrainFuck, 102
111caracteresAtende a todas as regras.
O crédito é para Daniel Cristofani .
fonte
0 and/or "O" must be used
. É um pouco mesquinho para BrainFuck e golfscript, mas eles não têm muita dificuldade com esse desafio.C, 182 bytes
fonte
Programa C - 45
(traindo)
Lexicamente, isso não usa literais de sequência ou regex. Aproveita o recurso de stringification do pré-processador C.
s(x)
é uma macro que transforma seu argumento em uma string.fonte
Haskell - 143 caracteres
oi, isso foi confuso!
Sem números, sem operações numéricas, variáveis renomeadas para diversão.
Alguma exposição pode ser boa:
o%y
,o&y
, Eo!y
cada aplica-se a funçãoo
dey
várias vezes: 3, 9 e 29 vezes, respectivamente. 29?!?! Sim 29!r
ew
são os caracteres seguinte e anterior, que quando aplicados usando as funções de ordem superior acima, podem ser criados para obter todos os caracteres necessários'O'
.A sequência de saltos necessária é:
$
, renomeado#
para!
para abraços.fonte
r=succ
e osw=pred
conflitos de como o Hugs implementa a restrição do monomorfismo. Mudar parar x=succ x
ew x=pred x
fazer funcionar (ao custo de 4 caracteres). Estes parecem ser problemas em abraços.Unários ,
10 1971137672766964589547169964037018563746793726105983919528073581559828 bytesEstou surpreso que ninguém tenha feito isso ainda ...
É muito longo para postar aqui, mas são 1137672766964589547169964037018563746793726105983919528073581559828 zeros.
Ou, leia mais facilmente: ~ 10 67 zeros.
Obrigado a @dzaima por salvar 10 197 bytes
fonte
Mathematica 12 caracteres
Apenas símbolos, sem strings.
O ! é um operador fatorial, mas como os símbolos Olá e Mundo são indefinidos, retorna a entrada inalterada.
Se modificarmos um pouco o programa:
Em seguida, ele imprime
12
(2 * 3!)fonte
montagem i386 (Linux, sintaxe gcc),
440442435Hoje é o meu dia de assembléia e depois disso já terei o suficiente por um tempo.
Eu me permiti o número 128, veja abaixo o programa para discutir o porquê.Nada de extraordinário: estou apenas codificando "Hello World!" como opcodes de montagem onde isso fazia sentido sem constantes numéricas e preenchia o restante com aritmética.(monte com
gcc -nostartfiles hello.S -o hello
, possivelmente-m32
dependendo do seu arco)Por que a tolerância para 128? Eu preciso de syscalls para realmente mostrar qualquer coisa; Os syscalls do Linux estão no INT 80h (128 decimal); o único formato de operando para INT é imediato, portanto, não é possível ter outra coisa senão uma constante (para o código) lá. Eu poderia (depois de ficar sóbrio) tentar expressá-lo como uma função de outras constantes simbólicas no código, provavelmente n , mas isso está ficando muito chato para pouco ganho. Eu li a restrição de números como uma maneira de impedir a codificação ASCII, e definitivamente não é isso que estou fazendo aqui, por isso me sinto inocente o suficiente para enviar isso. (FWIW, eu também tentei o código auto-modificador, mas que foi falhado)Agora também não há 128. O código é puro!mov
com macros CPP; eliminou os 128 restantes.fonte
Javascript - 305
Um pouco longo, mas eu gosto do método usado.
fonte
OO
,OOO
, mas é claro que tornaria mais tempo.C # (131 caracteres)
141 caracteres142 caracteresLegível:
fonte
enum X{Hello,World,A,B=A<<A<<A}void Main(){var c=(char)X.B;(X.Hello.ToString()+c+++X.World+c).Dump();}
.ToString()
->+""
salva alguns cahrsJavaScript, 88
99
Muito obrigado a @Timwi pelas sugestões
operador ternário removido:
103
alias
String.fromCharCode
117
Comutador if-else para operador ternário
125
Estou mantendo o
"O"
justo para ter um "O" no programa.133
fonte
GolfScript, 63 caracteres
Ainda não existe uma entrada no GolfScript?
Este usa um único literal numérico
0
e uma variável chamadaO
(que é usada para armazenar o número3
). Tudo o resto é aritmético e manipulação de pilha. A cadeiaHello World!
é criada a partir de seus códigos ASCII, caractere por caractere.Veja como funciona:
fonte
Brainfuck, 111 bytes
Algoritmo explicado
Versão mais longa sem loop, 389 bytes:
fonte
Lua
1449786 caracteresUma abordagem diferente, baseada no fato de que as chaves da tabela também são cadeias de caracteres e no fato de que #Hello == #World == 32 == string.byte '\ n'
Solução de 145 caracteres
Fiz codificação delta dos bytes, então alguns números primos etc etc :)
Versão Golfed:
Comentado:
Edit: Alterou várias strings O e encontrou mais otimizações.
fonte
Python (
126130)fonte
''
não é permitido.[:0]
.J, 250
Eu me diverti muito com esse e aprendi um pouco mais de J para inicializar. Além disso,
ooo ooo ooo
pode ser o código mais estúpido que eu já escrevi.fonte
QR with halfblocks
(169)121 caracteresCom o QR-Code usando caracteres UTF-8 de meio bloco:
Infelizmente, isso não vai render muito bem lá. Há um pequeno trecho com a folha de estilos apropriada, mas .. Não! A linguagem apresentada aqui não é HTML! O idioma apresentado aqui é o QR Code ! (HTML e CSS são usados aqui apenas para solucionar problemas de apresentação!)
Mostrar snippet de código
QR com halfblocks (169)
Idealmente, isso pode se parecer com:
fonte
zbar
no Linux. (exemplo:xwd | xwdtopnm | zbarimg /dev/stdin
)Code golf!
Um personagem não é literal?postscript
,svg
ou outras linguagens de apresentação já utilizado lá !? Uma maneira de codificar é uma linguagem de qualquer maneira ... eu acho!Scala (
357423361 caracteres)Infelizmente, não é a resposta mais curta, mas esperamos obter bônus para o melhor uso
'O'
e'0'
Anteriormente:
Versão antiga (ilegal):
fonte
""
) e literais de caracteres / caracteres que contêm o caractere zero ('0'
) não são permitidos. Somente a sequência"O"
(maiúscula O) e o número0
são.C (ou C ++) (segmento do corpo: 49) (trapaça)
Ao compilar, compilar com um binário chamado
Hello\ World\!
, o código é:O
strrchr
segmento é necessário para remover o caminho completo, caso o nome do programa passado contenha o caminho completo, também nenhum argumento deve ser passado .A linha de compilação típica pode ser:
gcc -o Hello\ World\! foo.c
fonte
C ++, 141,
146A primeira vez que experimentamos um desses, provavelmente ainda pode ser melhorada um pouco:
EDITAR:
Roubei o truque de dividir de outro post, não acredito que não pensei nisso :(
fonte
std::
, etc. etc #Haskell - 146
Imaginei que a correspondência de padrões daria a Haskell uma grande vantagem, em particular porque você pode inicializar poderes de dois assim:
No entanto, como visto na resposta Haskell do MtnViewMark (que merece muitos upvotes, a propósito) e outras respostas, uma melhor compactação pode ser alcançada usando mais do que apenas
+
e-
.fonte
Clojure - 46 caracteres
Observe que
Hello
eWorld!
são símbolos, não literais de qualquer tipo.fonte
C ++
fonte
100
viola a regra sobre números. Substitua-o por algo mais divertido.Line 7: error: ISO C++ forbids declaration of 'main' with no type
int
no g ++ #PHP - 49 caracteres
Changelog :
fonte
<?$a=-~-~-~0;echo Hello.chr($a.$a-1).World.chr($a.$a);
funciona, mas são 54 caracteres.1
lá dentro. Lá vou eu quebrando minhas próprias regras ...<?$a=-~-~-~0;echo Hello,chr($a.~-$a),World,chr($a.$a);
é o que eu deveria ter usado, ainda 54 caracteres.Python, 106
fonte
Perl, 186 bytes
Cada caractere é impresso através do seu número ordinal, que é o comprimento de uma matriz. A construção das matrizes é otimizada através da representação binária dos números de caracteres.
Ungolfed:
fonte
Java 389 caracteres
viu uma declaração desnecessária
O histórico está no histórico de edições agora com a versão original não-legível:
fonte
Perl 6 , 199 bytes
(novas linhas são adicionadas para reduzir a largura, mas são desnecessárias, portanto não são contadas)
Hello World!
é codificado como uma lista de listas dos poderes de 2 de cada letra.Há exatamente um lugar onde eu tenho um literal
0
que é usado para qualquer coisa que não seja a0
. É usado para criar uma lista de um elemento, que é imediatamente transformada no número1
com o operador de prefixo numérico (+[0]
).fonte
Caracteres JavaScript 662
Que tal abusar de literais de matriz apenas para ter uma base unária. Este programa tem vantagem de não usar
0
.fonte
0
. Que talO_O=0;
?O_O=[].length
pode ser escrito como oO_O=false
diminui em 4