Xin chào thế giới 0,0!


78

Dilbert thật tuyệt vời
nguồn: Dilbert, ngày 8 tháng 9 năm 1992

Tôi hy vọng sẽ thêm một bước ngoặt mới vào "Hello World!" Cổ điển chương trình.

Mã chương trình xuất ra Hello World!mà không có:

  • Chuỗi / ký tự chữ
  • Số (bất kỳ cơ sở)
  • Các hàm dựng sẵn trả về "Hello World!"
  • RegEx chữ

Với ngoại lệ của "O" và 0.

"O" được viết hoa, "o" không được chấp nhận.


4
Xin vui lòng, một trong [code-golf] và [code-Challenge], không phải cả hai. Điểm của các thẻ này để giúp mọi người tìm câu hỏi với các quy tắc họ muốn sử dụng. Về cơ bản, mọi câu hỏi trên trang web này nên là một trò chơi thuộc loại này hay loại khác.
dmckee

4
-1 Chúng ta đã có Hello World Obfuscated và tôi nghĩ thử thách này quá giống nhau. Tôi đã bỏ phiếu "gần như trùng lặp", nếu tôi không phải là một mod.
Chris Jester-Young

2
@zzzzBov: Tôi không nghĩ nó đủ khác biệt để đảm bảo một câu hỏi khác trong chủ đề "xin chào thế giới"; một chủ đề khác nhau sẽ tốt hơn Nhưng, đó chỉ là ý kiến ​​của tôi.
Chris Jester-Young

1
Tôi nghĩ rằng đây là một golf mã tốt - và tốt hơn so với trước đây.
MtnViewMark

2
Một số người dường như cho rằng điều đó "O"*có nghĩa là họ có thể có một chuỗi ký tự bằng bất kỳ số O nào, kể cả số không. Tôi không nghĩ đó là ý định. Vui lòng làm rõ.
Timwi

Câu trả lời:


83

Windows PowerShell, quá nhiều

Vâng, thực sự, vào ngày trước, chúng tôi đã phải viết một »Xin chào thế giới« bằng cách sử dụng (hầu như độc quyền) số không ...

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

Trên một lưu ý nghiêm trọng hơn:

Windows PowerShell, 25

Write-Host Hello World!

Không có chuỗi chữ. Cái Hello World!trong đó tình cờ được phân tích cú pháp dưới dạng một chuỗi vì PowerShell đang ở chế độ phân tích cú pháp đối số ở đó.


2
Làm thế nào là thật ?? O_o
Josh

1
Tôi đã tìm kiếm trên internet một số ví dụ hoặc lịch sử này. Điều này thật kỳ lạ. Bạn có thể cung cấp bất kỳ liên kết?
Caleb Jares

1
"Trở lại trong ngày". :) Bạn millennials bẻ khóa tôi

Oh. Đơn phương. Tôi hiểu rồi.
Matthew Roh

86

C, 327 ký tự

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

Kỳ lạ thay, nó không mất đi vẻ đẹp của nó sau khi tiền xử lý:

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

2
Tuyệt vời. Thiếu!, Mặc dù.
Mark Reed

1
Đây là nghệ thuật thực sự!
Askaga

Tôi cảm thấy cơ thể có thể được rút ngắn với nhiều tiền xử lý hơn. Không chắc chắn nếu toàn bộ mã sẽ có lợi.
Zwei

@Zwei, chắc chắn có thể rút ngắn nó. Tôi đã không nỗ lực để tìm các bộ macro tối ưu.
xấu xí

Tại sao bạn không bao gồm các parens trong CLANG #define? sẽ tiết kiệm một vài byte, không? Chỉnh sửa: không có gì, chỉ cần thử và bây giờ tôi thấy tại sao điều đó sẽ không hoạt động ahaha
Albert Renshaw

52

BrainFuck, 102 111 ký tự

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

Đáp ứng tất cả các quy tắc.

Tín dụng cho Daniel Cristofani .


