Một con rắn Zealous nhanh chóng Brown Fox ngay lập tức nhảy lên cùng với Groovy xoắn ốc


12

Giới thiệu

Viết chương trình xuất ra hình xoắn ốc ra của pangram nổi tiếng theo các quy tắc nhất định.

Thử thách

Một pangram là một câu sử dụng mỗi chữ cái của một bảng chữ cái nhất định ít nhất một lần. Một trong những chú chim cánh cụt nổi tiếng nhất là con được sử dụng rộng rãi trong trình xem phông chữ của Windows, cụ thể là " Con cáo nâu nhanh nhẹn nhảy qua con chó lười ". Thách thức là tạo ra một vòng xoắn ốc dựa trên văn bản này.

Nhiệm vụ của bạn là xuất văn bản chính xác này:

heeeeellllllllllllazzzzzzzzzzz
hummmmmmmmmmmmmppppppppppppppy
hubrrrrrrrrrrrrrrrrrrooooooosy
hukyddddoooooooooooooooggggwsy
hukyveeeeerrrrrrrrrrrrrrrrtwsy
hukyvxjjjjjjjjjjuuuuuuuuuttwsy
hukyvxkbbrrrrrrrrrrrrrrrmttwsy
hukyvxkogggggggttttttttomttwsy
tukyvokoellllllllllllahomttwsy
tukyvokoeovvvvvvvvvvvzhomttwsy
tukyvocoeoummmmmmmmmezhomttwsy
tukyvocoeoufooooooopezhomttwsy
tukyvocohoufroooooxpezhomttwsy
tukyvoiohoufrquuuwxpezhomttwsy
tucyvoiohoufbqttiwxpezhomttwsy
tucyvoiohoufbeehiwxprzhomttwsy
tucyvoiohoufkccciwxprzeomttwsy
tjiyvoidhounnnnnnwxprzeomttwsy
tjiyvoidhojjjjjjjjxprzeomttwsy
tjiyvoidhssssssssssprzeopttwsy
tjiyvoidttttttttttttrzeopttwsy
tjiyvoiyyyyyyyyyyyyyyzqopttwoy
tjiyvouuuuuuuuuuuuuuuuqwpttwoy
tjiyvffffnnnnnnnnnnnnnnwpttwoy
tjiyossssssssssssssssssspthwoy
tjizzzzalllllllllllleeeeehhwoy
tjuuqqqqqqqqqqqqqqqqqeeeeehnod
txxxxxoooooooooooooooffffffnod
reeeeevvvvvvvvvvvvvvvvvvvvvvod
       gggggggoooooooooooooood

Đây là cách nó được tạo ra,

  • Có một con cáo nhiệt tình thích thú với chú tê tê "Con cáo nâu nhanh nhẹn nhảy qua con chó lười". Một ngày nọ, anh ở giữa một vòng xoáy bên ngoài và quyết định nhảy vào đó và vẽ theo.
  • Anh ấy muốn đi qua pangram từ đầu đến cuối, và nếu một chữ cái là chữ cái thứ n trong bảng chữ cái anh ấy muốn vẽ nó n lần.
  • Tuy nhiên, con cáo không giỏi lắm trong việc rẽ vào các góc, vì vậy khi đến được từng góc, nó cũng phải dừng lại và chuyển sang chữ cái tiếp theo.
  • Ông cũng quyết định lặp lại ba lần pangram nhấn mạnh rằng ông là những con cáo nâu nhanh chóng.
  • Công việc của bạn là chỉ ra hình xoắn ốc trông như thế nào sau khi con cáo vẽ tất cả những chữ cái đó.

(Phiên bản đơn giản mà không kể chuyện)

  • Chú chim cánh cụt nổi tiếng "Con cáo nâu nhanh nhẹn nhảy qua con chó lười" được lặp đi lặp lại ba lần, với các khoảng trắng được xóa và tất cả các chữ cái viết thường, để tạo ra

    thequickbrownfoxjumpsoverthelazydogthequickbrownfoxjumpsoverthelazydogthequickbrownfoxjumpsoverthelazydog
    
  • Vòng xoắn ốc bắt đầu từ trung tâm và bắt đầu bằng chữ "t", nó bắt đầu bằng cách đi sang phải và đi ra ngoài theo chiều kim đồng hồ. Nếu ký tự hiện tại là chữ cái thứ n trong bảng chữ cái, thì nó sẽ chuyển sang ký tự tiếp theo bất cứ khi nào

    • xoắn ốc đạt đến một góc, hoặc
    • các chữ cái hiện tại được in chính xác n lần.

