Ma trận tăng dần


17

"Ma trận tăng dần" là một ma trận vô hạn gồm toàn bộ số (bao gồm 0) trong đó bất kỳ phần tử nào là phần tử có sẵn nhỏ nhất chưa được sử dụng trước đây trên hàng và cột tương ứng:

  | 1 2 3 4 5 6 ...
--+----------------
1 | 0 1 2 3 4 5 ...
2 | 1 0 3 2 5 4 ...
3 | 2 3 0 1 6 7 ...
4 | 3 2 1 0 7 6 ...
5 | 4 5 6 7 0 1 ...
6 | 5 4 7 6 1 0 ...
. | ...............

Nhiệm vụ của bạn là viết một chương trình sẽ xuất phần tử được tìm thấy ở hàng và cột được chỉ định bởi đầu vào. (đầu vào và đầu ra tiêu chuẩn)

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

5 3 -> 6
2 5 -> 5

Quy tắc chơi gôn Code áp dụng mã số ngắn nhất giành chiến thắng.

PS Ngay cả khi điều này có bản chất thuật toán, mã có thể rất, rất súc tích.

EDIT: Tôi không mong đợi được thấy giải pháp xor sớm như vậy. Tôi thực sự hy vọng sẽ thấy 10 bài viết với cách tiếp cận thuật toán và THEN giải pháp xor. Bây giờ, hãy nhớ rằng không có gì thú vị khi xem cách viết xor bằng các ngôn ngữ khác nhau, tôi khuyên bạn cũng nên thử một cách tiếp cận thuật toán.

Vì vậy, vâng, tôi nghĩ không ai có thể vượt qua mốc 5 ký tự bây giờ, vì vậy tôi chúc mừng Ilmari Karonen vì giải pháp thông minh và ngắn nhất. Nhưng có một thách thức mới ở phía trước: viết giải pháp thuật toán ngắn nhất .


5
Xor là thuật toán.
Peter Taylor

Câu trả lời:


10

GolfScript, 5 ký tự

~(\(^

Thật vậy, nhiệm vụ này rất đơn giản một khi bạn nhận ra mô hình. Điểm khó xử duy nhất là lập chỉ mục dựa trên 1 - nếu các chỉ số đầu vào là không dựa trên, giải pháp 2 ký tự này sẽ đủ:

~^

Để giải thích điều này cho những người đọc không quen thuộc với GolfScript, ~lệnh sẽ tránh đầu vào, để lại hai số trên ngăn xếp. ^sau đó XOR hai số trên cùng trên ngăn xếp với nhau, để lại kết quả cho đầu ra. Để xử lý đầu vào dựa trên 1, cần thêm hai lệnh: (giảm số thứ tự cao nhất trên ngăn xếp một, trong khi \hoán đổi hai mục trên cùng của ngăn xếp.


1
Bạn có thể vui lòng giải thích ^? Tôi đã đề cập đến trang tích hợp GolfScriptsự khác biệt đối xứng ; sử dụng thao tác này với hai bộ mảng có ý nghĩa, nhưng tôi không hiểu cách thức hoạt động của nó chỉ với hai số riêng biệt.
Cướp

1
@Mike: Khi được áp dụng cho các số, ^toán tử trả về XOR bitwise của chúng .
Ilmari Karonen

Đó là một mối quan hệ rất tuyệt vời :)
beary605

1
Bạn đã đúng trong đánh giá của bạn về phản ứng của tôi, điều mà tôi đã loại bỏ vì dựa trên sự hiểu sai về thử thách.
DavidC

2

Toán học 10 44

Biên tập

Phản ứng đầu tiên của tôi dựa trên sự hiểu lầm về bản chất của thử thách, như Ilmari đã lưu ý. Đây là một thử khác.

Sử dụng

f[n___, 1, n___] := n - 1;
j_~f~k_ := BitXor[j - 1, k - 1]

@IlmariKaronen Tôi nghĩ rằng tôi đã nhận được nó ngay lúc này. Nhưng nó thậm chí không đến gần với kích thước của giải pháp của bạn.
DavidC

2

K, 31

{0b/:{(x|y)&~x~y}. 0b\:'-1+x,y}

Logic XOR của Stole Ilmari Karonen, mà tôi sẽ không bao giờ phát hiện ra.


2

PHP, 38

Chỉ cần thực hiện đơn giản XOR của Ilmari Karonen

<?php echo --$_GET['a']^--$_GET['b']?>

Sử dụng:

... / xor.php? a = 4 & b = 7

sẽ in 6


2

Haskell 174

Hình tôi sẽ tạo ra một giải pháp không dựa vào XOR. Quá lười để chơi golf đúng cách.

a 0 0=0
a b c
 |m==n=a(b-m)(c-n)
 |m>n=m+a(b-m)c
 |m<n=n+a b(c-n)
 where{g f=until(>f)(*2)1`div`2;m=g b;n=g c;}
main=do
 [x,y]<-fmap(map read.words)getLine
 print$a(x-1)(y-1)

Chỉnh sửa: Tôi nhận ra một ngày sau đó, đây chỉ là tính toán XOR. Do đó, nếu điều này được coi là một giải pháp thuật toán, thì Ilmari Karonen cũng vậy.


2
Quá lười để chơi golf đúng cách. - vui lòng đánh golf trình của bạn cho nó là một ứng cử viên nghiêm trọng.
Jonathan Frech

2

Con trăn 2, 36

Tôi hình dung vì tôi mới bắt đầu tìm hiểu Python rằng đây sẽ là thời điểm hoàn hảo để gửi câu trả lời đầu tiên của tôi bằng cách sử dụng nó (và không ai trả lời bằng Python) và có lẽ tôi có thể nhận được một số phản hồi.

Cảm ơn bạn @IlmariKaronen vì lối tắt rất tuyệt vời.

Cảm ơn bạn @Gareth cho mã dưới đây.

import sys
print(input()-1^input()-1)

Trăn 3, 56

Chương trình ban đầu mà tôi đã viết.

import sys
x=int(input())
y=int(input())
x-=1
y-=1
print(x^y)

Ý tưởng với 2 và 5

Ý TƯỞNG với 3 và 3


Tôi giả sử bạn sử dụng Python 2 chứ không phải Python 3 - nếu không bỏ qua nhận xét này. inputđã đánh giá đầu vào int()nên không cần thiết. Ngoài ra vì bạn đang nhận được một int trực tiếp từ input()bạn có thể làm -1ngay lập tức. Bạn cũng có thể loại bỏ hoàn toàn các biến trung gian và đi đúng print(input()-1^input()-1). Về việc có cần nhập hay không - những người dùng Python khác trên trang này không bao gồm nó cho các chương trình sử dụng input(), nhưng tôi không phải là lập trình viên Python nên tôi không thể nói có cần thiết hay không.
Gareth

@Gareth Thật ra tôi đang sử dụng Python 3, nhưng tôi thích đề xuất của bạn để sử dụng print(input()-1^input()-1). Cảm ơn bạn vì sự giúp đỡ!
Cướp

Tôi có thể hỏi tại sao bạn nhập khẩu sys?
Jonathan Frech

2

MATL , 2 byte

Z~

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

MATL sau ngày thử thách vài năm, nhưng, hey, lập chỉ mục dựa trên 1 tự nhiên và hàm xor bitwise làm cho điều này tốt đẹp và gọn gàng!



0

Javascript 13 byte

a=>b=>--a^--b

f=a=>b=>--a^--b

result = document.getElementById('result')
<input type="text" onkeyup="result.innerHTML = f(this.value.split(',')[0])(this.value.split(',')[1])" >
<p id="result"></p>


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.