Chào thế giới! KHÔNG lặp lại


27

Trong bất kỳ ngôn ngữ lập trình nào tồn tại trước khi câu hỏi này được hỏi, hãy viết một chương trình (không phải là hàm) xuất ra các ký tự Hello world!theo sau một dòng mới. Chương trình của bạn:

  • không nên sử dụng bất kỳ ký tự nào nhiều lần (bao gồm cả khoảng trắng)
  • chỉ nên sử dụng các ký tự ASCII
  • không nên sử dụng bất kỳ thư viện tích hợp nào
  • không nên nhận đầu vào (người dùng, tệp, tên tệp, biến hệ thống, internet, bất cứ thứ gì)
  • không nên xuất bất cứ thứ gì khác

Người chiến thắng là người có nhiều phiếu nhất sau 14 ngày và tuân thủ sáu quy tắc.

Quy tắc thứ sáu là bạn không thể sử dụng H9 +, HQ9 +, HQ9 + B, HQ9 ++, HQ9 + 2D, Hello, Hello +, Hello ++, Hexish, CHIQRSX9 + hoặc Fugue. Ngoài ra, tất cả các câu trả lời yêu cầu triển khai mới hơn thử thách này phải được đánh dấu là không cạnh tranh.


Tuyên bố miễn trừ trách nhiệm: Câu hỏi này đã được đăng với giả định rằng Hello world! với sự lặp lại hạn chế không gây ra bất kỳ thiệt hại nào cho máy tính hoặc não của bạn trong quá trình đưa ra câu trả lời.


nếu chúng ta đang thoát mã ký tự, ký tự "\" có thể được sử dụng nhiều lần không?
WallyWest

4
Thế còn piet?
Victor Stafusa

@Victor "chỉ nên sử dụng các ký tự ASCII"
Timtech

3
Đó là một câu đố tuyệt vời, và tôi rất thích làm điều đó :-).
Konrad Borowski

9
Chỉ nên sử dụng các ký tự ASCII - một hạn chế hà khắc. Điều đó loại bỏ toàn bộ lớp ngôn ngữ không sử dụng ASCII.
Timwi

Câu trả lời:


33

Perl 6 (29 28 ký tự)

Điều này hơi khó chịu, nhưng cuối cùng tôi cũng có thể tạo ra một chương trình cho nhiệm vụ này. Cảm ơn đến cộng đồng # perl6 tuyệt vời , vì đã giúp tôi thực hiện nhiệm vụ này. Phải mất hai giờ, hy vọng bạn thích. Đầu ra hoàn toàn theo đặc điểm kỹ thuật, bao gồm một dòng mới.

say
Q[@A`DO world!]~|<HeLhg>

Có bốn mã thông báo quan tâm.

  • say

    Điều này đưa ra đối số với dòng mới ở cuối. Dòng mới sau lệnh chính là cần thiết để thay thế không gian.

  • Q[@A`DO world!]

    Đây là chuỗi đầu tiên. Q[]dành cho chuỗi thô (như r""trong Python). Nó có thể mất bất kỳ dấu phân cách (hoặc cặp nào), trong trường hợp này []. Trong trường hợp này, tôi sử dụng điều này để trích dẫn, tôi không cần hành vi chuỗi thô.

  • ~|

    Đây là toán tử stringwise ( ~) bitwise hoặc ( |).

  • <HeLhg>

    <>là danh sách theo nghĩa đen, trong đó lấy không gian tách biệt danh sách các yếu tố. Trong trường hợp này, nó có một phần tử và được sử dụng như một vô hướng, nó đưa ra một chuỗi.


3
Kinh ngạc! Tôi cần phải học. Một số cú pháp Perl 6! Tôi đồng ý với nhận xét của bạn quá, chắc chắn là một vấn đề thú vị!
Dom Hastings


12

Perl 5 với -M5.010, 29 byte

say+He.v108
x2,q(O world!)^$"

Hãy thử trực tuyến!

Tôi đã có được rất nhiều kiến ​​thức kể từ lần đầu tiên tôi thử nó. Vẫn không ngắn như những câu trả lời khác, nhưng điều tốt nhất tôi có thể đưa ra!


Thử thách có chữ thường w.
Ørjan Johansen

@ RjanJohansen Cảm ơn, tôi quên mất!
Dom Hastings

11

Perl 5.10+: 24 ký tự

say+He,YZX^q(567 world!)

OK, tôi nghĩ rằng điều này là ngắn như nó được vào Perl.

Chạy với perl -M5.010(hoặc chỉ perl -E) để bật saytính năng Perl 5.10+ .


Nghiêm túc ấn tượng! Tôi đã dành nhiều năm cố gắng để đi xung quanh ll...
Dom Hastings

9

Golf 42 33