Để minh họa rõ hơn về nó, tôi sẽ giải thích cách xoắn ốc liên quan đến ba từ đầu tiên "thequickbrown" được tạo ra.

 rooooo
 rquuuw
 bqttiw
 beehiw
 kccciw
nnnnnnw

Con cáo bắt đầu từ "t", đi bên phải, đến góc thứ 1, sơn nó bằng "t" và sau đó chuyển sang "h" và đi xuống, đến góc thứ 2, chuyển sang "e" và đi sang trái, đến Góc thứ 3, chuyển sang "q" và đi lên, đến góc thứ 4, chuyển sang "u" và đi sang phải, đến một góc và chuyển sang "i", đi xuống, đến một góc và chuyển sang "c", đi bên trái, vẽ thành công 3 "c" trước khi đến góc tiếp theo , chuyển sang "k" và đi sang bên trái , đến một góc ngay, chuyển sang "b" và đi lên, vẽ 2 "b" trước khi đến góc tiếp theo, chuyển sang "r"và đi lên trên , đến một góc và chuyển sang "o", sang phải, sau đó "w", xuống, "n", bên trái.

Thông số kỹ thuật

  • Bạn có thể lấy một đầu vào tùy chọn có chứa bất kỳ dạng chuẩn nào của chuỗi

    thequickbrownfoxjumpsoverthelazydogthequickbrownfoxjumpsoverthelazydogthequickbrownfoxjumpsoverthelazydog
    
  • Đầu ra của bạn phải được định dạng dưới dạng chuỗi và phải chuyển đến STDOUT thay vì tệp hoặc STDERR, với các dòng mới được đặt chính xác. Tiêu đề và dấu vết dòng trống không quan trọng. Không gian tiêu đề và dấu trong mỗi dòng được cho phép, nhưng cần phải nhất quán. Vì vậy, nếu bạn thêm 5 khoảng trắng trước một dòng của văn bản đã cho, bạn sẽ cần thêm chính xác 5 khoảng trắng trước mỗi dòng để hình xoắn ốc trông giống nhau.

  • Đây là , số byte thấp nhất sẽ thắng.

  • Như thường lệ, sơ hở mặc định áp dụng ở đây.


Giải thích được chào đón, mặc dù không cần thiết.

Tiêu đề được chỉnh sửa để làm cho nó một pangram mỗi bình luận bởi caird coinheringaahing.

Con chó lười quá lười biếng để xuất hiện trong câu chuyện.

Tôi đang nhắm đến việc tạo ra một thách thức chuỗi trong đó chữ cái đầu ra không thể được tính bằng các hàm đơn giản của tọa độ.


2
Thật xấu hổ khi tiêu đề không phải là một
pangram

@cairdcoinheringaahing Điểm hay, tôi sẽ cố gắng đưa ra một cái. Bất kỳ đề xuất?
Weijun Zhou

4
@cairdcoinheringaahing Cập nhật
Weijun Zhou

Điểm nhỏ: không nên 'h' trong lần đầu tiên 'the' được lặp lại hai lần, không phải là 't'?
Mudkip201

@ Mudkip201 Góc được vẽ bằng chữ cái gốc trước khi chuyển sang ký tự tiếp theo. Có lẽ tôi nên làm rõ.
Weijun Zhou

Câu trả lời:


5

Stax , 35 34 33 32 byte

é╛îá%ⁿ┌○iê}→Ug=╩◙╘Ç⌐)QX↑L╓₧╗▌╧▬q

Chạy và gỡ lỗi trực tuyến

Stax là ngôn ngữ tôi đã làm việc được khoảng 6 tháng. Đây là môn đánh gôn công cộng đầu tiên với nó. Hãy bắt tay vào công việc.

Stax thường được viết trong bộ ký tự ASCII có thể in được. Đệ trình 34 byte này được đóng gói thành một biến thể của bộ ký tự CP437. Đại diện ascii tương ứng là

