¡Hola Mundo! con repetición limitada de caracteres


79

En el idioma que elija, escriba un programa que muestre exactamente los caracteres Hello world!seguidos de una nueva línea. El código:

  • no debe usar ningún carácter más de dos veces (alfanumérico, símbolo, espacio en blanco ... cualquier cosa)
  • no debe usar ningún recurso externo
  • no debe usar ninguna entrada del usuario
  • no debería generar nada más

Un ejemplo de un programa válido de Python:

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

Un ejemplo de un programa de Python no válido (el carácter 'r' se usa tres veces):

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

El ganador es el que tiene más votos después de 14 días.

EDITAR: ¡Se ha elegido un ganador! ¡Gracias a todos por su trabajo en esta pregunta!


25
¿Qué pasa con la letra o repetida en el ejemplo "válido" de Python? También hay estos: - "'()
Adam Speight

15
@AdamSpeight, ¿qué quieres decir? La letra solo se usa dos veces, según las especificaciones.
Josh

55
@AdamSpeight ... que es literalmente lo mismo.
VisioN

44
Creo que quieres decir que un personaje no debería aparecer más de dos veces, es decir, no debería repetirse más de una vez.
Michael Kay

56
Supongo brainfuck está fuera de la cuestión ...
jub0bs

Respuestas:


61

Rubí (1.9+)

Dado que este es un concurso de popularidad, tratemos de no usar CUALQUIERA de los personajes de '¡Hola mundo!' mientras sigue usando otros caracteres solo un máximo de dos veces:

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

Son 40 caracteres por cierto.

Golpetazo

Y este usa magia unicode.

Notas:

  • Mientras que los caracteres originales aparecen en otro lugar (a diferencia del ejemplo de ruby), la cadena impresa contiene solo caracteres que no son ascii.
  • Dos de los tres espacios son en realidad pestañas, por lo que no hay caracteres utf-8 que aparezcan más de 2 veces
  • Como binario, algunos de los octetos aparecen más de 2 veces, con suerte eso no va en contra de las reglas. Sin embargo, estoy tratando de resolverlos.

Código:

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

Para aquellos que no tienen una fuente adecuada instalada, se ve así:

codificar como imagen

Aquí está el 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

Debe ejecutarlo en una máquina donde el juego de caracteres predeterminado es utf-8. Probé con un OSX10.8 usando iTerm2 con el siguiente entorno:

bash corriendo en iTerm2

PHP 5.4

Esto usa zLib: (desafortunadamente usa los caracteres ey 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

Aquí está el código ruby ​​2.0 que usé para probar duplicados:

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
Si bien siempre aprecio la inteligencia de Unicode, su intento de bash no parece satisfacer la especificación de la pregunta. "escribir un programa que muestre exactamente los caracteres Hello world!seguidos de una nueva línea"
FireFly

14
@FireFly: lo satisface. iconv con la codificación de destino ascii//translittransliterará los caracteres unicode a ascii básicos. Y, por supuesto, echo agregará la nueva línea, por lo que esta se ajusta a la especificación (si no consideramos la similitud de los octetos)
SztupY

55
En mi sistema obtengo en Hello World?lugar deHello World!
marinus

1
@SztupY oh, tienes razón, mi mal. Muy inteligente, me gusta!
FireFly

1
¿Cuántos puntos de bonificación obtendría si su verificador de duplicados también se ajustara a la especificación de repetición? :-)
corsiKa

55

Tienes que usar lenguajes más expresivos.

Chino,  6 4   3 caracteres

喂世!

Ejecutar google translate en esto produce Hello world!

(gracias @sreservoir y @Quincunx por la actualización)


33
+1 por flexión de reglas ... "En el idioma que elija ..."
WallyWest

44
Quiéralo. Pero, ¿cómo es exactamente eso un programa?
Pierre Arlaud

3
En realidad, puede verlo como un programa en un idioma de traducción de Google, para el chino como su idioma secundario :)
Tomás

