리버스 앤 스퀘어


19

이 도전에서 당신은 호기심 시퀀스에서 숫자를 계산합니다.

입력은 음이 아닌 단일 십진수입니다. 이 정수의 비트를 뒤집은 다음 숫자를 제곱하여 필요한 출력을 얻습니다.

비트를 반전시킬 때 입력에 선행 0을 사용해서는 안됩니다. 예를 들면 다음과 같습니다.

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

이 시퀀스의 처음 25 개 입력 / 출력 :

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

귀하의 솔루션은 임의의 크기의 정수에서 작동해야합니다. 사용하는 언어에 편리한 기본 제공 방법이없는 경우처럼 대답을 구현하십시오. 그런 다음 답변이 많은 수의 경우 중단됩니다. 그러나 제한된 도메인 (예 : 조회 테이블)에서만 작동하는 트릭 / 바운드를 사용하지 마십시오.


점수는 소스 코드의 바이트 수입니다.

이진수로 / 숫자를 변환하지 않으면 -50 % 보너스. 이것은 내장으로 제한되지 않으며, 비트 단위로 이동하거나 (시프 팅 또는 마스킹 또는 다른 방법으로) 루프로 변환하면 변환으로 계산됩니다. 이것이 실제로 가능한지 모르겠지만 시퀀스에서 패턴을 발견하는 동기를 부여합니다.

가장 작은 점수가 이깁니다.



1
코드가 비트를 나타내는 문자열을 생성하는 메소드를 호출하는 경우 보너스를받을 수 있습니까?
브래드 길버트 b2gills

2
@ BradGilbertb2gills 번호
orlp

수학을 사용하여 비트를 추출하는 것도 이진 변환으로 계산한다고 생각합니까?
lirtosiast

답변:


5

Par , 5 바이트

✶Σ⌐Σ²

그것은 읽기 이진 역 이진 제곱입니다.



@ CᴏɴᴏʀO'Bʀɪᴇɴ 그 바이트 카운터는 UTF-8을 가정합니다. Mauris가 UTF-8이 아닌 일부 인코딩을 사용하여 바이트를 계산한다고 생각하지만이 인코딩을 지정하지 않았습니다.
orlp December

Par는 자체 이상한 인코딩을 사용합니다. 표준 표현은 <256 유니 코드 문자의 특정 하위 집합입니다. 이름이 있는지 확실하지 않습니다. @Ypnypn이 들어올 때까지 기다려야합니다.
Lynn

아, 알겠습니다 @orlp
Conor O'Brien

아마도 자체 SBCS가 있습니까?
HyperNeutrino

19

수학, 42 21 바이트

점수를 절반으로 줄인 alephalpha에게 감사합니다.

#~IntegerReverse~2^2&

내가 Mathematica에서 이것을 한 실제 이유는 줄거리를보고 싶었 기 때문에 ... 확실히 재미있게 보입니다.

여기에 이미지 설명을 입력하십시오


11
그러나 나는 점수를 좋아한다! XD
코너 오브라이언

1
이 답변에 바이트 수가 가장 적은 답변보다 더 많은 투표권이있는 이유는 무엇입니까? o_O
Seadrus

27
@Seadrus 당신은 그들이 말하는 것을 알고 있습니다. 그림의 가치는 7 바이트입니다.
Martin Ender

5
그래서 당신의 점수는 42 + 7 = 49 바이트입니다 : P
Seadrus

3
죄송합니다, @ CᴏɴᴏʀO'Bʀɪᴇɴ.
마틴 엔더

8

Minkolang 0.14 , 43 바이트

영감을 준 Mego에게 감사드립니다.

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

여기에 코드를 테스트 하고 여기에 모든 테스트 케이스를 확인합니다 .

설명

이것은이 되풀이 관계를 사용합니다.

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

n입력 인 경우 a(n)이진 시퀀스가 ​​뒤집힌 후의 결과 숫자입니다. 0과 1은 명백하다. 들면 a(2n) = a(n)것을 고려 x0(여기서 x뒤집혀 진 디지트 시퀀스는 임의) 0x과 동일하다, x. 의 경우 a(2n+1)추론은 좀 더 복잡합니다. x1뒤집혀이다 1x과 동등한 x + 2^k일부 k. 이것은 k자릿수의 수보다 하나 더 x입니다 floor(log_2(n))+1. 전체 수식은 약간 수정 된 것을 제외하고는 다음과 같습니다. 이것이 실제로 코딩하는 것입니다.

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

Mego와 저는 채팅에서 일했습니다 floor(n/2) = (n - n%2)/2. 따라서 log_2(floor(n/2))+1 = log_2(n - n%2). 또한 곱하기 (n%2)는 홀수 부분과 짝수 부분을 하나의 표현 으로 축소합니다.

마지막으로 더 이상 고민하지 않고 다음 코드를 설명했습니다.

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
재발은 개별 비트에 대한 반복의 재구성 일뿐이라고 생각합니다.
마틴 엔더

3
이것이 중요하지 않을까 걱정됩니다. 당신은 볼 때마다 2n2n+1재발 관계에 즉시 비트 이상 반복으로 생각한다.
orlp

1
@orlp : 글쎄, 그건 겁쟁이입니다. 보너스가 불가능하다고 확신합니다.
El'endia Starman

@ El'endiaStarman 거의 다 알았습니다.
Conor O'Brien

