Giúp tôi gỡ các dây này!


12

Dây của tôi đều rối!

Có khó chịu không khi dây bị rối? Chà, điều đó vừa xảy ra với tôi, vì vậy tôi muốn giúp tôi gỡ rối cho họ! Để thuận tiện cho bạn, tôi đã ngắt kết nối tất cả chúng khỏi thiết bị, nhưng tất cả chúng vẫn được kết nối với ổ cắm. Thách thức của bạn là tìm ra cách gỡ rối chúng!

Đầu vào

Đầu vào sẽ bao gồm khoảng trắng, đường ống và Xs (cả hai trường hợp). Đầu vào sẽ trông giống như thế này:

| | | |
 X  | |
| |  x 
|  X  |
| | | |

Chữ in hoa X có nghĩa là dây bên trái đi qua dây bên phải và chữ thường x có nghĩa ngược lại. Các dòng đầu tiên và cuối cùng sẽ luôn luôn là | | | |.... Bạn có thể lấy đầu vào dưới dạng một chuỗi được phân tách bằng dấu phẩy, một chuỗi các chuỗi, v.v ... Định dạng không nghiêm ngặt, miễn là nó có ý nghĩa và không chứa bất kỳ thông tin bổ sung nào.

Đầu ra

Đối với thử thách này, tôi không chỉ cần biết mình sẽ mất bao lâu, tôi còn cần biết chính xác phải làm gì. Vì vậy, hãy đưa ra một danh sách các cặp số nguyên có ký tự R hoặc L, không phân biệt chữ hoa chữ thường, đại diện cho hai dây để gỡ rối và cách nào (R có nghĩa là phải qua trái và ngược lại với L). Bạn cần cho tôi biết cách nào để mở ra chúng; Tôi không thể tự mình tìm ra điều đó. Đầu ra cũng khá linh hoạt, miễn là bạn xuất tất cả các cặp số nguyên + ký tự theo đúng thứ tự và bạn không xuất bất kỳ văn bản vô nghĩa nào thêm (dấu ngoặc, dấu phẩy, v.v.) đều ổn). Các dây có thể bằng 0 hoặc một chỉ mục, nhưng chỉ mục phải bắt đầu từ bên trái. Lưu ý rằng bạn phải gỡ rối từ dưới cùng, không phải trên cùng. Kiểu đầu ra phải nhất quán và vui lòng chỉ định cách bạn xuất ra nếu nó không rõ ràng. Trường hợp của nhân vật không nhất quán,

Đầu ra mẫu

Đối với đầu vào ví dụ ở trên, đầu ra sẽ giống như:

2 3 R
3 4 L
1 2 R

Định dạng đầu ra ở đây là danh sách các giá trị được phân tách bằng dòng mới. Đây là 1 chỉ mục.

Thông số kỹ thuật khác

Nó là hợp lệ để có X và x xếp chồng lên nhau theo thứ tự. Vì tôi lười biếng, tôi không muốn chuyển đổi dây xung quanh một cách không cần thiết, vì vậy đừng xuất bất cứ thứ gì cho những trường hợp này; nếu tôi thấy điều đó, tôi sẽ chỉ cần kéo nhẹ dây để làm cho chúng thẳng.

Cũng có giá trị khi có nhiều X và x xếp chồng lên nhau theo chiều dọc và miễn là không có dây nào liên quan đến các giao cắt khác, tôi không muốn có thêm bất kỳ động thái nào (vì tôi lười biếng). Do đó, nếu các ký tự X X x X x xhiển thị trong một cột mà không có bất kỳ giao cắt nào khác, đầu ra vẫn phải trống!

Trong trường hợp điều này không rõ ràng, R sẽ loại bỏ X và L loại bỏ x.

Có thể có hai giao điểm dây trong cùng một hàng, trong trường hợp đó thứ tự của hai lần hoán đổi này không thành vấn đề. Bạn sẽ không bao giờ có được một cái gì đó như thế | X X |(điều này không có ý nghĩa bởi vì nó ngụ ý rằng dây giữa đang được bắt chéo qua dây bên trái và bên phải của nó).

Không phải lúc nào cũng giao nhau ...

Đầu vào có thể là một ống duy nhất. Tuy nhiên, đầu vào sẽ không bao giờ để trống.

Giải pháp hợp lệ ngắn nhất sẽ thắng vào ngày 20 tháng 12!

