Đó chỉ là một lỗi đầu vào


17

Tiếp tục của tôi Đó chỉ là một thử thách lỗi:

Đầu vào:

Một chuỗi bao gồm các ký tự ASCII có thể in mà không có khoảng trắng cũng như dòng mới.

Đầu ra:

Đầu tiên, biến đầu vào thành một bảng màu bằng cách hoàn nguyên đầu vào và thêm nó vào trước, ngoại trừ ký tự ở giữa (nghĩa là với một đầu vào 1234567890, nó sẽ trở thành 0987654321234567890).

Và sau đó xuất văn bản này:

0        9        8        7        6        5        4        3        2        1        2        3        4        5        6        7        8        9        0
         0       9       8       7       6       5       4       3       2       1       2       3       4       5       6       7       8       9       0
                  0      9      8      7      6      5      4      3      2      1      2      3      4      5      6      7      8      9      0
                           0     9     8     7     6     5     4     3     2     1     2     3     4     5     6     7     8     9     0
                                    0    9    8    7    6    5    4    3    2    1    2    3    4    5    6    7    8    9    0
                                             0   9   8   7   6   5   4   3   2   1   2   3   4   5   6   7   8   9   0
                                                      0  9  8  7  6  5  4  3  2  1  2  3  4  5  6  7  8  9  0
                                                               0 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 0
                                                                        0987654321234567890
                                                               0 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 0
                                                      0  9  8  7  6  5  4  3  2  1  2  3  4  5  6  7  8  9  0
                                             0   9   8   7   6   5   4   3   2   1   2   3   4   5   6   7   8   9   0
                                    0    9    8    7    6    5    4    3    2    1    2    3    4    5    6    7    8    9    0
                           0     9     8     7     6     5     4     3     2     1     2     3     4     5     6     7     8     9     0
                  0      9      8      7      6      5      4      3      2      1      2      3      4      5      6      7      8      9      0
         0       9       8       7       6       5       4       3       2       1       2       3       4       5       6       7       8       9       0
0        9        8        7        6        5        4        3        2        1        2        3        4        5        6        7        8        9        0

(Từ giữa ra ngoài theo cả hai hướng, mỗi ký tự được phân tách bằng một khoảng trắng so với dòng trước.)

Quy tắc thử thách:

  • Bạn cần in gấp đôi chiều dài của đầu vào, trừ 3 dòng. Vì vậy, với đầu vào 1234567890, đầu ra hiển thị ở trên là 17 dòng (dài 10 * 2 - 3).
  • Đầu vào sẽ chỉ chứa ASCII có thể in (không bao gồm không gian, tab và dòng mới).
  • Không gian lưu trữ là tùy chọn.
  • Một dòng mới duy nhất là tùy chọn.
  • (Bổ sung) không gian hàng đầu hoặc dòng mới hàng đầu không được phép.
  • Bạn có thể giả sử đầu vào sẽ luôn dài ít nhất bốn ký tự.
  • Không giống như tôi Đó chỉ là một thử thách lỗi, cả định dạng đầu vào và đầu ra đều linh hoạt. Vì vậy, bạn được phép xuất kết quả dưới dạng Chuỗi-mảng, Danh sách chuỗi, v.v.

Quy tắc chung:

  • Đây là , vì vậy câu trả lời ngắn nhất bằng byte thắng.
    Đừng để ngôn ngữ mã-golf ngăn cản bạn đăng câu trả lời với các ngôn ngữ không mã hóa. Cố gắng đưa ra một câu trả lời càng ngắn càng tốt cho ngôn ngữ lập trình 'bất kỳ'.
  • Các quy tắc chuẩn áp dụng cho câu trả lời của bạn, vì vậy bạn được phép sử dụng STDIN / STDOUT, các hàm / phương thức với các tham số thích hợp và kiểu trả về, các chương trình đầy đủ. Cuộc gọi của bạn.
  • Lỗ hổng mặc định bị cấm.
  • Nếu có thể, vui lòng thêm một liên kết với một bài kiểm tra cho mã của bạn.
  • Ngoài ra, xin vui lòng thêm một lời giải thích nếu cần thiết.

Các trường hợp thử nghiệm:

