Olá Mundo! com repetição limitada de caracteres


79

No idioma de sua escolha, escreva um programa que produz exatamente os caracteres Hello world!seguidos por uma nova linha. O código:

  • não deve usar nenhum caractere mais do que duas vezes (alfanumérico, símbolo, espaço em branco ... qualquer coisa)
  • não deve usar nenhum recurso externo
  • não deve usar nenhuma entrada do usuário
  • não deve produzir mais nada

Um exemplo de um programa python válido:

print("He%so world!"%(2*'l'))

Um exemplo de um programa python inválido (o caractere 'r' é usado três vezes):

print("Hel"+chr(108)+'o world!')

O vencedor é quem tiver mais votos após 14 dias.

EDIT: Um vencedor foi escolhido! Obrigado a todos por seu trabalho nesta questão!


25
E a letra repetida o no exemplo python "válido". Também existem: - "'()
Adam Speight

15
@AdamSpeight, o que você quer dizer? A letra é usada apenas duas vezes, conforme as especificações.
Josh

5
@AdamSpeight ... que é literalmente o mesmo.
VisioN

4
Eu acho que você quer dizer que um personagem não deve aparecer mais de duas vezes, ou seja, não deve ser repetido mais de uma vez.
Michael Kay

56
Eu acho que brainfuck é fora de questão ...
jub0bs

Respostas:


61

Ruby (1.9+)

Como este é um concurso de popularidade, vamos tentar não usar QUALQUER dos personagens de 'Hello world!' enquanto ainda estiver usando outros caracteres apenas no máximo duas vezes:

puts("S\107VsbG8gV29ybGQhCg".unpack(?m))

São 40 caracteres btw.

Bater

E este usa magia unicode.

Notas:

  • Enquanto os caracteres originais aparecem em outro lugar (diferente do exemplo do ruby), a sequência impressa contém apenas caracteres não-ascii.
  • Dois dos três espaços são realmente guias, portanto, não existem caracteres utf-8 que aparecem mais de duas vezes
  • Como alguns dos octetos binários aparecem mais de duas vezes, espero que isso não seja contra as regras. Estou tentando resolvê-los embora.

Código:

echo '𝓗𝐞𝑙𝒍𝓸 𝓦𝗈𝖗𝖑𝘥¡'|iconv -t  asCIi//TRANSLIT

Para aqueles que não têm uma fonte adequada instalada, fica assim:

código como imagem

Aqui está o hexdump:

00000000  65 63 68 6f 20 27 f0 9d  93 97 f0 9d 90 9e f0 9d  |echo '..........|
00000010  91 99 f0 9d 92 8d f0 9d  93 b8 e2 80 8a f0 9d 93  |................|
00000020  a6 f0 9d 97 88 f0 9d 96  97 f0 9d 96 91 f0 9d 98  |................|
00000030  a5 c2 a1 27 7c 69 63 6f  6e 76 09 2d 74 09 61 73  |...'|iconv.-t.as|
00000040  43 49 69 2f 2f 54 52 41  4e 53 4c 49 54 0a        |CIi//TRANSLIT.|
0000004e

Você deve executá-lo em uma máquina onde o conjunto de caracteres padrão é utf-8. Eu tentei em um OSX10.8 usando o iTerm2 com o seguinte ambiente:

bash em execução no iTerm2

PHP 5.4

Isso usa zLib: (infelizmente usa os caracteres ee o)

<?=gzuncompress('x▒▒H▒▒▒W(▒/▒IQ▒!qh');

Hexdump:

