結果
問題 | No.64 XORフィボナッチ数列 |
ユーザー |
|
提出日時 | 2017-08-13 22:53:39 |
言語 | JavaScript (node v23.5.0) |
結果 |
AC
|
実行時間 | 67 ms / 5,000 ms |
コード長 | 2,738 bytes |
コンパイル時間 | 63 ms |
コンパイル使用メモリ | 5,120 KB |
実行使用メモリ | 39,168 KB |
最終ジャッジ日時 | 2024-10-13 00:18:50 |
合計ジャッジ時間 | 1,498 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 11 |
ソースコード
const xor = (a, b) => {let x = a, y = bif (x.length < y.length) {x = by = a}let u = ''if (x.length != y.length) {let d = x.length - y.lengthu = x.substr(0, d)x = x.substr(d)}let xl = x.split('')let yl = y.split('')let r = xl.map((e, i) => e ^ yl[i]).join('')return u + r}const plus = (a, b) => {let r = [], u = 0let x = a.concat().reverse(), y = b.concat().reverse()if (x.length < y.length) {let t = xx = yy = t}x.forEach((e,i) => {let k = e + u + (i < y.length ? y[i] : 0)u = Math.floor(k / 100000000)k %= 100000000r.unshift(k)})if (u != 0) r.unshift(u)return r}const minus = (a, b) => {let r = [], u = 0let x = a.concat().reverse(), y = b.concat().reverse()if (x.length < y.length) {let t = xx = yy = t}if (x.length == y.lenght) {for (let c = length - 1; c <= 0 ; c--) {if (x[c] > y[c]) breakelse if (x[c] < y[c]) {let t = xx = yy = tbreak}}}x.forEach((e,i) => {let k = e - u - (i < y.length ? y[i] : 0)if (k >= 0) u = 0else {u = 1k += 100000000}r.unshift(k)})let d = 0for (let c = 0; c < r.length; c++) {if (r[c] != 0) breakd++}for (; d > 0; d--) r.shift()return r}const binaryToDecimal = (a) => {let r = [0], p = [1]let b = a.split('').reverse()b.forEach((e) => {if (e != 0) r = plus(r, p)p = plus(p, p)})return r}const decimalToBinary = (a) => {let t = a.split('').reverse()let x = []t.forEach((e,i) => {let k = Math.floor(i / 8)x[k] = e + (x[k] === void 0 ? '' : x[k])})x.reverse()let b = [1]let bl = []while (true) {bl.push(b)if (ge(b, x)) breakb = plus(b,b)}let r = ''for (let c = bl.length-2; c >= 0; c--) {if (ge(x, bl[c])) {x = minus(x, bl[c])r += '1'}else r += 0}return r}const ge = (a, b) => {if (a.length > b.length) return trueif (a.length < b.length) return falsefor (let c = 0; c < a.length; c++) {if (a[c] < b[c]) return falseif (a[c] > b[c]) return true}return true}let i = require('fs').readFileSync('/dev/stdin', 'utf8').split('\n')[0].split(' ')let c = i[2] % 3let o = ''if (c == 0) o = i[0]else if (c == 1) o = i[1]else {if (i[0] > 10000000000000000 || i[1] > 10000000000000000) {let aa = decimalToBinary(i[0])let bb = decimalToBinary(i[1])let cc = xor(aa, bb)let rr = binaryToDecimal(cc)rr.forEach((e,i) => {o += ('00000000' + e).slice(-8)if (i == 0) o = parseInt(o, 10) + ''})}else o = i[0] ^ i[1]}console.log(o)