Matriks asenden

17

"Matriks naik" adalah matriks tak terbatas dari bilangan bulat (termasuk 0) di mana setiap elemen adalah elemen terkecil yang tersedia yang belum pernah digunakan sebelumnya pada baris dan kolom masing-masing:

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

Tugas Anda adalah menulis program yang akan menampilkan elemen yang ditemukan di baris dan kolom yang ditentukan oleh input. (input dan output standar)

Kasus uji:

5 3 -> 6
2 5 -> 5

Aturan Golf berlaku — kode terpendek menang.

PS Bahkan jika ini memiliki sifat algoritmik kode dapat sangat, sangat singkat.

EDIT: Saya tidak berharap melihat solusi xor begitu awal. Saya benar-benar berharap melihat 10 posting dengan pendekatan algoritmik dan MAKA solusi xor. Sekarang, mengingat bahwa tidak terlalu menyenangkan untuk melihat bagaimana menulis xor dalam berbagai bahasa, saya sarankan Anda juga mencoba pendekatan algoritmik.

Jadi, ya, saya pikir tidak ada yang bisa mengalahkan tanda 5 karakter sekarang — oleh karena itu saya mengucapkan selamat kepada Ilmari Karonen untuk solusi paling cerdas dan terpendek. Tapi ada tantangan baru di depan: tulis solusi algoritmik terpendek .

adrianton3
sumber
5
Xor bersifat algoritmik.
Peter Taylor

Jawaban:

10

GolfScript, 5 karakter

~(\(^

Memang, tugas ini sangat sederhana begitu Anda mengenali polanya. Satu-satunya canggung adalah pengindeksan berbasis 1 - jika indeks input berbasis nol, solusi 2 karakter ini sudah cukup:

~^

Untuk menjelaskan hal ini kepada pembaca yang tidak terbiasa dengan GolfScript, ~perintah ini mengevaluasi input, meninggalkan dua angka di tumpukan. ^kemudian XORs dua angka paling atas pada tumpukan bersama-sama, meninggalkan hasil untuk output. Untuk menangani input berbasis 1, diperlukan dua perintah lagi: (mengurangi angka paling atas pada stack menjadi satu, sementara \menukar dua item teratas pada stack.

Ilmari Karonen
sumber
1
Bisakah Anda jelaskan ^? Saya merujuk ke halaman Built-in GolfScript dan perbedaan Symmetric ; menggunakan operasi ini dengan dua set array masuk akal, tapi saya tidak mengerti cara kerjanya hanya untuk dua angka terpisah.
Rob
1
@ Mike: Ketika diterapkan pada angka, ^operator mengembalikan bitorenya XOR .
Ilmari Karonen
Itu adalah hubungan yang sangat keren :)
beary605
1
Anda benar dalam penilaian Anda terhadap respons saya, yang sejak itu saya hapus karena didasarkan pada kesalahan membaca tantangan.
DavidC
2

Mathematica 10 44

Edit

Tanggapan pertama saya didasarkan pada kesalahpahaman tentang sifat tantangan, seperti dicatat oleh Ilmari. Ini percobaan lain.

Pemakaian

f[n___, 1, n___] := n - 1;
j_~f~k_ := BitXor[j - 1, k - 1]
DavidC
sumber
@IlmariKaronen Saya pikir saya sudah benar kali ini. Tetapi bahkan tidak mendekati ukuran solusi Anda.
DavidC
2

K, 31

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

Mencuri logika XOR Ilmari Karonen, yang tidak akan pernah saya lihat sendiri.

tmartin
sumber
2

PHP, 38

Hanya implementasi sederhana XOR Ilmari Karonen

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

Pemakaian:

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

akan mencetak 6

scleaver
sumber
2

Haskell 174

Kupikir aku akan membuat solusi yang tidak bergantung pada XOR. Terlalu malas untuk bermain golf dengan benar.

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)

Sunting: Saya menyadari sehari kemudian bahwa ini hanya menghitung XOR. Jadi jika ini dianggap sebagai solusi algoritmik, maka Ilmari Karonen juga harus melakukannya.

walpen
sumber
2
Terlalu malas untuk bermain golf dengan benar. - harap kirimkan kiriman Anda untuk menjadi pesaing yang serius.
Jonathan Frech
2

Python 2, 36

Saya pikir karena saya baru mulai belajar Python bahwa ini akan menjadi waktu yang tepat untuk mengirimkan jawaban pertama saya menggunakannya (dan tidak ada yang menjawab menggunakan Python) dan mungkin saya bisa menerima umpan balik.

Terima kasih @IlmariKaronen untuk pintasan yang sangat keren.

Terima kasih @Gareth untuk kode di bawah ini.

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

Python 3, 56

Program asli yang saya tulis.

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

IDEONE dengan 2 dan 5

IDEONE dengan 3 dan 3

Mike Dtrick
sumber
Saya menganggap Anda menggunakan Python 2 daripada Python 3 - jika tidak mengabaikan komentar ini. inputsudah mengevaluasi input sehingga int()seharusnya tidak perlu. Juga karena Anda mendapatkan int langsung dari input()Anda bisa -1langsung melakukannya . Anda juga dapat menyingkirkan variabel perantara sepenuhnya dan langsung melakukannya print(input()-1^input()-1). Seperti apakah perlu atau tidak impor - pengguna Python lain di situs ini tidak memasukkannya untuk program yang digunakan input(), tapi saya bukan programmer Python jadi saya tidak bisa mengatakan apakah itu perlu atau tidak.
Gareth
@ Gareth Sebenarnya saya menggunakan Python 3, tapi saya suka saran Anda untuk digunakan print(input()-1^input()-1). Terima kasih atas bantuannya!
Rob
Bolehkah saya bertanya mengapa Anda mengimpor sys?
Jonathan Frech
2

MATL , 2 byte

Z~

Cobalah online!

MATL meng-post-date tantangan beberapa tahun, tetapi, hei, pengindeksan berbasis 1 alami dan fungsi bitwise xor menjadikan ini bagus dan rapi!

Giuseppe
sumber
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>

Luis felipe De jesus Munoz
sumber
0

Japt , 5 byte

UÉ^VÉ

Cobalah online!

Luis felipe De jesus Munoz
sumber