8

Japt , 29 28 11 7 바이트

(프로그램을 7 바이트 IEC_8859-1- 인코딩 된 파일로 저장 한 다음 인터프리터에 업로드 할 수 있습니다.)

Japt는 ETHproductions가 만든 JavaScript를 줄였습니다 .

¢w n2 ²

온라인으로 사용해보십시오!

설명:

  1. ¢에 대한 바로 가기는로 Us2컴파일됩니다 U.s(2). U.s(2)숫자에 의해 호출 된 입력 (암시 적)이며 호출 .toString(2)(2 진으로 변환하고 문자열로 구문 분석)합니다.

  2. w로 컴파일 .w()하여 문자열 ( .split('').reverse().join('')) 을 반대로합니다 .

  3. n2로 작동 parseInt(<number>,2)즉 변환 이진 소수점.

  4. ²를 호출합니다 Math.pow(<number>,2). 즉, 숫자를 제곱합니다.


1
toNumber에 문자열 함수가 n있으므로 할 수 있습니다 Us2 a w a n2 p2. 그래도 잘 했어!
ETHproductions

1
또한, w이 배열에서와 마찬가지로 당신이 두 필요가 없습니다, 문자열에 동일하게 작동 a의 :)
ETHproductions

1
마지막으로 : Us2 = ¢, p2= = ²7 바이트로 줄입니다.¢w n2 ²
ETHproductions

3
온라인 인터프리터는 지금 IEC_8859-1 인코딩 된 파일을 받아들입니다. (UTF-8 및 UTF-16을 수행하는 방법을 잘
모르겠지만

2
@ETHproductions-이제 나는 이것을 +1 할 수있다 :)
Digital Trauma

5

파이썬, 32 바이트

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

온라인으로 사용해보십시오.

이 코드는 매우 간단합니다. bin(6)예를 들어, 0b1106의 이진 표현은 [:1:-1]문자열을 되돌리고 제거합니다 0b. int문자열을 이진에서 정수로 변환하고 **2제곱합니다.


5

Jolf , 7 바이트

그냥하세요 페이지의 입력이 작동하지 않습니다.

^C_Bj22

설명

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

Q6 바이트를 만드는 명령을 추가했습니다 .QC_Bj2


4
7을 넘어 서면 여전히 7처럼 보입니다.
스파게티

2
@quartata 크로스 아웃만큼 나쁘지 않음 4.
orlp


4

진심으로 , 8 7 바이트

2;,¡R¿ª

이와 같은 과제는 심각하게 완벽합니다. :)

온라인으로 사용해보십시오

설명:

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

Jolf와 어울리는 멋진 직업!
코너 O'Brien

통역사가 CP437 인코딩 (또는 적어도 16 진 표현)을 수락하도록 +1
Digital Trauma

4

J, 10 9 바이트

2^~|.&.#:

이것은 암묵적인 동사입니다. 온라인으로 사용해보십시오!

1 바이트를 골라 낸 @randomra에게 감사드립니다!

작동 원리

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.

링크가 작동하지 않습니다. Google 페이지에 "요청한 URL /host/0B3cbLoy-_9Dbb0NaSk9MRGE5UEU/index.html을 찾을 수 없습니다"라는 404 오류가 표시됩니다. 이것이 전부입니다. "
Bijan


2

자바 스크립트, 64 63 56 53 바이트

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

나는 너무 오래 있다는 것을 알고 있지만, 할 수 있습니다. : P

데모


parseInt(당신 대신 할 수 있습니다+("0b"+
Downgoat

@ Downgoat hm, 올바른 결과를 나타내지 않습니다.
nicael

[...n.toString(2)].join``
코너 오브라이언

1
더 짧은 ES7 (49 바이트) : n=>+("0b"+[...n.toString(2)].reverse().join``)**2. 아직 브라우저에서 작동하지 않습니다
Downgoat

1
@ CᴏɴᴏʀO'Bʀɪᴇɴ 감사합니다. 일부 바이트가 절약됩니다.
nicael

2

펄 6 , 21 바이트

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

사용법 예 :

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


2

쉘, 25

dc -e2o?p|rev|dc -e2i?d*p

STDIN / STDOUT을 통한 입출력 :

$ echo 26|dc -e2o?p|rev|dc -e2i?d*p
121
$ 


1

Pyth, 9 바이트

^i_.BQ2 2

이것은 파이썬과 비슷한 매우 간단한 pyth 기반 답변입니다.


1

𝔼𝕊𝕄𝕚𝕟, 12 자 / 21 바이트

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

Try it here (Firefox only).

비경쟁 답변, 9 자 / 18 바이트

⦅Յ+ᴙ(ïⓑ)²

Try it here (Firefox only).


1
비아 바이트 카운터, 15 바이트 (다른 인코딩을 사용하여) 제공한다.
nicael

UTF-8을 사용하여 등급을 매 깁니다 (Mines 인코딩이 작동 할 때까지).
Mama Fun Roll

언어의 이름은 ... 상자입니까?
corsiKa

이중 공격으로 ESMin입니다. 유니 코드 문자는 완전히 지원되지 않습니다.
Mama Fun Roll


1

TI 기본 (TI-84 Plus CE), 42 바이트

Prompt X
0→S
While X
2S→S
If X/2≠int(X/2
S+1→S
End
S2
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.