Đảo ngược và vuông


19

Trong thử thách này, bạn sẽ tính các số từ một chuỗi tò mò.

Đầu vào của bạn là một số nguyên không thập phân đơn. Đảo ngược các bit trong số nguyên này và sau đó bình phương số để có được đầu ra cần thiết.

Khi đảo ngược các bit, bạn không được sử dụng bất kỳ số 0 đầu nào trong đầu vào. Ví dụ:

26 (base 10) = 11010 (base 2) -> 01011 (base 2) = 11 -> 11*11 = 121

25 đầu vào / đầu ra đầu tiên của chuỗi này:

0: 0
1: 1
2: 1
3: 9
4: 1
5: 25
6: 9
7: 49
8: 1
9: 81
10: 25
11: 169
12: 9
13: 121
14: 49
15: 225
16: 1
17: 289
18: 81
19: 625
20: 25
21: 441
22: 169
23: 841
24: 9

Giải pháp của bạn nên làm việc cho các số nguyên có kích thước tùy ý. Nếu ngôn ngữ của bạn không có phương pháp tích hợp thuận tiện để sử dụng những ngôn ngữ đó, hãy thực hiện câu trả lời của bạn như thể nó có. Sau đó, bạn được miễn nếu câu trả lời của bạn phá vỡ cho số lượng lớn. Tuy nhiên, không sử dụng các thủ thuật / giới hạn chỉ hoạt động cho một miền hạn chế (chẳng hạn như bảng tra cứu).


Điểm của bạn là số byte của mã nguồn.

-50% tiền thưởng nếu bạn không bao giờ chuyển đổi số sang / từ nhị phân. Điều này không giới hạn đối với các nội trang, nếu bạn lặp qua từng bit một (bằng cách dịch chuyển hoặc che hoặc bất kỳ phương thức nào khác), nó cũng sẽ được tính là chuyển đổi. Tôi không biết liệu điều này có thực sự khả thi hay không, nhưng nó mang lại sự khích lệ để phát hiện ra một mô hình trong chuỗi.

Điểm số nhỏ nhất chiến thắng.



1
Nếu mã gọi một phương thức dẫn đến một chuỗi ký tự đại diện cho các bit, liệu nó có đủ điều kiện nhận thưởng không?
Brad Gilbert b2gills

2
@ BradGilbertb2gills Số
orlp

Tôi đoán rằng sử dụng toán học để trích xuất các bit cũng được tính là chuyển đổi nhị phân?
lirtosiast

Câu trả lời:


5

Mệnh , 5 byte

✶Σ⌐Σ²

Đó là đọc-nhị phân-đảo ngược-nhị phân-vuông.



@ CᴏɴᴏʀO'Bʀɪᴇɴ Bộ đếm byte đó giả sử UTF-8. Tôi tin rằng Mauris đang sử dụng một số mã hóa không phải là UTF-8 để đếm byte của mình, nhưng anh ấy đã không chỉ định mã hóa này.
orlp

Par sử dụng mã hóa kỳ lạ của riêng mình. Biểu diễn chính tắc của nó là một tập hợp con nhất định của <256 ký tự Unicode. Tôi không chắc nó có tên không; Tôi nên đợi @Ypnypn kêu vang.
Lynn

Ồ, tôi hiểu rồi. @orlp
Conor O'Brien

Có thể nó có SBCS riêng của mình?
HyperNeutrino

19

Toán học, 42 21 byte

Cảm ơn alephalpha vì đã giảm một nửa số điểm.

#~IntegerReverse~2^2&

Lý do thực sự tôi đã làm điều này trong Mathematica là vì tôi muốn xem xét một cốt truyện ... nó chắc chắn trông rất buồn cười:

nhập mô tả hình ảnh ở đây


11
Nhưng tôi thích điểm số! XD
Conor O'Brien

1
Tại sao câu trả lời này có nhiều phiếu hơn câu trả lời có ít byte nhất? o_O
Seadrus

27
@Seadrus Bạn biết họ nói gì. Một bức tranh có giá trị 7 byte.
Martin Ender

5
vì vậy điểm của bạn là 42 + 7 = 49 byte: P
Seadrus

3
Xin lỗi, @ CᴏɴᴏʀO'Bʀɪᴇɴ.
Martin Ender

8

Chồn 0,14 , 43 byte

Cảm ơn Mego đã truyền cảm hứng này.