00000000  3c 3f 3d 67 7a 75 6e 63  6f 6d 70 72 65 73 73 28  |<?=gzuncompress(|
00000010  27 78 9c f3 48 cd c9 c9  57 28 cf 2f ca 49 51 e4  |'x..H...W(./.IQ.|
00000020  02 00 21 71 04 68 27 29  3b                       |..!q.h');|
00000029

+1

Aqui está o código do ruby ​​2.0 que usei para testar duplicatas:

d=ARGF.read
p [d.split(//),d.unpack('C*')].map{|x|x.inject(Hash.new(0)){|i,s|i[s]+=1;i}.select{|k,v|v>2}}

2
Embora eu sempre aprecie a inteligência do Unicode, sua tentativa do bash parece não satisfazer as especificações da pergunta. "escreva um programa que produz exatamente os caracteres Hello world!seguidos por uma nova linha"
FireFly

14
@ FireFly: satisfaz isso. iconv com a codificação de destino ascii//translittransliterará os caracteres unicode para ascii básicos. E de eco do curso irá adicionar a nova linha, de modo que este se encaixa a especificação (se não consideramos a semelhança dos octetos)
SztupY

5
No meu sistema eu recebo em Hello World?vez deHello World!
marinus

1
@SztupY oh, você está certo, meu mal. Muito esperto, eu gosto!
FireFly

1
Quantos pontos de bônus você ganha se o seu verificador duplicado também estiver em conformidade com as especificações repetidas? :-)
corsiKa

55

Você precisa usar idiomas mais expressivos.

Chinês,  6 4   3 caracteres

喂世!

A execução do google translate sobre isso produz Hello world!

(obrigado @reservoir e @Quincunx pela atualização)


33
+1 para flexão de regra ... "Em um idioma de sua escolha ..."
WallyWest 19/01/14

4
Adoro. Mas como exatamente isso é um programa?
Pierre Arlaud

3
Na verdade, você pode olhar para ele como um programa em uma linguagem Traduz Google - para o chinês como seu sub-linguagem :)
Tomas

2
+1. Boa ideia. Sh = Shì jiè = Mundo. Ǐ = nǐ hǎo = Olá. "Mundo, olá!" traduz para "Olá, mundo!". Pode ser jogado golfe um pouco mais:你好世!
Justin

2
pode ser jogado para baixo às 喂世!custas de ... bem, nada mais está realmente sendo gasto.
precisa saber é o seguinte

45

HQ9 +, 1 caracter

H

mantendo-o simples :)


7
No entanto, o HQ9 + gera uma vírgula;)
Josh

8
Eu ainda manter sua resposta de fora ... é um concurso de popularidade, afinal, as regras são para o vento!
Josh

26
@ Josh Este é um dos raros eventos em que sinto falta do botão de voto negativo nos comentários. Se jogarmos fora as regras, não resta mais nada para justificar a competição.
Howard

5
@ Howard me sinto sujo. Voto a favor do seu e do comentário de Josh
Cruncher

22
Todas as print Hello Worldperguntas são realmente who can submit a HQ9+ answer fasterperguntas.
totymedli

44

C, 192 caracteres

#
#
/*$$@``*/ATION_[]={9.};main(BBCDDEEFFGGHJJKKLLMMPPQQRRSSUUVVWWXXYYZZabbdefgghhjjkkmpqqsstuuvvwxyyzz) {printf("He%clo \
world!%c\
",2^7&!8.&~1|~-1?4|5?0x6C:48:6<3>2>=3<++ATION_[0],'@'^79-5);}

Como isso não é golfe, decidi me divertir e tentar usar todos os personagens exatamente duas vezes (colocando o mínimo possível em um comentário, porque isso é chato). Percebo que não me saí muito bem, já que meu código também contém uma tonelada de códigos "mortos" entediantes (não no sentido literal, mas no sentido de caracteres de espaço reservado usados ​​apenas para atender ao requisito). Enfim, isso foi surpreendentemente difícil (mas divertido) com a limitação de dois caracteres, então, infelizmente, eu não consegui pensar em algo mais interessante. Isso me deu uma idéia para um novo problema ...

(Atualizado de acordo com o comentário de @ ugoren.)


3
Criativamente impressionante. Eu gosto disso.
Josh