Input: 1234567890
Output:
0        9        8        7        6        5        4        3        2        1        2        3        4        5        6        7        8        9        0
         0       9       8       7       6       5       4       3       2       1       2       3       4       5       6       7       8       9       0
                  0      9      8      7      6      5      4      3      2      1      2      3      4      5      6      7      8      9      0
                           0     9     8     7     6     5     4     3     2     1     2     3     4     5     6     7     8     9     0
                                    0    9    8    7    6    5    4    3    2    1    2    3    4    5    6    7    8    9    0
                                             0   9   8   7   6   5   4   3   2   1   2   3   4   5   6   7   8   9   0
                                                      0  9  8  7  6  5  4  3  2  1  2  3  4  5  6  7  8  9  0
                                                               0 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 0
                                                                        0987654321234567890
                                                               0 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 0
                                                      0  9  8  7  6  5  4  3  2  1  2  3  4  5  6  7  8  9  0
                                             0   9   8   7   6   5   4   3   2   1   2   3   4   5   6   7   8   9   0
                                    0    9    8    7    6    5    4    3    2    1    2    3    4    5    6    7    8    9    0
                           0     9     8     7     6     5     4     3     2     1     2     3     4     5     6     7     8     9     0
                  0      9      8      7      6      5      4      3      2      1      2      3      4      5      6      7      8      9      0
         0       9       8       7       6       5       4       3       2       1       2       3       4       5       6       7       8       9       0
0        9        8        7        6        5        4        3        2        1        2        3        4        5        6        7        8        9        0

Input: ABCD
Output:
D  C  B  A  B  C  D 
   D C B A B C D
      DCBABCD
   D C B A B C D
D  C  B  A  B  C  D

Input: =>)}]
Output:
]   }   )   >   =   >   )   }   ]
    ]  }  )  >  =  >  )  }  ]
        ] } ) > = > ) } ]
            ]})>=>)}]
        ] } ) > = > ) } ]
    ]  }  )  >  =  >  )  }  ]
]   }   )   >   =   >   )   }   ]

Input: XXxxXX
Output:
X    X    x    x    X    X    X    x    x    X    X
     X   X   x   x   X   X   X   x   x   X   X
          X  X  x  x  X  X  X  x  x  X  X
               X X x x X X X x x X X
                    XXxxXXXxxXX
               X X x x X X X x x X X
          X  X  x  x  X  X  X  x  x  X  X
     X   X   x   x   X   X   X   x   x   X   X
X    X    x    x    X    X    X    x    x    X   X

Là một số lượng bằng nhau của không gian hàng đầu trên mỗi dòng OK?
Adám

@ Adám Xin lỗi nhưng không. Bất kỳ số lượng không gian dấu là tốt, nhưng không gian hàng đầu thì không. Tôi sẽ chỉ định quy tắc này trong thử thách.
Kevin Cruijssen

2
"Bạn cần in độ dài của đầu vào trừ 3 dòng." sau đó "(dài 10 * 2 - 3)". Câu đầu tiên nói "không gấp đôi", câu thứ hai nói "không gấp đôi". Vậy đó là cái gì?
Olivier Grégoire

@ OlivierGrégoire Rất tiếc, dòng đầu tiên phải chứa gấp 2 lần chiều dài trừ 3. Đã sửa
Kevin Cruijssen

Câu trả lời:


5

Than , 14 byte

E⁻Lθ¹⪫θ× ι‖O←↑

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

AST:

Program
├Print
│└E: Map
│ ├⁻: Difference
│ │├L: Length
│ ││└θ: Identifier θ
│ │└1: Number 1
│ └⪫: Join
│  ├θ: Identifier θ
│  └×: Product
│   ├' ': String ' '
│   └ι: Identifier ι
└‖O: Reflect overlap
 └Multidirectional
  ├←: Left
  └↑: Up

Có thể là 16 điểm mã, nhưng như UTF-8 Python 3 báo cáo rằng nó là 41 byte. Bộ ký tự nào bạn sử dụng để làm cho nó 16 byte?
Janus Troelsen

@JanusTroelsen Đó là một bộ ký tự tùy chỉnh.
Erik the Outgolfer

Huh, hoạt động trên chuỗi? Phải nhớ điều đó cho lần tới ...
Neil

@Neil Vâng, nó có ý nghĩa không?
Erik the Outgolfer

