n과 n ^ 3에 동일한 숫자 세트가 있습니까?


52

숫자 n이 주어지면 (0 <= n <= 2642245), n 과 n 3 에 동일한 숫자 세트가 있는지 확인 하고 그에 따라 참 또는 거짓 값을 출력하십시오.

예를 들어 숫자 100을 확인하십시오.

100 3 은 1000000입니다.

100의 숫자 세트는 {0, 1}입니다.

1000000의 숫자 세트는 {0, 1}입니다.

따라서 100은 진실한 가치를 제공해야합니다.

테스트 사례

0 -> True
1 -> True
10 -> True
107624 -> True
251894 -> True
251895 -> False
102343 -> False

이것은 이므로 바이트 수가 가장 적은 코드가 이깁니다.

OEIS A029795


28
제안 된 테스트 사례 : 106239
— Dennis

8
테스트 사례 : 2103869 -> True. long데이터 유형 으로 언어를 테스트하려면이 (또는 더 큰 언어)가 필요합니다 .
— mbomb007

5
64 비트 정수 유형이없는 언어의 경우 최대 값이 너무 큽니다.
— edc65

17
나는 당신이 기본 에 대해 명시 적이어야한다고 생각합니다 ... 이진에서는 재미의 절반 정도입니다 :-D
— The Vee

7
@ ZoltánSchmidt 106239은 작은 양의 정수 n은 같은 그 n³ - 1199090390129919이 -의 모든 숫자가 포함되어 있지 않습니다 , n은 . 일부 답변은 n 에 n³의 모든 숫자가 포함되어 있는지 확인하는 것이므로 106239에 대해 잘못된 결과를 얻었습니다 .
— Dennis

답변:


28

파이썬 3, 36 32 바이트

lambda x:{*str(x)}=={*str(x**3)}

필자는 이것이 Python 3.5 이상에서만 작동한다고 생각합니다. 구리 덕분에 4 바이트가 사라졌습니다.


8
파이썬 2에서는 6 바이트를 절약하면서 역학을 repr () 바로 가기로 사용할 수 있습니다. set(`x`)
— DenDenDo

9
@DenDenDo 2097152( sys.maxint**(1/3.))보다 크거나 작은 입력 sys.maxint+1은 False사용 하면 반환 됩니다 repr(). repl.it/EXs2/1 . 롱은 L끝에있다.
— mbomb007

9
테스트되지 않았지만 lambda x:{*str(x)}=={*str(x**3)}Python 3.5 이상에서 할 수 있습니다.
— 구리

1
@BenHoyt print (...)와 input ()을 사용하는 것보다 더 간결합니다. 기능을 만드는 것은 전체 프로그램을 만드는 것보다 짧습니다.
— 0WJYxW9FMN

1
질문이 truthy 또는 falsy 값이 충분히 돌아 말한다 때문에 교체 할 수 있습니다 ==로 ^. 두 개의 동일한 세트 {}가 거짓입니다.
— RemcoGerlich

19

05AB1E , 6 바이트

05AB1E는 CP-1252 인코딩을 사용합니다.

3mê¹êQ

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

설명

3m       # input^3
  ê      # sorted with duplicates removed
     Q   # is equal to
   ¹ê    # input sorted with duplicates removed

1
@PuzomorCroatia : 05AB1E는 CP-1252 인코딩을 사용하므로이 모든 문자는 각각 1 바이트입니다. 골프 언어는 UTF-8보다 인쇄 가능한 문자가 많은 코드 페이지를 사용하거나 자체 코드 페이지를 작성하는 것이 일반적입니다.
— Emigna

7
답변 해주셔서 감사합니다. 불행히도 내 의견을 편집하는 동안 의견을 삭제했습니다. 모든 사람에게 명확하게하기 위해 코드 골프 언어로 문자를 인코딩하는 방법에 대해 질문했습니다
— Puzomor Croatia

14

C, 73 바이트

k;b(i){k=0;while(i)k|=1<<i%10,i/=10;return k;}f(n){return b(n)-b(n*n*n);}

비트를 통해 세트를 만듭니다. 0같은 세트, 다른 세트에 대한 다른 것을 반환 합니다.

언 골프 드 :

k;
b(i){
  k=0;
  while(i)
    k|=1<<i%10,
    i/=10;
  return k;
}

f(n){
  return b(n)-b(n*n*n);
}

로 1 <<비트를 설정할 때 ungolfed 코드가 누락되었습니다 k |= 1 << i % 10. 훌륭한 솔루션!
— 1Darco1

1
나는하기 위해이 비트 맵 아이디어를 사용하는 39 바이트 - 64 기계 코드 기능 :
— 피터 코르

우리 0는 진실한 것으로 간주 될 수 있습니까? 나는 strcmp그렇게 작동한다고 생각 합니다. 그래서 C에서는 합리적으로 보입니다.
— Peter Cordes

