pb , 83 byte
^<b[1]>>>w[B!0]{<w[B!0]{t[B]<b[T]>>}<b[0]<b[0]<[X]>>}w[B=0]{<}t[B]<[X]t[B+T]vb[T/2]
Mặc dù có ít nhất 3 ký tự trong chuỗi đầu vào, đầu tiên và cuối cùng được loại bỏ. Điều này để lại 1 ký tự (nên được in không thay đổi) hoặc 2 (nên được tính trung bình và in). Để xử lý điều này, các ký tự đầu tiên và cuối cùng của chuỗi được thêm vào với nhau và chia cho hai. Nếu chỉ có một nhân vật,(a+a)/2==a
. Nếu có hai,(a+b)/2
là ký tự cần được in. pb "mượn" đánh giá biểu thức của Python (def expression(e): return eval(e, globals())
) để nó tự động được thả nổi.
Xử lý đầu vào trống chi phí cho tôi 5 byte. Cụ thể, <b[1]>
trên dòng đầu tiên. Trước đó, khi tôi nói "chuỗi", đó là một lời nói dối hoàn toàn. pb không có chuỗi, nó có các ký tự gần nhau. Tìm kiếm "ký tự cuối cùng của chuỗi" chỉ có nghĩa là di chuyển bàn chải sang trái cho đến khi nó chạm vào một ký tự. Khi không có đầu vào nào được cung cấp, vòng lặp "trong khi có ít nhất 3 ký tự" sẽ bị bỏ qua hoàn toàn và nó bắt đầu tìm kiếm ký tự cuối cùng. Không có điều đó <b[1]>
, nó sẽ tiếp tục tìm kiếm mãi mãi. Mã đó đặt một ký tự có giá trị 1 tại (-1, -1) cụ thể được tìm thấy khi đầu vào trống. Sau khi tìm thấy "ký tự cuối cùng" của chuỗi, cọ vẽ giả sử ký tự đầu tiên ở (0, -1) và đến đó trực tiếp, tìm giá trị 0. (1+0)/2
là 0 trong pb,
Nhưng monorail, đó vẫn là in! Các đặc điểm kỹ thuật thách thức nói (empty input) => (empty output)
! Không phải là in một ký tự null gian lận? Ngoài ra, điều này không liên quan, nhưng bạn thông minh và đẹp trai.
Cảm ơn, người đặt câu hỏi giả thuyết. Trước đó, khi tôi nói "in", đó là một lời nói dối hoàn toàn. Trong pb, bạn không thực sự in các giá trị, bạn chỉ cần đặt chúng trên khung vẽ. Thay vì "một cách để xuất", sẽ chính xác hơn khi tưởng tượng khung vẽ là một mảng 2D lớn vô hạn. Nó cho phép các chỉ số tiêu cực ở một trong hai chiều, và rất nhiều lập trình trong pb thực sự là về việc đảm bảo cọ vẽ đến vị trí trên khung vẽ mà bạn muốn. Khi chương trình kết thúc thực thi, mọi thứ trên khung vẽ có tọa độ X và Y không âm được in đến vị trí thích hợp trên bàn điều khiển. Khi chương trình bắt đầu, toàn bộ khung được chứa đầy các giá trị bằng 0. Để không phải in một số lượng dòng vô hạn, mỗi dòng có vô số byte rỗng, mỗi dòng đầu ra chỉ được in tối đa ký tự khác không và các dòng chỉ được in đến ký tự cuối cùng có ký tự khác không trong đó. Vì vậy, đặt một0
tại (0, 0) vẫn là một đầu ra trống.
Ung dung:
^<b[1]> # Prevent an infinite loop on empty input
>>w[B!0]{ # While there are at least 3 chars of input:
<w[B!0]{ # Starting at the second character:
t[B]<b[T]>> # Copy all characters one position to the left
# (Effectively erasing the first character)
}
<b[0]<b[0] # Delete both copies of the last character
<[X]>> # Get in place to restart loop
}
w[B=0]{<} # Go to last character of remaining string
t[B]<[X]t[B+T] # Find it plus the first character
vb[T/2] # Divide by 2 and print