Tạo từ bát phân


14

Người dùng thứ Năm tuần trước @SpookyGengar đã làm chúng tôi thích thú với thử thách đầu tiên của anh ấy / cô ấy về việc tạo ra các từ bình phương . Nếu chúng ta nhân đôi số cạnh thì sao?

Các thách thức

Lấy một chuỗi làm đầu vào ở bất kỳ định dạng hợp lý nào bạn cần ( string, charmảng ...) và xuất một biểu diễn bát giác của đầu vào (cũng ở bất kỳ định dạng hợp lý nào : string, danh sách strings, charma trận ...) như trong các ví dụ tiếp theo:

Input: golf
Output:

   golf
  o    l
 l      o
f        g
l        o
o        l
g        f
 o      l
  l    o
   flog


Input: HelloWorld
Output:

         HelloWorld
        e          l
       l            r
      l              o
     o                W
    W                  o
   o                    l
  r                      l
 l                        e
d                          H
l                          e
r                          l
o                          l
W                          o
o                          W
l                          o
l                          r
e                          l
H                          d
 e                        l
  l                      r
   l                    o
    o                  W
     W                o
      o              l
       r            l
        l          e
         dlroWolleH


Input: a
Output:

a


Input: ab
Output:

 ab
b  a
a  b
 ba


Input: code golf
Output:

        code golf
       o         l
      d           o
     e             g

   g                 e
  o                   d
 l                     o
f                       c
l                       o
o                       d
g                       e

e                       g
d                       o
o                       l
c                       f
 o                     l
  d                   o
   e                 g

     g             e
      o           d
       l         o
        flog edoc

Ghi chú

  • Đầu vào sẽ chỉ bao gồm các ký tự ASCII có thể in được.
  • Các khoảng trắng hàng đầu và / hoặc dấu và dòng mới được phép miễn là hình dạng bát giác được duy trì.
  • Đây là , vì vậy có thể chương trình / chức năng sắp xếp nhất cho mỗi ngôn ngữ sẽ giành chiến thắng!

5
"Nếu chúng ta nhân đôi số cạnh thì sao?" <- sau đó than vẫn sẽ chiến thắng
Leaky Nun

Testcase gợi ý:code golf
Leaky Nun

@LeakyNun được <Space>coi là có thể in?
V. Courtois

2
@ V.Courtois
Leaky Nun

@LeakyNun thêm trường hợp kiểm tra.
Charlie

Câu trả lời:


10

Than , 16 byte (10 byte không lọc)

F⁸«✂θ⁰±¹↷¹A⮌θθ»θ

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Giải trình:

F⁸«                 Repeat for each side of the octagon
   ✂θ⁰±    ¹        Print the input except the last character
        ↷¹          Rotate 45° clockwise
          A⮌θθ      Reverse the input string
              »θ    Print the input again, to handle the length 1 case

Sửa độ dài thay thế 1, cũng 16 byte: Phiên bản dài.

PθF⁸«✂θ⁰±¹↷¹A⮌θθ

Một lỗi Char than có nghĩa là mã 10 byte sau đây hiện hoạt động: Phiên bản dài dòng.

F⁴«θ←↘⮌θ↖⟲

Có vẻ như nó chỉ nên làm điều này. Lol
Bạch tuộc ma thuật Urn

1
Umm, tôi không nghĩ rằng code golflàm việc đó?
Erik the Outgolfer 24/07/17

Ồ, và trên thực tế đây là 16 byte (thay thế θθθbằng θθ»θ).
Erik the Outgolfer 24/07/17

@EriktheOutgolfer Rất tiếc, xin lỗi về điều đó, tôi đã không nghĩ sẽ kiểm tra bản sửa lỗi của mình cho trường hợp dài 1 ... hồ sơ kiểm tra của tôi về câu hỏi không được tốt lắm phải không?
Neil

@Neil Nhưng còn vấn đề với code golf? Tôi nghĩ điều đó có liên quan đến cách Char than lấy đầu vào, thật không may, loại bỏ nó hoàn toàn khỏi thử thách này vì điều đó không thể tránh được.
Erik the Outgolfer 24/07/17

5

JavaScript (ES6), 156 byte

f=
s=>[...Array((l=s.length-1)*3+1)].map((_,i,a)=>a.map((_,j)=>s[i+j-l?l*5-i-j?i+l*2-j?j+l*2-i?i%(l*3)?j%(l*3)?-1:j?i-l:l+l-i:i?l+l-j:j-l:j:l-i:l*3-i:i]||` `))
<input oninput=o.textContent=this.value?f(this.value).map(function(a){return(a.join``)}).join`\n`:``><pre id=o>

Trả về một mảng ký tự.


1
Nó dường như chỉ hoạt động với các chuỗi có độ dài 4.
Charlie

1
@CarlosAlejo Xin lỗi, đã không kiểm tra đủ cẩn thận. Thuận tiện, sửa 2 byte lưu!
Neil

Oh của tôi đó là rất nhiều ternary ?:s!
Erik the Outgolfer 24/07/17

@EriktheOutgolfer điều tốt đó không phải là trăn hoặc đó sẽ thực sự dài dòng: P
Stephen

3

Toán học, 247 byte

