16

양수 주어 의 수 찾을 알칸 과 탄소 원자를 무시 입체 ; 또는 동등하게 노드 가있는 레이블이없는 트리의 수는 모든 노드가 정도를 갖도록합니다 .n n 44

이것은 OEIS 시퀀스 A000602 입니다.

참조 : 파라핀-로제타 코드

를 들어 =7 , 대답은 9 때문에 헵탄 아홉 개 갖는 이성체 :

  • 헵탄 : HH2H2H2H2H2H

헵탄

  • 2- 메틸 헥산 : HH(H)H2H2H2H

2- 메틸 헥산

  • 3- 메틸 헥산 : HH2H(H)H2H2H

3- 메틸 헥산

  • 2,2- 디메틸 펜탄 : H3CC(CH3)2CH2CH2CH3

2,2- 디메틸 펜탄

  • 2,3- Dimethylpentane : H3CCH(CH3)CH(CH3)CH2CH3

2,3- 디메틸 펜탄

  • 2,4- Dimethylpentane : H3CCH(CH3)CH2CH(CH3)CH3

2,4- 디메틸 펜탄

  • H3CCH2C(CH3)2CH2CH

3,3- 디메틸 펜탄

  • H3CCH2C(CH2CH3)CH2CH3

3- 에틸 펜탄

  • H(H)2H(H)H

2,2,3- 트리메틸 부탄

3- 메틸 헥산 및 2,3- 디메틸 펜탄은 키랄 이지만, 여기서는 이성질체를 무시한다.

테스트 사례

=0

intput	output
=============
0	1
1	1
2	1
3	1
4	2
5	3
6	5
7	9
8	18
9	35
10	75
11	159
12	355
13	802
14	1858
15	4347
16	10359
17	24894
18	60523
19	148284
20	366319

3
나는 거라고 감동 누군가와 솔루션을 작성하는 관리하는 경우 연금술사를 !
ბიმო

@PeterTaylor Well 그것은 매번 숫자를 출력 할 수 있습니다
l4m2


@ l4m2 : 나는 대한 전에 사용 시퀀스 도전과 일부 번호 도전, 당신은 또한 대부분 쉽게 단항 출력을 사용할 수 있습니다. 그렇습니다 .TC ( bignums 사용 ) 일 가능성이 높습니다 . 공식적으로 증명하지는 않았습니다.
ბიმო

@BMO CM을 시뮬레이션 할 수있을 것 같습니다
l4m2

답변:


11

CJam ( 100 98 91 89 83 바이트)

1a{_[XX]*\_{_0a*}:E~\{E\_{ff*W%{0@+.+}*}:C~.+2f/}:D~.+C.+3f/1\+}q~:I*DE1$D.-X\+.+I=

stdin에서 입력을 가져오고 stdout으로 출력합니다. 이것은 및 0의 정의를 인라인하여 2 바이트를 절약하기 위해 입력 을 처리하지 않는 라이센스를 이용합니다 . 온라인 데모CD

NB는 매우 느리고 메모리 비효율적입니다. 배열을 트리밍함으로써 훨씬 빠른 버전을 얻을 수 있습니다 (3 바이트 이상). 온라인 데모 .

해부

000598(엑스)=1+엑스(에스;000598(엑스))000678(엑스)=엑스(에스4;000598(엑스))000599(엑스)=(에스2;000598(엑스)1)000602(엑스)=000678(엑스)000599(엑스)+000598(엑스2)
어디 (에스;에프(엑스)) 대칭 그룹의 사이클 인덱스를 나타냅니다. 에스 기능에 적용 에프(엑스).

나는 이것을 약간의 골퍼 분해로 조작 한 다음 중간 시퀀스를 찾아서 OEIS에도 있음을 발견했다.

000642(엑스)=(에스2,000598(엑스))000631(엑스)=(에스2,000642(엑스))000602(엑스)=000642(엑스)+엑스000642(엑스2)엑스000631(엑스)

이전 버전 C이 답변 에서 차단 (다항식으로 나눠 짐)을 재사용했습니다 . 훨씬 더 짧은 것을 찾았지만 체인 질문에 의한 답변을 업데이트 할 수 없습니다.

