Xây dựng một thế giới xoắn Xin chào thế giới!


31

Công việc của bạn khá đơn giản, hãy viết một chương trình in Hello, world!, rằng khi xoắn sẽ tạo ra một chương trình in Twister!.

Làm thế nào dây được xoắn

Thuật toán xoắn rất đơn giản. Mỗi cột được dịch chuyển xuống theo chỉ số của nó (col 0 di chuyển xuống 0, col 1 di chuyển 1, ...). Sự thay đổi cột kết thúc tốt đẹp lên đầu. Nó trông giống như thế này:

a
ba
cba
----
 cba
  cb
   c

Với tất cả mọi thứ dưới dòng bọc lên đầu. Ví dụ thực tế:

Original:
\\\\\\\\\\\\
............
............
............

Twisted:
\...\...\...
.\...\...\..
..\...\...\.
...\...\...\

(Ví dụ khác và một bộ trưởng trong ngôn ngữ yêu thích của bạn đang ở đây )

Chấm điểm

Chương trình của bạn phải là một hình chữ nhật đệm. Đây là mã golf nên số byte thấp nhất sẽ thắng!

Quy tắc

  • Chương trình đầu tiên của bạn phải in Hello, world!. Chỉ có một dòng mới được cho phép.
  • Chương trình thứ nhất và thứ hai của bạn phải cùng một ngôn ngữ.
  • Chương trình thứ hai của bạn phải in Twister!. Chỉ có một dòng mới được cho phép.
  • Chương trình của bạn phải có ít nhất 2 hàng và 2 cột.

3
Trong trang mã của Jelly , ký tự tương ứng với (và, cho tất cả các mục đích, hoạt động như) nguồn cấp dữ liệu có mã điểm 127 (ASCII DEL). Ký tự có mã điểm 10 (nguồn cấp dữ liệu ASCII) có glyph ½và lấy căn bậc hai của một số. Mà một trong hai nên được coi là dòng mới cho thử thách này?
Dennis

Chết tiệt, có phải tôi là người duy nhất hy vọng "Twisted Hello World" đã sử dụng "twist" theo nghĩa đồi trụy nên chúng tôi sẽ đưa ra một cái gì đó như "Goodbye Cruel World" thay vào đó ..
DasBeasto 3/2/2016

@Dennis Tôi cho rằng cái tốt hơn để sử dụng trong trường hợp này sẽ là dòng mới thạch.
J Atkin

@JAtkin OK, cảm ơn đã làm rõ. Tôi đã cập nhật câu trả lời của mình cho phù hợp.
Dennis

Câu trả lời:


10

Thạch , 33 31 29 byte

Nguyên

“ɗ⁻%OḶ$“¡¦ḟṠ»Ṫ
“ɗ⁻%OḶ$“¡¦ḟṠ»Ḣ

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

Xoắn

“ɗ⁻%OḶ$“¡¦ḟṠ»Ḣ
“ɗ⁻%OḶ$“¡¦ḟṠ»Ṫ

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

Làm thế nào nó hoạt động

Trong mỗi chương trình, mỗi dòng xác định một liên kết. Liên kết cuối cùng là liên kết chính và nó được thực thi khi chương trình bắt đầu. Vì không có tài liệu tham khảo đến liên kết đầu tiên, nó chỉ đơn giản là bị bỏ qua.

Đối với cả hai chương trình, “ɗ⁻%OḶ$“¡¦ḟṠ»mang lại danh sách ['Hello, world!', 'Twister!'], sử dụng nén từ điển tĩnh của Jelly .

Sự khác biệt duy nhất giữa mã gốc và mã xoắn là ký tự cuối cùng của liên kết chính. chọn chuỗi đầu tiên của danh sách và chọn chuỗi cuối cùng.


2
Có vẻ như nó đang hét lên "Holy Sh * t"
giai đoạn

42

Python 2, 59 byte

print "  Hello, world!"[ 2::]
#rint "T w i s t e r !"[ ::2]

Xoắn:

print "T weils,twerrd!"[ ::2]
#rint "  H l o   o l !"[ 2::]

Về cơ bản, đặt Twister!dữ liệu vào các chỉ số lẻ của chuỗi và sau đó thay đổi từ loại bỏ hai ký tự (đệm) đầu tiên sang loại bỏ mọi ký tự khác thay thế.


Đây là quá thông minh hơn nhiều so với cách tiếp cận của tôi
wnnmaw