As barras finais \ \ `linhas três e quatro fazem dele uma continuação de linha, não nova linha. E a linha quatro é encerrada por um EOF, tornando-o legal.
Josh

1
Eu acho que você pode facilmente descomentar .usando-o para frações. Além disso, você pode declarar uma matriz e usar [].
precisa saber é

@ugoren boa chamada sobre .; Eu só pensei em usá-lo para acesso struct. <s> Quanto às declarações de array, estou sem ,s devido à printfchamada e também sem ;s, por isso não tenho certeza de como poderia declarar um. </s> Duh, poderia substituir ATION_. ..
FireFly

44

Comando Vim (18 teclas)

iHeEsc3alEscio WorRightd!Enter

Não repete o pressionamento de tecla mais de duas vezes.

Ele meio que viola a regra "user input", pois ainda é o usuário que precisa inserir essa sequência, mas suponho que se você armazená-lo como uma macro ou um nnoremap de antemão, isso contaria, já que você o está executando sem fazer explicitamente entrada para que isso aconteça.

Também precisa nocompatibleser definido, o que pode contar como o uso de recursos externos, por isso forneci outra variação abaixo:


Comando Vim (21 teclas)

iHeEsc3alEscio WorCtrl+[$ad!Enter

Essa variação não precisa nocompatibleser definida, embora funcione usando Esctrês vezes usando Ctrl+[em seu lugar.


16
Se você está falando sobre as personagens Right, Esce Enter, eles não são, literalmente, esses caracteres. O Vim lida com as teclas digitadas, que considero equivalentes aos caracteres para os propósitos deste concurso (e a regra "não repita mais do que duas vezes"). Eu só uso o ipressionamento de tecla duas vezes e o <Right>pressionamento de tecla uma vez. Quanto a E, nunca o uso - mas uso <Esc>duas e <Enter>uma vez.
Joe Z.

6
Agora eu estou desapontado que o Emacs não tem um comando Olá mundo Mx ...
RemcoGerlich

4
Mesmo se isso acontecer, são três lsegundos.
Joe Z.

1
Você deve observar que precisa :set nocompatible.
jazzpi

1
Incrível, mas acho que Rightnão estou usando muito vim-y.
Gefei

29

Piet-- Nenhum personagem!

Olá mundo em Piet


7
Eu consideraria os codels como "caracteres".
Paŭlo Ebermann

3
@ PaŭloEbermann O que você consideraria um codel único? EG formas diferentes? cores? tamanhos? alguma combinação deles?
ApproachingDarknessFish

1
@ValekHalfHeart a definição de um codel único é dada nas especificações da linguagem : é um bloco de codel que pode ser simplificado como um pixel colorido único.
Plannapus

@ plannapus Nesse caso, eu não faço esse desafio tecnicamente possível em Piet. Eu posso pensar em algo criativo.
ApproachingDarknessFish

@ValekHalfHeart oh não foi uma crítica a esta resposta: eu adoro! Este desafio não era um codegolf de qualquer maneira.
plannapus

26

Perl, 29 caracteres

Esta resposta inclui tamancos com classificação x!

say"07-8*d<#B+>!"^xRATEDkL0GZ

Perl, 23 caracteres

Mais curtos, mas sem sapatos porno. :-( A mesma idéia básica ...

say'0@@lo World!'^"x%,"

Perl, 20 caracteres

Entediante...

say"Hello Wor\x6Cd!"

7
Hum .... excêntrico? 1)
Josh



18

Scala: 34 29 caracteres

Estou orgulhoso de mim mesmo por este:

printf("He%c%co world!\n",108,108)

Tivemos muita dificuldade em superar 'l', 'r', aspas e colchetes. Então descobri a antiga printffunção Java , que felizmente converte números em letras quando é fornecido o %cespecificador de formato.

Atualizar

MrWonderful fez uma coisa maravilhosa, apontando que vários caracteres podem ser salvos usando meu segundo 'l' manualmente na string!

printf("Hel%co world!\n",108)

4
@KCaloux, Como você tem permissão para 2 'l's, printf ("Hel% co world \ n", 108) em 28 seria ainda melhor?
precisa saber é o seguinte

@ MrWonderful Eu acho que você está absolutamente correto! (Também eu só percebi que eu esqueci de incluir o '!')
KChaloux

Pelo que entendi, essa não é uma entrada válida, embora seja uma boa tentativa. printfcontém um rcomo faz world. O mesmo vale para a carta ousada mais de uma vez. Isso se baseia na minha interpretação da seguinte declaração do OP "Um exemplo de um programa python inválido (o caracter 'r' é usado três vezes): print("Hel"+chr(108)+'o world!')"
javatarz

@JAnderton Eu tive um programa ruby ​​para analisar meu script para garantir que não houvesse caracteres incluídos mais de duas vezes. Leia isso novamente. Existem 2 rs, não 3. Um em "printf" e outro em "world". A razão o python é inválido porque ele incluichr
KChaloux

16

Python 3 [38 bytes]

exec('import '+chr(95)*2+"h\x65llo__")

Eu não consideraria import __hello__um recurso externo.


15

Perl: 34 caracteres

$_="He12o wor3d!
";s{\d}{l}g;print

Exemplo de execução:

bash-4.1# perl -e '$_="He12o wor3d!
> ";s{\d}{l}g;print'
Hello world!

(Não é grande coisa. Postado apenas para usar pelo menos uma vez na minha vida s///com esses delimitadores sofisticados.)


15

PHP, 33 caracteres

Eu simplesmente amo o quanto o PHP perdoa e entende!

<?=Hel.str_rot13("yb jbe").'ld!';

Antes de ser excluído (ou, se ainda estiver lá, estou totalmente cego), vi um comentário dizendo "No brainf * ck?: D". Bem, é praticamente impossível escrever uma solução no BrainF * ck, como você sabe. Mas eu consegui codificar isso, apenas para o lulz.

++++++++++[>++++>+++++>++++++>+++++++>++++++++++>+++++++++++>+++++++++<<<<<<<-]
>>>.+++.--.>++.>+.+++++++.<<<<++++++.>>>>>+++++.+.--.>+++++.<.---.+++++.<<<<-.+
+.<------.------.>>>>>+++++.<----------.<<<<--.>>>>++++++++.--------.+++.
<<<<++.+++++++.+++++.-------.>>>>+++++++.--------.<<<<------.++++++.>++++++++.

Se você não possui um intérprete de BF, o código acima apenas imprime o do PHP: P


Eu nem sabia que um código como esse é válido! A tag php não está fechada e a string Helnão está entre aspas. Também nunca ouvi falar str_rot13antes.
Aycan Yaşıt

1
@ AycanYaşıt a marca de fechamento php não é exigido em EOF, e se você colocar uma corda sem aspas ele assume que é uma constante não declarado com o mesmo conteúdo como o seu nome e dá um aviso
Einacio

1
Você pode evitar o aviso (e salvar o primeiro .) colocando o Helantes do <?=.
Paŭlo Ebermann

4
@ PaŭloEbermannHel<?=str_rot13("yb jbe")?>ld!
MirroredFate

2
@ PaŭloEbermann Eu diria que usar isso é como trapaça, já que não é mais puro PHP.
Vereos

13

Violino HTML - 21 caracteres

Hel&#108;o World!<br>

Isso inclui a nova linha à direita?
Josh

Doh ... perdeu esse requisito! Vou adicionar uma foto lá.
precisa saber é o seguinte

7
@netinept: Ele pediu uma nova linha, não um \n, então eu diria que <br>a contagem
Chris

1
Mas o personagem ré repetido na solução. Interpretei mal os requisitos?
Javatarz

2
"l" e "o" também, mas cada caractere pode ser usado duas vezes no máximo.
xem

12

Ruby: 27 caracteres

puts [:Hel,'o wor',"d!"]*?l

Exemplo de execução:

bash-4.1# ruby <<ENDOFSCRIPT
> puts [:Hel,'o wor',"d!"]*?l
> ENDOFSCRIPT
Hello world!

Ruby: 25 caracteres

(Baseado no comentário de Vache.)

puts 'He'+?l*2+"o world!"

Ruby: 23 caracteres

(Cópia da resposta do PowerShell de Danko Durbić .)

puts"He#{?l*2}o world!"

puts 'He'+'l'*2+'o world!'é um personagem mais curto!
dee-see

3
Mas tem 6 "'"' s ...
manatwork

haha, eu estava tão focada nos caracteres das letras que nunca percebi isso. deixa pra lá!
dee-see

1
Remova o espaço após os putos e faça-o 23. #puts"He#{?l*2}o world!"
Zero Fiber

1
@ SampritiPanda, pinclui aspas na saída. Eu prefiro manter rigorosamente o formato de saída necessário. Mas você está certo, o espaço não é necessário. Obrigado.
manatwork

12

JavaScript, 66 caracteres

alert('Hel'+window.atob("\x62G8gd29ybGQhCg=="));//rH+in.\x689yQhC;

Inspirado no FireFly, todos os caracteres usados ​​por esse código são usados ​​exatamente duas vezes.


Acho que você tem permissão para usar alguns caracteres apenas uma vez e pode deixar o comentário.
John Dvorak

2
@JanDvorak - bem, com certeza ele poderia ter feito dessa maneira -, mas acho que essa solução merece um voto positivo pela pura disposição de usar cada personagem exatamente duas vezes. :-)
Bob Jarvis

6
+1, mas é fácil usar cada caractere exatamente duas vezes se você apenas adicionar sem sentido como comentário.
Camilo Martin

11

C - 43 caracteres

main(){printf("Hel%co World!%c",'k'+1,10);}

Resultado

Hello World!

Contagem de caracteres

' ' Count: 1    '!' Count: 1    '"' Count: 2    '%' Count: 2    ''' Count: 2
'(' Count: 2    ')' Count: 2    '+' Count: 1    ',' Count: 2    '0' Count: 1
'1' Count: 2    ';' Count: 1    'H' Count: 1    'W' Count: 1    'a' Count: 1
'c' Count: 2    'd' Count: 1    'e' Count: 1    'f' Count: 1    'i' Count: 2
'k' Count: 1    'l' Count: 2    'm' Count: 1    'n' Count: 2    'o' Count: 2
'p' Count: 1    'r' Count: 2    't' Count: 1    '{' Count: 1    '}' Count: 1

Você não precisa mainetc?
FireFly

@FireFly Acho que sim! Dizia para escrever um programa.
precisa saber é o seguinte

Isso é C, mas não C ++. C ++ não tem int implícito (e você não pode poupar outro i).
Ben Voigt

@BenVoigt Okie dokie!
precisa saber é o seguinte

9

JavaScript [37 bytes]

alert(atob("SGVsbG8g")+'wor\x6cd!\n')

Muito primitivo, não é?


5
Onde está a nova linha?
Christopher Creutzig

@ChristopherCreutzig Desculpe, esqueci. Agora está no lugar.
VisioN

9

nginx.conf

return  200 "He&#x6clo wo&#x72ld!\n";

Em ação:

% curl -6 http://localhost/ | lynx -dump -stdin
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    21  100    21    0     0  20958      0 --:--:-- --:--:-- --:--:-- 21000

   Hello world!

%

Existem 4 espaços nesta solução ...
Josh

3
@ Josh, na verdade, existem 5. Mas você não poderia considerar que duas das quatro primeiras são guias e, em seguida, a última é um espaço inquebrável? :-)
cnst 17/01/14

Isso funciona para mim!
Josh

@ Josh, na verdade, agora que estamos usando HTML, não há mais necessidade set. Agora só tem 3 espaços, qualquer um dos quais pode ser uma guia!
CNST

Muito bem feito.
Josh

9

Comando Emacs (15 pressionamentos de teclas)

He<Ctrl-3>l<Left>o wor<End>d!<Enter>

Se essa resposta do vim for legal, isso também deve ser :)

Brincadeiras à parte, macro pode se tornar muito :)

Mais bobagens à parte, provavelmente posso espremer um pouco mais, mas isso parece ser bom o suficiente por enquanto (já que ele supera o vim).

PS, por favor, ignore todas as minhas bobagens (eu (raramente, mas) uso o vim também!).


2
Eu ainda acho que vim> emacs.
Joe Z.

6

Befunge 98

a"!dlrow ol":'e'Hck,@

Aqui está uma versão em que cada personagem aparece duas vezes.

bka!e:dw"H@!dlrow  ol":'e'Hbk,a,@

Deixa um monte de lixo na pilha.

Como bônus, todo personagem tem algo a fazer com o IP.


6

Malbolge

(=<`#9]~6ZY32Vw/.R,+Op(L,+k#Gh&}Cdz@aw=;zyKw%ut4Uqp0/mlejihtfrHcbaC2^W\>Z,XW)UTSL53\HGFjW

