Hello World 0.0!


78

Dilbert jest niesamowity
źródło: Dilbert, 8 września 1992 r

Mam nadzieję, że dodam nowy zwrot do klasycznego „Hello World!” program.

Kod programu, który wyświetla Hello World!bez:

  • Literały łańcuchowe / znakowe
  • Liczby (dowolna baza)
  • Wbudowane funkcje zwracające „Hello World!”
  • Literały RegEx

Z wyjątkiem „O” i 0.

† „O” jest wielkie, „o” jest niedopuszczalne.


4
Poproszę jedno z [code-golf] i [code-challenge], nie oba. Celem tych tagów jest pomoc użytkownikom w znalezieniu pytań dotyczących reguł, których chcą używać. Zasadniczo każde pytanie na tej stronie powinno być jakąś grą.
dmckee,

4
-1 Mamy już zaciemniony Hello World i myślę, że to wyzwanie jest zbyt podobne. Oddałbym głos „blisko jak duplikat”, gdybym nie był modem.
Chris Jester-Young,

2
@zzzzBov: Nie sądzę, aby było wystarczająco inaczej, aby uzasadnić kolejne pytanie w temacie „hello world”; inny motyw byłby lepszy. Ale to tylko moja opinia.
Chris Jester-Young

1
Myślę, że to świetny kod golfowy - i lepszy niż poprzedni.
MtnViewMark

2
Niektórzy ludzie zakładają, że "O"*oznacza to, że mogą mieć dosłowny ciąg znaków z dowolną liczbą O, w tym zerem. Nie sądzę, żeby taka była intencja. Proszę o wyjaśnienie.
Timwi

Odpowiedzi:


83

Windows PowerShell, zdecydowanie za dużo

Tak, w rzeczy samej, w czasach, gdy musieliśmy napisać „Witaj świecie” używając (prawie wyłącznie) zer…

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

Mówiąc poważniej:

Windows PowerShell, 25

Write-Host Hello World!

Brak dosłownego ciągu znaków. Hello World!Tam właśnie dzieje się analizowany jako łańcuch od PowerShell jest w trybie przetwarzania argumentów tam.


2
Jak to jest prawdziwe? O_o
Josh

1
Szukałem w Internecie przykładów lub historii tego. To takie dziwne. Czy możesz podać jakieś linki?
Caleb Jares,

1
„Powrót za dnia”. :) You millennials crack it up 👍

O. Unary. Rozumiem.
Matthew Roh

86

C, 327 znaków

#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))))))))
    ))))))))))))))))))))))))))))))))))))));
}

O dziwo, nie traci swojego piękna po obróbce wstępnej:

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

2
Niesamowite. Jednak brakuje!
Mark Reed

1
To jest prawdziwa sztuka!
Askaga

Wydaje mi się, że ciało można by skrócić dzięki jeszcze większej liczbie procesorów wstępnych. Nie jestem jednak pewien, czy skorzystałby cały kod.
Zwei

@Zwei, z pewnością można go skrócić. Nie starałem się znaleźć optymalnego zestawu makr.
ugoren

Dlaczego nie uwzględnisz parens w #define CLANG? zaoszczędziłby kilka bajtów, nie? Edytuj: nieważne, właśnie wypróbowałem i teraz rozumiem, dlaczego to nie zadziała ahaha
Albert Renshaw

52

BrainFuck, 102 111 znaków

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

Spełnia wszystkie zasady.

Zasługa Daniela Cristofani .


1
Nie mogę zdecydować, czy zasady powinny również określać 0 and/or "O" must be used. To trochę wredne dla BrainFuck i gry w golfa, ale nie mają trudności z tym wyzwaniem.
zzzzBov,

34
@zzzzBov: Jeśli muszą być użyte, kod Brainfuck po prostu je uwzględni. Jednak w ogóle nie wpływają na program.
Joey,

38

C, 182 bajty

#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, nadal używasz sztuczki operatora wklejania żetonów! Niezły kolega :-)
Quixotic

35

Program C - 45

(oszukiwanie)

Leksykalnie nie używa żadnych literałów łańcuchowych ani literałów regularnych. Wykorzystuje funkcję rygoryzacji preprocesora C. s(x)to makro, które zamienia argument w ciąg znaków.

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