1
이것은 int64 비트보다 큰 경우 질문에 필요한 전체 입력 범위에 대해서만 작동합니다 . 부호있는 64 비트로는 충분하지 않지만 부호없는 64 비트이면 충분합니다. 따라서 이것이 질문의 요구 사항을 충족시키는 곳을 알고있는 C의 실제 구현은 없습니다. ( unsigned long long, 또는 unsigned long64 비트 유형의 구현 에서만 올바르게 작동합니다 ). GNU C는 __int128_t헤더없이 64 비트 컴퓨터에서 정의합니다 .
— Peter Cordes

8

Perl, 31 + 2 ( -pl플래그) = 25 21 18 34 33 바이트

$_=($==$_**3)!~/[^$_]/*!/[^$=]/

사용 :

perl -ple '$_=($==$_**3)!~/[^$_]/*!/[^$=]/' <<< 251894

출력 : 1\n또는 0\n.

3 바이트는 @Dada, 1 바이트는 Gabriel Benamy, 버그 리포트는 @Zaid에 감사합니다.


1
좋은 대답입니다! 여전히 몇 바이트를 저장할 수 있습니다.perl -pe '$_=$_**3!~/[^$_]/'
— Dada

@Zaid Thanx. 결정된.
— Denis Ibaev

이제 다음에 대해 false를 출력합니다. 10(
— Zaid

@ 자이드 p. -l필요한 플래그.
— Denis Ibaev

2
변경 &&A와를 *바이트 저장
— 가브리엘 Benamy

7

Mathematica, 34 바이트

f=Union@*IntegerDigits;f@#==f[#^3]&

직접 구현 (하나의 정수 인수의 이름없는 함수).


7

젤리 , 8 바이트

,3*\D‘ṬE

온라인으로 사용해보십시오! 또는 모든 테스트 사례를 확인하십시오 .

작동 원리

,3*\D‘ṬE  Main link. Argument: n

,3        Pair; yield [n, 3].
  *\      Cumulative reduce by exponentation. Yields [n, n³].
    D     Decimal; yield the digit arrays of n and n³.
     ‘    Increment, mapping 0 ... 9 to 1 ... 10.
      Ṭ   Untruth (vectorizes); map digit array [a, b, c, ...] to the smallest
          of zeroes with ones at indices a, b, c, ...
       E  Test the results for equality.

6

CJam, 8 바이트

l_~3#s^!

테스트 스위트.

설명

l   e# Read input.
_~  e# Duplicate and evaluate.
3#  e# Raise to third power.
s   e# Convert back to string.
^   e# Symmetric set difference. Gives an empty list iff the two sets
    e# are equal.
!   e# Logical NOT.

6

자바 스크립트 ES6, 55 51 바이트

3 바이트의 Downgoat에 감사드립니다! ES7로 변환하고 n**3대신을 사용하여 바이트를 저장할 수 있습니다 n*n*n.

n=>(f=s=>[...new Set(s+[])].sort()+[])(n)==f(n*n*n)

충분히 간단합니다.


동등성에 대한 집합을 비교하는 더 좋은 방법이 없다는 것이 끔찍합니다
— njzk2

1
@ njzk2 글쎄, 더 큰 비극은 ==배열에서도 작동하지 않는다는 것입니다.
— 코너 오브라이언

로 변경 n*n*n하여 바이트를 저장할 수는 n**3있지만 ES6이 아닌 ES7 일 수 있습니다.
— Robert Hickman

1
@Downgoat 감사합니다. 바이트를 좀 더 절약 할 수있었습니다.
— Conor O'Brien

3
이 작업은 실패 2103869하고 문제를 해결하려면 솔루션이 명시 적으로 작동해야합니다 2642245.
— user5090812

6

C #을 241 208 205 201 193 233 222 220 212 203 177 159 바이트 (대체 109)

I=>{x=s=>{var a=new int[10];foreach(var h in s+"")a[h-'0']++;return a;};var i=x(I);var j=x(I*I*I);for(var k=0;k<10;)if(i[k]>0^j[k++]>0)return 0>1;return 1>0;};

람다는 구체적으로 다음 ulong유형을 사용해야합니다 .

System.Func<ulong, bool> b; // = I=>{...};
System.Func<ulong, int[]> x; // inner lambda

일부 바이트를 절약 한 @Corak 및 @Dennis_E 및 원래 솔루션의 문제를 찾은 @TimmyD에게 감사드립니다. ulong / long / decimal / etc 문제를 지적 해 주신 @SaxxonPike에게 감사합니다 (실제로 몇 바이트를 절약했습니다).


여기에 Java 답변과 비슷한 HashSets를 사용 하는 109 바이트 솔루션이 있지만 내 점수에 대한 원래 솔루션을 고수 할 것입니다.

using System.Collections.Generic;I=>{return new HashSet<char>(I+"").SetEquals(new HashSet<char>(I*I*I+""));};

p<0대신 확인할 수 있습니까 p==1?
— Yytsi

@TuukkaX 그렇게 했겠지만, 지금 세트를 결정하는 방식은 동일한 정수 배열을 사용하여 두 문자열에 대해 적절한 인덱스를 증가시키는 것이므로 0 또는 2의 값은 괜찮지 만 1이면 false를 반환해야합니다.
— Yodle

배열의 생성 및 채움을 별도의 람다로 추출하여 매우 적은 비용을 절약하십시오.n=>{Func<string,int[]>x=s=>{var a=new int[10];foreach(var c in s)a[int.Parse(c+"")]++;return a;};var i=x(n);var j=x((long)Math.Pow(int.Parse(n),3)+"");for(var k=0;k<10;)if(i[k]>0^j[k++]>0)return 0>1;return 1>0;};
— Corak

당신은 대체 할 수 int.Parse(c+"")와c-'0'
— Dennis_E

테스트 사례 2103869가 실패합니다. 같은 문제가 발생했습니다. (이유는 알 수 없다. 나는 long대신에 ulong이것을 사용
— 했고이

6

Java 8, 154 자

a->java.util.Arrays.equals((a+"").chars().distinct().sorted().toArray(),(new java.math.BigInteger(a+"").pow(3)+"").chars().distinct().sorted().toArray());

다음과 같이 호출됩니다.

interface Y {
    boolean n(int x);
}

static Y y = a->java.util.Arrays.equals((a+"").chars().distinct().sorted().toArray(),(new java.math.BigInteger(a+"").pow(3)+"").chars().distinct().sorted().toArray());

public static void main(String[] args) {
    System.out.println(y.n(0));
    System.out.println(y.n(1));
    System.out.println(y.n(10));
    System.out.println(y.n(107624));
    System.out.println(y.n(251894));
    System.out.println(y.n(251895));
    System.out.println(y.n(102343));
}

출력 :

true
true
true
true
true
false
false

람다와 멋진 숫자 대 문자열 변환을 포함한 스트림을 사용하는 Java 8-y 답변.

불행히도 우리는 정확하지 않은 double을 사용하는 Math.pow BigInteger.pow(3)대신에 사용해야 합니다 .Math.pow(a,3)2103869


그게 static Y y이상한 초기화 구문 y.n인데, 인터페이스에 정확히 하나의 멤버가 있기 때문에 자동 할당 됩니까?
— 고양이

그렇습니다. 솔직히 말해서 나는 직장이 여전히 7에 있기 때문에 Java 8을 처음 접했지만 그것이 작동하는 것으로 인식합니다.
— Hypino

컴파일러 @FunctionalInterface는 일반적인 익명 유형 인스턴스화 대신 람다를 작동 시키는 주석 (하나의 메소드 만있는 인터페이스, javadoc 참조)을 자동으로 추가합니다 .
— 1Darco1

이것은 본질적으로 동일 Y y = new Y() { @Override public boolean n(int x) { return Arrays.equals((a+"").chars().distinct().sorted().toArray(),(new BigInteger(a+"").pow(3)+"").chars().distinct().sorted().toArray()); } }하며 static수정자는 y.n(int)정적 기본 메소드에서 호출을 허용하기 위해 존재합니다 .
— 1Darco1

1
신경 쓰지 마라. 이것에 관한 메타 포스트를 읽으면 커뮤니티가 동의하는 것처럼 보인다. 이유를 알 수 있다고 생각합니다. 업데이트하겠습니다.
— Hypino

6

세게 때리다, 69, 59 바이트

최신 정보

bash 에서이 작업을 수행하는 또 다른 좋은 방법은 tr (62 바이트이지만 조금 더 압착 할 수 있음)을 사용하는 것입니다

T() { m=`bc<<<$1^3`;[ -z "`tr -d $m <<<$1;tr -d $1 <<<$m`" ];}

편집 : 좀 더 최적화 (Thx! @manatwork)

골프

T() { S(){ fold -1|sort -u;};bc<<<$1^3|S|diff - <(S<<<$1);}

테스트

TEST() {
 T $1 >/dev/null; echo $?
}

TEST 0
0
TEST 1
0
TEST 11
1
TEST 10
0
TEST 107624
0
TEST 251894
0
TEST 251895
1
TEST 102343
1
TEST 106239
1

0-성공 (종료 코드) 1-실패 (종료 코드)


나는 기본 이론이 완전히 잘못되었다는 것을 두려워합니다. 시도하십시오 T <<< 11. 11 ** 3 == 1331에는 원래 숫자에없는 숫자가 두 번 포함되어 있기 때문에 숫자 세트가 동일하다고 말할 것입니다.
— manatwork

그래, 당신은 정확하고 고정되어 있습니다! 감사합니다 !
— zeppelin

좋아, 이제 코드에 여분의 공간이 남았습니다. 에 -w명시 적으로 추가 한 이유가 확실하지 않습니다 fold. uniq옵션없이 사용 하면 sort -u교체 할 수 있습니다. 그리고 여기에 두 번째 S 호출에 문자열을 공급하십시오. 그리고 나는 전달 된 공식을 인용 할 필요가 없다고 생각한다 bc.
— manatwork

@manatwork, thx, fold 인수를 수정하고 공백을 제거했으며 두 번째 diff 인수를 here-doc로 사용했습니다. 이제 첫 번째 인수를 diff 로 파이프 하고 bc 표현식 주위의 불필요한 따옴표를 제거했습니다 . > uniq는 옵션없이 사용되며 sort -u는이를 대체 할 수 있습니다. 그것은 이전 버전의 잔재 일뿐입니다 ( uniq -u 였습니다 )). 감사합니다 !
— zeppelin

1
@ zeppelin : cmp대신 diff1 바이트를 사용 하고 저장할 수 있습니다 .
— Ipor Sircer

6

x86-64 기계 코드 기능, 40 바이트.

또는 0과 0이 아닌 값이 strcmp와 같이 "truthy"로 허용되는 경우 37 바이트입니다.

비트 맵 아이디어에 대한 Karl Napf의 C 답변 덕분에 x86은 BTS로 매우 효율적으로 작업 할 수 있습니다 .

기능 서명 : _Bool cube_digits_same(uint64_t n);, x86-64 System V ABI 사용. ( nRDI에서 부울 리턴 값 (0 또는 1)은 AL).

_Bool는 ISO C11에 의해 정의되며 일반적 으로 C ++과 동일한 의미로 #include <stdbool.h>정의 bool하는 데 사용됩니다 bool.

잠재적 절감 :

  • 3 바이트 : 역 조건 반환 (차가있는 경우 0이 아님). 또는 인라인 asm에서 : 플래그 조건 반환 (gcc6에서 가능)
  • 1 바이트 : EBX를 클로버 할 수 있다면 (이 기능은 비표준 호출 규칙을 제공합니다). (인라인 asm에서 그렇게 할 수 있음)
  • 1 바이트 : RET 명령어 (인라인 asm에서)

이것이 함수가 아닌 인라인 -asm 프래그먼트 인 경우 모두 가능하며, 이는 inline-asm의 경우 35 바이트가 됩니다.

0000000000000000 <cube_digits_same>:
   0:   89 f8           mov    eax,edi
   2:   48 f7 e7        mul    rdi          # can't avoid a REX prefix: 2642245^2 doesn't fit in 32 bits
   5:   48 f7 e7        mul    rdi          # rax = n^3, rdx=0
   8:   44 8d 52 0a     lea    r10d,[rdx+0xa]  # EBX would save a REX prefix, but it's call-preserved in this ABI.
   c:   8d 4a 02        lea    ecx,[rdx+0x2]

000000000000000f <cube_digits_same.repeat>:
   f:   31 f6           xor    esi,esi

0000000000000011 <cube_digits_same.cube_digits>:
  11:   31 d2           xor    edx,edx
  13:   49 f7 f2        div    r10         ; rax = quotient.  rdx=LSB digit
  16:   0f ab d6        bts    esi,edx     ; esi |= 1<<edx
  19:   48 85 c0        test   rax,rax     ; Can't skip the REX: (2^16 * 10)^3 / 10 has all-zero in the low 32.
  1c:   75 f3           jne    11 <cube_digits_same.cube_digits>

                                         ; 1st iter:                 2nd iter:                both:
  1e:   96              xchg   esi,eax   ; eax=n^3 bitmap            eax=n bitmap             esi=0
  1f:   97              xchg   edi,eax   ; edi=n^3 bitmap, eax=n     edi=n bmp, eax=n^3 bmp
  20:   e2 ed           loop   f <cube_digits_same.repeat>

  22:   39 f8           cmp    eax,edi
  24:   0f 94 d0        sete   al
                  ;; The ABI says it's legal to leave garbage in the high bytes of RAX for narrow return values
                  ;; so leaving the high 2 bits of the bitmap in AH is fine.
  27:   c3              ret    
0x28: end of function.

루프는 한 번 반복하는 가장 작은 방법 인 것 같습니다. 또한 루프 (REX 접두사와 다른 비트 맵 레지스터가없는)를 반복하는 것을 보았지만 약간 더 큽니다. 또한 PUSH RSI를 사용하고 test spl, 0xf/ jz를 한 번 반복 하여 시도했습니다 (ABI는 RSP가 CALL 전에 16B로 정렬되어야하므로 한 번 누르면 정렬하고 다시 한 번 잘못 정렬하므로). 아무 없다 test r32, imm8인코딩되므로 작은 방법은 IMM8 RSP에 대해 단지 낮은 바이트를 테스트하기 위해 (a REX 접두사 포함)도 4b TEST 명령으로했다. LEA + LOOP와 동일한 크기이지만 추가 PUSH / POP 명령이 필요합니다.

steadybox의 C 구현에 대해 테스트 범위의 모든 n에 대해 테스트되었습니다 (다른 알고리즘을 사용하기 때문에). 내가 본 다른 결과의 두 가지 경우에, 내 코드는 정확하고 steadybox는 잘못되었습니다. 내 코드가 모든 n에 맞다고 생각합니다.

_Bool cube_digits_same(unsigned long long n);

#include <stdio.h>
#include <stdbool.h>
int main()
{
    for(unsigned n=0 ; n<= 2642245 ; n++) {
        bool c = f(n);
        bool asm_result = cube_digits_same(n);
        if (c!=asm_result)
            printf("%u problem: c=%d asm=%d\n", n, (int)c, (int)asm_result);
    }
}

인쇄 된 유일한 행에는 c = 1 asm = 0 : C 알고리즘에 대한 위양성이 있습니다.

또한 uint64_t동일한 알고리즘의 Karl C 구현 버전에 대해 테스트 했으며 모든 입력에 대해 결과가 일치합니다.


기계 코드의 코드 골프 ? 이것이 진정한 숙달입니다!
— chx

@chx : 실제로 어셈블리 언어로되어 있으며 코드 크기를 최적화합니다. 16 진수 바이트를 직접 쓰지 않고 각 명령의 크기를 알고 있습니다 (또는 확인합니다). (내가 게시 한 것은 yasm으로 조립 한 다음 objdump -drwC -Mintel객체 파일에서 실행 하고 주석을 복사하는 것입니다.) 코드 크기를 최적화하는 것이 실제로 실제로 유용한 언어입니다. (그렇지만 부트 로더 나 데모와 같은 드문 경우에만 가능합니다. 일반적으로 이미 캐시 된 경우 성능을 저하시키지 않으면 코드 크기를 절약 할 가치가 있지만 디코딩 병목 현상과 캐시 누락을 피하는 것이
— 좋습니다

@chx :하지만 네, ASM에 골프 나를 여기 내 다른 답변을 참조하십시오 :) 몰래 들어, 늠름한처럼 감사를 느끼고 : SO에 만드는가
— 피터 코르

저는 조립에 있어 아주 오래된 모자입니다 (1987 년, Z80이 첫 번째 였지만). 불가능하다고 생각했을 것입니다.
— chx

@chx : 가끔 골프 만하는데, 보통 Hot Network Questions에서 asm에 합리적으로 보이는 것을 볼 때만 가능합니다. 일반적으로 문자열이 아닌 숫자가있는 항목입니다. 하지만 다른 사람들은 골프를하면서 골프를합니다. 다른 사람의 기계 코드 골프 답변을 볼 때까지 나는 그렇게 생각하지 않았습니다. 되었을 수 있습니다 이것 당신은 기계 코드 대신 ASM의 답은 ASM 소스 문자 바이트 셀 수 있다는 사실을 나에 흘려 주기도한다. anatolyg가이 질문을 포함하여 일부를 게시했습니다.
— Peter Cordes

5

하스켈, 47 바이트

n%p=[c|c<-['0'..],elem c$show$n^p]
f n=n%1==n%3

아주 느린. 로 테스트하십시오 c<-['0'..'9'].

의 문자열 표현에 포함되도록 모든 문자를 테스트하고 포함 된 문자 n의 목록을 만듭니다. 마찬가지로 n^3목록이 동일한 지 확인합니다.


Haskell은 리터럴 또는 목록에서 고유 한 요소를 반환하는 함수를 설정하지 않았습니까?
— 고양이

2
@cat 아니요. Haskell은 nub(고유 한 요소를 얻습니다) 및를 sort가져 오지만 긴 가져 오기가 필요합니다 import Data.List. 그럼에도 불구하고 48 바이트에서 매우 가깝습니다 import Data.List;q=sort.nub.show;f n=q n==q(n^3).
— xnor

왜 정렬해야합니까?
— 고양이

1
@cat nub은 첫 등장으로 순서를 유지 nub [3,1,3,2,1,2] == [3,1,2]합니다. 설정된 유형으로 변환되지 않지만 목록이 제공됩니다.
— xnor

오, 나는 Haskell이 원시적이며 정렬되지 않은 수집 유형을 가지고 있지 않다는 것을 결코 깨닫지 못했습니다.
— cat

5

Dyalog APL , 10 바이트

⍕≡⍕∪(⍕*∘3)

⍕≡ 인수의 텍스트 표현은

⍕∪ 인수 텍스트 표현의 결합

(⍕*∘3) 입방체 인수의 텍스트 표현?

TryAPL 온라인!

참고 : 큰 숫자의 경우 ⎕PP←34 ⋄ ⎕FR←1287(유효한 34 자리, 128 비트 부동 소수점)으로 설정하십시오.


1
n ^ 3의 고유 숫자는 n의 숫자보다 작을 수 없다고 가정하고 있습니까?
— ngn

반례의 존재를 증명할 수 있습니까?
— Adám

1
106239, 상단에 댓글보기
— ngn


5

자바 (7), (185) 178 자

import java.util.*;
boolean a(int n){return new HashSet(Arrays.asList((n+"").split(""))).equals(new HashSet(Arrays.asList((new java.math.BigInteger(n+"").pow(3)+"").split(""))));}

다음과 같이 전화하십시오 :

public static void main(String [] args) {
    System.out.println(0 + " -> " + a(0));
    System.out.println(1 + " -> " + a(1));
    System.out.println(10 + " -> " + a(10));
    System.out.println(107624 + " -> " + a(107624));
    System.out.println(2103869 + " -> " + a(2103869));
    System.out.println(251894 + " -> " + a(251894));
    System.out.println(251895 + " -> " + a(251895));
    System.out.println(102343 + " -> " + a(102343));
    System.out.println(106239 + " -> " + a(106239));
}

산출:

0 -> true
1 -> true
10 -> true
107624 -> true
2103869 -> true
251894 -> true
251895 -> false
102343 -> false
106239 -> false

(가져 오기 및 메소드 정의도 계산해야하는지 확실하지 않습니다 ... 어느 쪽이든 보았습니다. 코드 자체의 길이는 141 바이트에 불과합니다.)


가져 오기 / 사용은 실제로 바이트 수의 일부입니다. static 그래도 제거 할 수 있습니다 .
— Kevin Cruijssen

괜찮 감사. 제거되었습니다 static.
— QBrute

4

젤리 , 8 바이트

*3ṢQ⁼ṢQ$

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

설명:

       $    # As a monadic (single argument) link:
    ⁼       # Return true if the following are equal
     ṢQ     # The unique sorted elements of 'n'
  ṢQ        # and The unique sorted elements
*3          # of 'n^3'

입력 100 에서는 작동하지 않습니다 .
— Dennis

나는 그것을하지 않는 이유를 이해하지만 왜하지 않습니다 이 작품 ?
— DJMcMayhem

1
Jelly는 연산자 우선 순위없이 왼쪽에서 오른쪽으로 엄격하게 구문 분석되기 때문입니다. *3ṢQ⁼ṢQ$퀵 $그룹은 왼쪽에있는 두 개의 원자를 모나 딕 체인으로 묶기 때문에 의도 한대로 작동합니다 .
— Dennis

4

Pyth, 10 바이트

Pyth 답변에는 다양성이 충분하지 않으므로 하나가 아니라 두 개를 더 추가하십시오! 둘 다 10 바이트이며 106239샘플 입력 으로 테스트되었습니다 (다른 답변은 실패했습니다).

!s.++Q,`**

설명:

!s.++Q,`**QQQQ   Implicit input filling
        **QQQ    Q ^ 3
       `         repr(Q^3)
      ,      Q   [repr(Q^3),Q]
    +Q           [Q,repr(Q^3),Q]
  .+             Deltas ([Digits in Q but not in Q^3, digits in Q^3 but not in Q])
!s               Are both empty?

온라인 테스트 스위트를 사용하여 첫 번째 답변을 시도하십시오.

두 번째 답변 :

qFmS{`d,**

설명:

qFmS{`d,**QQQQ   Implicit input filling
        **QQQ    Q ^ 3
       ,     Q   [Q^3, Q]
  m              map over each element d of [Q^3, Q]:
     `d           the element's string representation
    {             with duplicates removed
   S              and sorted
qF               Fold over equality (are the two the same?)

온라인 테스트 스위트를 사용하여 두 번째 답변을 시도하십시오.


4

코 틀린 : 46/88/96 바이트

질문은 입력 출처를 지정하지 않으므로 일반적인 3 가지 입력 소스가 있습니다.


기능 : 46 바이트

fun f(i:Long)="$i".toSet()=="${i*i*i}".toSet()

첫 번째 프로그램 인수를 사용하는 main () : 88 바이트

fun main(a:Array<String>){val i=a[0].toLong();println("$i".toSet()=="${i*i*i}".toSet())}


표준 입력을 사용하는 main () : 96 바이트

fun main(a:Array<String>){val i=readLine()!!.toLong();println("$i".toSet()=="${i*i*i}".toSet())}


1
PPCG에 오신 것을 환영합니다! code-golf 때문에 입력 / 출력이 암시 적으로 지정됩니다 . 여기 에서 커뮤니티 합의 표준을 볼 수 있습니다 . 기능 개수가 충분해야합니다.
— AdmBorkBork

4

하스켈, 54 52 바이트

2 바이트를 절약 해 준 @Laikoni에게 감사합니다.

(%)=all.flip elem
k n|[a,b]<-show<$>[n,n^3]=b%a&&a%b

1
a%b=all(elem a)b을 함수로 선언 한 다음로 호출 b%a&&a%b하면 2 바이트가 절약됩니다.
— Laikoni

4

자바 스크립트 (ES6), 44 바이트

g=n=>n<1?0:g(n/10)|1<<n%10
n=>g(n)==g(n*n*n)

@KarlNapf의 우수한 C 답변 포트. ES7은를 통해 바이트를 저장합니다 n**3. JavaScript의 제한된 숫자 정밀도로 인해 최대 208063까지만 작동합니다. 최대 1290까지만 작동해야하는 경우 다른 바이트를 저장할 수 있습니다.


4

펄 6 , 22 바이트

{!(.comb⊖$_³.comb)}

넓히는:

{ # bare block lambda with implicit parameter 「$_」
  !(
    .comb # get a list of the graphemes ( digits )

    ⊖ # Symmetric Set difference

    $_³.comb # cube and get a list of the graphemes
  )
}

대칭 설정의 차이 「⊖」연산자는 빈 반환 설정 양측이 동등한 세트 (자동 설정으로 목록을 회전)하는 경우를. 이 시점에서해야 할 일은 논리적으로 뒤집는 것입니다.


당신은을 대체 할 수있는 $_단지로.
— 조 왕

4

C ++, 82 바이트

t(int a){int b=a*a*a,c,d;while(a|b)c|=1<<a%10,a/=10,d|=1<<b%10,b/=10;return c==d;}

함수 t (a)는 답을 반환합니다. int를 집합으로 사용합니다. 멋지게 인쇄 :

t(int a)
{
    int b = a*a*a, c, d;
    while(a|b) c|=1 << a%10, a/=10, d|=1 << b%10, b/=10;
    return c==d;
}

당신은 포함해야 #include<set>하고 using namespace std;golfed 코드와 바이트 카운트
— 고양이

@cat #include<set>대신algorithm
— 칼 Napf

@KarlNapf 오, 나는 모든 stdlib 컨테이너가 알고리즘을 통해 접근 가능하다고 생각했다.-내가 C ++에 대해 알고있는 것을 보여준다 :)
— cat

그것은 함수 "c"에 로컬 변수가 초기화되지 않았지만 c | = 1을 사용하는 것 같습니다 ...
— RosLuP

4

R, 65 79 70 바이트

걸리는 n표준 입력, 스플릿에서 n와 n^3한 자리에, 상기 두 세트를 비교한다. gmp패키지를 사용하여 큰 정수를 처리합니다 (이 단점을 지적한 Billywob 덕분입니다). 지금 사용 substring위로 잘라 n및 n^3제안에 대한 @MickyT에 감사합니다. (이전 버전을 사용 scan하고 gsub해키 방법으로.)

s=substring
setequal(s(n<-gmp::as.bigz(scan()),p<-1:1e2,p),s(n^3,p,p))

슬프게도 n일종의 BigInt 패키지를 사용하지 않으면 (대형 ) 작동 하지 않습니다. 참조 ?.Machine이 예를 비교해 보려면 등 가장 큰 정수에 대한 자세한 내용 및 부동 2600001^3R에로 울프 럼 알파
— Billywob

나는 그것을 직접 사용할 필요는 없지만 gmp패키지 가이 문제를 해결할 수 있는 것처럼 보입니다 .
— Billywob

아, 잘 잡아! 답변을 업데이트했습니다. 이제 gmp::as.bigz()큰 정수를 처리하는 데 사용 됩니다.
— rturnbull

사실 s=substring;setequal(s(n<-gmp::as.bigz(scan()),p<-1:1e4,p),s(n^3,p,p))
— 서브 스트링을

@MickyT 환상적인 제안! 나는 그런 substring식으로 사용될 수 있다는 것을 몰랐다 (나는 이제까지 만 사용했다 substr). 귀하의 제안을 반영하여 답변이 수정되었습니다.
— rturnbull

4

C ++ 14, 93 바이트

int b(auto i){int k=0;while(i)k|=1<<i%10,i/=10;return k;}int f(auto n){return b(n)-b(n*n*n);}

내 C 답변의 포트는 큰 숫자 ( L접미사로 전화)에 작동합니다 .


3

하스켈, 47 바이트

import Data.Set
s=fromList.show
f n=s n==s(n^3)

사용 예 : f 102343-> False.

Data.Set모듈의 세트를 사용합니다 . 도우미 함수 s는 숫자를 문자열 표현으로 바꾸고 문자로 설정합니다.


s$n^3?를 사용하여 여기에 바이트를 저장할 수 없습니까 ?

@ ais523 : 아니요. 어떤 (s n==s) (n^3)형식 오류가 발생 하는지를 번역하기 때문 입니다.
— 니미

3

Brachylog , 11 바이트

doI,?:3^doI

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

원래 답변에 문제가 있음을 지적 한 @DestructibleWatermelon에게 감사드립니다.

설명

(?)doI,           I is the Input sorted with no duplicates
       ?:3^       Compute Input^3
           doI    Input^3 sorted with no duplicates is I

나는이 고양이가 웃는 것을 좋아한다 : 3
— QBrute

3

PowerShell v2 +, 94 93 바이트

filter f($n){-join("$n"[0..99]|sort|select -u)}
(f($x=$args[0]))-eq(f("[bigint]$x*$x*$x"|iex))

(바이트 수에 포함되지 않은 명확성을위한 줄 바꿈)

첫 번째 줄은 정의 fA와 filter입력을 받아 (세부로 이동하지 않도록 여기에 우리의 목적 함수에 충분한 유사한 틱) $n와 다음을 수행 :

filter f($n){-join("$n"[0..99]|sort|select -u)}
       f($n)                                    # Input
                   "$n"                         # Cast as string
                       [0..99]                  # Index as char-array
                              |sort             # Sorted alphabetically
                                   |select -u   # Only select the -Unique elements
             -join(                          )  # Join those back together into a string
                                                 # Implicit return

두 번째 행의 입력을 받아 $args수행 f그것에 및 그것의 여부를 확인 -eq연간가 f수행 $x제곱. 명시 적 [bigint]캐스트에 주목하십시오. 그렇지 않으면 우리는 과학적 표기법으로 결과를 다시 얻습니다.

부울 결과는 파이프 라인에 남아 있으며 출력은 암시 적입니다.

PS C:\Tools\Scripts\golfing> 0,1,10,107624,251894,251895,102343,106239,2103869|%{"$_ --> "+(.\do-n-n3-same-digits.ps1 $_)}
0 --> True
1 --> True
10 --> True
107624 --> True
251894 --> True
251895 --> False
102343 --> False
106239 --> False
2103869 --> True

@ConnorLSW 덕분에 바이트를 절약했습니다.


처리해야 할 가장 큰 숫자는 길이가 약 20 자이므로 1 바이트를 저장 하는 "$n"[0..99]대신 대신 사용할 수 있습니다 [char[]]"$n".
— colsw

@ConnorLSW 다시 인덱싱 트릭이 있습니다. 나는 그것을 기억해야 할 것입니다.
— AdmBorkBork

100 자 미만을 사용한다고 보장되는 한, 일반 char[]변환 보다 쉽게 ​​저장할 수 있으며 , 나머지 코드는 배열을 비교하는 짧은 방법이 있다면 얻을 수있는만큼 좋습니다. ("$n"[0..99]|group).Name짐을 절약 하는 것과 같은 것을 사용 하지만 compare정확하게 빠르고 쉽게 골프하지는 않습니다.
— colsw

그것은 대답을 보지 않고 그것을 해결하기 위해 얻는 것입니다 ... 거의 같은 대답 ;-). 그러나 당신은 몇 가지 명백한 최적화를 놓쳤다 ;-)
— Joey

3

그루비, 35 51 문자 / 바이트

Groovy가 포함되어 있지 않은 것이 슬 sad습니다. 따라서 원래의 51 바이트 시도는 다음과 같습니다.

def x(def n){"$n".toSet()=="${n.power(3)}".toSet()}

**manatwork 덕분에 35 바이트 익명 클로저로 다시 작성되고 지수화되었습니다.

{"$it".toSet()=="${it**3}".toSet()}

원래 기능에 대한 몇 가지 테스트 사례 :

println x(0)
println x(1)
println x(10)
println x(107624)
println x(251894)
println x(251895)
println x(102343)

명명 된 클로저 c는 다음과 같이 호출 될 수 있습니다 println c.call(107624). 익명의 35 바이트 클로저는 다음과 같이 호출 할 수 있습니다.println ({"$it".toSet()=="${it**3}".toSet()}(107624))

출력 :

true
true
true
true
true
false
false

참고 : 코드 골프와 같은 것이 현재 존재한다는 것을 알았으므로 희망이 있습니다.


안녕하세요 Rado, PPCG에 오신 것을 환영합니다! 이것은 첫 번째 좋은 답변입니다, +1!
— NoOneIsHere 여기

클로저를 사용하여 47 문자 / 바이트로 더 많이 짜낼 수는 있었지만 여기에 새로운 것으로 인해 이전 답변을 편집 할 수 없으므로 다음과 같습니다.def c={"$it".toSet()=="${it.power(3)}".toSet()}
— Rado

1
익명의 기능이 허용됩니다. 그리고 **지수를 위해 연산자를 사용하십시오 .
— manatwork

감사합니다 @NoOneIsHere! 또한, 테스트 케이스 폐쇄를 요청하면 다음과 같이 교체 x(107624)해야합니다.c.call(107624)
— Rado

@manatwork 감사합니다! 익명 클로저를 사용하여 **아름다운 35 문자 / 바이트로 줄입니다.{"$it".toSet()=="${it**3}".toSet()}
— Rado

2

루비, 48 바이트

->n{(f=->x{x.to_s.chars.uniq.sort})[n]==f[n**3]}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.