1
Tôi không thể quyết định nếu các quy tắc cũng nên nêu 0 and/or "O" must be used. Nó có một chút ý nghĩa với BrainFuck và golfscript, nhưng họ thực sự không có thời gian khó khăn với thử thách này.
zzzzBov

34
@zzzzBov: Nếu chúng phải được sử dụng, thì mã Brainfuck sẽ chỉ bao gồm chúng. Mặc dù vậy, chúng không ảnh hưởng đến chương trình.
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, Bạn vẫn đang sử dụng thủ thuật dán mã thông báo! Người bạn đời tốt
bụng

35

Chương trình C - 45

(gian lận)

Về mặt thực tế, điều này không sử dụng bất kỳ chuỗi ký tự hoặc chuỗi ký tự regex nào. Nó tận dụng tính năng xâu chuỗi của bộ tiền xử lý C. s(x)là một macro biến đối số của nó thành một chuỗi.

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

3
Đối với một khái niệm rất thuận tiện về "từ vựng" :) Nhưng FTW táo tợn!
JB

24

Haskell - 143 ký tự

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, đó là len!

Không có số, không có hoạt động số, các biến được đổi tên để giải trí.

Một số giải thích có thể là tốt đẹp:

  • o%y, o&yo!ymỗi lần áp dụng hàm ocho ynhiều lần: 3, 9 và 29 lần. 29?!?! Vâng, 29!
  • rwlà ký tự tiếp theo và trước đó, khi được áp dụng bằng các hàm bậc cao hơn ở trên có thể được tạo để lấy tất cả các ký tự cần thiết từ đó 'O'.

Trình tự nhảy cần thiết là:

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

  • Chỉnh sửa: (134 -> 144) Quên xuất ra dấu chấm than, thở dài ....
  • Chỉnh sửa: (144 -> 143) Removed một không cần thiết $, đổi tên #để !cho Hugs.

1
o rly? oo ....
Joey Adams

Nó không hoạt động. codepad.org/lyKyj1Ox
nyuszika7h

@ Nyuszika7H Đó là vì dịch vụ này bật một số tùy chọn trình biên dịch theo mặc định. Nó sẽ biên dịch với GHC đơn giản.
FUZxxl

@ Nyuszika7H Nó hoạt động tốt với GHC. Vấn đề là dịch vụ đó đang sử dụng Hugs từ năm 2006. Dường như có hai điều mà Hugs không thể giải quyết: 1) Sử dụng '#' làm nhà điều hành. Thay đổi thành '!' làm cho nó hoạt động. 2) Các định nghĩa r=succw=predchạy afoul về cách Hugs thực hiện hạn chế đơn hình. Thay đổi thành r x=succ xw x=pred xlàm cho nó hoạt động (với chi phí 4 ký tự). Đây dường như là những vấn đề trong Hugs.
MtnViewMark

Nó vẫn còn hiệu lực sau khi chỉnh sửa @Community?
Hosch250

22

Unary , 10 197 1137672766964589547169964037018563746793726105983919528073581559828 byte

Tôi ngạc nhiên khi chưa có ai làm điều này ...

Quá lâu để đăng ở đây, nhưng đó là 1137672766964589547169964037018563746793726105983919528073581559828 số không.

Hoặc, dễ đọc hơn: ~ 10 67 số không.

Cảm ơn @dzaima đã lưu 10 197 byte


2
Khi tôi đọc "Tôi đã từng viết toàn bộ cơ sở dữ liệu chỉ bằng các số 0", suy nghĩ đầu tiên của tôi là "anh ấy chắc chắn đã làm điều đó một cách đơn nhất". +1 vì là câu trả lời duy nhất để hoạt động chính xác như thế nào truyện tranh đã làm
Cyoce

21

Toán học 12 ký tự

Chỉ có biểu tượng, không có chuỗi.

Hello World!   

Các ! là một toán tử giai thừa, nhưng khi các ký hiệu Hello và World không được xác định, trả về đầu vào không thay đổi.

