Ciao mondo 0.0!


78

Dilbert è fantastico
fonte: Dilbert, 8 settembre 1992

Spero di aggiungere una nuova svolta al classico "Hello World!" programma.

Codifica un programma che genera Hello World!senza:

  • Letterali stringa / carattere
  • Numeri (qualsiasi base)
  • Funzioni predefinite che restituiscono "Hello World!"
  • Letterali RegEx

Con l'eccezione di "O" e 0.

† "O" è in maiuscolo, "o" non è accettabile.


4
Uno di [code-golf] e [code-challenge] per favore, non entrambi. Il punto di questi tag per aiutare le persone a trovare domande con le regole che vogliono usare. In sostanza ogni domanda su questo sito dovrebbe essere un gioco in un modo o nell'altro.
dmckee,

4
-1 Abbiamo già avuto Obfuscated Hello World e penso che questa sfida sia troppo simile. Avrei votato "chiudi come duplicato", se non fossi un mod.
Chris Jester-Young,

2
@zzzzBov: non credo sia abbastanza diverso da giustificare un'altra domanda nel tema "ciao mondo"; un tema diverso sarebbe stato migliore. Ma questa è solo la mia opinione.
Chris Jester-Young,

1
Penso che questo sia un ottimo codice golf - e migliore di quello precedente.
MtnViewMark

2
Alcune persone sembrano supporre che ciò "O"*significhi che possono avere una stringa letterale con qualsiasi numero di O, incluso zero. Non penso che fosse l'intenzione. Si prega di precisare.
Timwi,

Risposte:


83

Windows PowerShell, troppo

Sì, in effetti, nel corso della giornata abbiamo dovuto scrivere un "Hello world" usando (quasi esclusivamente) zero ...

&{-join[char[]]($args|% Length)} `
O00000000000000000000000000000000000000000000000000000000000000000000000 `
O0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 `
O00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 `
O00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 `
O00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 `
O0000000000000000000000000000000 `
O00000000000000000000000000000000000000000000000000000000000000000000000000000000000000 `
O00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 `
O00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 `
O00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 `
O000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 `
O00000000000000000000000000000000

Su una nota più seria:

Windows PowerShell, 25

Write-Host Hello World!

Nessuna stringa letterale. L'interno Hello World!sembra essere analizzato come una stringa poiché PowerShell è in modalità di analisi degli argomenti lì.


2
Com'è vero ?? O_o
Josh

1
Ho cercato su Internet alcuni esempi o storie di questo. Questo è così strano. Potresti fornire qualche link?
Caleb Jares,

1
"Back in the day". :) Millennials mi spezzate 👍

Oh. Unario. Capisco.
Matthew Roh,

86

C, 327 caratteri

#define O(O)-~O
#define OO(o)O(O(o))
#define Oo(o)OO(OO(o))
#define oO(o)Oo(Oo(o))
#define oo(o)oO(oO(o))
#define O0 putchar
main() {
    O0(OO(oO(!O0(~O(Oo(OO(-O0(~O(Oo(-O0(O(OO(O0(oo(oO(O0(O(oo(oO(OO(Oo(oo(oO(
    O0(oo(oo(!O0(O(OO(O0(O0(O(OO(Oo(O0(O(Oo(oo(oO(O0(oo(oo(oO(oo(oo(0))))))))
    ))))))))))))))))))))))))))))))))))))));
}

Stranamente, non perde la sua bellezza dopo la preelaborazione:

main() {
putchar(-~-~-~-~-~-~-~-~-~-~!putchar(~-~-~-~-~-~-~-~-putchar(~-~-~-~-~-~-
putchar(-~-~-~putchar(-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~putchar(
-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~putchar(-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
-~-~-~-~-~-~-~-~-~-~-~-~-~!putchar(-~-~-~putchar(putchar(-~-~-~-~-~-~-~putchar
(-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~putchar(-~-~-~-~-~-
~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~0))))))))))));
}

2
Eccezionale. Manca il!, Però.
Mark Reed,

1
Questa è vera arte!
Askaga,

Sento che il corpo potrebbe essere abbreviato con ancora più preprocessori. Non sono sicuro se il codice nel suo insieme ne trarrebbe vantaggio.
Zwei,

@Zwei, è certamente possibile accorciarlo. Non ho fatto nessuno sforzo per trovare il set ottimale di macro.
ugoren,

Perché non includi le parentesi nel CLANG #define? salverebbe qualche byte, no? Modifica: non importa, ho appena provato e ora vedo perché non funziona ahaha
Albert Renshaw,

52

BrainFuck, 102 111 caratteri

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

Soddisfa tutte le regole.

Il merito va a Daniel Cristofani .


1
Non riesco a decidere se anche le regole debbano essere dichiarate 0 and/or "O" must be used. È un po 'cattivo con BrainFuck e golfscript, ma non hanno esattamente difficoltà con questa sfida.
zzzzBov

34
@zzzzBov: se devono essere utilizzati, il codice Brainfuck li includerà semplicemente. Tuttavia, non influenzano affatto il programma.
Joey,

