완벽한 사각형 만 포함하는 파티션은 몇 개입니까?


16

음수가 아닌 정수 또는 자릿수 목록이 주어지면 선행 제로가있을 수있는 제곱 수를 연결하여 숫자를 얼마나 많은 방식으로 형성 할 수 있는지 결정하십시오.

input -> output # explanation
164 -> 2 # [16, 4], [1, 64]
101 -> 2 # [1, 01], [1, 0, 1]
100 -> 3 # [100], [1, 00], [1, 0, 0]
1 -> 1 # [1]
0 -> 1 # [0]
164900 -> 9 # [1, 64, 9, 0, 0], [1, 64, 9, 00], [1, 64, 900], [16, 4, 900], [16, 4, 9, 0, 0], [16, 4, 9, 00], [16, 49, 0, 0], [16, 49, 00], [16, 4900]

규칙

  • 표준 허점 적용
  • 이것은 이므로 바이트 단위의 최단 답변이 이깁니다.


숫자 목록으로 입력 할 수 있습니까?
완전히 인간적인

왜 1-> 1이지만 0-> 0입니까?
Jonah

@Jonah Typo ... xD
HyperNeutrino

1
@totallyhuman 물론입니다.
HyperNeutrino

답변:



7

젤리 , 8 바이트

ŒṖḌƲẠ€S

숫자 목록을 가져와 음이 아닌 정수를 반환하는 모나드 링크.

온라인으로 사용해보십시오! 또는 테스트 스위트를 참조하십시오.

어떻게?

ŒṖḌƲẠ€S - Link: list of digits              e.g. [4,0,0,4]
ŒṖ       - all partitions                         [[4,0,0,4],[4,0,[0,4]],[4,[0,0],4],[4,[0,0,4]],[[4,0],0,4],[[4,0],[0,4]],[[4,0,0],4],[4,0,0,4]]
  Ḍ      - convert from decimal list (vectorises) [[4,0,0,4],[4,0,   4 ],[4,    0,4],[4,      4],[   40,0,4],[   40,    4],[    400,4],     4004]
   Ʋ    - is square? (vectorises)                [[1,1,1,1],[1,1,   1 ],[1,    1,1],[1,      1],[    0,1,1],[    0,    1],[      1,1],        0]
     Ạ€  - all truthy? for €ach                   [        1,          1,          1,          1           0,            0,          1,        0]
       S - sum                                    5

6

하스켈 , 88 바이트

f x=sum[0.5|y<-mapM(\c->[[c],c:" "])x,all((`elem`map(^2)[0..read x]).read).words$id=<<y]

f문자열을 가져와 float를 반환 하는 함수 를 정의합니다 . 아주 느린. 온라인으로 사용해보십시오!

설명

내가 사용하고 내 하스켈 팁을 가진 문자열의 모든 파티션을 계산 mapM하고 words. 이 코드 조각 mapM(\c->[[c],c:" "])x'c'문자열의 모든 문자 를 한 x요소 문자열 "c"또는 두 요소 문자열로 바꾸고 "c "가능한 모든 조합의 목록을 반환합니다. 결과 중 하나를 가져 와서 y연결 words하고 결과를 호출 하면에 의해 삽입 된 공백이 분할됩니다 mapM. 이런 식으로 나는 x연속 된 부분 문자열로의 모든 파티션을 얻습니다 . 그런 다음 각 파티션 요소가 완벽한 정사각형 인 목록 (목록에서 찾음 [0,1,4,9,..,x^2])을 계산합니다. 경고는 각 파티션이 후행 공백 유무에 관계없이 두 번 계산된다는 것입니다.0.5s 대신 1s; 이것이 결과 유형이 부동 소수점 인 이유입니다.

f x=                       -- Define f x as
 sum[0.5|                  -- the sum of 0.5 for
  y<-                      -- every y drawn from
  mapM(\c->[[c],c:" "])x,  -- this list (explained above)
                           -- (y is a list of one- and two-element strings)
  all(...)                 -- such that every element of
                 id=<<y]   -- concatenated y
          .words$          -- split at spaces satisfies this:
                           -- (the element is a string)
   (...).read              -- if we convert it to integer
    `elem`                 -- it is an element of
    map(^2)                -- the squares of
    [0..read x]            -- the numbers in this list.


4

파이썬 (3) , 148 (139) 135 134 바이트

Arnold Palmer 덕분에 10 바이트.

def f(a):
 s=[a[:1]]
 for i in a[1:]:s=sum([[x+[i],x[:-1]+[x[-1]*10+i]]for x in s],[])
 return sum({n**.5%1for n in x}=={0}for x in s)

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


나는 이것을 다시 확인하지만 그것이 효과가 있다고 생각합니다. 140 자
Arnold Palmer

나는 놓 쳤어 사이의 공간으로 남게 %1하고 for...
아놀드 파머

교체 [[a[0]]]와 함께하는 [a[:1]]바이트 저장됩니다
아놀드 파머

우리는 함께 Haskell을 능가했습니다.
Leaky Nun

가장 중요한 부분은 부분적으로 덕분에 어제 내 거북이 답변 에 게시 할 때까지 사용하지 않은 세트 덕분이었습니다 .
Arnold Palmer

2

Mathematica, 141 바이트

Count[FreeQ[IntegerQ/@Sqrt[FromDigits/@#],1<0]&/@(FoldPairList[TakeDrop,s,#]&/@Flatten[Permutations/@IntegerPartitions[Length[s=#]],1]),1>0]&


입력 (숫자 목록)

[{1,6,4}]


나는 이것이 1649에 대한 잘못된 대답을 제공한다고 생각합니다 : 나는 정사각형 (즉 {1,64,9}, {16,4,9}{16,49}) 을 만드는 세 개의 파티션을 세지 만 함수는 4를 반환합니다.
트리가 아닙니다.

또한 Table[(function of s[[i]]),{i,Length[s=(stuff)]}]몇 번이나 같은 구조를 사용하는 것을 보았습니다 . 당신은 일반적으로 이것을 아래로 골프 수 있습니다 (function of #)&/@(stuff).
나무가 아님

1
@ Notatree 당신은 절대적으로 맞습니다! 나는 많은 변화를 주었고, 당신의 지시를 따르고 그것은 매력처럼 작동합니다! 감사합니다
J42161217

2

파이썬 2 , 173 163 바이트

lambda s:len([l for l in[''.join(sum(zip(s,[','*(n>>i&1)for i in range(len(s))]+['']),())).split(',')for n in range(2**~-len(s))]if {int(x)**.5%1for x in l}=={0}])

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

편집 : ArnoldPalmer로 인해 10 바이트가 절약되었습니다.


1
.5대신에 를 사용하여 바이트를 저장할 수 있습니까 0.5?
numbermaniac

할 수 있습니다. Leaky Nun의 Python 3 게시물에서 가져온 것과 동일한 트릭으로 일부 바이트를 저장할 수도 있습니다. 또한 귀하의 답변은 요소 수를 인쇄하지 않았지만 요소 자체를 인쇄했습니다. 그래서 추가했습니다. 출력을 유지하려면 추가 5 바이트를 뺀 것입니다. 163 바이트
Arnold Palmer

아놀드, 이해력이 뛰어나다
Chas Brown
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.