3
Dla bardzo wygodnego pojęcia „leksykalnie” :) Ale bezczelność FTW!
JB,

24

Haskell - 143 znaki

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]

och, to było wełniane!

Bez liczb, bez operacji numerycznych, zmieniono nazwy zmiennych dla rozrywki.

Niektóre ekspozycje mogą być ładne:

  • o%y, o&yI o!ykażda ma zastosowanie funkcji odo yróżnych czasach: 3, 9, i 29 godzinach odpowiednio. 29?!?! Tak, 29!
  • ri wsą następnymi i poprzednimi znakami, które po zastosowaniu powyższych funkcji wyższego rzędu można uzyskać, aby uzyskać wszystkie potrzebne znaki 'O'.

Potrzebna sekwencja skoków to:

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

  • Edycja: (134 -> 144) Zapomniałem podać wykrzyknik, westchnienie ....
  • Edycja: (144 -> 143) usunął zbędne $, przemianowany #na !dla Hugs.

1
rly? oo ....
Joey Adams,


@ Nyuszika7H To dlatego, że ta usługa domyślnie włącza niektóre opcje kompilatora. Powinien być skompilowany ze zwykłym GHC.
FUZxxl,

@ Nyuszika7H Działa dobrze z GHC. Problem polega na tym, że ta usługa używa Uścisków od 2006 roku. Wydaje się, że istnieją dwie rzeczy, z którymi Uściski nie mogą sobie poradzić: 1) Używanie „#” jako operatora. Zmiana na „!” sprawia, że ​​działa. 2) Definicje r=succi w=preducieleśnienie tego, jak Hugs implementuje ograniczenie monomorfizmu. Zmiana na r x=succ xi w x=pred xsprawia, że ​​działa (koszt 4 znaków). To wydaje się być problemem w Uściskach.
MtnViewMark

Czy nadal obowiązuje po edycji @Community?
Hosch250,

22

Unary , 10 197 1137672766964589547169964037018563746793726105983919528073581559828 bajtów

Dziwi mnie, że nikt tego jeszcze nie zrobił ...

Publikowanie tutaj jest za długie, ale to 1137672766964589547169964037018563746793726105983919528073581559828 .

Lub łatwiej odczytać: ~ 10 67 zer.

Dzięki @dzaima za oszczędność 10 197 bajtów


2
Kiedy przeczytałem „Kiedyś napisałem całą bazę danych, używając tylko zer”, pomyślałem w pierwszej kolejności: „Musiał to zrobić w jednym”. +1 za bycie jedyną odpowiedzią, która działa dokładnie tak, jak komiks
Cyoce,

21

Mathematica 12 znaków

Tylko symbole, bez ciągów znaków.

Hello World!   

The! jest operatorem silnia, ale ponieważ symbole Hello i Świat są niezdefiniowane, zwraca dane wejściowe bez zmian.

Jeśli nieco zmodyfikujemy program:

Hello=2;
World=3;
Hello World!  

Następnie drukuje 12(2 * 3!)


16

Zestaw i386 (Linux, składnia gcc), 440 442 435

Dzisiaj jest mój dzień zgromadzeń, a potem będę miał dość czasu. Pozwoliłem sobie na numer 128, patrz poniżej program do dyskusji dlaczego. Nic nadzwyczajnego: po prostu koduję „Hello World!” jako kody montażowe, w których ma to sens bez stałych numerycznych, a resztę wypełniają arytmetyką.

#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)

(montuj z gcc -nostartfiles hello.S -o hello, prawdopodobnie w -m32zależności od łuku)

Dlaczego tolerancja dla 128? Potrzebuję wywołań systemowych, aby cokolwiek pokazać; Połączenia systemowe w systemie Linux są wykonywane w INT 80h (128 miejsc po przecinku); jedyny format operandu dla INT jest natychmiastowy, więc nie ma tam nic innego niż stałą (do kodu). I mógł (po tym, jak dostać trzeźwy) próbują wyrazić jako funkcję innych stałych symbolicznych w kodzie, prawdopodobnie n , ale coraz bardzo nudny za nie wiele korzyści. Przeczytałem ograniczenie liczbowe jako sposób na zapobieganie kodowaniu ASCII, i zdecydowanie nie to robię tutaj, więc czuję się wystarczająco niewinny, aby to zgłosić. (FWIW, próbowałem również samodostosowującego się kodu, ale ten działał błędnie) Teraz nie ma już 128. Kod jest czysty!

  • Edytuj1 ponownie sformatowany, aby zapisać linie; usunąłem cyfrę 1 (nikt nie zauważył ?!)
  • Edit2 skompresowany movz makrami CPP; wyeliminował pozostałe 128.