2
+1. Buena idea. 世界 = Shì jiè = Mundo. 你好 = nǐ hǎo = Hola. "Mundo, hola!" se traduce como "¡Hola mundo!". Se puede jugar un poco más:你好世!
Justin

2
se puede jugar más golf a 喂世!expensas de ... bueno, nada más se está gastando realmente.
Muhmuhten

45

HQ9 +, 1 char

H

manteniéndolo simple :)


77
Sin embargo, HQ9 + genera una coma;)
Josh

8
Todavía mantendría tu respuesta ... después de todo, es un concurso de popularidad, ¡las reglas son para el viento!
Josh

26
@ Josh Este es uno de los raros eventos en los que extraño el botón de voto negativo en los comentarios. Si desechamos las reglas, no queda nada para justificar el concurso.
Howard

55
@Howard me siento sucio. Voté el suyo y el comentario de Josh
Cruncher

22
Todas las print Hello Worldpreguntas son en realidad who can submit a HQ9+ answer fasterpreguntas.
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 esto no es golf, decidí divertirme e intentar usar cada personaje exactamente dos veces (mientras pongo la menor cantidad posible en un comentario, porque eso es aburrido). Me doy cuenta de que no lo hice terriblemente bien, ya que mi código también contiene una tonelada de código aburrido "muerto" (no en el sentido literal, sino en el sentido de los caracteres de marcador de posición utilizados para cumplir el requisito). De todos modos, esto fue sorprendentemente difícil (pero divertido) con la limitación de dos caracteres, por lo que desafortunadamente no pude encontrar nada más interesante. Sin embargo, me dio una idea para un nuevo problema ...

(Actualizado según el comentario de @ ugoren).


3
Creativamente impresionante. Me gusta.
Josh