1a            e# Starting from [1]...
{             e# Loop I times (see below) to build A000598 by f -> 1 + Z(S_3; f)
  _[XX]*      e#   Copy and double-inflate to f(x^3)
  \_          e#   Flip and copy: stack is f(x^3) f(x) f(x)
  {_0a*}:E~   e#   Assign copy-and-inflate to E and execute
              e#   Stack: f(x^3) f(x) f(x) f(x^2)
  \           e#   Flip
  {           e#   Define and execute block D, which applies f -> Z(S_2;f)
              e#     Stack: ... f
    E\_       e#     Stack: ... f(x^2) f(x) f(x)
    {         e#     Define and execute block C, which convolves two sequences
      ff*     e#       Multiply copies of the second sequence by each term of the first
      W%      e#       Reverse
      {       e#       Fold
        0@+.+ e#         Prepend a 0 to the first and pointwise sum
      }*
    }:C~      e#     Stack: ... f(x^2) f(x)^2
    .+2f/     e#     Pointwise average
  }:D~        e#   Stack: f(x^3) f(x) f(x^2) Z(S_2;f(x))
  .+C         e#   Stack: f(x^3) f(x)*(f(x^2) + Z(S_2;f(x)))
  .+3f/       e#   Add and divide by 3 to finish computing Z(S_3; f)
  1\+         e#   Prepend a 1
}
q~:I          e# Read input to I
*             e# Loop that many times
              e# Stack: I+1 terms of A000598 followed by junk
D             e# Stack: I+1 terms of A000642 followed by junk
E1$D          e# Stack: A000642 A000642(x^2) A000631
.-X\+.+       e# Stack: A000602
I=            e# Extract term I


5

연금술사 (1547 바이트)

_->In_NN+2b+al+g
al+g+0NN->ak
al+g+NN->ah
ah+b->ah+m+d+z+a
ah+0b->C+Z+Q
Z+j+z->Z+j+d
Z+j+0z->M+s
M+g+b->M+g+r
M+g+h->M+g+d
M+g+0b+0h+q->J+U
J+o+h->J+o+m
J+o+a->J+o+d
J+o+0h+0a->2C+an+Q
an+j+h->an+j+d
an+j+0h->aC+s
aC+g->e+am+P
am+l+b->am+l+d
am+l+0b->al+s
ak+b->ak+m+d
ak+0b->C+aj+Q
aj+j+h->aj+j+b
aj+j+0h->I+n
I+f+e->I+f+a
I+f+b->I+f+m+d+z
I+f+0e+0b->C+ai+Q
ai+j+h->ai+j+b
ai+j+0h->aB+n
aB+f->H
H+z->H+d
H+a+e->H
H+0z+0e->G+i
G+i+0b->ag
G+i+b->az+b+n
az+f+0b->Out_a
az+f+b->G+b+n
G+f->G+t
ag+e->ag
ag+0e->af+t
af+i+e->af+i+a
af+i+0e->Out_a
Q->F+s
F+g+b->F+g+y
F+g+A->F+g
F+g+0b+0A->av+o
av+o+0m->w
av+o+m->m+ae+A
ae+m->ae+b
ae+0m->u+n
u+f+b->u+f+m
u+f+e->u+f+E
u+f+A->u+f+k+c
u+f+0b+0e+0A->ad
ad+c->ad+A
ad+0c->ac
ac+y->ac+d+c
ac+0y->ab
ab+c->ab+y
ab+0c->V+l
V+l+0k->x
V+l+k->aa+t
aa+i+0e->W
aa+i+e->Y
Y+E->Y+D+c
Y+0E->X
X+c->X+E
X+0c->aa+i
W+D->W+e
W+0D->V+P
x+E->x
x+d->x
x+b->x+k
x+0E+0d+0b->aw
aw+h->aw+d
aw+0h->aE+s
aE+g->p
p+b->p+2r
p+k->p+d
p+B->p
p+q->p
p+0b+0k+0B+0q->r+q+av+U
w+h->w+d
w+y->w+r
w+C->w+B+q
w+0h+0y+0C->aD+U
aD+o->j
U->au+s
au+g+b->au+g+d
au+g+0b->v
v+d->d+aA+t
aA+i+k->R
aA+i+0k->at
at+B->at+k+c
at+0B->L
L+c->L+B
L+r->L+b
L+0c+0r->as+n
as+f+b->as+f+r
as+f+0b->R
R+0e->K
R+e+q->ar+D+c
ar+e+q->ar+c
ar+0q->aq
aq+c->aq+q
aq+0c->R
K+D->K+e
K+h->K+b
K+0D+0h->ap+P
ap+l+b->ap+l+h
ap+l+0b->v
v+0d+k->v
v+0d+r->v
v+0d+0k+0r->o
s+0d->g
s+d->d+ao+t
ao+i->ao+P
ao+l->s
P->O+c
O+b->2c+O
O+0b->N
N+c->b+N
N+0c+e->O
N+0c+0e->l
n+b->n+c
n+0b->T
T+c->ay
T+0c->e+n
ay+c->b+T
ay+0c->f
t+d->t+c
t+0d->S
S+c->ax
S+0c->e+t
ax+c->d+S
ax+0c->i