n1{d1`,2$3*&$z2zd2%-2l$Md1%-;z2%*z2:{+}2;N.

Kiểm tra mã ở đâykiểm tra tất cả các trường hợp thử nghiệm ở đây .

Giải trình

Điều này sử dụng mối quan hệ lặp lại này:

a(0) = 0
a(1) = 1
a(2n) = a(n)
a(2n+1) = a(n) + 2^(floor(log_2(n))+1)

Nếu nlà đầu vào, thì đó a(n)là số kết quả sau khi chuỗi nhị phân của nó được lật. 0 và 1 là rõ ràng. Đối với a(2n) = a(n), hãy xem xét rằng x0(trong đó xbất kỳ chuỗi các chữ số nhị phân) được lật là 0x, giống như x. Đối với a(2n+1), lý do phức tạp hơn một chút. x1lật là 1x, tương đương x + 2^kvới một số k. Đây klà một trong nhiều hơn số chữ số trong x, đó là floor(log_2(n))+1. Công thức đầy đủ theo sau, ngoại trừ việc nó được sửa đổi một chút. Đây là những gì tôi thực sự mã:

a(0) = 0
a(1) = 1
a(n) = a(n//2) + (n%2) * 2^(floor(log_2(n - n%2)))

Khi Mego và tôi làm việc trong trò chuyện , floor(n/2) = (n - n%2)/2. Như vậy , log_2(floor(n/2))+1 = log_2(n - n%2). Hơn nữa, nhân bằng cách thu (n%2)gọn cả phần lẻ và phần chẵn thành một biểu thức.

Cuối cùng, không có thêm bất kỳ sự cố nào, đây là mã, giải thích.

n                                              Take number from input
 1{                                            Start recursion that takes only one element
   d1`,                                        1 if top of stack 0 or 1, 0 otherwise
       2$3*                                    26
           &                                   Jump if top of stack is not zero
            $z                                 Store top of stack in register (z)

               zd2%-                           n - n%2
                    2l$M                       log_2(n - n%2)
                        d1%-                   floor(log_2(n - n%2))
              2             ;                  2^floor(log_2(n - n%2))
                             z2%               n%2
                                *              Multiply
                                 z2:           n//2
                                    {          Recurse
                                     +         Add
                                      }        Return
                                       2;N.    Square it, output as number, and stop.

1
Tôi nghĩ rằng sự tái diễn chỉ là một sự cải tổ của việc lặp lại qua các bit riêng lẻ.
Martin Ender

3
Tôi sợ điều này không được tính. Bất cứ khi nào bạn nhìn thấy 2n2n+1trong một mối quan hệ lặp lại, bạn nên nghĩ ngay đến nó như là lặp qua các bit.
orlp

1
@orlp: Chà, đó là một người lập dị. Bây giờ tôi tin chắc rằng tiền thưởng của bạn là không thể.
El'endia Starman

@ El'endiaStarman Tôi gần như đã hiểu rồi.
Conor O'Brien

8

Japt , 29 28 11 7 byte

(Bạn có thể lưu chương trình dưới dạng tệp được mã hóa 7 byte IEC_8859-1, sau đó tải nó lên trình thông dịch .)

Japt được rút ngắn JavaScript được thực hiện bởi ETHproductions .

¢w n2 ²

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

Giải trình:

  1. ¢là lối tắt đến Us2, mà biên dịch thành U.s(2). Ulà đầu vào (ẩn), .s(2)được gọi bởi một số, gọi .toString(2)(chuyển đổi thành nhị phân, phân tích cú pháp dưới dạng chuỗi).

  2. wbiên dịch thành .w(), đảo ngược chuỗi ( .split('').reverse().join('')).

  3. n2hoạt động như parseInt(<number>,2), tức là chuyển đổi nhị phân thành thập phân.

  4. ²gọi Math.pow(<number>,2), tức là bình phương số.


1
Có một hàm chuỗi toNumber trên n, vì vậy bạn có thể làm Us2 a w a n2 p2. Làm tốt lắm!
Sản xuất ETH

1
Ngoài ra, whoạt động tương tự trên các chuỗi như trên các mảng, vì vậy bạn không cần hai chuỗia :)
ETHproductions

1
Một điều cuối cùng: Us2 = ¢, và p2= ², đưa nó xuống còn 7 byte:¢w n2 ²
Sản phẩm ETH

3
Trình thông dịch trực tuyến hiện chấp nhận các tệp được mã hóa IEC_8859-1. (Mặc dù tôi không chắc chắn cách thực hiện UTF-8 và UTF-16 ...)
ETHproductions

2
@ETHproductions - bây giờ tôi có thể +1 này :)
Chấn thương kỹ thuật số

5

Python, 32 byte

lambda x:int(bin(x)[:1:-1],2)**2

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