La barra inclinada `\` que termina las líneas tres y cuatro hace que sea una continuación de línea, no una nueva línea. Y la línea cuatro es terminada por un EOF, haciéndolo legal.
Josh

1
Creo que puedes descomentarlo fácilmente .al usarlo para fracciones. También puede declarar una matriz y usarla [].
Ugoren

@ugoren buena llamada sobre .; Solo pensé en usarlo para el acceso a la estructura. <s> En cuanto a las declaraciones de matriz, estoy fuera de ,s debido a la printfllamada, y también estoy fuera de ;s, así que no estoy seguro de cómo podría declarar una. </s> Duh, podría reemplazarla ATION_. ..
FireFly

44

Comando Vim (18 pulsaciones de teclas)

iHeEsc3alEscio WorRightd!Enter

No repite ninguna tecla más de dos veces.

Es un poco viola la regla de "entrada del usuario", ya que sigue siendo el usuario que necesita de entrada de esa secuencia, pero supongo que si lo guarda como una macro o un nnoremap de antemano que sería contar, ya que sólo está funcionando sin hacer explícita cualquier entrada para que esto suceda.

También requiere nocompatibleque se configure, lo que puede contar como el uso de recursos externos, por lo que he proporcionado otra variación a continuación:


Comando Vim (21 pulsaciones de teclas)

iHeEsc3alEscio WorCtrl+[$ad!Enter

Esta variación no requiere nocompatibleser establecida, aunque funciona usando Esctres veces al usarla Ctrl+[en su lugar.


16
Si usted está hablando de los personajes Right, Escy Enter, no lo son, literalmente, esos caracteres. Vim se ocupa de las pulsaciones de teclas, que considero equivalentes a los personajes para los fines de este concurso (y la regla "no repetir más de dos veces"). Solo uso la itecla dos veces, y la <Right>tecla una vez. En cuanto a E, nunca lo uso, pero lo uso <Esc>dos veces y <Enter>una vez.
Joe Z.

66
Ahora estoy decepcionado de que Emacs no tenga un comando Mx hello-world ...
RemcoGerlich

44
Incluso si así fuera, son tres ls.
Joe Z.

1
Debe tener en cuenta que tiene que hacerlo :set nocompatible.
jazzpi

1
Increíble, pero a mí mismo me parece que Rightno uso muy vim-y.
gefei

29

Piet-- ¡Sin personajes en absoluto!

Hola mundo en Piet


77
Consideraría los códeles como "personajes".
Paŭlo Ebermann

3
@ PaŭloEbermann ¿Qué considerarías que es un códec único? Por ejemplo, diferentes formas? ¿colores? tamaños? alguna combinación de los mismos?
ApproachingDarknessFish

1
@ValekHalfHeart la definición de un codel único se da en las especificaciones del lenguaje : es un bloque de codel que podría simplificarse como un solo píxel de color.
plannapus

@plannapus En ese caso, este desafío no es técnicamente posible en Piet. Sin embargo, puedo pensar en algo creativo.
ApproachingDarknessFish

@ValekHalfHeart oh, no fue una crítica de esta respuesta: ¡me encanta! Este desafío no fue un codegolf de todos modos.
plannapus

26

Perl, 29 caracteres

¡Esta respuesta incluye zuecos con clasificación x!

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

Perl, 23 caracteres

Más corto, pero no zapatos porno. :-( Sin embargo, la misma idea básica ...

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

Perl, 20 caracteres.

Aburrido...

say"Hello Wor\x6Cd!"

77
Um ... rizado? +1 :)
Josh



18

Scala: 34 29 caracteres

Estoy orgulloso de mí mismo por este:

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

Me costó mucho superar los duplicados 'l', 'r', comillas y corchetes. Luego descubrí la antigua printffunción de Java , que felizmente convertirá números en letras cuando se le dé el %cespecificador de formato.

Actualizar

¡MrWonderful hizo algo maravilloso al señalar que se pueden guardar un montón de caracteres usando mi segunda 'l' manualmente en la cadena!

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

44
@KCaloux, dado que se le permiten hasta 2 'l's, ¿no sería mejor imprimir f ("Hel% co world \ n", 108) a los 28?
MrWonderful

@ MrWonderful ¡Creo que tienes toda la razón! (También me di cuenta de que olvidé incluir el '!')
KChaloux

Por lo que entiendo, esta no es una entrada válida, aunque es un buen intento. printfcontiene un rcomo lo hace world. Lo mismo ocurre con la letra oque se usa más de una vez. Esto se basa en mi interpretación de la siguiente declaración del OP "Un ejemplo de un programa de Python no válido (el carácter 'r' se usa tres veces): print("Hel"+chr(108)+'o world!')"
javatarz

@JAnderton Tenía un programa ruby ​​que analizaba mi script para asegurarme de que no se incluían caracteres más de dos veces. Leelo de nuevo. Hay 2 rs, no 3. Uno en "printf" y uno en "world". La razón por la que Python chr
One

16

Python 3 [38 bytes]

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

No lo consideraría import __hello__como un recurso externo.


15

Perl: 34 caracteres

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

Ejecución de muestra:

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

(No es gran cosa. Publicado solo para usar al menos una vez en mi vida s///con esos delimitadores elegantes).


15

PHP, 33 caracteres

¡Me encanta cuánto perdona y entiende PHP!

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

Antes de que se eliminara (o si todavía está allí, estoy totalmente ciego), vi un comentario que decía "No brainf * ck?: D". Bueno, es casi imposible escribir una solución en BrainF * ck, como sabes. Pero logré codificar esto, solo para el lulz.

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

Si no tiene un intérprete BF, el código anterior solo imprime el PHP: P


¡Ni siquiera sabía que un código como este es válido! La etiqueta Php no está cerrada y la cadena Helno está entre comillas. Además, nunca str_rot13antes había oído hablar de él .
Aycan Yaşıt

1
@ AycanYaşıt la etiqueta php de cierre no es necesaria en EOF, y si pones una cadena sin comillas, supone que es una constante no declarada con el mismo contenido que su nombre y da una advertencia
Einacio

1
Puede evitar la advertencia (y guardar la primera .) colocando Helantes de <?=.
Paŭlo Ebermann

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

2
@ PaŭloEbermann Yo diría que usar eso es como hacer trampa, ya que ya no es PHP puro.
Vereos

13

HTML Fiddle - 21 caracteres

Hel&#108;o World!<br>

¿Eso incluye la nueva línea final?
Josh

Doh ... se perdió ese requisito! Agregaré una imagen allí.
Briguy37

77
@netinept: pidió una nueva línea, no una, \nasí que diría que <br>cuenta
Chris

1
Pero el personaje rse repite en la solución. ¿Interpreté mal los requisitos?
javatarz

2
"l" y "o" también, pero cada carácter puede usarse dos veces como máximo.
xem

12

Rubí: 27 caracteres.

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

Ejecución de muestra:

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

Rubí: 25 caracteres.

(Basado en el comentario de Vache).

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

Ruby: 23 caracteres

(Copia de la respuesta Powershell de Danko Durbić ).

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

puts 'He'+'l'*2+'o world!'es un caracter mas corto!
dee-see

3
Pero tiene 6 "'"' s ...
manatwork

jaja, estaba tan concentrado en los caracteres de letras que nunca me di cuenta de eso. ¡no importa!
dee-see

1
Elimina el espacio después de los puestos y hazlo 23. -puts"He#{?l*2}o world!"
Zero Fiber

1
@SampritiPanda, pincluye citas en la salida. Prefiero mantener estrictamente el formato de salida requerido. Pero tienes razón, el espacio no es necesario. Gracias.
manatwork

12

JavaScript, 66 caracteres

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

Inspirado por FireFly, todos los caracteres utilizados por este código se usan exactamente dos veces.


Creo que puedes usar algunos caracteres solo una vez, y puedes dejar el comentario.
John Dvorak

2
@JanDvorak, bueno, seguro que podría haberlo hecho de esa manera, pero creo que esta solución merece un voto positivo por la pura mentalidad sangrienta de usar cada personaje exactamente dos veces. :-)
Bob Jarvis

66
+1, pero es fácil usar cada personaje exactamente dos veces si solo agregas galimatías como comentario.
Camilo Martin

11

C - 43 caracteres

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

Salida

Hello World!

Recuentos de personajes

' ' 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

¿No necesitas mainetc.?
FireFly

@FireFly, supongo que sí. Dijo escribir un programa.
Kirk Backus

Eso es C pero no C ++. C ++ no tiene int implícito (y no puede perdonar a otro i).
Ben Voigt

@BenVoigt Okie dokie!
Kirk Backus

9

JavaScript [37 bytes]

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

Demasiado primitivo, ¿no?


55
¿Dónde está la nueva línea?
Christopher Creutzig

@ChristopherCreutzig Lo siento, lo olvidé. Ahora está en su lugar.
VisioN

9

nginx.conf

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

En acción:

% 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!

%

Hay 4 espacios en esta solución ...
Josh

3
@ Josh, en realidad, hay 5. ¿Pero no podrías considerar que dos de los primeros cuatro son pestañas, y luego el último es un espacio no rompible? :-)
cnst

¡Funciona para mi!
Josh

@ Josh, en realidad, ahora que estamos usando HTML, ya no es necesario set. ¡Esto solo tiene 3 espacios ahora, cualquiera de los cuales podría ser una pestaña!
cnst

Muy bien hecho.
Josh

9

Comando Emacs (15 pulsaciones de teclas)

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

Si ese vim responde es legal, entonces esto también debe ser :)

Bromas aparte, macro puede volverse también :)

Dejando de lado más tonterías, probablemente pueda exprimir un poco más, pero esto parece ser lo suficientemente bueno por el momento (ya que supera a vim).

PD: ignora todas mis tonterías (¡yo (rara vez, pero) también uso vim!).


2
Todavía pienso vim> emacs.
Joe Z.

6

Befunge 98

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

Aquí hay una versión donde cada personaje aparece dos veces.

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

Deja un montón de basura en la pila.

Como beneficio adicional, cada personaje tiene algo que hacer por IP.


6

Malbolge

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

Desafortunadamente, esto parece imprimirse en Hello, world.lugar de Hello world!\n:( ¡ Pruébelo en línea! Impresionante, pero no válido.
DLosc

5

En realidad no me gusta hacer trampa: P

Pitón

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

2
Debe especificar que es para python2. En python3, obtienes la cadena invertida como salida y luego a TypeError.
Bakuriu

1
Para su uso en Py3K, el argumento de impresión debe encerrarse entre paréntesis. print("!dlrow os%eH"[::-1]%('l'*2))funciona en ambas versiones (Python2 y Py3K).
AMK

4

GolfScript

'He

o world!'n/"l"*

Sustituye dos líneas nuevas (afortunadamente, la tercera, necesaria para la sustitución, la proporciona el incorporado n), utilizando ambos tipos de cadenas literales para evitar copias cuadruplicadas de una comilla. Dado que les el único carácter que aparece más de dos veces en la cadena original, no es demasiado difícil.


Olvidaste el "!".
Howard

@Howard, lo perdí. Ups
Peter Taylor

La letra o se repite también
Adam Speight

1
@ AdamSpeight: solo hay el doble de la letra o. Las reglas dicen que no está permitido tener un personaje más de dos veces .
ProgramFOX

4

Hmm

En C, dadas estas reglas, solo podemos tener una #define(debido a iy n) y como máximo dos llamadas a funciones O definiciones ( (y )).

Supongo que hay una sola forma de hacerlo (aunque probablemente estoy equivocado):

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

Aún necesita generar la nueva línea final. Hacer este desafío en C es difícil ...
Josh

1
@ Josh, solo tengo que usar en puts()lugar de printf().
Oberon

2
Pero, ¿qué tiene de malo oen world?
VisioN

@VisioN En un borrador anterior del mismo código (antes de darme cuenta de lo difícil que era escribir un programa de este tipo), utilicé otra 'o' en otra parte. Pero esto no es código de golf , así que supongo que no tiene que arreglarse.
Oberon

44
De hecho, no estoy seguro de por qué cada respuesta muestra un recuento de caracteres.
Oberon

4

GOLPETAZO

printf 'Hel\x6co world!\n'

Cred @manatwork

echo $'Hel\x6c\x6f world!'

El primero tiene 3 "e" y 3 "o".
manatwork

@manatwork: Mordaza; gracias;)
Runium

En Bash puede omitir -eutilizando el especial $'…'sintaxis: echo $'Hel\x6c\x6f world!'.
manatwork

4

C - 46 caracteres

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

Imprime:

¡Hola Mundo!


Si está buscando golf, main(){printf("He%clo world!%c",108,10);}debería funcionar y le ahorrará algunos caracteres.
FireFly

@FireFly tienes razón, me salvarías 3 personajes. Tu sugerencia también funciona perfectamente.
Phillip Kinkade

4

Fuga

De la wiki de esolang:

ingrese la descripción de la imagen aquí

Y puedes escuchar el código fuente .


11
Yo diría que esto no es válido. Puedo ver más de 4 c centrales en la mano derecha.
Justin

44
Sin mencionar la cadena de cuatro G consecutivas en la novena medida.
Joe Z.

¿Escribiste esto o solo lo renderizaste? Dado que se vincula al MIDI del archivo esolang.
FireFly

44
-1 por plagio. Esto es de esolang wiki . No lo citas. Editar: revertido, ahora se cita la wiki de esolang.
Justin

-1 por usar la misma nota más de 2 veces.
Erik the Outgolfer

4

PHP

32 caracteres

Tenga en cuenta que no estoy usando un personaje más de dos veces, ya que l! = L

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

También tenga en cuenta que, a pesar de que Stack Overflow lo elimina en la representación, hay un salto de línea después del ! .


1
Estás utilizando tres espacios, pero supongo que esto se puede solucionar eliminando los que están cerca de las etiquetas PHP : P
Vereos

1
Eso fue rápido, aunque me di cuenta antes de leer su comentario (de otra respuesta en realidad)
Francisco Presencia

¿No se supone que la salida "H" es mayúscula?
David Cary

Completamente cierto, también se lo perdió):
Francisco Presencia

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.