Điều này thật vô lý, 40 upvote?
J Atkin

@JAtkin Tôi đã nhận thấy rằng một số giải pháp Python có xu hướng nhận được số lượng lớn chúng. Không phải là tôi đang phàn nàn: ~)
PurkkaKoodari

Cách tuyệt vời hơn:print " Hello, world!" [2::]
Erik the Outgolfer

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Hoạt động, nhưng tôi sẽ giữ nó như bây giờ.
PurkkaKoodari

17

Phân hạch , 215 162 56 53 50 byte

Đây là một khởi đầu:

D1
\\
""
TH
we
il
sl
to
e,
r 
!w
"o
1r
;l
1d
;!
 "

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

Khi xoắn:

D"
\1
"\
T"
wH
ie
sl
tl
eo
r,
! 
"w
1o
;r
1l
;d
 !

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

Giải trình

Các Hello, world!code đang khá đơn giản:

  • D sinh ra một nguyên tử duy nhất, đi xuống dưới.
  • Hai \(gương) làm chệch hướng nó lên cột thứ hai.
  • "Hello, world!" in chuỗi yêu cầu.
  • 1là một cổng thông tin. Nó dịch chuyển nguyên tử sang vị trí tiếp theo theo 1thứ tự đọc, giữ nguyên hướng của nó (đó là hướng bên cạnh r).
  • Nguyên tử vẫn di chuyển xuống, ;phá hủy nguyên tử và chấm dứt chương trình.

Luồng điều khiển cho Twister!mã là một chút ... xoắn ...

  • Một lần nữa, Dsinh ra nguyên tử.
  • \làm chệch hướng nó sang phải, vào 1.
  • Bây giờ cổng thông tin gửi nguyên tử tiếp theo 1. Nguyên tử đánh vào ocái mà chỉ thay đổi khối lượng của nó, nhưng chúng ta có thể bỏ qua điều đó. Mã này bao bọc xung quanh để nguyên tử chạm 1lại lần nữa, bỏ qua hai hàng. Một lần nữa, chúng ta có thể bỏ qua l, nguyên tử quấn quanh và đánh 1lại. Bây giờ không còn 1mã nào nữa nên nguyên tử bỏ qua tất cả để trở về 1đỉnh.
  • Sau khi quấn quanh các cạnh một lần nữa, nguyên tử lại bị lệch đi \, bây giờ lại đi xuống.
  • "Twister!" in mã yêu cầu.
  • 1dịch chuyển nguyên tử một lần nữa, qua lần đầu tiên ;, nhưng có một người khác ;đang chờ nó chấm dứt chương trình.

Wow, rất gần bây giờ! :) Tôi chắc chắn có một cách để ngắn hơn ...
FryAmTheEggman

Tại sao các bạn thích phân hạch?
J Atkin

@JAtkin Tại sao chúng ta sẽ không? :)
Martin Ender

@ MartinBüttner Tôi đã suy nghĩ cụ thể tại sao cho thử thách này?
J Atkin

1
Các ngôn ngữ 2D @JAkin có vẻ phù hợp và Phân hạch có vẻ đặc biệt đơn giản vì bạn có thể chọn một hoặc nhiều điểm nhập tùy ý vào chương trình.
Martin Ender

15

Phân hạch , 35 byte

Cách tiếp cận phân hạch # 3 (số 4 đếm cái tôi đã chỉnh sửa trong bài viết đầu tiên của mình).

R"Hello, " \"tri"
T;L"!dlrow"/"es!w

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

R;H"ldor w /"er!"
T"Le!ll,o""\"tsiw

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

Giải trình

Đây thực sự là giải pháp phân hạch đơn giản nhất. Trong cả hai chương trình đều có hai điểm vào: Rtạo ra một nguyên tử phải và Lmột nguyên tử đi trái. Trong cả hai trường hợp, ;tiêu diệt một trong số họ ngay lập tức.

Bây giờ trong Hello, world!chương trình, nguyên tử đầu tiên in một nửa chuỗi "Hello, ", sau đó \/(là gương) làm chệch hướng nguyên tử lên dòng thứ hai bên trái. "world!"(đọc theo hướng của nguyên tử chuyển động) in phần còn lại của chuỗi. Lbây giờ là một no-op và ;phá hủy nguyên tử này, chấm dứt chương trình.