Infelizmente, isso parece imprimir Hello, world.em vez de Hello world!\n:( Experimente online! Impressionante, mas inválido.
DLosc

5

Na verdade, eu não gosto de trapacear: P

Pitão

print("!dlrow os%eH"[::-1]%('l'*2))

2
Você deve especificar que é para python2. Em python3, você obtém a string invertida como saída e, em seguida, a TypeError.
Bakuriu 18/01/14

1
Para uso no Py3K, o argumento de impressão deve estar entre parênteses. print("!dlrow os%eH"[::-1]%('l'*2))trabalhe em ambas as versões (Python2 e Py3K).
AMK

4

GolfScript

'He

o world!'n/"l"*

Substitui duas novas linhas (felizmente a terceira, necessária para a substituição, é fornecida pelo interno n), usando os dois tipos de literal de cadeia para evitar cópias quadruplicadas de aspas. Como lé o único caractere que ocorre mais de duas vezes na string original, não é muito difícil.


Você esqueceu o "!".
Howard

@ Howard, perdi. Opa
Peter Taylor

A letra o é repetida também
Adam Speight

1
@ AdamSpeight: Há apenas o dobro da letra o. As regras dizem que não é permitido ter um personagem mais do que duas vezes .
precisa saber é o seguinte

4

Hmm.

Em C, dadas essas regras, só podemos ter uma #define(por causa de ie n) e no máximo duas chamadas de função OU definições ( (e )).

Presumo que exista apenas uma maneira de fazer isso (embora eu provavelmente esteja errado):

main(){puts("Hello w\x6fr\154d!");}

Você ainda precisa gerar a nova linha à direita. Fazendo este desafio em C é difícil ...
Josh

1
@ Josh eu só tenho que usar em puts()vez de printf().
Oberon

2
Mas o que há de errado oem world?
VisioN 17/01

@VisioN Em um rascunho antigo do mesmo código (antes de eu perceber como era realmente difícil escrever um programa assim), usei outro 'o' em outro lugar. Mas isso não é código-golfe , então acho que não precisa ser corrigido.
Oberon

4
Na verdade, não sei por que todas as respostas estão exibindo uma contagem de caracteres.
Oberon

4

BATER

printf 'Hel\x6co world!\n'

Cred @manatwork

echo $'Hel\x6c\x6f world!'

O primeiro tem 3 "e" e 3 "o".
manatwork

@ manatwork: Mordaça; thanx;)
Runium