38

C, 182 byte

#define decode(c,o,d,e,g,O,l,f) e##c##d##o
#define HelloWorld decode(a,n,i,m,a,t,e,d)
#define Puzzles(flog) #flog
#define CodeGolf Puzzles(Hello World!)
HelloWorld(){puts(CodeGolf);}

1
+ 1, Lol, stai ancora usando il trucco dell'operatore di incollare token! Bel compagno :-)
Quixotic,

35

Programma C - 45

(imbrogliare)

Dal punto di vista lessicale, questo non usa valori letterali di stringa o letterali regex. Sfrutta la funzionalità di stringificazione del preprocessore C. s(x)è una macro che trasforma il suo argomento in una stringa.

#define s(x)#x
main(){puts(s(Hello World!));}

3
Per una nozione molto conveniente di "lessicamente" :) Ma sfacciataggine FTW!
JB

24

Haskell - 143 caratteri

o%y=o.o.o$y;o&y=(o%)%y;o!y=o$o$(o%)&y
r=succ;w=pred;a=r%y;e=r$w&l;l=r!'O';o=r e;u=(w&)&a;y=r%l
main=putStrLn[w!o,o,l,l,y,w u,w$r&'O',y,a,l,e,u]

oy, era lanoso!

Nessun numero, nessuna operazione numerica, variabili rinominate per divertimento.

Alcune esposizioni potrebbero essere belle:

  • o%y, o&ye o!yciascuno applica la funzione oa ypiù volte: rispettivamente 3, 9 e 29 volte. 29?!?! Sì, 29!
  • re wsono il carattere successivo e precedente, che se applicato utilizzando le funzioni di ordine superiore sopra riportate può essere creato per ottenere tutti i caratteri necessari da 'O'.

La sequenza dei salti necessari è:

'O' +29    -> 'l'
'O'  +9 -1 -> 'W'
'l'  -9 +1 -> 'd'
'l'  +3    -> 'o'
'd'  +1    -> 'e'
'o'  +3    -> 'r'
'e' -29    -> 'H'
'r' -81    -> '!'
'!'  -1    -> ' '

  • Modifica: (134 -> 144) Dimenticato di emettere un punto esclamativo, sospiro ....
  • Modifica: (144 -> 143) Rimosso un inutile $, rinominato #in !per Hugs.

1
vero? oo ....
Joey Adams,


@ Nyuszika7H Questo perché il servizio attiva alcune opzioni del compilatore per impostazione predefinita. Dovrebbe compilare con semplice GHC.
FUZxxl,

@ Nyuszika7H Funziona perfettamente con GHC. Il problema è che quel servizio sta usando Hugs dal 2006. Sembra che ci siano due cose che Hugs non può affrontare: 1) Usare '#' come operatore. Passare a "!" lo fa funzionare. 2) Le definizioni di r=succe w=predcontrastano il modo in cui Hugs implementa la restrizione del monomorfismo. Passare a r x=succ xe w x=pred xfarlo funzionare (al costo di 4 caratteri). Questi sembrano essere problemi negli Abbracci.
MtnViewMark,

È ancora valido dopo la modifica di @Community?
Hosch250,

22

Unario , 10 197 1137672766964589547169964037018563746793726105983919528073581559828 byte

Sono sorpreso che nessuno l'abbia ancora fatto ...

È troppo lungo per pubblicare qui, ma sono gli zero di 1137672766964589547169964037018563746793726105983919528073581559828 .

O, più facilmente, leggi: ~ 10 67 zero.

Grazie a @dzaima per aver salvato 10 197 byte


2
Quando ho letto "Una volta ho scritto un intero database usando solo zero", il mio primo pensiero è stato "deve averlo fatto in modo unario". +1 per essere l'unica risposta a funzionare esattamente come ha fatto il fumetto
Cyoce,

21

Mathematica 12 caratteri

Solo simboli, niente stringhe.

Hello World!   

Il ! è un operatore fattoriale, ma poiché i simboli Hello e World non sono definiti, restituisce l'input invariato.

Se modifichiamo un po 'il programma:

Hello=2;
World=3;
Hello World!  

Quindi stampa 12(2 * 3!)


16

assembly i386 (Linux, sintassi gcc), 440 442 435

Oggi è il mio giorno dell'assemblea, e dopo ne avrò abbastanza per un po '. Mi sono concesso il numero 128, vedi sotto il programma per la discussione del perché. Niente di straordinario: sto solo codificando "Hello World!" come codici operativi di assemblaggio in cui ciò aveva senso senza costanti numeriche e riempiva il resto di aritmetica.

#define M mov
M $0,%ecx;inc %cx;M %ecx,%ebx;inc %cx;M %ecx,%eax;add %ax,%ax
M %ecx,%edx;shl %cl,%dx;M (e),%ch;add %dl,%ch;dec %ch;M %ch,(l)
M %ch,(j);M %ch,(z);M $0,%ch;shl %cl,%edx;M %dl,(s);inc %dl
M %dl,(b);M (o),%dl;M %dl,(u);add %al,%dl;dec %dl;M %dl,(r)
M $m,%ecx;M $n,%edx;int $c;M %ebx,%eax;M $0,%ebx;int $c
.data
m:dec %eax;e:gs;l:es;j:es;o:outsl (%esi),(%dx)
s:es;push %edi;u:es;r:es;z:es;fs;b:es;n=.-m
t=(n+n)/n;c=t<<(t*t+t)