Thêm ví dụ

Như tôi đã hứa:

ví dụ 1

Đầu vào

| | | | | |
| |  X   x 
 X  |  x  |
|  x  |  X 
 X   X  | |
| | | | | |

Đầu ra

1 2 R
3 4 R
2 3 L
5 6 R
1 2 R
4 5 L
3 4 R
5 6 L

Ví dụ 2

Đầu vào

| | |
 X  |
|  x 
| | |
|  X 
|  x 
| | |

Đầu ra

2 3 L
1 2 R

Ví dụ 3

Đầu vào

|

Đầu ra trống. Vâng, bạn phải đối phó với trường hợp này.

Ví dụ 4

Đầu vào

| |
 X 
 x 
 X 
 x 
 X 
 x 
 X 
 x 
 X 
 x 
| |

Đầu ra trống. Chỉ để cho vui thôi :).

Ví dụ 5

Đầu vào

| |
 X 
 X 
 x 
 X 
 x 
 x 
| |

Đầu ra vẫn trống ...


4
Có thể có hai cặp dây vướng vào cùng một hàng?
James Holdiness

1
@JamesHoldiness Vâng, đúng vậy. Trong trường hợp này, thứ tự không quan trọng. Tôi sẽ làm rõ điều đó trong câu hỏi. Cảm ơn!
HyperNeutrino

@JamesHoldiness Xong!
HyperNeutrino

Câu trả lời:


0

Befunge, 173 byte

Đầu vào được đọc từ stdin theo định dạng chính xác được đưa ra trong mô tả thử thách, mặc dù điều quan trọng là mọi dòng đều có độ dài chính xác và dòng cuối cùng phải bao gồm một dòng mới (tức là không chỉ EOF ở cuối dòng đó).

$1>>05p~$~:55+-#v_
$_^#`"N":+1g50$<>:2+3%1-05g6g+0v>!#:v#
vg50-1*2p51:-1_^#:<*2!!-*84p6g5<
 +#,.#$"R"\#\-#+5<^g51$_:0`6*\25g\v@_:#!.#:1#,