't],{]_96-*~cHT,+nh%^(XUs&xH{rM}MF|<mr

Stax là một ngôn ngữ dựa trên ngăn xếp, nhưng nó có hai ngăn xếp dữ liệu là "chính" và "đầu vào". Hầu hết các hoạt động sử dụng ngăn xếp chính, nhưng đầu vào bắt đầu trên ngăn xếp đầu vào. Hướng dẫn Stax chủ yếu là một hoặc hai chuỗi ký tự ascii. Hầu hết trong số chúng bị quá tải, có nghĩa là hành vi của chúng được xác định bởi một vài giá trị hàng đầu trên (các) ngăn xếp.

Ở mức cao, chương trình này xây dựng một lưới bằng cách liên tục nối các chuỗi vào hàng cuối cùng. Khi hàng cuối cùng lấp đầy, nó sẽ xoay lưới theo chiều kim đồng hồ. Cuối cùng, nó phản chiếu lưới theo chiều ngang. Chi tiết hơn, chương trình hoạt động như thế này.

't],{]_96-*~cHT,+nh%^(XUs&xH{rM}MF|<mr
't]                                         ["t"]
   ,                                        Pop from input, push to main ("thequick...")
    {                            F          For each character in input, execute block...
     ]_96-*                                 Produce string using character appropriate
                                                number of times (a=1, b=2, etc)
           ~                                Pop from main, push to input for use later
            cH                              Copy last row from grid.
              T                             Right-trim whitespace
               ,+                           Pop from input stack and append
                 nh%                        Get the width of the first row of the grid
                    ^                       Add 1
                     (                      Right-pad/truncate string to this length
                      X                     Store in the x register
                       Us&                  Overwrite last row of the grid with new value.
                          xH                Get the last element from x.
                                                Basically, the lower right corner.
                             {  }M         Conditionally execute block.  This will happen 
                                                when the bottom right corner isn't a space.
                              rM            Reverse and transpose (aka rotate clockwise)
                                  |<        Left-justify grid; give all rows equal size.
                                     m      For each row, execute the rest of the program
                                               and then print the result to output
                                      r     Reverse the row

Wow, tôi thực sự ngạc nhiên rằng thử thách sẽ thấy sự xuất hiện công khai đầu tiên trong việc chơi golf cho một ngôn ngữ chơi gôn. Cảm ơn bạn rất nhiều vì đã hỗ trợ của bạn! Quan tâm đến ngôn ngữ của tháng? Tôi hy vọng sẽ thấy nhiều người dùng sử dụng nó và nó sẽ xuất hiện trong danh sách ứng cử viên sớm!
Weijun Zhou

@ WeijunZhou: Ý bạn là sao ? Tôi không biết đó là một điều cho đến bây giờ. Tôi sẽ không nhớ một đề cử. Có vẻ như nó có thể phù hợp hơn với các ngôn ngữ đã được thiết lập hơn, nhưng tôi không phản đối.
đệ quy

Đúng. Tôi có thể đề cử nó khi nó được thiết lập tốt hơn, như bạn nói. Tôi hy vọng nó sẽ không dài.
Weijun Zhou

Vì "không gian tiêu đề trong mỗi dòng không quan trọng miễn là chúng nhất quán", bạn có thể lưu một byte khác nếu muốn.
Weijun Zhou

1
Tôi vừa mới nộp bài bằng Stax. Bạn có thể cho lời khuyên về điều đó nếu bạn muốn. Chỉnh sửa: Thật là một sự trùng hợp. Tôi sẽ cố gắng học hỏi từ trình của bạn.
Weijun Zhou

11

Than , 66 40 36 byte

≔²ηFS«F¬η«¶↷⊞υη≔⊕÷Lυ²η¶»F⊕⌕βι¿η«≦⊖ηι

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Chỉnh sửa: Đã lưu 16 byte bằng cách lấy văn bản làm đầu vào. Giải trình:

≔²η

Bắt đầu với 2 tgiây vì một số lý do.

FS«

Lặp lại tất cả các chữ cái trong pangram.

F¬η«

Chúng ta đã đạt đến một góc chưa?

Di chuyển xuống (hoặc bất cứ hướng nào tiếp theo sẽ là) một dòng.

Xoay hướng in 90 ° theo chiều kim đồng hồ.

⊞υη≔⊕÷Lυ²η

Tính chiều dài của cạnh bên.

¶»

Kết thúc sửa chữa vị trí con trỏ. (Than sẽ ưu tiên phía bên kết thúc ngay trước góc, để bạn tự xoay ở góc đó.)

F⊕⌕βι

Lặp lại nhiều lần như vị trí của chữ cái hiện tại trong bảng chữ cái.

¿η«

Nếu chúng ta không đến được góc,

≦⊖ηι

Giảm số lượng và in thư hiện tại.


Cảm ơn bạn. Công việc tuyệt vời và giải thích tốt. Một lỗi đánh máy nhỏ: có lần -> ba lần.
Weijun Zhou

Phiên bản 43 byte này cũng được chấp nhận theo đặc điểm kỹ thuật. tio.run/##rY7NTsMwEITPzlNYPW2kcumVExJCikRRhLgBh9Rx4oV4nfon/...
Weijun Zhou

1
@ WeijunZhou Cảm ơn, tôi đã không nhận thấy điều khoản đó trong câu hỏi trước đây.
Neil

2

Ruby , 217 212 209 208 byte

->s{s+=' '*8
x=0
a=[""]*30
i=14
a[i]=?t
l=->{a[i]=s[x]+a[i]}
r=->{a[i]+=s[x]}
(0..58).map{|g|c=0
(0..g/2).map{c>s[x].ord-97&&(x+=1;c=0)
c+=1
eval %w{r i+=1;r l i-=1;l}[g%4]+"[]"}
x+=1}
a[-1].slice!0
$><<a*$/}

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

Dành một lượng thời gian hợp lý để quản lý con trỏ, vì vậy có thể có chỗ để chơi gôn nhiều hơn.

-5 byte: Nhân ba số pangram trước khi nhập. Cảm ơn Weijun Zhou .

-3 byte: Đệm chuỗi đầu vào và cắt chân cuối cùng, thay vì tạo chân cuối từ đầu.

-1 byte: Sử dụng &&thay cho toán tử ternary với giá trị vứt đi.

Giải trình:

->s{
  s += " " * 8                             # These spaces will show on the bottom row
  x = 0                                    # x is a pointer into s
  a = [""] * 30                            # a is an array of row strings
  i = 14                                   # i is a pointer into a
  a[i] = ?t                                # "Starts with two t's for some reason"
  l = ->{ a[i] = s[x]+a[i] }               # lambda to prepend char x to row i
  r = ->{ a[i] += s[x] }                   # lambda to append char x to row i
  (0..57).map{|g|                          # There are 58 "legs" to the spiral
    c = 0                                  # c is the print count of s[x]
    (0..g/2).map{                          # Leg g has g/2+1 characters
      c > s[x].ord-97 && (x+=1;c=0)        # Possibly switch to next letter
      c += 1
      eval %w{r i+=1;r l i-=1;l}[g%4]+"[]" # Call the appropriate lambda
    }
    x += 1                                 # Definitely switch to next letter
  }
  a[-1].slice!0                            # Remove the first char from the bottom row
  $> << a*$/                               # Join with newlines and print
}

1
Trình tốt đẹp và giải thích rõ ràng. Tôi đánh giá cao việc sử dụng rllambdas. Dựa trên các câu trả lời hiện tại, chân cuối cùng có vẻ là một người gây rắc rối mặc dù đó không phải là khi tôi viết đoạn mã C của mình để tạo đầu ra mẫu ...
Weijun Zhou

1
Có vẻ như bạn có thể lưu s*=3hoàn toàn và cũng bỏ qua 0trong ?:điều hành. tio.run/ Quảng
Weijun Zhou

1
@ WeijunZhou Ahh, cảm ơn vì tiền boa. Tôi thực sự cần điều đó 0, hoặc Ruby sẽ kéo lên c+=1từ dòng tiếp theo và chỉ thực hiện nó hầu hết thời gian. Và thử thách tốt đẹp!
benj2240

Bạn đúng rồi. Tôi đã không nhìn đủ cẩn thận. Cảm ơn vì sự đánh giá cao của bạn. Tôi vui vì bạn thích nó.
Weijun Zhou
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.