Olá Mundo! sem repetição

27

Em qualquer linguagem de programação existente antes da pergunta, escreva um programa (não uma função) que produza os caracteres Hello world!seguidos por uma nova linha. Seu programa:

  • não deve usar nenhum caractere mais de uma vez (incluindo espaço em branco)
  • deve usar apenas caracteres ASCII
  • não deve usar nenhuma biblioteca interna
  • não deve receber entrada (usuário, arquivo, nome do arquivo, variável do sistema, internet, nada)
  • não deve produzir mais nada

O vencedor é quem tiver mais votos após 14 dias e cumprir as seis regras.

A sexta regra é que você não pode usar H9 +, HQ9 +, HQ9 + B, HQ9 ++, HQ9 + 2D, Olá, Olá +, Olá ++, Hexish, CHIQRSX9 + ou Fugue. Além disso, todas as respostas que exigem implementações mais recentes que esse desafio devem ser marcadas como não concorrentes.


Isenção de responsabilidade: Esta pergunta foi publicada com o pressuposto de que Olá, mundo! com repetição limitada não causou danos ao seu computador ou ao seu cérebro no processo de encontrar as respostas.

Timtech
fonte
se estamos escapando dos códigos de caracteres, o caractere "\" pode ser usado mais de uma vez?
precisa saber é o seguinte
4
E quanto a piet?
Victor Stafusa
@Victor "só deve usar caracteres ASCII"
Timtech
3
Esse foi um ótimo quebra-cabeça, e eu gostei de fazê-lo :-).
precisa saber é o seguinte
9
“Deve usar apenas caracteres ASCII” - que restrição draconiana. Isso remove uma classe inteira de idiomas que não usam ASCII.
Timwi 23/01

Respostas:

33

Perl 6 (29 28 caracteres)

Isso foi um pouco chato, mas finalmente consegui fazer um programa para essa tarefa. Obrigado à grande comunidade # perl6 , por me ajudar nessa tarefa. Levei duas horas, espero que gostem. A saída está completamente dentro das especificações, incluindo uma nova linha.

say
Q[@A`DO world!]~|<HeLhg>

Existem quatro tokens de interesse.

  • say

    Isso gera o argumento com nova linha no final. A nova linha após o próprio comando é necessária como uma substituição de espaço.

  • Q[@A`DO world!]

    Esta é a primeira string. Q[]é para strings brutas (como r""em Python). Pode levar qualquer delimitador (ou par deles), neste caso []. Nesse caso, eu uso isso para aspas, não preciso de comportamento de string bruto.

  • ~|

    Este é o operador stringwise ( ~) bitwise ou ( |).

  • <HeLhg>

    <>é literal de lista, que ocupa uma lista de elementos separados por espaço. Nesse caso, ele possui um elemento e, usado como escalar, fornece uma string.

Konrad Borowski
fonte
3
Surpreendente! Eu preciso aprender. Alguma sintaxe do Perl 6! Também concordo com o seu comentário, foi definitivamente um problema divertido!
Dom Hastings
4
Nossa ... minha mente está abalada: O +1
Maçaneta da porta
12

Perl 5 com -M5.010, 29 bytes

say+He.v108
x2,q(O world!)^$"

Experimente online!

Eu adquiri muito conhecimento desde que tentei isso pela primeira vez. Ainda não é tão curto quanto as outras respostas, mas é o melhor que consigo!

Dom Hastings
fonte
O desafio tem letras minúsculas w.
Ørjan Johansen
@ ØrjanJohansen Obrigado, eu esqueci!
Dom Hastings
11

Perl 5.10+: 24 caracteres

say+He,YZX^q(567 world!)

OK, acho que é o mais curto possível no Perl.

Execute com perl -M5.010(ou apenas perl -E) para ativar o sayrecurso Perl 5.10+ .

Ilmari Karonen
fonte
Sério impressionado! I passado as idades tentando contornar as lls ...
Dom Hastings
9

Golfscript 42 33