(T=Table;k=Length[s=Characters@#];If[k==1,#,Column[Flatten@{#,T[""<>{s[[i]],T["  ",k/2-2+i],s[[-i]]},{i,2,k}],T[""<>{s[[-i]],T["  ",k+k/2-2],s[[i]]},{i,2,k}],T[""<>{s[[i]],T["  ",3k/2-1-i],s[[-i]]},{i,2,k-1}],StringReverse@#},Alignment->Center]])&

Bạn không cần Alignmentvà bạn sẽ tiết kiệm byte bằng cách sử dụng delayset ( :=) để giảm sự lặp lại của s[[i]]s[[-i]], Bạn nhận được tới 224 byte với những ý tưởng sau: (T = Table; q: = s [[i]]; r: = s [[- i]]; k = Độ dài [s = Ký tự @ #]; Nếu [k == 1, #, Cột [Flatten @ {#, T ["" <> {q, T ["", k / 2-2 + i], r}, {i, 2, k}], T ["" <> {r, T ["", k + k / 2-2], q}, {i, 2, k}], T ["" <> {q, T ["", 3k / 2-1-i], r}, {i, 2, k-1}], StringReverse @ #}, Center] ]) & Ngoài ra, tôi có một giải pháp thay thế chỉ có 145 byte tại thời điểm nhận xét này.
Đánh dấu S.


2

Japt , 84 79 byte

-5 byte nhờ @ETHproductions.


Ål
VoA{A?(UÅw +Uê)£Y¥V*2+AªY¥V-A?X:SÃ:Vç +U+Vç
Wf cU¬£V?(V*3 ç hUg~Y)+X:XÃcWz2

Dòng mới hàng đầu là một phần của chương trình. Lấy một chuỗi làm đầu vào và trả về một chuỗi các chuỗi.

Hãy thử trực tuyến! với -Rcờ để tham gia mảng kết quả với dòng mới.

Không phải là công việc đáng tự hào nhất của tôi, nhưng ít nhất tôi đã nhận được nó từ ~ 100 byte. Ý tưởng của tôi ở đây là tạo ra phần trên cùng và giữa, sau đó nối phần trên cùng, xoay 180 °.


Đẹp. Tôi không thấy có nhiều cải tiến ngay lập tức, nhưng bạn có thể thay đổi Ul Éđể UÅl, và chuyển đổi V và W để tiết kiệm nhiều hơn 2 byte: codepen.io/justinm53/full/...
ETHproductions

Ngoài ra, AnV ?-> V-A?Uq £->U¬£
Sản phẩm điện tử

@ETHproductions Tuyệt vời, cảm ơn! Không thể tin rằng tôi đã quên ¬.
Justin Mariner

1

Python 2 , 220 213 byte

  • Đáng ngạc nhiên lâu hơn tôi tưởng tượng.
a=input()
l=len(a)
r=range(l)
print'\n'.join(p.center(l*3-2)for p in[a]+(l>1)*([a[i]+(2*i-2+l)*' '+a[~i]for i in r[1:-1]]+[a[~i]+(l*3-4)*' '+a[i]for i in r]+[a[i]+(3*l-2*i-4)*' '+a[~i]for i in r[1:-1]]+[a[::-1]]))

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


1

PHP 7.1, 230 156 155 byte

for($x=$e=strlen($s=$argn)-1;$n<9;$r[$y][$x+=$n+1&3?$n&4?-1:1:0]=$s[$i],$i+=($n+=!$i||$i==$e)&1?:-1)$r[$y+=$n-1&3?$n<6?:-1:0]=$r[$y]?:"";echo join("
",$r);

Chạy như ống với -nRhoặc thử trực tuyến .

phá vỡ

for($x=$e=strlen($s=$argn)-1;   # import to $s, set $e to length-1, init $x
    $n<9;                       # loop through 8 repetitions of string
    $r[$y][
        $x+=$n+1&3?$n&4?-1:1:0      # 3. increment/decrement $x depending on $n
    ]=$s[$i],                       # 4. copy character to current position
    $i+=(
        $n+=!$i||$i==$e             # 5. if first or last character of string, increment $n
    )&1?:-1                         # 6. if odd repetition next, else previous character
)
    $r[
        $y+=$n-1&3?$n<6?:-1:0       # 1. increment/decrement $y depending on $n
    ]=$r[$y]?:"";                   # 2. if empty, init row to string
echo join("\n",$r);             # output

1

Toán học, 168 166 147 127 byte

(n=Length@#;b=Array[" "&,3{n,n}-2];Do[l={{1,n+k-1},{k,n-k+1}};l=Join[l,Cross/@l];b=ReplacePart[b,Join[l,-l]->#[[k]]],{k,n}];b)&

Cái này lấy một danh sách các chuỗi một ký tự và đưa ra một ma trận các chuỗi một ký tự.

Tôi đã lưu 18 byte bằng cách khai thác tính đối xứng để sử dụng -lCross/@ltrong đó có một cái gì đó giống như một chéo sản phẩm của mỗi của hai đơn 2D vector để tận {x,y}đến {-y,x}. Về cơ bản, hai hướng ban đầu là Đông (cạnh trên) và Tây Nam (cạnh trên bên phải). Sau đó, chúng tôi thêm vào các góc quay ngược chiều 90 độ của chúng với Cross: Bắc cho cạnh trái và Đông Nam cho cạnh dưới bên trái. Sau đó, chúng tôi thêm vào bốn mảnh khác bằng cách sử dụng -lđể lật bốn mảnh chúng tôi bảo hiểm.

Bạn có thể kiểm tra nó trên hộp cát với một cái gì đó như:

(n=Length@#;b=Array[" "&,3{n,n}-2];Do[l={{1,n+k-1},{k,n-k+1}};l=Join[l,Cross/@l];b=ReplacePart[b,Join[l,-l]->#[[k]]],{k,n}];b)&[{"H","e","l","l","o"," ","G","o","l","f"}]//MatrixForm
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.