온라인 데모 .

참고 : 이것은 매우 느립니다. 통역사로 테스트하면 어떤 한 번에 여러 번 규칙을 적용 지원 (예를 들어 내 한 - 메이크업은 당신이 파서의 버그를 해결 최신 버전이 있지만) 다음 두 가지 규칙을 추가하여 상당한 속도 향상을 얻을 수 있습니다 :

T+2c->b+T
S+2c->d+S

기존 규칙을 통해 경로를 인라인

T+c->ay
ay+c->b+T
S+c->ax
ax+c->d+S

부분 해부

높은 수준에서 이것은 CJam 답변과 동일한 접근 방식을 사용합니다.

연금술사의 계산 모델은 본질적으로 Minsky 레지스터 머신입니다 . 그러나 연금술사는 코드와 데이터의 동등성을 매우 잘 노출 시키며, 생산 규칙의 왼쪽에 많은 토큰을 효과적으로 허용함으로써 상태가 하나의 원자로 표시되는 데 제약을받지 않습니다. 원자의 튜플을 사용할 수 있습니다. (재귀 적이 지 않은) 서브 루틴을 허용합니다. 이것은 골프에 매우 유용합니다. 실제로 부족한 것은 매크로와 디버깅 가능성입니다.

배열의 경우 RM에서 상당히 골프 적으로 구현 할 수있는 페어링 기능을 사용하고 있습니다. 빈 배열은0, 그리고 선행 결과 엑스 배열 이다 (2+1)2엑스. 쌍을 이루는 하나의 서브 루틴이 있습니다. 서브 루틴이 호출 P되고 값 앞에 eto가 붙습니다 b. : 페어링 두 개의 서브 루틴이 있습니다 nunpairs은 b하기 eb; 및 tunpairs ded. 이를 통해 변수 사이에 약간의 셔플 링 데이터를 저장할 수 있었으며 이는 중요한 "단일"이동 "작업입니다.

a, b = b, 0

최소 17 바이트로 확장됩니다.

S+a->S+b
S+0a->T

여기서 S현재 상태 T는 다음 상태입니다. 그것에서 "이동"으로 수행되어야하기 때문에 비파괴 "복사", 더욱 고가 ab및 보조 tmp에서 "이동"이어 tmp가기 a.

난처

나는 프로그램에 골프를 치는 과정에서 다양한 변수를 서로 구별하고 약 60 개의 상태를 제거했으며, 그중 많은 사람들은 특히 의미있는 이름을 갖지 못했지만 완전히 골프를 치기 위해 미니어처를 썼으므로 이제는 이름을 완전히 해독 할 수 없습니다. 행운을 거꾸로 엔지니어링! 다음은 코드에 대해 몇 가지 가정을하지만 다른 연금술사 프로그램을 최소화하도록 적용될 수있는 최소값 (CJam)입니다.

e# Obfuscate / minimise Alchemist program

e# Tokenise
qN%[SNS]e_*S%

e# Get token frequencies for substitution purposes, special-casing the I/O ones
_["+" "0" "2" "->" "_" N "In_n" "n" "Out_tmp2" "tmp2"]-
$e`$W%1f=

e# Empirically we want a two-char input for n and a one-char one for tmp2
["In_n" "Out_tmp2" "n" "tmp2"]\+
["In_NN" "Out_a" "NN"] "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"1/:A+ A2m*:e_"NN"a-+
1$,<

er
_s,p

잠깐만 요 ... 통역사가 작동합니까? AFAICT ... 당신은 임의의 규칙을 선택한 다음 적용 할 수있는 횟수를 알아냅니다. 심지어 제대로 작동합니까?
ASCII-only

흠. 디버깅 가능성을 향상시키는 방법
ASCII 전용

@ASCII 전용으로 작동하지만 실제로는 작동하지 않습니다. 먼저 적용 가능한 규칙을 선택한 다음 적용 할 수있는 횟수를 계산합니다. 디버깅 가능성은 까다 롭습니다. 당시의 논문 프로젝트에 대한 나의 아이디어 중 하나는 이전 버전의 디버거가있는 GUI RM 편집기였습니다.
피터 테일러

하지만 ... 규칙 실행 순서는 프로그램 순서에 영향을 미치지 않습니다
ASCII 전용

@ASCII 전용입니다. 그래서 변수가 너무 많은 이유입니다. 그중 약 16 명만이 데이터이며 나머지는 상태입니다. 독립적 인 "이동"작업을 효과적으로 병렬화하여 비결정론을 골프에 사용했습니다.
피터 테일러

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