Nếu chúng tôi sửa đổi chương trình một chút:

Hello=2;
World=3;
Hello World!  

Sau đó, nó in 12(2 * 3!)


16

lắp ráp i386 (Linux, cú pháp gcc), 440 442 435

Hôm nay là ngày tập hợp của tôi, và sau đó tôi sẽ có đủ thời gian. Tôi cho phép mình số 128, xem chương trình dưới đây để thảo luận về lý do tại sao. Không có gì bất thường: Tôi chỉ đang mã hóa "Xin chào thế giới!" như opcodes lắp ráp trong đó có ý nghĩa mà không có hằng số, và điền vào phần còn lại với số học.

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

(lắp ráp với gcc -nostartfiles hello.S -o hello, có thể -m32tùy thuộc vào vòm của bạn)

Tại sao dung sai cho 128? Tôi cần các tòa nhà cao tầng để thực sự hiển thị bất cứ điều gì; Các tòa nhà Linux nằm trên INT 80h (128 thập phân); định dạng toán hạng duy nhất cho INT là ngay lập tức, do đó không thể có bất kỳ thứ gì khác ngoài hằng số (mã) ở đó. Tôi có thể (sau khi tôi tỉnh táo) cố gắng diễn đạt nó như là một hàm của các hằng số tượng trưng khác trong mã, có thể là n , nhưng điều đó trở nên rất nhàm chán vì không thu được nhiều. Tôi đọc các ràng buộc về các con số như là một cách để ngăn chặn mã hóa ASCII, và đó chắc chắn không phải là những gì tôi đang làm ở đây, vì vậy tôi cảm thấy đủ ngây thơ để gửi nó. (FWIW, tôi cũng đã thử mã tự sửa đổi, nhưng mã này bị lỗi) Bây giờ cũng không còn 128. Mã này là thuần túy!

  • Edit1 được định dạng lại để lưu các dòng; đã xóa một số 1 (không ai nhận thấy?!)
  • Edit2 được nén movvới các macro CPP; loại bỏ 128 còn lại.

6
Đây là cách chương trình đàn ông thực sự.
Nit

14

Javascript - 305

Một chút dài nhưng tôi thích phương pháp được sử dụng.

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

Tôi thích nó. Sẽ tốt hơn với các thông số chức năng như OO, OOOnhưng tất nhiên điều đó sẽ làm cho nó lâu hơn.
zzzzBov

Thực sự tốt đẹp. Liệu ', Chuỗi mới ()' có cần ở cuối không? Nó dường như làm việc mà không có nó.
Stephen Perelson

3
À, không, không. Đôi khi tôi quên mất cách gõ Javascript yếu.
david4dev

Bạn cũng không cần 0 bit ('0+') và dấu cách và dấu chấm than có hai bit 0 trái. Tổng số giảm 28 ký tự.
Stephen Perelson

10

C # (131 ký tự)

141 ký tự 142 ký tự

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

Có thể đọc được

// 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
Đây là xoắn và tốt đẹp. Tôi thích nó.
jcolebrand

+1 cách hay để tạo số nhất định. Hãy nhớ điều đó!
Igby Largeeman

LINQPad chương trình, 102 ký tự: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()-> +""lưu một số cahrs
Firo

2
@Firo: ... và phá vỡ các quy tắc. (Không cho phép chuỗi ký tự.)
Timwi

8

JavaScript, 88

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

99

Rất cám ơn @Timwi vì những gợi ý

loại bỏ toán tử ternary:

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
bí danhString.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 Đã
chuyển đổi if-other sang toán tử ternary

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
Tôi đang giữ "O"chỉ để có một chữ "O" trong chương trình.

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, đó là phần lớn điểm.
zzzzBov

@Joey, tôi đã đọc trên meta codegolf rằng người ta nên tránh trả lời câu hỏi của chính họ trong một thời gian để khuyến khích người khác thử các cách tiếp cận khác nhau. Kế hoạch của tôi là bỏ sót nó trong một hoặc hai ngày.
zzzzBov