Về mặt kỹ thuật, bản chỉnh sửa của bạn không được soạn thảo vì các cam kết có liên quan sẽ hoãn thử thách.
Neil

7

Japt , 22 21 byte

¬Å£¬qYîÃy w ê y w ê ·

Kiểm tra nó trực tuyến!

Giải trình

8 byte đầu tiên tạo góc phần tư phía dưới bên phải của mẫu:

 ¬ Å  £    ¬ qYîÃ
Uq s1 mXY{Uq qYî} 

Uq                 : Split the input into characters.
   s1              : Slice off the first.
      mXY{      }  : Map each item X and index Y to
          Uq       :   the input split into chars,
             q     :   joined with
              Yî   :     Y spaces.

Tại thời điểm này, chúng tôi có một mảng ví dụ ["ABCD", "A B C D", "A B C D"]. Thật không may, phải mất 13 byte để bình phương này:

y w ê y w ê ·
y w ê y w ê qR
y                : Pad each line to the same length with spaces and transpose.
  w              : Reverse the array, and
    ê            : palindromize. Now we have the bottom half of the output transposed.
      y          : Transpose back.
        w ê      : Reverse and palindromize again, giving the full output.
            qR   : Join with newlines.
                 : Implicit: output result of last expression

Ước gì tôi nghĩ sẽ sử dụng transpose - được thực hiện độc đáo :)
Shaggy

Tôi có thể hỏi một câu hỏi mà tôi sợ để biết câu trả lời không? Bạn và phần còn lại ở đây có thực sự mã hóa điều này trong phiên bản rút gọn của nó không?
gdbj

Nếu bạn dám. Chắc là không.
Máy

1
@gdbj Tôi thường làm ... đó có phải là một dấu hiệu xấu không? : P
Sản phẩm điện tử

@ETHproductions Chỉ nói với một người bạn rằng điều này tương tự như chơi golf thực sự: bực bội khi học, nghiện một cách kỳ lạ và thể hiện kỹ năng trong đó ra lệnh tôn trọng.
gdbj


5

JavaScript (ES6) , 159 136 129 127 byte

f=(i,x=1-(l=i.length-1),y=x<0?-x:x,[,...b]=i)=>l>x?''.padEnd(l*(l+~y))+[...b.reverse(),...i].join(''.padEnd(y))+`
`+f(i,x+1):''

Hãy thử trực tuyến! Giải thích bên dưới

// This is a recursive function
// First, inputs and various variable initializations
// by using defaults
let func = (
  // Text input, will not be modified through recursion
  input,

  // Current line, for the first function call we start from -lines to +lines
  // It's roughly equivalent to lines*2 but this helps us computing the spacing
  // Also computing the total amount of lines
  currentLine = 1 - (totalLines = input.length - 1),

  // Getting the absolute value of the current line (like Math.floor)
  absCurrentLine = currentLine < 0 ? -currentLine : currentLine,

  // Getting the input without it's first letter, useful for the palidrome of the input
  [,...slicedInput] = input

// Base case, stopping the recursion if the current line
// is still below the total amount of lines
) => totalLines > currentLine

  // Leading spacing
  ? ''.padEnd(totalLines * (totalLines + ~absCurrentLine)) + 

  // Putting together the palindrome version and adding spaces between the chars
    [...slicedInput.reverse(), ...input].join(''.padEnd(absCurrentLine)) + `

  // Line return + recursion call
` + f(input, currentLine + 1)
  : ''

Đầu tiên vào codegolf, tôi xin lỗi trước cho bất kỳ sai lầm rõ ràng.

Cảm ơn Justin Mariner vì đã tiết kiệm 23 byte! Cảm ơn Craig Ayre vì đã lưu 11 byte và cho báo cáo lỗi.


Câu trả lời đầu tiên rất hay, +1 từ tôi và chào mừng bạn đến với PPCG. Tôi không quá quen thuộc với Js, nhưng có thể bắt đầu xở -2 thay vì -1 và thay đổi x<=lthành ++x<=lđể bạn có thể xóa x++và lưu một byte không?
Kevin Cruijssen

Tôi đã cố gắng nhưng không quản lý được vì linescũng bị vướng vào khoảng cách nên cuối cùng nó tốn thêm nhiều byte để làm cho tất cả hoạt động trở lại. Nhưng tôi khá chắc chắn rằng có cả một cách tốt hơn để tổ chức mã và thêm đề xuất của bạn.
Saming