(assemblare con gcc -nostartfiles hello.S -o hello, possibilmente a -m32seconda dell'arco)

Perché la tolleranza per 128? Ho bisogno di syscalls per mostrare effettivamente qualsiasi cosa; I syscall di Linux sono su INT 80h (128 decimali); l'unico formato di operando per INT è immediato, quindi non è possibile avere altro che una costante (al codice) lì. Ho potuto (dopo ricevo sobria) tentare di esprimerlo in funzione di altre costanti simboliche nel codice, probabilmente n , ma che sta diventando molto noioso per non molto guadagno. Ho letto il vincolo sui numeri come un modo per prevenire la codifica ASCII, e questo non è sicuramente quello che sto facendo qui, quindi mi sento abbastanza innocente da inviarlo. (FWIW, ho anche provato il codice di auto-modifica, ma questo è stato confuso) Ora non ne sono rimasti neanche 128. Il codice è puro!

  • Edit1 riformattato per salvare le righe; rimosso un 1 numerico (nessuno se ne è accorto ?!)
  • Edit2 compresso movcon macro CPP; eliminato i rimanenti 128.

6
Ecco come programmano i veri uomini.
Nit

14

Javascript - 305

Un po 'lungo ma mi piace il metodo usato.

O=0;O++;O=O.toString();alert([O+0+0+O+0+0+0,0+O+O+0+0+O+0+O,O+O+0+O+O+0+0,O+O+0+O+O+0+0,O+O+0+O+O+O+O,O+0+0+0+0+0,O+0+O+0+O+O+O,O+O+0+O+O+O+O, O+O+O+0+0+O+0,O+O+0+O+O+0+0,O+O+0+0+O+0+0,O+0+0+0+0+O].map(function(e){O=0;O++;O++;return String.fromCharCode(parseInt(e,O))}).reduce(function (a,b){return a+b}))

Mi piace. Sarebbe meglio con parametri di funzionamento come OO, OOOma, naturalmente, che renderebbero più.
zzzzBov,

Veramente bello. Il ', new String ()' deve essere lì alla fine? Sembra funzionare senza di essa.
Stephen Perelson,

3
Ah, no non lo fa. A volte dimentico quanto Javascript sia debolmente digitato.
david4dev,

Non hai nemmeno bisogno di lasciare 0 bit ('0+') e lo spazio e l'esclamazione hanno due bit 0 rimasti. Riduzione totale di 28 caratteri.
Stephen Perelson,

10

C # (131 caratteri)

141 caratteri 142 caratteri

enum X{Hello,World,A,B=A<<A<<A}class Y{static void Main(){var c=(char)X.B;System.Console.Write(X.Hello.ToString()+c+++X.World+c);}}

Leggibile:

// Define some constants (B = 32)
enum X { Hello, World, A, B = A << A << A }
class Y
{
    static void Main()
    {
        // Generate the space (character #32)
        var c = (char) X.B;

        // Remember that “!” is character #33
        System.Console.Write(X.Hello.ToString() + c++ + X.World + c);
    }
}

2
questo è contorto e carino. Lo adoro.
jcolebrand,

+1 bel modo per generare determinati numeri. Devo ricordarlo!
Igby Largeman,

Programma LINQPad, 102 caratteri:enum X{Hello,World,A,B=A<<A<<A}void Main(){var c=(char)X.B;(X.Hello.ToString()+c+++X.World+c).Dump();}
Cœur

.ToString()-> +""salva alcuni cahrs
Firo

2
@Firo: ... e infrange le regole. (Non sono ammessi valori letterali di stringa.)
Timwi

8

JavaScript, 88

t=!0<<-~-~-~-~!0
r=[]
for(i in{Hello:"O",World:0})r+=i+String.fromCharCode(t++)
alert(r)

99

Mille grazie a @Timwi per i suggerimenti

operatore ternario rimosso:

o={Hello:"O",World:0}
t=!0<<-~-~-~-~!0
c=String.fromCharCode
r=c(0)
for(i in o)r+=i+c(t++)
alert(r)

103
aliasString.fromCharCode

o={Hello:"O",World:0}
t=!0<<-~-~-~-~!0
c=String.fromCharCode
for(i in o)o[i]?r=i+c(t):alert(r+i+c(++t))

117
Commutato if-else in operatore ternario

o={Hello:"O",World:0},t=!0<<-~-~-~-~!0
for(i in o)o[i]?r=i+String.fromCharCode(t):alert(r+i+String.fromCharCode(++t))

125
Sto mantenendo il "O"giusto per avere una "O" nel programma.

o={Hello:"O",World:0},t=!0<<-~-~-~-~!0
for(i in o)if(o[i])r=i+String.fromCharCode(t)
else alert(r+i+String.fromCharCode(++t))

133

o={Hello:"O",World:0},t=!0<<(!0+!0<<!0)+!0
for(i in o)if(o[i])r=i+String.fromCharCode(t)
else r+=i+String.fromCharCode(t+!0)
alert(r)

@Joey, questo è in gran parte il punto.
zzzzBov

@Joey, ho letto sul meta codegolf che si dovrebbe evitare di rispondere alla propria domanda per qualche tempo per incoraggiare gli altri a provare vari approcci diversi. Il mio piano era di decommentarlo in un giorno o due.
zzzzBov

@Joey, al momento non stava lavorando sulla mia macchina e non mi andava di mandarmi una risposta via e-mail quando potevo semplicemente postarla in un commento.
zzzzBov,

@Joey: "Ce ne sono solo cinque" è sbagliato. Chiunque può suggerire una modifica. Basta cliccare su "modifica" tra "link" e "flag" e puoi vedere il codice.
Giovanni

@zzz: "Questo è in gran parte il punto" Chiunque può ancora vederlo. Chiunque può suggerire una modifica facendo clic su "modifica" tra "link" e "flag", che farà apparire la finestra di modifica, rivelando il codice.
Giovanni

7

GolfScript, 63 caratteri

[0))):O.)?O.*-.O.?+)).O.*+((..O+.O(.O+?.O-O*@.O+O.+$.O.*-).O/]+

Cosa, nessuna voce GolfScript ancora?

Questo utilizza un singolo valore letterale numerico 0e una variabile denominata O(che viene utilizzata per memorizzare il numero 3). Tutto il resto è aritmetica e manipolazione dello stack. La stringa Hello World!è costruita dai suoi codici ASCII, carattere per carattere.

Ecco come funziona:

[             # insert start-of-array marker
  0))):O      # increment 0 thrice to get 3, and save it in the variable O
  .)?O.*-     # calculate 3^(3+1) - 3*3 = 81 - 9 = 72 = "H" 
  .O.?+))     # calculate 72 + 3^3 + 1 + 1 = 72 + 27 + 2 = 101 = "e"
  .O.*+((     # calculate 101 + 3*3 - 1 - 1 = 101 + 9 - 2 = 108 = "l"
  .           # ...and duplicate it for another "l"
  .O+         # calculate 108 + 3 = 111 = "o"
  .           # ...and duplicate it for later use
  O(.O+?      # calculate (3-1)^(3-1+3) = 2^5 = 32 = " "
  .O-O*       # calculate (32 - 3) * 3 = 29 * 3 = 87 = "W"
  @           # pull the second 111 = "o" to the top of the stack
  .O+         # calculate 111 + 3 = 114 = "r"
  O.+$        # copy the (3+3 = 6)th last element on the stack, 108 = "l", to top
  .O.*-)      # calculate 108 - (3*3) + 1 = 108 - 9 + 1 = 100 = "d"
  .O/         # calculate int(100 / 3) = 33 = "!"
]             # collect everything after the [ into an array
+             # stringify the array by appending it to the input string

7

Brainfuck, 111 byte

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

Spiegazione dell'algoritmo

Increment cell 0 to 10 (it will be loop counter)
Repeat 10 times ; will stop at cell 0
  Increment cell 1 to 7
  Increment cell 2 to 10
  Increment cell 3 to 3
  Increment cell 4 to 1
Increment cell 1 by 2 and output it ; Thus, output ASCII 72 'H'
etc. for all symbols in 'Hello World!'

Versione più lunga senza loop, 389 byte:

+++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++.+++++++++++++++++
++++++++++++.+++++++..+++.-------------------
---------------------------------------------
---------------.+++++++++++++++++++++++++++++
++++++++++++++++++++++++++.++++++++++++++++++
++++++.+++.------.--------.------------------
---------------------------------------------
----.-----------------------.

Questo è un puzzle di codice-golf, il punto è fare il programma più breve possibile. Parte di ciò comporta la pubblicazione della lunghezza del codice.
zzzzBov

5

Lua 144 97 86 caratteri

Un approccio diverso, basato sul fatto che anche le chiavi della tabella sono stringhe e sul fatto che #Hello == #World == 32 == string.byte '\ n'

e=#"O"t=e+e for k,v in pairs{Hello=0,World=e}do T=t^#k io.write(k,string.char(T+v))end

Soluzione di 145 caratteri

  • nessuna stringa tranne "O" o 0
  • no Regexes
  • nessuna funzione predefinita

Ha fatto la codifica delta dei byte, quindi alcuni numeri primi ecc ecc :)