>+::25p6g\48*\6p48 *-:!^!:--1*2`0:<

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

Ý tưởng cơ bản cho giải pháp này là chúng tôi có một "mảng" theo dõi số vòng xoắn cho mỗi dây. Vì vậy, mỗi khi chúng ta gặp phải một vòng xoắn theo một hướng, chúng ta sẽ tăng số đếm cho dây liên kết, trong khi một vòng xoắn theo hướng khác sẽ làm giảm số đếm.

Đồng thời khi chúng tôi xử lý xoắn cho một dây cụ thể, chúng tôi cũng xem xét số vòng xoắn cho các dây ở bên trái và bên phải của nó. Nếu một trong số chúng khác không, chúng ta cần "xả" các vòng xoắn đó lên ngăn xếp, vì chúng sẽ không còn có thể được làm sáng tỏ bởi các vòng xoắn sau đó theo hướng ngược lại.

Sau dòng đầu vào cuối cùng, luồng đầu vào trả về EOF nhiều lần và các ký tự EOF này được hiểu là xoắn trong mỗi dây, ít nhất là cho mục đích xả. Điều này buộc chương trình phải xóa bất kỳ số lượng chưa xử lý nào trong mảng, nhưng nó sẽ không tạo ra bất kỳ số lượng xoắn mới nào.

Khi chúng tôi đã xử lý xong đầu vào, tất cả các lệnh gỡ rối các dây bây giờ sẽ nằm trên ngăn xếp. Điều này có nghĩa là chúng ta có thể bật chúng theo thứ tự ngược lại để đưa ra các hướng dẫn cần thiết để tháo dây từ dưới lên.


Điều này dường như làm việc hoàn hảo. Làm tốt lắm!
HyperNeutrino

Đây là câu trả lời chiến thắng. Làm tốt lắm! Ngoài ra, cảm ơn bạn đã kiểm tra các câu trả lời khác cho tôi! :)
HyperNeutrino

@AlexL. Cảm ơn. Đây là câu trả lời chiến thắng đầu tiên của tôi trên trang web. Không nghĩ rằng điều đó sẽ xảy ra với Befunge. :)
James Holdiness

Không vấn đề gì. Chúc mừng chiến thắng! Tôi khá ngạc nhiên cũng như bạn đã trả lời Befunge ngắn đến mức nào. :)
HyperNeutrino

4

Pyth - 26 25 byte

Rất đơn giản, có lẽ tôi có thể đánh golf bộ lọc.

fhhT_m+hB/xrdZ\x2@"RL"}\x

Hãy thử trực tuyến tại đây .


Nỗ lực tốt. Thật không may, nhân vật được xuất ra là không chính xác; nó dường như là R mỗi lần. Mặc dù cố gắng tốt; những con số được đưa ra một cách chính xác!
HyperNeutrino

@AlexL. Tôi thật ngu ngốc, tôi đã lật các đối số thành in, sửa lỗi và nó cũng tiết kiệm cho tôi một byte
Maltysen 4/12/2016

Tôi hiểu rồi. Câu trả lời tốt đẹp! Có một upvote. :)
HyperNeutrino

2
Nếu tôi không nhầm, điều này dường như không xử lý trường hợp bạn có X và x xếp chồng lên nhau theo chiều dọc. Nó bảo bạn trao đổi dây qua lại một cách không cần thiết.
James Holdiness

4

JavaScript (ES6), 178 byte

f=([t,...a],r=[])=>a[0]?t.replace(/x/gi,(c,i)=>(c=c<'x'?'R':'L',i=++i/2,r.reduce((f,[j,,d],n)=>f||i<j+2&&j<i+2&&(j-i|c==d||r.splice(n,1)&&2),0)<2?r=[[i,i+1,c],...r]:r))&&f(a,r):r

Lấy đầu vào là một chuỗi các chuỗi đại diện cho các dòng và trả về một mảng các giá trị, vd [[2, 3, "R"], [3, 4, "L"], [1, 2, "R"]]. Thứ tự ngược giúp loại bỏ.


Bạn đến stừ đâu Tôi đang chạy nó trên repl.it và nó nói với tôi rằng có một ReferenceError: s is not defined.
HyperNeutrino

@AlexL. Rất tiếc, tôi đã vô tình dán vào phiên bản trước của mã mà tôi chưa hoàn thành việc chơi gôn. Nên sửa ngay.
Neil

@JamesHoldiness Câu hỏi đã được thay đổi kể từ khi tôi gửi câu trả lời, tôi phải cập nhật nó.
Neil

@JamesHoldiness Yep. Xin lỗi về điều đó, Neil. Tôi chỉ cần làm rõ một số phần của câu hỏi mà tôi đã không làm rõ trước đó.
HyperNeutrino

@JamesHoldiness Tôi nhận ra rằng, đó là lý do tại sao tôi đã đánh dấu câu trả lời của mình là không soạn thảo vì nó đã trả lời một lần lặp lại trước đó của câu hỏi, cho đến khi tôi có thể cập nhật nó theo yêu cầu hiện tại.
Neil

2

Python 2, 244 241 byte

m=[]
for l in input():
 for i in range(len(l)):
  c=l[i];a=i/2+1;L,R=[a,a+1,'LR'[c>'v']],[a,a+1,'RL'[c>'v']];x=m.index(L)if L in m else-1;M=zip(*m[:x+1])
  if c in'xX':
   if x>=0and(a in M[1]or a+1in M[0])<1:del m[x]
   else:m=[R]+m
print m

Lấy đầu vào là danh sách các chuỗi

Thí dụ:

Đầu vào: ['| | | |', ' X | |', '| | x ', '| X |', ' x | |']

Đầu ra: [[1, 2, 'L'], [2, 3, 'R'], [3, 4, 'L'], [1, 2, 'R']]

Chỉnh sửa: Đã sửa cho trường hợp:

Đầu vào: ['| | |', ' X |', ' X |', ' x |', '| X', ' X |', ' x |', ' x |', '| | |']

Đầu ra: [[1, 2, 'L'], [2, 3, 'R'], [1, 2, 'R']]


@JamesHoldiness Nên sửa ngay.
TFeld

Có vẻ như bây giờ nó hoạt động tốt!
HyperNeutrino

@JamesHoldiness Vâng, đó có vẻ là một vấn đề. Hãy sửa nó đi, TFeld. Nếu không, cố gắng tốt đẹp!
HyperNeutrino

@AlexL. Nên sửa ngay bây giờ
TFeld 6/12/2016
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.