1
Chào mừng bạn đến với PPCG, bài viết đầu tiên và lời giải thích tốt đẹp! Golf xuống tới 133 byte ở đây . Bao gồm giải thích về những gì đã thay đổi.
Justin Mariner

Thật không may, đầu ra của bạn dường như không khớp với đầu ra dự kiến: xem tại đây
Craig Ayre

1
Điều này thật tuyệt, tôi đã thêm chức năng mới của bạn và cập nhật lời giải thích
Saming

4

SOGL V0.12 , 22 18 byte

ā,⁄H{,čFH@*∑Κ}▓±╬-

Hãy thử nó ở đây!

Giải trình:

ā                   push an empty array - canvas
 ,⁄H{        }      input length-1 times do
     ,                push the input
      č               chop it into chars
       FH@*           get the current iteration-1 amount of spaces
           ∑          join the chopped input with the spaces
            Κ         prepend it to the array
              ▓     space to a square
               ±    reverse each string in that list
                ╬-  quad-palindromize with 1 X and 1 Y overlap and without swapping characters

╬-lệnh palindromize bốn chiều? Tôi vừa mới đến đây với mong muốn Japt có thứ gì đó như thế ...: P
Sản phẩm điện tử

@ETHproductions FWIW, nhiều thứ
dzaima

Tôi biết, do đó tại sao tôi chỉ định ╬-. Nhưng cảm ơn, tôi không thể tìm thấy trang đó vì một số lý do
ETHproductions

@ETHproductions Oh. Nó chỉ tồn tại trong bản sao SOGLOnline của trình thông dịch: / Tại một số điểm tôi cần kết hợp cả hai với nhau: |
dzaima

Hmm ... bạn nên thực hiện tự động Fcho nếu nó cần thiết.
Erik the Outgolfer

4

Python 3 , 149 141 95 byte

def f(s):l=len(s)-1;[print((' '*abs(i)).join(s[:0:-1]+s).center(2*l*l+1))for i in range(1-l,l)]

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

Cảm ơn @KevinCruijssen và @ETHproductions đã lưu một số byte

Đặc biệt cảm ơn @notjagan vì đã tiết kiệm 46 byte!


1
Thay đổi l=len(s);thành l=len(s)-1;và sau đó thay đổi tất cả các giá trị liên quan l(ví dụ l-1-> l; -l+2-> -l+1; v.v.) ngắn hơn 8 byte. Hãy thử nó ở đây.
Kevin Cruijssen

1
-l+2-> 2-l:)
Sản phẩm điện tử

Cảm ơn @KevinCruijssen, tiếc là tôi không thể chỉnh sửa ngay bây giờ, bạn có thể chỉnh sửa không?
Ông Xcoder

@KevinCruijssen Cảm ơn rất nhiều!
Ông Xcoder

3
Xuống 95 byte sử dụng centerthay cho forvòng lặp!
notjagan

4

PHP, 145 131 byte

Phải mất một số suy nghĩ để chơi golf thêm byte; Nhưng nó đáng mà.