6
Tak programują prawdziwi mężczyźni.
Nit

14

JavaScript - 305

Trochę długi, ale podoba mi się zastosowana metoda.

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}))

Lubię to. Byłoby lepiej z parametrów funkcji jak OO, OOOale oczywiście, że stałaby się dłużej.
zzzzBov

Bardzo miły. Czy „, new String ()” musi znajdować się na końcu? Wydaje się, że działa bez tego.
Stephen Perelson,

3
Ach nie, nie ma. Czasami zapominam, jak słabo wpisany jest Javascript.
david4dev

Nie musisz też pozostawiać 0 bitów („0+”), a spacja i wykrzyknik mają dwa pozostałe 0 bitów. Całkowita redukcja o 28 znaków.
Stephen Perelson,

10

C # (131 znaków)

141 zwęgla 142 znaków

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);}}

Czytelny:

// 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
to jest pokręcone i miłe. Kocham to.
jcolebrand

+1 dobry sposób na wygenerowanie określonych liczb. Pamiętaj o tym!
Igby Largeman,

LINQPad programowe, 102 znaków: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()-> +""oszczędza niektóre cahry
Firo

2
@Firo: ... i łamie zasady. (Dozwolone dosłowne ciągi znaków.)
Timwi

8

JavaScript, 88

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

99

Ogromne podziękowania dla @Timwi za sugestie

usunięto operator trójskładnikowy:

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
aliasowaneString.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
Przełączony jeśli-inny na operatora trójskładnikowego

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
Zachowuję "O"sprawiedliwość, aby mieć „O” w programie.

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, w dużej mierze o to chodzi.
zzzzBov,

@Joey, przeczytałem na meta codegolf, że należy unikać odpowiedzi na własne pytanie przez jakiś czas, aby zachęcić innych do wypróbowania różnych podejść. Mój plan polegał na odkomentowaniu tego za dzień lub dwa.
zzzzBov,

@Joey, nie pracowałem wtedy na własnej maszynie i nie miałem ochoty wysyłać sobie odpowiedzi e-mailem, kiedy mogłem po prostu opublikować ją w komentarzu.
zzzzBov,

@Joey: „Jest tylko pięć takich” jest błędnych. Każdy może zaproponować edycję. Wystarczy kliknąć „edytuj” między „linkiem” a „flagą”, aby zobaczyć kod.
John

@zzz: „w dużej mierze o to chodzi” Każdy może to jeszcze zobaczyć. Każdy może zasugerować edycję, klikając „edytuj” pomiędzy „linkiem” a „flagą”, co spowoduje otwarcie okna edycji i ujawnienie twojego kodu.
John

7

GolfScript, 63 znaki

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

Co, jeszcze nie ma wpisu w GolfScript?

Ten używa pojedynczego literału liczbowego 0i zmiennej o nazwie O(która służy do przechowywania liczby 3). Cała reszta to arytmetyka i manipulacja stosami. Ciąg Hello World!składa się z kodów ASCII, znak po znaku.

Oto jak to działa:

[             # 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 bajtów

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

Algorytm wyjaśniony

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

Dłuższa wersja bez pętli, 389 bajtów:

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

Jest to łamigłówka z kodem do golfa, chodzi o stworzenie możliwie najkrótszego programu. Częściowo wiąże się to z opublikowaniem długości kodu.
zzzzBov,

5

Lua 144 97 86 znaków

Inne podejście, oparte na fakcie, że klucze tabeli są również ciągami, oraz na tym, że #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

Rozwiązanie 145 znaków

  • bez ciągów znaków z wyjątkiem „O” lub 0
  • bez Regexes
  • brak wbudowanych funkcji

Czy kodowanie bajtów w delcie, a następnie kilka liczb pierwotnych itp. Itd. :)

Wersja golfowa:

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