@Joey, lúc đó tôi không làm việc với máy của mình và tôi không cảm thấy muốn gửi email cho mình câu trả lời khi tôi chỉ có thể đăng nó trong một bình luận.
zzzzBov

@Joey: "Chỉ có năm trong số đó" là sai. Bất cứ ai cũng có thể đề nghị chỉnh sửa. Chỉ cần nhấp vào "chỉnh sửa" giữa "liên kết" và "cờ" và bạn có thể thấy mã.
Giăng

@zzz: "đó là phần lớn điểm" Bất cứ ai vẫn có thể nhìn thấy nó. Bất cứ ai cũng có thể đề xuất chỉnh sửa bằng cách nhấp vào "chỉnh sửa" ở giữa "liên kết" và "cờ", sẽ hiển thị hộp thoại chỉnh sửa, tiết lộ mã của bạn.
John

7

GolfScript, 63 ký tự

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

Gì, chưa có mục GolfScript nào?

Cái này sử dụng một chữ số duy nhất 0và một biến có tên O(được sử dụng để lưu trữ số 3). Tất cả mọi thứ khác là số học và thao tác ngăn xếp. Chuỗi Hello World!được xây dựng từ mã ASCII của nó, theo từng ký tự.

Đây là cách nó hoạt động:

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

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

Thuật toán giải thích

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

Phiên bản dài hơn không có vòng lặp, 389 byte:

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

Đây là một câu đố mã-golf, điểm quan trọng là làm cho chương trình ngắn nhất có thể. Một phần trong đó liên quan đến việc đăng độ dài của mã của bạn.
zzzzBov

5

Lua 144 97 86 ký tự

Một cách tiếp cận khác, dựa trên thực tế là các khóa bảng cũng là các chuỗi và thực tế là #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

Giải pháp 145 char

  • không có chuỗi nào ngoại trừ "O" hoặc 0
  • không có chế độ
  • không có chức năng dựng sẵn

Đã mã hóa delta của byte, sau đó một số primenumbers, v.v. :)

Phiên bản chơi gôn:

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

Đã bình luận:

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

Chỉnh sửa: Thay đổi nhiều chuỗi O và tìm thấy một số tối ưu hóa hơn.


"O" * - Tôi nghĩ rằng * là dành cho chú thích, không phải "bất kỳ số nào của O
RomanSt

Chà, regex'ing là điều tôi tự nhiên làm: p. Có thể thay thế nó với chi phí 5 hoặc 3 ký tự phụ tương ứng cho giải pháp thứ nhất và thứ hai
jpjacobs

Nhưng dù sao, tôi sẽ chỉnh sửa chúng, cảm ơn vì đã ngẩng cao đầu
jpjacobs

Hello và World trong bảng constructor vẫn là chuỗi ký tự - đó chỉ là một đường tổng hợp.
Oleg V. Volkov

5

Con trăn ( 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])

Nghĩa đen ''là không được phép.
RomanSt

1
@romkyns: Rất đúng, đã sửa.
Hoa Long Tam