while($y<=2*$e=strlen($a=$argn)-1)echo($p=str_pad)("
",$e*($e-$d=abs($y++-$e))+1),chunk_split($a.substr(strrev($a),1),1,$p("",$d));

in một dòng mới hàng đầu. Chạy như ống với -nRhoặc thử trực tuyến .

phá vỡ

while($y<=2*$e=strlen($a=$argn)-1)  # $e=length-1, loop through rows
                                        # 1. print linebreak and left padding
    echo($p=str_pad)("\n",$e*($e-$d=abs($y++-$e))+1),
        chunk_split(
            $a.substr(strrev($a),1)     # 2. palindromize input
            ,1,$p("",$d));              # 3. insert $e..0..$e spaces between characters

giải pháp thay thế , cùng chiều dài:

for($d=-$e=strlen($a=$argn)-1;$d<$e;)echo($p=str_pad)("
",$e*($e-$b=abs($d++))+1),chunk_split($a.substr(strrev($a),1),1,$p("",$b));

1
Bạn có thể tiết kiệm 13 byte bằng cách dùng thử trực tuyến!
Jörg Hülsermann

3

APL (Dyalog) , 37 byte

Yêu cầu ⎕IO←0mặc định trên nhiều hệ thống.

{⍉m(2-d)↓⍉(m←⊖⍪1↓⊢)↑∊¨(1↓⍳d←≢⍵)↑¨¨⊂⍵}

{... } chức năng ẩn danh mà lập luận được đại diện bởi

(... )↑¨¨⊂⍵ cho mỗi ( ¨) của những con số sau đây mất ( ) mà nhiều nhân vật từ mỗi ( ¨) của toàn bộ ( tranh cãi), đệm với không gian khi cần thiết:

  ≢w số lượng ký tự trong đối số

  d← lưu trữ trong d

   rất nhiều ɩ ndices (0 làng d - 1)

  1↓ thả một (số không)

∊¨ε nlist (flatten) mỗi

 nâng thứ hạng (chuyển đổi danh sách danh sách thành ma trận)

(m←... ) áp dụng sau ngầm chức năng m , được xác định như sau:

   đối số lộn ngược

   trên đỉnh

  1 một hàng]

   rơi từ

   tranh luận

 hoán vị

(Giáo dục)↓  thả:

  2-d = - ( d - 2), tức là d - 2 hàng từ dưới lên

m ứng dụng m

 hoán vị

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


3

Java (OpenJDK 8) , 201 196 byte

s->{for(int l=s.length()-1,i=-l,x=0;++i<l;x+=i<0?l:-l)System.out.printf("%1$"+(x<1?"":x)+"s"+s.join("%1$"+(i<0?-i:i>0?i:"")+"s",(new StringBuffer(s.substring(1)).reverse()+s).split(""))+"%n","");}

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

Đó là ý tưởng giống như ý tưởng mà tôi đã sử dụng cho thử thách trước đó , ngoại trừ chuỗi trình tạo giờ dài hơn một chút và khó xử lý hơn.

%1$Ns0%1$Ns9%1$Ns8%1$Ns7%1$Ns6%1$Ns5%1$Ns4%1$Ns3%1$Ns2%1$Ns1%1$Ns2%1$Ns3%1$Ns4%1$Ns5%1$Ns6%1$Ns7%1$Ns8%1$Ns9%1$Ns0%n

3

Python 3 , 134 124 byte

f=lambda s:'\n'.join([' '*(len(s)-1)*abs(len(s)-abs(i)-2)+(' '*abs(i)).join(s[::-1]+s[1:]) for i in range(2-len(s),len(s)-1)])

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

Bài đăng đầu tiên lên PPCG sau khi ẩn nấp một lúc. Tìm kiếm bất kỳ đề nghị / lời khuyên!


Cảm ơn @LyricLy và @ ukasz Rogalski vì những cải tiến!


1
Bạn không phải in đầu ra bên trong hàm, đầu ra có thể được đưa ra trong một giá trị trả về. Ngoài ra, bạn không phải đếm số lượng f=bằng cách, chỉ cần cung cấp một hàm ẩn danh là ổn.
LyricLy

1
Ngoài ra, -len(s)+2chỉ là 2-len(s), một byte ít hơn.
Łukasz Rogalski

Cảm ơn bạn @ ukasz Rogalski và @LyricLy; bạn đã tiết kiệm cho tôi 10 byte!
Đuổi theo Vogeli

3

Haskell, 177 163 byte

import Data.List
k n=[1..n]>>" "
f s=let n=length s in map(\x->(k(((n-1)*(n-(abs x)))))++(intercalate (k(abs x))$map(\z->[z])$((++)=<<reverse.tail) s))[n,n-1.. -n]

Hàm fnày là hàm thử thách và trả về một danh sách các chuỗi ( [String]), sử dụng unlinestrên nó sẽ cung cấp đầu ra trực quan giống như các trường hợp thử nghiệm (main = putStr $ unlines $ f "test string" để biên dịch nó).

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

-14 byte nhờ @nimi


1
kcó thể được định nghĩa là k n=[1..n]>>" "pnhư p=(++)=<<reverse.tail(bạn thậm chí có thể nội tuyến định nghĩa này).
nimi

2

Toán học, 141 byte

Column[Join[Reverse@(s=Row/@Table[Riffle[Reverse@Rest@b~Join~b,""<>Table[" ",i]],{i,0,Length[b=Characters@#]-1}]),Rest@s],Alignment->Center]&
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.