Tôi cũng có thể chơi golf này, vì tôi phải phù hợp với một số mã và tất cả dữ liệu trong cùng một khối mà không có cách nào phân định hai cái tôi nghĩ rằng đây là một kết quả khá ngắn. Không giống như lần gửi đầu tiên của tôi, mã khối bây giờ là một phần được tích hợp đầy đủ của dữ liệu, do đó, {1không chỉ bắt đầu khối và đặt 1lên ngăn xếp, nó còn là dữ liệu xác định H, v.v. Việc tạo mảng bây giờ bao gồm chuỗi đầu vào trống, có nghĩa là tôi không phải cắt đầu vì chỉ có một ký tự giữa chuỗi trống và Hký tự đó bị cắt đi khi tôi lấy mỗi ký tự thứ hai và trống chuỗi cuối cùng là đầu ra là không có gì.

{1wZ$Qei^Ak 3h-)ulmsogr7}.`*]2%n+

Bản demo trực tuyến: http://golfscript.apphb.com/?c=ezF3WiRRZWleQWsgM2gtKXVsbXNvZ3I3fS5gKl0yJW4r

[{1$^(r iFNGDJUHv98oIMgtplbh4m}.`\*]6>2%n+

Xác định một khối mã. Tạo một bản sao của khối mã và chuyển đổi nó thành chuỗi. Sử dụng khối mã để lặp qua chuỗi. Với mỗi lần lặp, mã sẽ tạo một bản sao của giá trị char trước đó, xor nó với giá trị char hiện tại và trừ đi 1. Chuỗi kết quả sau đó sẽ xóa 6 ký tự đầu tiên và xóa từng ký tự thứ hai. Cuối cùng, một nguồn cấp dữ liệu được nối thêm.

"r iFNGDJUHv98oIMgtplbh4m" chỉ là hai biến không được khai báo, chúng không làm gì cả, nhưng chúng được xây dựng cẩn thận để tạo ra kết quả mong muốn.

Bản demo trực tuyến: http://golfscript.apphb.com/?c=W3sxJF4ociBpRk5HREpVSHY5OG9JTWd0cGxiaDRtfS5gXCpdNj4yJW4r


6

Vim 7.3, 18 tổ hợp phím

:h-cu
9j3wy$<C-^>P<End>r!o

Sao chép chuỗi Hello worldtừ tệp trợ giúp này , không may đã bị xóa trong các phiên bản chưa từng có của Vim.


Theo đó , <Esc>tổ hợp phím thích và kết hợp liên quan đến phím Ctrl được tính là một byte
oktupol

6

Befunge-98 , 34 31 byte

f"v!dlrow
+c<>a,kb@#*98e':g05-3

Hãy thử trực tuyến!

Sử dụng khá nhiều phương pháp khác nhau để tránh các ký tự trùng lặp.

Đầu tiên, chúng tôi sử dụng gói chuỗi bằng chữ để tránh sử dụng hai "s. Điều này thêm "thế giới!" đến chồng.

Đi bên trái trên dòng thứ hai, chúng tôi thêm 9 vào phần phụ fđể tạo ra o"Xin chào". Chúng tôi get nhân vật từ ô 5,0 ( l) và sau đó nhân đôi nó. Các 'được sử dụng để lấy lá thư e. Nhân 9 với 8 để nhận 72, giá trị ASCII của H. Sau đó, chúng tôi in mọi thứ bằng cách sử dụng ck,và lật hướng với >để sử dụng lại ,để in dòng mới ( a).


Rất tốt nhưng thử thách này không có dấu phẩy.
Ørjan Johansen

Ôi, điều đó làm cho nó dễ dàng hơn ... Cảm ơn @ rjanJohansen
Jo King

Bạn có hai +d.
Ørjan Johansen

@ RjanJohansen rất tiếc. nên được sửa ngay bây giờ
Jo King

3

Thuốc tiên , 37 byte

IO.puts~c(He#{[?n-2,108]}\x6f world!)

Hãy thử trực tuyến!

Tôi không thể đảm bảo rằng điều này sẽ hoạt động trở lại vào năm 2014 khi thử thách này được đăng và Elixir vẫn là bản 1.0 (và do đó, liệu nó có chính thức "cạnh tranh" hay không, nhưng nhìn vào ghi chú phát hành của họ, tôi nghĩ rằng nó nên như vậy ĐƯỢC). Dù sao, tôi rất vui vì cuối cùng tôi đã tìm thấy một giải pháp hợp lệ cho nhiệm vụ này bằng cách sử dụng ngôn ngữ có mục đích chung thông thường khác với Perl!

Hướng dẫn

IO.puts     #Print with trailing newline
~c(...)     #Sigil: charlist with interpolation
He          #Start of literal string...
#{...}      #Interpolated block
[?n-2,108]  #A list of codepoints for 2 'l's
\x6f        #Hex code for 'o'
world!      #...and done!

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.