5
Không cố định (đầu ra sai). Có lẽ bạn đang nghĩ đến [: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

Tôi đã hoàn toàn có quá nhiều niềm vui với cái này và tôi đã học được thêm một chút J để khởi động. Ngoài ra, ooo ooo ooocó thể là mã ngu ngốc nhất tôi từng viết.


5

QR với Halfblocks (169) 121 ký tự

Với Mã QR bằng cách sử dụng các ký tự nửa khối UTF-8:

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

Thật không may, điều này sẽ không hiển thị độc đáo ở đó. Có một đoạn nhỏ với bảng kiểu thích hợp, nhưng .. Không! Ngôn ngữ được trình bày ở đây không phải là HTML! Ngôn ngữ được trình bày ở đây là Mã QR ! (HTML và CSS được sử dụng ở đây chỉ để khắc phục lỗi trình bày!)

QR với Halfblocks (169)

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

Ý tưởng, điều này có thể trông giống như:

QR: Xin chào thế giới!


Sử dụng điện thoại thông minh của bạn để xem điều này hoặc zbardưới linux. (mẫu xwd | xwdtopnm | zbarimg /dev/stdin:)
F. Hauri

Không phải là Code golf!một nhân vật theo nghĩa đen?
ugoren

2
Tôi thực sự nghĩ rằng câu trả lời này, mặc dù sáng tạo, không đủ điều kiện vì nó không phải là một chương trình. QR là một cách để mã hóa dữ liệu, không phải là ngôn ngữ lập trình.
ugoren

1
Ngoài ra, những ngôn ngữ như postscript, svghoặc các ngôn ngữ trình bày khác đã được sử dụng ở đó thì sao!? Một cách để mã hóa là một ngôn ngữ dù sao ... tôi nghĩ vậy!
F. Hauri

1
Tôi đã sử dụng HTML (trừ JS) làm ví dụ cho những gì không phải là ngôn ngữ. QR cũng vậy. Xem các tiêu chí này .
ugoren

4

Scala ( 357 423 361 ký tự)

Thật không may, câu trả lời ngắn nhất, không may, nhưng hy vọng sẽ nhận được điểm thưởng cho việc sử dụng nhiều nhất 'O''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)}

Trước đây:

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

Phiên bản cũ (bất hợp pháp):

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

Tôi tin rằng chuỗi rỗng ( "") và chuỗi ký tự / ký tự chứa ký tự zero ( '0') không được phép. Chỉ có chuỗi "O"(viết hoa O) và số 0là.
Timwi

Bugger. Một số chỉnh sửa cần thiết sau đó ...
Gareth

4

C (hoặc C ++) (đoạn cơ thể: 49) (gian lận)

khi biên dịch, biên dịch thành một nhị phân được gọi Hello\ World\!, mã là:

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

Các strrchrphân khúc được yêu cầu để loại bỏ đường dẫn đầy đủ trong trường hợp tên chương trình thông qua năm chứa đường dẫn đầy đủ, cũng không có đối số phải được thông qua trong ..

Dòng biên dịch điển hình có thể là: gcc -o Hello\ World\! foo.c


3

C ++, 141, 146

Lần đầu tiên thử một trong những thứ này, có lẽ có thể được cải thiện khá nhiều:

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;

BIÊN TẬP:

Lấy trộm thủ thuật chia bài từ một bài đăng khác, không thể tin rằng tôi đã không nghĩ về điều đó :(


1
Về mặt kỹ thuật, bạn phải bao gồm toàn bộ chương trình làm việc trong số lượng ký tự, bao gồm những thứ như chính, bất kỳ thư viện nào được bao gồm std::, v.v.
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

Tôi cho rằng việc khớp mẫu sẽ giúp Haskell có một bước tiến lớn, đặc biệt bởi vì bạn có thể khởi tạo sức mạnh của hai người như vậy:

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

Tuy nhiên, như đã thấy trong câu trả lời Haskell của MtnViewMark (xứng đáng với nhiều câu trả lời, nhân tiện) và các câu trả lời khác, có thể đạt được nén tốt hơn bằng cách sử dụng nhiều hơn chỉ +-.


3

Clojure - 46 ký tự

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

Lưu ý rằng HelloWorld!là biểu tượng, không phải bằng chữ nào.


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
Các 100vi phạm quy tắc về số. Hãy thay thế nó bằng một cái gì đó thú vị hơn.
Joey Adams

@ joey-adams Cảm ơn bạn đã chỉ ra. Thay đổi điều đó.
fR0DDY

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

@ george-edison Sửa chữa. Mặc dù nó hoạt động mà không có inttrên g ++
fR0DDY 15/03/2016

3

PHP - 49 ký tự

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

Thay đổi :

  • (73 -> 86) Quên xuất ra dấu chấm than ... thở dài
  • (86 -> 57) Sử dụng một biến duy nhất với mức tăng
  • (57 -> 51) Thay đổi để sử dụng toán tử bitwise trên 0
  • (51 -> 49) Các toán tử bitwise khác

1
Khá chắc chắn rằng các hằng số sẽ được tính là chuỗi ký tự vì các chuyển đổi.
Kevin Brown

@ Bass5098 Cảm ơn bạn đã chỉnh sửa! Tôi đã chấp thuận nó.
nyuszika7h

@ Bass5098 không hoạt động, bạn cần có các ký tự 32 và 33, không phải 21 và 22. <?$a=-~-~-~0;echo Hello.chr($a.$a-1).World.chr($a.$a);hoạt động, nhưng đó là 54 ký tự.
zzzzBov

@zzzzBov Tôi không thể tìm ra cách xóa bản chỉnh sửa ban đầu và quên không quay lại sau khi được phê duyệt.
Kevin Brown

Rất tiếc, tôi đã rời khỏi 1đó. Ở đó tôi phá vỡ các quy tắc của riêng mình ... <?$a=-~-~-~0;echo Hello,chr($a.~-$a),World,chr($a.$a);là những gì tôi nên sử dụng, vẫn còn 54 ký tự.
zzzzBov

3

Con trăn, 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,_])