Skomentowano:

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

Edycja: Zmieniłem wiele ciągów O i znalazłem więcej optymalizacji.


„O” * - Myślę, że *
dotyczył

Cóż, regex'ing jest tym, co naturalnie robię: p. Może zastąpić go kosztem 5 lub 3 dodatkowych znaków odpowiednio dla pierwszego i drugiego rozwiązania
jpjacobs

Ale i tak je wyedytuję, dzięki za heads
upy

Konstruktor Hello i World in table wciąż są literałami łańcuchowymi - to tylko cukier syntatyczny.
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])

Dosłowność ''jest niedozwolona.
RomanSt

1
@romkyns: bardzo prawdziwe, naprawione.
Hoa Long Tam

5
Nie naprawiono (złe wyjście). Prawdopodobnie myślisz [: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

Miałem z tym całkiem za dużo zabawy i nauczyłem się trochę więcej J, aby uruchomić. Ponadto, ooo ooo ooomoże być najgłupsza kod, jaki kiedykolwiek napisano.


5

QR z półblokami (169) 121 znaków

Z kodem QR za pomocą znaków UTF-8 Półbloki:

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

Niestety, nie będzie to ładnie się renderować. Jest mały fragment z odpowiednim arkuszem stylów, ale… Nie! Językiem tutaj przedstawionym nie jest HTML! Językiem tutaj przedstawionym jest kod QR ! (HTML i CSS są tutaj używane tylko do obejścia błędu prezentacji!)

QR z półblokami (169)

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

Idealnie może to wyglądać następująco:

QR: Witaj świecie!


Użyj swojego smartfona, aby zobaczyć to lub w zbarsystemie Linux. (przykład: xwd | xwdtopnm | zbarimg /dev/stdin)
F. Hauri

Czy Code golf!znak nie jest dosłowny?
ugoren

2
Myślę, że ta odpowiedź, choć twórcza, nie spełnia kryteriów, ponieważ nie jest programem. QR to sposób kodowania danych, a nie język programowania.
ugoren

1
Również to, co o językach takich postscript, svgczy innych języków prezentacyjnych już używany tam !? W każdym razie sposób na kodowanie to język ... Myślę!
F. Hauri

1
Użyłem HTML (minus JS) jako przykładu tego, co nie jest językiem. To samo dotyczy QR. Zobacz te kryteria .
ugoren,

4

Scala ( 357 423 361 znaków)

Niestety nie jest to najkrótsza odpowiedź, ale liczenie na uzyskanie premii za najczęściej używane 'O'i'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)}

Poprzednio:

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)))}}

Stara (nielegalna) wersja:

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

Uważam, że puste ciągi ( "") i ciągi znaków / literały znaków zawierające znak zero ( '0') są niedozwolone. Tylko ciąg "O"( duża litera O) i liczba 0to.
Timwi

Facet. Wymagana była wtedy pewna edycja ...
Gareth,

4

C (lub C ++) (segment ciała: 49) (oszukiwanie)

podczas kompilacji, kompiluj do pliku binarnego o nazwie Hello\ World\!, kod jest następujący:

#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);
}

strrchrSegment jest wymagane, aby usunąć pełną ścieżkę w przypadku gdy nazwa programu przekazany zawiera pełną ścieżkę, również żadne argumenty muszą być przekazywane w ..

Typowa linia kompilacji może być: gcc -o Hello\ World\! foo.c


3

C ++, 141, 146

Po raz pierwszy wypróbowania jednego z nich, prawdopodobnie można go jeszcze trochę poprawić:

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;

EDYTOWAĆ:

Ukradłem sztuczkę dzielącą od innego postu, nie mogę uwierzyć, że o tym nie pomyślałem :(


1
Technicznie powinieneś uwzględnić cały działający program w liczbie znaków, w tym rzeczy takie jak main, wszelkie dołączone biblioteki std::itp.
Wug

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

Uznałem, że dopasowanie wzoru dałoby Haskellowi ogromną nogę, szczególnie dlatego, że możesz zainicjować moc dwóch takich postaci:

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

Jednak, jak widać w odpowiedzi Haskell MtnViewMarka (która, nawiasem mówiąc, zasługuje na wiele pozytywnych opinii) i innych odpowiedziach, lepszą kompresję można osiągnąć, używając więcej niż tylko +i -.


3

Clojure - 46 znaków

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

Zauważ, że Helloi World!są symbolami, a nie literałami jakiegokolwiek rodzaju.


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
100Narusza zasadę o liczbach. Proszę zamienić na coś bardziej zabawnego.
Joey Adams,

@ joey-adams Dzięki za wskazanie. Zmieniłem to.
fR0DDY 13.03.11

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

@ george-edison Poprawione. Chociaż działało to bez intg ++
fR0DDY

3

PHP - 49 znaków

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

Dziennik zmian :

  • (73 -> 86) Zapomniałem podać wykrzyknik ... westchnienie
  • (86 -> 57) Używa pojedynczej zmiennej z inkrementacją
  • (57 -> 51) Zmieniono na stosowanie operatorów bitowych na 0
  • (51 -> 49) Więcej operatorów bitowych

1
Jestem całkiem pewien, że ze względu na konwersje stałe będą się liczyć jako literały łańcuchowe.
Kevin Brown

@ Bass5098 Dziękujemy za edycję! Zatwierdziłem to.
nyuszika7h

@ Bass5098, który nie działa, musisz mieć znaki 32 i 33, a nie 21 i 22. <?$a=-~-~-~0;echo Hello.chr($a.$a-1).World.chr($a.$a);działa, ale to 54 znaki.
zzzzBov

@zzzzBov Nie mogłem wymyślić, jak początkowo wyczyścić edycję, i zapomniałem ją wycofać po zatwierdzeniu.
Kevin Brown

Ups, zostawiłem 1tam. Tam idę łamać własne zasady ... <?$a=-~-~-~0;echo Hello,chr($a.~-$a),World,chr($a.$a);powinienem był użyć, wciąż 54 znaków.
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,_])

Użyj '' (bez poprzedzającego spacji) zamiast str ()
aditsu

2
BARDZO miło! :) Przy okazji, wielokrotne zadanie nie zapisuje żadnych postaci
aditsu

@aditsu: Nie mogę, to byłby dosłowny ciąg. Dziękuję za komentarze. :)
trzęsienie ziemi

Ojej, jakoś pusty ciąg nie zarejestrował się jako dosłowny
aditsu

3

Perl, 186 bajtów

@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]

Każdy znak jest drukowany za pomocą numeru porządkowego, który jest długością tablicy. Konstrukcja tablic jest zoptymalizowana poprzez binarną reprezentację liczb znaków.

Nie golfowany:

@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

wygląda na to, że moje binarne vodoo cię zainspirowało :) +1
masterX244 13.04.14

3

Java 389 znaków

zauważyłem niepotrzebną deklarację

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),_});}}

Historia jest w historii edycji, teraz można odczytać oryginalną wersję bez golfa:

// 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 bajtów

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**@_})

(nowe wiersze są dodawane w celu zmniejszenia szerokości, ale są niepotrzebne, więc nie są liczone)


Hello World! jest zakodowany jako lista list potęg 2 z każdej litery.

Jest dokładnie jedno miejsce, w którym mam literał, 0który jest używany do czegokolwiek innego niż 0. Służy do tworzenia listy jednoelementowej, która jest natychmiast zamieniana na liczbę 1za pomocą operatora prefiksu numerycznego ( +[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 znaków

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

Co powiesz na nadużywanie literałów tablicowych tylko po to, by mieć jednolitą bazę. Zaletą tego programu jest nieużywanie 0.


Chociaż może to być poprawne, ta konkretna łamigłówka jest kodem golfowym, co oznacza, że ​​powinieneś dążyć do możliwie najkrótszego kodu. Przy ponad 600 znakach nie jesteś w pobliżu <100 znaków, które mają już istniejące rozwiązania JS.
zzzzBov,

1
@zzzzBov: Właściwie to nie próbuję wygrać.
Konrad Borowski

1
Zaletą tego programu jest nieużywanie 0. Co O_O=0;?
Erik the Outgolfer,

@EriktheGolfer: Naprawiono, dziękuję. Nie zauważyłem tego.
Konrad Borowski,

O_O=[].lengthmożna zapisać jako O_O=falsezmniejszające go o 4.
Atmocreations
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.