Versione golfizzata:

e=#"O"d=e+e t=d+e v=d+t z=v+t T=t^d*d^t n=0 for l,m in pairs{T,T/t-z,z,0,d,-T-z,z*z+t*d,T/d,d,-d*t,-t^d,-T+v}do n=n+m io.write(string.char(n))end

ha commentato:

-- without numbers, strings, regex
-- except "O" and 0
e=#"0"
t=e+e --2
d=t+e -- 3
v=d+t -- 5
z=v+t -- 7
n=0
T=t^d*d^t -- 72 = 2^3+3^2
for l,m in pairs{T, --72
T/t-z, -- 29 = 72/2-7
z, --7
0, -- 0
d, -- 3
-T-z, -- -79 = -72 - 7
z*z+t*d, -- 55 = 7*7 + 2*3
T/d, -- 24 = 72/3
d, -- 3
-d*t, -- -6
-t^d, -- -8
-T+v -- -67 = -72+5
} do
    n=n+q[k]
    io.write(string.char(n))
end

Modifica: modificate più stringhe O e trovate altre ottimizzazioni.


"O" * - Penso che il * fosse per la nota a piè di pagina, non "un numero qualsiasi di O
RomanSt

Bene, regex'ing è quello che faccio naturalmente: p. Potrebbe sostituirlo al costo di 5 o 3 caratteri extra rispettivamente per la prima e la seconda soluzione
jpjacobs,