Sử dụng '' (không có khoảng
trắng

2
Ngoài ra, RẤT tốt đẹp! :) Btw, nhiều nhiệm vụ không lưu bất kỳ ký tự nào
aditsu

@aditsu: Tôi không thể, đó sẽ là một chuỗi ký tự. Cảm ơn ý kiến ​​của bạn. :)
flornquake

Ôi trời, bằng cách nào đó, chuỗi trống không đăng ký như một nghĩa đen trong tâm trí tôi
aditsu 20/03/13

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]

Mỗi chararcter được in thông qua số thứ tự của nó, đó là chiều dài của một mảng. Việc xây dựng các mảng được tối ưu hóa thông qua biểu diễn nhị phân của các số ký tự.

Ung dung:

@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

dường như vodoo nhị phân của tôi đã truyền cảm hứng cho bạn :) +1
masterX244

3

Java 389 ký tự

phát hiện một tuyên bố không cần thiết

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

Lịch sử là trong lịch sử chỉnh sửa bây giờ phiên bản không có bản gốc có thể đọc được:

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

(dòng mới được thêm vào để giảm chiều rộng, nhưng không cần thiết nên không được tính)


Hello World! được mã hóa dưới dạng một danh sách các danh sách quyền hạn của 2 chữ cái.

Có chính xác một nơi mà tôi có một nghĩa đen 0được sử dụng cho bất cứ điều gì khác ngoài a 0. Nó được sử dụng để tạo danh sách một thành phần, ngay lập tức được chuyển thành số 1với toán tử tiền tố số ( +[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

Ký tự JavaScript 662

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

Điều gì về việc lạm dụng các mảng chữ chỉ để có cơ sở unary. Chương trình này có lợi thế là không sử dụng 0.


Mặc dù điều này có thể hợp lệ, nhưng câu đố đặc biệt này là một môn đánh gôn, có nghĩa là bạn nên nhắm đến mã ngắn nhất có thể. Với hơn 600 ký tự, bạn không ở đâu gần <100 ký tự mà các giải pháp JS hiện có đã có.
zzzzBov

1
@zzzzBov: Tôi thực sự không cố gắng để giành chiến thắng.
Konrad Borowski

1
Chương trình này có lợi thế là không sử dụng 0. Thế còn O_O=0;?
Erik the Outgolfer

@EriktheGolfer: Đã sửa, cảm ơn. Tôi không nhận thấy điều đó.
Konrad Borowski

O_O=[].lengthcó thể được viết khi O_O=falsenó giảm đi 4.
Atmocreations
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.