Mã này khá đơn giản: bin(6)ví dụ, cho 0b110, biểu diễn nhị phân của 6. [:1:-1]đảo ngược chuỗi và loại bỏ0b . intchuyển đổi chuỗi thành một số nguyên từ nhị phân và **2bình phương nó.


5

Jolf , 7 byte

Chỉ cần chạy nó.Đầu vào trên trang không hoạt động.

^C_Bj22

Giải trình

^C_Bj22
    j   numeric input
   B    convert to binary (str)
  _     reverse
 C   2  parse as binary integer to base 10
^     2 square
        implicit output

Tôi đã thêm Qlệnh, làm cho 6 byte này:QC_Bj2


4
Crossed out 7 vẫn trông giống như một 7.
một spaghetto

2
@quartata Không tệ như bị gạch bỏ 4.
orlp


4

Nghiêm túc , 8 7 byte

2;,¡R¿ª

Những thử thách như thế này là hoàn hảo cho Nghiêm túc :)

Dùng thử trực tuyến

Giải trình:

2;,¡    get a string representing the (decimal) input in binary, with a 2 on the bottom of the stack
R      reverse the string
¿    convert binary string to decimal int (using that extra 2 from earlier)
ª      square it

Công việc tuyệt vời phù hợp với Jolf!
Conor O'Brien

+1 để có thông dịch viên của bạn chấp nhận mã hóa CP437 (hoặc ít nhất là đại diện hex của nó)
Chấn thương kỹ thuật số

4

J, 10 9 byte

2^~|.&.#:

Đây là một động từ ngầm, đơn điệu. Hãy thử trực tuyến!

Cảm ơn @randomra vì đã chơi golf 1 byte!

Làm thế nào nó hoạt động

2^~|.&.#:  Right argument: y

       #:  Convert y to binary.
   |.      Reverse the digits.
     &.    Dual; apply the inverse of #:, i.e., convert back to integer.
 ^~        Apply power (^) with reversed argument order (~)...
2          to 2 and the previous result.

Liên kết không hoạt động, tôi gặp lỗi 404 trên trang google có nội dung "URL được yêu cầu /host/0B3cbLoy-_9Dbb0NaSk9MRGE5UEU/index.html không được tìm thấy trên máy chủ này. Đó là tất cả những gì chúng tôi biết."
bijan


2

JavaScript, 64 63 56 53 byte

n=>parseInt([...n.toString(2)].reverse().join``,2)**2

Tôi nhận ra tôi rất lâu, nhưng này, tôi có thể làm được: P

Bản giới thiệu


thay vì parseInt(bạn có thể làm+("0b"+
Downgoat

@Downgoat hm, nó không xuất hiện để cho kết quả chính xác.
nicael

[...n.toString(2)].join``
Conor O'Brien

1
Thậm chí ngắn hơn w / ES7 (49 byte) : n=>+("0b"+[...n.toString(2)].reverse().join``)**2. Chưa hoạt động trong bất kỳ trình duyệt nào
Downgoat

1
@ CᴏɴᴏʀO'Bʀɪᴇɴ Cảm ơn, điều này tiết kiệm một số byte.
nicael

2

Perl 6 , 21 byte

{:2(.base(2).flip)²}

Ví dụ sử dụng:

say {:2(.base(2).flip)²}(26); # 121

say (0..24).map: {:2(.base(2).flip)²};
# (0 1 1 9 1 25 9 49 1 81 25 169 9 121 49 225 1 289 81 625 25 441 169 841 9)

my &code = {:2(.base(2).flip)²};
say code 3; # 9

say chars code 10¹⁰⁰; # 140




1

Bình thường, 9 byte

^i_.BQ2 2

Đây là một câu trả lời dựa trên pyth rất đơn giản tương tự như câu hỏi Python


1

, 12 ký tự / 21 byte

⦅`ᶀ`+ᴙ(ïß2)²

Try it here (Firefox only).

Câu trả lời không cạnh tranh, 9 ký tự / 18 byte

⦅Յ+ᴙ(ïⓑ)²

Try it here (Firefox only).


1
Thông qua bộ đếm byte này , cung cấp 15 byte (sử dụng mã hóa khác).
nicael

Tôi chấm điểm bằng UTF-8 (cho đến khi tôi có thể làm cho mã hóa Mines hoạt động).
Mama Fun Roll

... tên của ngôn ngữ ... là hộp?
corsiKa

Đó là ESMin trong doublestruck. Các ký tự Unicode không được hỗ trợ đầy đủ.
Mama Fun Roll


1

TI-Basic (TI-84 Plus CE), 42 byte

Prompt X
0→S
While X
2S→S
If X/2≠int(X/2
S+1→S
End
S2
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.