Eu poderia muito bem resolver isso, considerando que eu tinha que ajustar parte do código e todos os dados no mesmo bloco, sem nenhuma maneira de delimitar os dois. Acho que esse é um resultado bastante curto. Diferentemente do meu primeiro envio, o código do bloco agora é uma parte totalmente integrada dos dados, portanto {1, não apenas inicie o bloco e coloque um 1na pilha, mas também os dados que definem o He assim por diante. A criação da matriz agora inclui a string de entrada vazia, o que significa que não preciso cortar o início, pois há apenas um caractere entre a string vazia e a H, esse caractere é cortado quando eu pego cada segundo caractere e o vazio eventualmente, a string é exibida como nada.

{1wZ$Qei^Ak 3h-)ulmsogr7}.`*]2%n+

Demonstração on-line: http://golfscript.apphb.com/?c=ezF3WiRRZWleQWsgM2gtKXVsbXNvZ3I3fS5gKl0yJW4r

[{1$^(r iFNGDJUHv98oIMgtplbh4m}.`\*]6>2%n+

Define um bloco de código. Faz uma cópia do bloco de código e o converte em string. Usa o bloco de código para iterar sobre a string. Para cada iteração, o código fará uma cópia do valor do caractere anterior, ou com o valor atual do caractere e subtrairá 1. A sequência resultante terá os 6 primeiros caracteres removidos e cada segundo caractere removido. Finalmente, um avanço de linha é anexado.

"r iFNGDJUHv98oIMgtplbh4m" são apenas duas variáveis ​​não declaradas, elas não fazem nada, mas são cuidadosamente construídas para produzir o resultado desejado.

Demonstração on-line: http://golfscript.apphb.com/?c=W3sxJF4ociBpRk5HREpVSHY5OG9JTWd0cGxiaDRtfS5gXCpdNj4yJW4r

aaaaaaaaaaaa
fonte
6

Vim 7.3, 18 pressionamentos de tecla

:h-cu
9j3wy$<C-^>P<End>r!o

Copia a corda Hello worlda partir deste helpfile , que infelizmente foi removido em mulheres que nunca versões do Vim.

BlackCap
fonte
De acordo com esta , como Teclar <Esc>e combinações envolvendo a contagem Ctrl-chave como um byte
oktupol
6

Befunge-98 , 34 31 bytes

f"v!dlrow
+c<>a,kb@#*98e':g05-3

Experimente online!

Usa vários métodos diferentes para evitar caracteres duplicados.

Primeiro, usamos literal de string de quebra automática para evitar o uso de dois "s. Isso adiciona "mundo!" para a pilha.

Indo para a esquerda na segunda linha, adicionamos 9 ao extra fpara fazer oo "Olá". Pegamos go caractere da célula 5,0 ( l) e o duplicamos. O 'é usado para buscar a letra e. Multiplique 9 por 8 para obter 72, o valor ASCII de H. Em seguida, imprimimos tudo usando ck,e invertemos a direção com o >botão reutilizar ,para imprimir a nova linha ( a).

Brincadeira
fonte
Muito bom, mas esse desafio é sem vírgula.
Ørjan Johansen
Ah, lol, isso torna mais fácil ... Obrigado @ ØrjanJohansen
Jo King
Você tem dois +e d.
Ørjan Johansen
@ ØrjanJohansen oops. deve ser corrigido agora
Jo King
3

Elixir , 37 bytes

IO.puts~c(He#{[?n-2,108]}\x6f world!)

Experimente online!

Não posso garantir que isso funcionaria em 2014, quando este desafio foi lançado, e o Elixir ainda estava antes da versão 1.0 (e, portanto, se é formalmente "competitivo", mas olhando para as notas de lançamento, acho que deveria ser). ESTÁ BEM). Enfim, estou feliz por finalmente ter encontrado uma solução válida para essa tarefa usando uma linguagem convencional de propósito geral que não seja Perl!

Passo a passo

IO.puts     #Print with trailing newline
~c(...)     #Sigil: charlist with interpolation
He          #Start of literal string...
#{...}      #Interpolated block
[?n-2,108]  #A list of codepoints for 2 'l's
\x6f        #Hex code for 'o'
world!      #...and done!
Kirill L.
fonte
0

Stax (não concorrente), 8 bytes

`dx/&\p4

Experimente online!

Apenas uma literal de string compactada. Felizmente Stax me deixa ir sem o fechamento final.

Weijun Zhou
fonte