Ma comunque, li modificherò, grazie per il testa a testa
jpjacobs il

Hello e World nel costruttore di tabelle sono ancora letterali stringa - questo è solo uno zucchero sintatico.
Oleg V. Volkov,

5

Python ( 126 130)

O=ord("O")
N=O/O
T=N+N
R=N+T
E=T**R
E<<T
print'O'[0].join(chr(c+O)for c in[N-E,E*R-T,_-R,_-R,_,N-_-E-E,E,_,_+R,_-R,E*R-R,T-_-E-E])

Il letterale ''non è permesso.
Roman,

1
@romkyns: molto vero, risolto.
Hoa Long Tam,

5
Non risolto (output errato). Probabilmente stai pensando [:0].
WolframH,

5

J, 250

oo=:#a.
o0=:<.o.^0
o0o=:%:%:%:oo
ooo=:p:^:(-*oo)
o=:<.(^^^0)*(^^0)*(^^0)
o00=:o,~(,[)o0(**(**[))o0o
oo0=:*/p:(!0),>:p:!0
echo u:(o0(**(**]))o0o),(ooo ooo ooo(o.o.^^^0)*oo),o00,(+:%:oo),(oo0-~!p:>:>:0),o,(<.-:o.o.^o.^0),(>:p:(]^])#o00),(*:#0,#:oo),oo0

Mi sono divertito troppo con questo, e ho imparato un po 'più di J all'avvio. Inoltre, ooo ooo ooopotrebbe essere il codice più stupido che abbia mai scritto.


5

QR con mezzo blocco (169) 121 caratteri

Con QR-Code usando i caratteri di mezzo blocco UTF-8:

▗▄▄▄▗▄▖▗▄▄▄  
▐▗▄▐▝█▙▐▗▄▐  
▐▐█▐▝▄ ▐▐█▐  
▐▄▄▟▗▗▗▐▄▄▟  
▗▗▖▄▞▝ ▗ ▖▄  
 ▟▜ Code ▀▟  
 ▙▀ Golf ▘▚  
▗▄▄▄▐▗▘▟▙▝▝  
▐▗▄▐▝▀▛▘▘█▖  
▐▐█▐▐▖▐▝▖▜▘  
▐▄▄▟▗ ▌█▛▗▝  3

Sfortunatamente, questo non renderà bene lì. C'è un piccolo frammento con un foglio di stile appropriato, ma .. No! La lingua qui presentata non è HTML! La lingua presentata qui è il codice QR ! (HTML e CSS vengono utilizzati qui solo per aggirare il bug di presentazione!)

QR con mezzi blocchi (169)

  ▛▀▀▌▚▝▐▀▌▛▀▀▌
  ▌█▌▌▖▞▚▚▘▌█▌▌
  ▌▀▘▌ ▚▛▞ ▌▀▘▌
  ▀▀▀▘▚▌▙▘▌▀▀▀▘
  ▄▙▛▚▜▀▄▀█▖▝▄▌
  ▖▄▄▘▖▄▄▄▟▗ ▀▘
  ▜Code  golf!▌
  ▚▟▘▘▝▙▛▚▐▀▖▜▘
  ▘▘ ▀▛▗▚▗▛▀▌▄ 
  ▛▀▀▌▟▌▜▖▌▘█▐▘
  ▌█▌▌▘█▌▟█▜▙▐ 
  ▌▀▘▌▚▌▌█▗▝▌▚▘
  ▀▀▀▘ ▝▘▘▀▀▀▀▘

In teoria, questo potrebbe apparire come:

QR: Ciao mondo!


Usa il tuo smartphone per vedere questo o zbarsu Linux. (esempio: xwd | xwdtopnm | zbarimg /dev/stdin)
F. Hauri

Code golf!Un personaggio non è letterale?
ugoren,

2
In realtà penso che questa risposta, sebbene creativa, non si qualifica perché non è un programma. QR è un modo per codificare i dati, non un linguaggio di programmazione.
ugoren,

1
E che dire di lingue come postscript, svgo altre lingue di presentazione già utilizzate lì !? Un modo per codificare è comunque una lingua ... penso!
F. Hauri,

