Bạn có thể mã vạch trong một thanh?


12

Chào mừng bạn đến quán bar piNapple, Melbourne. Tất cả những người chơi golf giỏi nhất đều ở đây, với máy tính xách tay của họ, lấy mẫu cocktail và lập trình ngày càng tệ.

Tôi cảm thấy một nhu cầu đặc biệt để nhấn mạnh lại điểm cuối cùng. Càng ngày càng tệ. Rượu có thể làm những điều buồn cười để lập trình logic.

Vì vậy - một vài trong số những người chơi Golf đã cố gắng thực hiện một số câu hỏi lồng nhau bằng các ngôn ngữ ngày càng kỳ lạ. Ai đó đã đạt được thứ tự thứ tư trong INTERCAL. Rồi dòng rượu dừng lại. Anh say sưa, vô tình xóa các thuật toán đọc mã vạch từ một máy tính hoàn toàn khác ... thậm chí còn không được kết nối với bất kỳ mạng nào! (Trẻ em - đừng INTERCAL. Vì lợi ích của bạn. Vì lợi ích của gia đình bạn.)

Thông thường, đây sẽ không phải là một vấn đề lớn. Nhưng, một số golfer đã thiết kế hệ thống từ nhiều năm trước và không có mã vạch nào là tiêu chuẩn. Giả sử 1 là các dòng và 0 là không gian, tất cả đều bắt đầu bằng 101 và kết thúc bằng 1001. Mọi thứ ở giữa là mã hóa ASCII 7 bit.

Người giữ cửa có một đầu đọc mã vạch ưa thích lớn sẽ trả về một chuỗi có độ dài tùy ý (mặc dù ít hơn 300 bit) của 1 và 0, thông qua STDIN, đối số hoặc tệp tùy thuộc vào chương trình của bạn. Và nó có thể tiến lên, hoặc lùi lại tùy theo cách mà chai được giữ. Chương trình của bạn phải trả về chuỗi từ giữa mã vạch, thông qua STERE hoặc tệp.

Thật không may, anh ta đã không chi tiêu nhiều cho việc lưu trữ của mình, vì vậy chương trình với nguồn ngắn nhất sẽ được chọn, và giành được đồ uống miễn phí và hướng dẫn lập trình say rượu từ những người chơi golf khác.

Chúc may mắn!


7
Nói cách khác, xác định xem đầu vào là 101...1001hoặc 1001...101đảo ngược trong trường hợp sau, sau đó đóng gói trung tâm thành byte.
John Dvorak

1
Hoàn toàn chính xác. Nhưng có gì vui trong đó? : p
lochok

Câu trả lời:


9

GolfScript, 30 ký tự

.-1%]$1=3>7/);{{1&}%2base}%""+

Đầu vào được cung cấp trên STDIN. Ví dụ :

> 1011000001100001010000111001
ABC

> 1001110000101000011000001101
ABC

1

J - 35 byte

_7(a.{~#.)\_4}.3}.|.^:([:-.2{])"."0

Giải thích đến sau :).


4
Bao nhiêu sau ;-)
Tim

0

Bình thường , 21

smCid2c:?zv@z2_z3_4 7

Giải trình:

        ?zv@z2_z           Input if 3rd character of input is 1, else reversed input.
       :        3_4        Slice out the middle portion, ASCII of the above string.
      c             7      Chop into 7 character chunks.
 mCid2                     Convert each chunk from binary to integer, then to a character.
s                          Sum up the characters into a string and print.

Lưu ý rằng trong khi câu hỏi cũ hơn ngôn ngữ, sự tồn tại của câu hỏi không ảnh hưởng đến thiết kế ngôn ngữ theo bất kỳ cách nào, bởi vì tôi chưa thấy câu hỏi trước ngày hôm nay.

Các quy tắc vẫn là quy tắc, vì vậy tôi sẽ biến nó thành CW.


OK, tôi sẽ làm cho nó CW.
isaacg

0

AWK, 116 byte

/101$/{r=1}{L=split($0,a,"")
n=r?L-2:3
N=r?-1:1
while(d<L-7){c=0
for(k=0;k<7;k++){c*=2;c+=a[n+=N];d++}printf"%c",c}}

Tôi biết câu hỏi này không thấy nhiều tình yêu, nhưng tôi tò mò về cách nhìn và AWKgiải pháp. Đây không phải là tất cả thông minh, nhưng nó dường như hoạt động và tôi không thấy bất kỳ khu vực rõ ràng để chơi golf. Ban đầu tôi đã đảo ngược chuỗi khi cần, nhưng điều đó đã thêm nhiều byte hơn là chỉ điều chỉnh logic tăng để di chuyển ngược lại.

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.