Các Twister!chương trình là về cơ bản giống nhau nhưng xoay 180 độ. Lần này, Lnguyên tử sống sót và bắt đầu in "Twist". Các \/một lần nữa làm chệch hướng nó vào đầu dây bên kia, bây giờ đi ngay. "er!in phần còn lại của chuỗi, Rlà một no-op và ;chấm dứt chương trình.


Kinh ngạc! Tôi nghĩ rằng điều này là nhỏ như nó có thể nhận được, số lượng tái sử dụng là ấn tượng.
FryAmTheEggman


4

Japt, 67 61 57 byte

Đã lưu 6 byte nhờ @JAtkin, 4 byte nhờ @Ian

"Tzwzizsztzezzzzzzrzzzz!"rz;
"Hzezlzlzoz,z zwzorlzdz!"rz;

Xoắn:

"Hzezlzlzoz,z zwzorlzdz!"rz;
"Tzwzizsztzezzzzzzrzzzz!"rz;

Kiểm tra trực tuyến: Bản gốc , Twisted

Làm thế nào nó hoạt động

"Tzwzizsztzezzzzzzrzzzz!"rz;  // Take this string and remove all "z"s.
"Hzezlzlzoz,z zwzorlzdz!"rz;  // Take this string and remove all "z"s.
                              // Implicit: output *last* expression

Nếu điều này hoạt động như tôi nghĩ, bạn có thể xóa khoảng trống sau Twister!bằng cách thay thế khoảng trắng bằng ..
J Atkin

@JAtkin Nó thực sự không hoạt động như vậy, nhưng tôi có thể lưu một loạt byte theo cách đó. Cảm ơn!
Sản phẩm ETH

"T.w.i.s.t.e.r.!. . . . . "k".(newline)"H.e.l.l.o.,. .w.o.r.l.d.!"k".
J Atkin

Có thể dễ đọc hơn nhiều với một ký tự phụ khác ...
mbomb007

4
@ mbomb007 Từ khi nào "dễ đọc" thành tích? : D
yo '

4

Python, 398 414 380 456 byte *

Quản lý để cập nhật để nó tuân thủ các quy tắc, nhưng tôi vẫn ngần ngại gọi đây là cạnh tranh. Vì các dòng nhận xét là cần thiết để nó chạy, tôi đã đưa chúng vào số byte

Giải pháp này không tuân theo các quy tắc, vì nó sẽ in các thông báo lỗi ngoài đầu ra được phép.

Tôi chỉ muốn xem nếu điều này có thể được thực hiện trong python. Nó có thể, nhưng nó không đẹp.

print'Hello, world!'
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     

Khi xoắn trở thành

print'Twister!'
#rint'Twister!'
#rint'Twister!'
#rint'Twister!'
#rint'Twister!'
#rint'Twister!'
#rint'Hwister!'
#rint'Teister!'
#rint'Twlster!'
#rint'Twilter!'
#rint'Twisoer!'
#rint'Twist,r!'
#rint'Twiste !'
#rint'Twisterw'
#rint'Twister!o
#rint'Twister!'r
#rint'Twister!' l
#rint'Twister!'  d
#rint'Twister!'   !

Tôi nghĩ bạn có thể xóa khoảng trống trong mỗi dòng, sau đó xóa dòng cuối cùng hoàn toàn.
Sản phẩm ETH

Tôi đã không nghĩ làm điều đó vì nó trái với quy tắc của thử thách xoắn ban đầu, nhưng cảm ơn!
wnnmaw

Bạn quên cập nhật mã;)
ETHproductions

Tôi cho rằng nó sẽ không thực sự quan trọng, nhưng tôi đã làm điều đó vì biện pháp tốt
wnnmaw 2/2/2016

1
Tôi nghĩ rằng bạn đã hiểu lầm. Mã được yêu cầu là một hình chữ nhật có đệm, nhưng bạn có thể loại bỏ khoảng trắng rint 'trên mỗi dòng.
Sản phẩm ETH


1

Brainfuck, 467 367 285 byte

Không biết

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

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

Xoắn

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

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


1
Bạn có thể lưu byte bằng cách sử dụng "Xin chào, thế giới!" Ngắn nhất
Jo King

@JoKing Cảm ơn bạn đã gợi ý! Bất kỳ ý tưởng làm thế nào để tìm một "Twister!" Nhỏ hơn Chương trình có tốt không?
orthoplex

1
Sử dụng bf-crunch tôi có thể nhận được "Twister!" 56 byte chương trình
Jo King
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.