오름차순 행렬


17

"오름차순 행렬"은 정수 (0 포함)의 무한 행렬로, 모든 요소가 해당 행과 열에서 이전에 사용되지 않은 가장 작은 사용 가능한 요소입니다.

  | 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 ...
. | ...............

당신의 임무는 입력에 의해 지정된 행과 열에서 찾은 요소를 출력하는 프로그램을 작성하는 것입니다. (표준 입출력)

테스트 사례 :

5 3 -> 6
2 5 -> 5

코드 골프 규칙이 적용됩니다. 가장 짧은 코드가 이깁니다.

추신 : 이것은 알고리즘 특성을 가지고 있더라도 코드는 매우 간결 할 수 있습니다 .

편집 : 나는 xor 솔루션을 그렇게 일찍 볼 것으로 기대하지 않았습니다. 나는 알고리즘 접근법과 xor 솔루션으로 10 개의 게시물을보고 싶었습니다. 이제 다른 언어로 xor를 작성하는 방법을 보는 것이 그리 재미 있지 않다는 것을 염두에두고 알고리즘 접근법을 시도하는 것이 좋습니다.

그렇습니다. 저는 아무도 5 자 마크를 이길 수 없다고 생각합니다. 따라서 Ilmari Karonen이 가장 똑똑하고 가장 짧은 솔루션을 축하합니다. 그러나 새로운 도전이 있습니다 . 가장 짧은 알고리즘 솔루션을 작성하십시오 .


5
Xor는 알고리즘입니다.
피터 테일러

답변:


10

GolfScript, 5 자

~(\(^

실제로이 작업은 패턴을 인식하면 매우 간단합니다. 유일한 어색한 비트는 1 기반 인덱싱입니다. 입력 인덱스가 0을 기준으로하는 경우이 2 자 솔루션으로 충분합니다.

~^

GolfScript에 익숙하지 않은 독자에게이를 설명하기 위해이 ~명령은 입력 을 회피 하고 두 숫자를 스택에 남겨 둡니다. ^그런 다음 스택의 최상위 숫자 두 개를 XOR하여 출력 결과를 남깁니다. 1 기반 입력을 처리하려면 두 가지 명령이 더 필요합니다. (스택에서 최상위 숫자를 하나씩 줄이면서 스택 \에서 최상위 두 항목을 바꿉니다.


1
설명해 주 ^시겠습니까? 나는 GolfScript Built-ins 페이지대칭적인 차이를 언급했다 ; 이 연산을 두 세트의 배열과 함께 사용하는 것이 의미가 있지만 두 개의 개별 숫자에 대해 어떻게 작동하는지 이해하지 못합니다.
Rob

1
@Mike : 숫자에 적용하면 ^연산자는 비트 XOR을 반환합니다 .
Ilmari Karonen

그것은 매우 멋진 관계입니다 :)
beary605

1
귀하는 본인의 응답에 대한 귀하의 평가에서 옳았으며, 그 이후로 나는 도전에 대한 오해에 기초하여 제거되었습니다.
DavidC

2

매스 매 티카 10 44

편집하다

첫 번째 답변은 Ilmari가 지적한 것처럼 도전의 본질에 대한 오해에 기초한 것입니다. 다른 시도가 있습니다.

용법

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

@IlmariKaronen 이번엔 내가 잘했다고 생각합니다. 그러나 솔루션의 크기에 가깝지 않습니다.
DavidC

2

K, 31

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

스톨 일 마리 카로 넨의 XOR 논리.


2

PHP, 38

Ilmari Karonen의 XOR의 간단한 구현

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

용법:

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

6을 인쇄합니다


2

하스켈 174

XOR에 의존하지 않는 솔루션을 만들 것이라고 생각했습니다. 제대로 골프를 치기에는 너무 게으르다.

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)

편집 : 나는 나중에 이것이 단지 XOR을 계산한다는 것을 깨달았습니다. 따라서 이것이 알고리즘 솔루션으로 간주된다면 Ilmari Karonen도 마찬가지입니다.


2
제대로 골프하기에는 게으르다. -진지한 경쟁자가 되려면 제출을 골프하십시오.
Jonathan Frech

2

파이썬 2, 36

방금 파이썬을 배우기 시작한 이래로 이것이 첫 번째 답변을 사용하여 완벽한 답변을 제출하기에 가장 좋은 시간이라고 생각합니다.

매우 멋진 지름길에 대해 @IlmariKaronen에게 감사합니다.

아래 코드에 대해 @Gareth에게 감사합니다.

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

파이썬 3, 56

내가 쓴 원래 프로그램.

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

2와 5를 가진 IDEONE

3과 3의 IDEONE


이 의견을 무시하지 않으면 Python 3 대신 Python 2를 사용한다고 가정합니다. input이미 입력을 평가하므로 int()필요하지 않습니다. 또한 직접 int를 받고 있기 때문에 곧바로 input()할 수 -1있습니다. 중개 변수를 완전히 제거하고 바로 갈 수도 있습니다 print(input()-1^input()-1). 가져 오기가 필요한지 여부와 관련 하여이 사이트의 다른 Python 사용자는을 사용하는 프로그램에 포함하지 않지만 input()Python 프로그래머는 아니므로 필요한지 말할 수 없습니다.
Gareth

@Gareth 실제로 Python 3을 사용하고 있었지만 사용 제안을 좋아합니다 print(input()-1^input()-1). 도와 줘서 고마워!
Rob

왜 수입하는지 물어봐도 sys될까요?
Jonathan Frech



0

자바 스크립트 13 바이트

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>


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.