1
Ho usato HTML (meno JS) come esempio per ciò che non è una lingua. Lo stesso vale per QR. Vedi questi criteri .
ugoren,

4

Scala ( 357 423 361 caratteri)

Purtroppo non è la risposta più breve, ma spera di ottenere punti bonus per il maggior uso di 'O'e'0'

def h(){type t=scala.Char;def OO(c:t)={(c-('O'/'O')).toChar};def O(c:t)={OO(OO(OO(c)))};def O00(c:t)={(c+('O'/'O')).toChar};def O0(c:t)={O00(O00(O00(c)))};val l=O('O');val z=O0(O0(O0(O0(O0(O0(O0(O0(O0(O0(O0(0)))))))))));print(OO(O(O('O'))).toString+(OO(O(O(O('O')))).toString+l+l+'O'+OO(z)+O0(O0(O0(OO('O'))))+'O'+O0('O')+l+OO(OO(O(O(O('O')))))+z).toLowerCase)}

In precedenza:

def h(){type t=scala.Char;print(OO(O(O('O'))).toString+(OO(O(O(O('O')))).toString+O('O')+O('O')+'O'+OO(O0(O0(O0(O0(O0(O0(O0(O0(O0(O0(O0(0))))))))))))+O0(O0(O0(OO('O'))))+'O'+O0('O')+O('O')+OO(OO(O(O(O('O')))))+O0(O0(O0(O0(O0(O0(O0(O0(O0(O0(O0(0)))))))))))).toLowerCase);def OO[Char](c:t)={(c-('O'/'O')).toChar};def O[Char](c:t)={OO(OO(OO(c)))};def O00[Char](c:t)={(c+('O'/'O')).toChar};def O0[Char](c:t)={O00(O00(O00(c)))}}

Vecchia versione (illegale):

def h(){type t=scala.Char;print(""+OO(O(O('O')))+(""+OO(O(O(O('O'))))+O('O')+O('O')+'O'+OO(O(O(O(O(O('0'))))))+O0(O0(O0(OO('O'))))+'O'+O0('O')+O('O')+OO(OO(O(O(O('O')))))+O(O(O(O(O('0')))))).toLowerCase);def O0[Char](c:t)={O00(O00(O00(c)))};def O[Char](c:t)={OO(OO(OO(c)))};def OO[Char](c:t)={(c-('O'/'O')).toChar};def O00[Char](c:t)={(c+('O'/'O')).toChar}}

Credo che la stringa vuota ( "") e le stringhe / i caratteri letterali contenenti il ​​carattere zero ( '0') non siano consentiti. Sono solo la stringa "O"(maiuscola O) e il numero 0.
Timwi,

Bugger. Sono state necessarie alcune modifiche ...
Gareth,

4

C (o C ++) (segmento del corpo: 49) (barare)

durante la compilazione, compilare in un binario chiamato Hello\ World\!, il codice è:

#include <stdio.h>
#include <string.h>
int main(int i,char**a)
{
  int j=i+i,k=j<<j;puts(strrchr(*a,'O'-(k<<j))+i);
}

Il strrchrsegmento è necessario per rimuovere il percorso completo nel caso in cui il nome del programma passato contenga il percorso completo, inoltre non è necessario passare argomenti .

La tipica riga di compilazione potrebbe essere: gcc -o Hello\ World\! foo.c


3

C ++, 141, 146

La prima volta che provi uno di questi, probabilmente può essere migliorato ancora un po ':

char o='O'/'O',T=o+o,X=T+o,f=T+X,t=f+f,F=t*f,h=F+F,l=h+t-T,O=l+X;
char c[]={F+t+t+T,h+o,l,l,O,o<<f,h-t-X,O,l+f+o,l,h,0};
cout<<c;

MODIFICARE:

Ho rubato il trucco della divisione da un altro post, non posso credere che non ci abbia pensato :(


1
Tecnicamente dovresti includere l'intero programma di lavoro nel conteggio dei personaggi, inclusi elementi come main, eventuali librerie incluse std::, ecc
Ecc.

3

Haskell - 146

a:b:c:f:g:s:j:z=iterate(\x->x+x)$succ 0
y=[f+j,d+a,c+s+h,l,a+b+l,s,f-s+o,o,a+b+o,l,l-f,a+s]
[h,e,l,_,o,_,w,_,r,_,d,x]=y
main=putStrLn$map toEnum y

Ho pensato che il pattern matching avrebbe dato a Haskell un enorme vantaggio, in particolare perché puoi inizializzare i poteri di due in questo modo:

one:two:four:eight:sixteen:thirty_two:sixty_four:the_rest = iterate (*2) 1

Tuttavia, come si vede nella risposta Haskell di MtnViewMark (che merita molti molti voti, tra l'altro) e altre risposte, è possibile ottenere una migliore compressione usando più di solo +e -.


3

Clojure - 46 caratteri

(map print(butlast(rest(str'(Hello World!)))))

Si noti che Helloe World!sono i simboli, non letterali di qualsiasi tipo.


3

C ++

/*
Hello World!
*/
#define CodeGolf(r) #r
#include<iostream>
using namespace std;
int main()
{
    char str[*"O"];
    freopen(__FILE__,CodeGolf(r),stdin);
    gets(str);gets(str);puts(str);
}

1
Il 100viola la regola sui numeri. Si prega di sostituirlo con qualcosa di più divertente.
Joey Adams,

@ joey-adams Grazie per averci segnalato. Modificato quello.
fR0DDY,

Line 7: error: ISO C++ forbids declaration of 'main' with no type
Nathan Osman,

@ george-edison Corretto. Anche se ha funzionato senza intsu g ++
fR0DDY il

3

PHP - 49 caratteri

<?=Hello.chr(($a=-~-~-~0).~-$a).World.chr($a.$a);

Log delle modifiche :

  • (73 -> 86) Hai dimenticato di emettere un punto esclamativo ... sigh
  • (86 -> 57) Utilizza una singola variabile con incremento
  • (57 -> 51) Modificato per utilizzare operatori bit a bit su 0
  • (51 -> 49) Operatori più bit a bit

1
Abbastanza sicuro che le costanti contano come letterali stringa a causa delle conversioni.
Kevin Brown,

@ Bass5098 Grazie per la modifica! L'ho approvato.
nyuszika7h,

@ Bass5098 che non funziona, devi avere i caratteri 32 e 33, non 21 e 22. <?$a=-~-~-~0;echo Hello.chr($a.$a-1).World.chr($a.$a);funziona, ma sono 54 caratteri.
zzzzBov

@zzzzBov Non sono riuscito a capire come cancellare inizialmente la modifica e ho dimenticato di ripristinarla una volta approvata.
Kevin Brown,

spiacenti, ho lasciato 1lì dentro. Lì vado a infrangere le mie regole ... <?$a=-~-~-~0;echo Hello,chr($a.~-$a),World,chr($a.$a);è quello che avrei dovuto usare, ancora 54 caratteri.
zzzzBov

3

Python, 106

o=-~-~-~0
L=o+o
d,W=-~L,o**o
_=o*W
print str().join(chr(L+W+_-i)for i in[d*L,L+d,L,L,o,-~_,W,o,0,L,d+d,_])

Usa '' (senza spazio precedente) invece di str ()
aditsu

2
Inoltre, MOLTO bello! :) A proposito, l'assegnazione multipla non sta salvando alcun personaggio
aditsu,

@aditsu: Non posso, sarebbe una stringa letterale. Grazie per i tuoi commenti :)
terremoto del

Oh oops, in qualche modo la stringa vuota non è stata registrata come letterale nella mia mente
aditsu

3

Perl, 186 byte

@A=(0,0,0,0);@B=(@A,@A);@C=(@B,@B);@D=(@C,@C);@E=(@D,@D);@d=(@E,@D,@A);$l=[@d,@B];$o=[@$l,0,0,0];print(chr@$_)for[@E,@B],[@d,0],$l,$l,$o,\@D,[@E,@C,@A,0,0,0],$o,[@$o,0,0,0],$l,\@d,[@D,0]

Ogni personaggio è stampato tramite il suo numero ordinale, che è la lunghezza di un array. La costruzione degli array è ottimizzata tramite la rappresentazione binaria dei numeri dei caratteri.

Ungolfed:

@A = (0, 0, 0, 0);          # A = 2^2
@B = (@A, @A);              # B = 2^3
@C = (@B, @B);              # C = 2^4
@D = (@C, @C);              # D = 2^5
@E = (@D, @D);              # E = 2^6

# d = 100 = 0x64 = 1100100b
@d = (@E, @D, @A);          # d = 2^6 + 2^5 + 2^2 

# l = 108 = 0x6C = 1101100b
$l = [@d, @B];              # l = d + 2^3

# o = 111 = 0x6F = 1101111b
$o = [@$l, 0, 0, 0];        # o = l + 3

print (chr @$_) for
    [@E, @B],              # "H"    H  =  72 = 0x48 = 1001000b = 2^6 + 2^3
    [@d, 0],               # "e"    e  = 101 = 0x65 = 1100101b = d + 1  
    $l, $l, $o,            # "llo"
    \@D,                   # " "   ' ' =  32 = 0x20 = 0100000b = 2^5
    [@E, @C, @A, 0, 0, 0], # "W"    W  =  87 = 0x57 = 1010111b = 2^6 + 2^4 + 2^2 + 3
    $o,                    # "o"
    [@$o, 0, 0, 0],        # "r"    r  = 114 = 0x72 = 1110010b = o + 3
    $l, \@d,               # "ld"
    [@D,0]                 # "!"    !  =  33 = 0x21 = 0100001b = 2^5 + 1

sembra che il mio vodoo binario ti abbia ispirato :) +1
masterX244

3

Java 389 caratteri

individuato una dichiarazione non necessaria

class A{static int a=0,b=a++,f=a,e=a++;static char p(String s){return(char)Byte.parseByte(s,a);}public static void main(String[]z){long x=e,y=b;String c=((Long)x).toString(),d=((Long)y).toString();char l=p(c+c+d+c+c+d+d),m=p(c+c+d+d+c+d+c),o=(char)(l+a+f),_=p(c+d+d+d+d+d),$=_++;System.out.print(new char[]{p(c+d+d+c+d+d+d),m,l,l,o,$,p(c+d+c+d+c+c+c),o,(char)(o+a+f),l,(char)(m-f),_});}}

La cronologia è nella cronologia delle modifiche ora è leggibile la versione originale non modificata:

// H  e  l    l   o      W  o  r   l    d  !
//72,101,108,108,111,32,87,111,114,108,100 33
import static java.lang.Integer.*;
class A
{


    public static void main(String[] args)
    {
        Integer a=0,b=a++,e=a++;  // making a 0 a 1 and a 2 which is required later;
        String c=e.toString(),d=b.toString(),z=c.substring(0,0);  //

        String H = ((char)parseInt(d+c+d+d+c+d+d+d,a))+z+  // make binary values and then to char
                (char)parseInt(d+c+c+d+d+c+d+c,a)+
                (char)parseInt(d+c+c+d+c+c+d+d,a)+
                (char)parseInt(d+c+c+d+c+c+d+d,a)+
                (char)parseInt(d+c+c+d+c+c+c+c,a)+
                (char)parseInt(d+d+c+d+d+d+d+d,a)+
                (char)parseInt(d+c+d+c+d+c+c+c,a)+
                (char)parseInt(d+c+c+d+c+c+c+c,a)+
                (char)parseInt(d+c+c+c+d+d+c+d,a)+
                (char)parseInt(d+c+c+d+c+c+d+d,a)+
                (char)parseInt(d+c+c+d+d+c+d+d,a)+
                (char)parseInt(d+d+c+d+d+d+d+c,a)
                ;
        System.out.println(H);  //obvious
    }

3

Perl 6 , 199 byte

my \O=+[0];my \t=O+O;my \T=t+O;my \f=(t+t,O);my \F=t+T;my \S=T+T;my \L=(S,F);
say [~] ((S,T),(|L,t,0),(my \l=(|L,T,t)),l,(my \o=(|l,O,0)),F,(S,|f,t,0),o,(|L,|f),l,(|L,t),(F,0),)
.map({chr [+] t X**@_})

(le nuove righe vengono aggiunte per ridurre la larghezza, ma non sono necessarie, quindi non vengono conteggiate)


Hello World! è codificato come un elenco di elenchi dei poteri di 2 di ogni lettera.

C'è esattamente un posto dove ho un letterale 0che viene utilizzato per qualsiasi cosa diversa da un 0. Viene utilizzato per creare un elenco di un elemento, che viene immediatamente trasformato nel numero 1con l'operatore prefisso numerico ( +[0]).

my \O=+[0];    # one          # (List.elems)
my \t=O+O;     # two
my \T=t+O;     # Three
my \f=(t+t,O); # (four, one)  # <W r>
my \F=t+T;     # five
my \S=T+T;     # six

my \L=(S,F);   # lowercase letter  # (6,5)

say [~] (
  (S,T),            # H
  (|L,t,0),         # e
  (my \l=(|L,T,t)), # l
  l,                # l  reuse <l>
  (my \o=(|l,O,0)), # o  reuse <l>, add 0,1
  F,                # ␠
  (S,|f,t,0),       # W
  o,                # o  reuse <o>
  (|L,|f),          # r
  l,                # l  reuse <l>
  (|L,t),           # d
  (F,0),            # !
).map({chr [+] t X**@_})

3

JavaScript 662 caratteri

O=[[,],[,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,],[,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,],[,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,],[,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,],[],[,,,,,,,,,,,,,,,,],[,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,],[,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,],[,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,],[,,,,,,,,,,,,,,,,,,,,,,,,,,,,,]];for(O_O=[].length;O.length>O_O;O_O++)document.write(String.fromCharCode((O[O_O].length||-Math.pow([,,].length,[,,,,,].length)-[,,,,,,,].length)+Math.pow([,,].length,[,,,,,,].length)+Math.pow(++[,].length,[,,,].length)-[,].length));document.write(String.fromCharCode(Math.pow([,,].length,[,,,,,].length)+[,].length))

Che dire di abusare dei letterali array solo per avere una base unaria. Questo programma ha il vantaggio di non utilizzare 0.


Anche se questo può essere valido, questo particolare puzzle è un codice golf, il che significa che dovresti mirare al codice più corto possibile. Con oltre 600 caratteri, non sei vicino ai <100 caratteri già presenti nelle soluzioni JS esistenti.
zzzzBov,

1
@zzzzBov: in realtà non sto cercando di vincere.
Konrad Borowski il

1
Questo programma ha il vantaggio di non utilizzare 0. Che dire O_O=0;?
Erik the Outgolfer,

@EriktheGolfer: risolto, grazie. Non l'ho notato.
Konrad Borowski,

O_O=[].lengthpuò essere scritto come O_O=falsediminuendolo di 4.
Atmocreations
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.