Em Bash pode pular -eusando o especial $'…'sintaxe: echo $'Hel\x6c\x6f world!'.
manatwork

4

C - 46 caracteres

main(){printf("He%clo wor%cd!\x0d",'l',108);}

Imprime:

Olá Mundo!


Se você está buscando golfe, main(){printf("He%clo world!%c",108,10);}deve funcionar e economiza alguns caracteres.
FireFly 17/01

@ FireFly você está certo, você me salvaria 3 caracteres. Sua sugestão também funciona perfeitamente.
precisa saber é o seguinte

4

Fuga

No wiki da esolang:

insira a descrição da imagem aqui

E você pode ouvir o código fonte .


11
Eu diria que isso é inválido. Eu posso ver mais de 4 c's médios na mão direita.
Justin

4
Sem mencionar a sequência de quatro G's consecutivos na 9ª medida.
Joe Z.

Você escreveu isso ou apenas o processou? Como você vincula o MIDI do arquivo esolang.
FireFly

4
-1 para plágio. Isto é da esolang wiki . Você não cita. Edit: revertido, agora o wiki da esolang é citado.
Justin

-1 para usar a mesma nota mais de 2 vezes.
Erik the Outgolfer

4

PHP

32 Chars

Observe como não estou usando um caractere mais do que duas vezes, pois l! = L

He<?=strtolower("LLO WOR");?>ld!

Observe também que, apesar do Stack Overflow excluí-lo na representação, há uma quebra de linha após o !.


1
Você está usando três espaços, mas acho que isso pode ser corrigido removendo os próximos às tags PHP! : P
Vereos

1
Isso foi rápido, embora eu percebi antes de ler o seu comentário (de outra resposta na verdade)
Francisco Presencia

A saída "H" não deveria estar em maiúsculas?
David Cary

Completamente verdade, também perdi isso:
Francisco Presencia 18/01

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.