SHOW:
|
|
- or go back to the newest paste.
1 | (* | |
2 | ||
3 | Revision: Dec 22 2012 New age dawn! :-D | |
4 | ||
5 | -Minor corrections made inside the comments for clarity and readability. | |
6 | ||
7 | Written on my host machine: | |
8 | ||
9 | - | Elder draft at http://pastebin.com/f6up8Zqb -- Don't use such brain-damage code (It has at least 4 ugly bugs already fixed here). |
9 | + | |
10 | * Slackware GNU Linux distro version 14 | |
11 | * Free Pascal Compiler 2.6.2 | |
12 | ||
13 | *) | |
14 | ||
15 | program a_first_half_factorial_of_terms_for_a217626; | |
16 | ||
17 | label | |
18 | The_end; | |
19 | ||
20 | (* | |
21 | ||
22 | Devised and released for documentation purposes under the terms of use of | |
23 | "The On-Line Encyclopedia Of Integer Sequences" (OEIS.org). | |
24 | ||
25 | For details please visit: http://www.oeis.org | |
26 | ||
27 | ||
28 | - | When it is used properly, this code should help you to find the first ( (12!/2)-1 ) terms |
28 | + | |
29 | - | of A217626, a task for which you need to have stored at least the first ( (12!/2)+1 ) terms |
29 | + | |
30 | - | of A215940. |
30 | + | |
31 | When it is used properly, this code should help you to find the first (B!-1) terms | |
32 | of A217626, a task for which you need to have stored at least the first (B-1)! terms | |
33 | of A215940. For now it is assumed that everything is done reading the numbers in base B, | |
34 | and then translating such into decimal for verifying the definition of A215940 for finally | |
35 | converting the results back to base B, when it is guessed that the final answers are the | |
36 | terms for the base-B version of A217626. | |
37 | ||
38 | The idea behind this processing was taken from a test session under PARI/GP like: | |
39 | ||
40 | x=[6,0,1,2,3,4,5,7,8,9,10,11]; | |
41 | z=sum(y=1,12,x[y]*12^(12-y)); | |
42 | print(z); | |
43 | ||
44 | This program is not expensive in lines of code and extra details such as tech checkings... | |
45 | - | base=12; |
45 | + | |
46 | subtle reason previously mentioned, this code goes without any warranty whatsoever. | |
47 | ||
48 | *) | |
49 | ||
50 | const | |
51 | base=13; | |
52 | faked_base=10; | |
53 | ||
54 | type | |
55 | ptr_int64= ^int64; | |
56 | ptr_pizza= ^pizza; | |
57 | pizza= array [1..base] of int64; | |
58 | ||
59 | const | |
60 | either_napole_or_sicilian: ptr_pizza = nil; (* PLEASE, always remember to initialize this properly!!! *) | |
61 | swissknife: ptr_int64 = nil; (* The same principle applies here *) | |
62 | ||
63 | (* | |
64 | ||
65 | Dear user, | |
66 | ||
67 | Sorry: You need to change properly the following two arrays when modifying base. | |
68 | - | (base*base*base*base*base*base*base*base*base*base*base, |
68 | + | |
69 | My apologizes for this. | |
70 | ||
71 | *) | |
72 | ||
73 | power: pizza= | |
74 | (base*base*base*base*base*base*base*base*base*base*base*base, | |
75 | base*base*base*base*base*base*base*base*base*base*base, | |
76 | base*base*base*base*base*base*base*base*base*base, | |
77 | base*base*base*base*base*base*base*base*base, | |
78 | base*base*base*base*base*base*base*base, | |
79 | base*base*base*base*base*base*base, | |
80 | base*base*base*base*base*base, | |
81 | base*base*base*base*base, | |
82 | - | (faked_base*faked_base*faked_base*faked_base*faked_base*faked_base*faked_base*faked_base*faked_base*faked_base*faked_base, |
82 | + | |
83 | base*base*base, | |
84 | base*base, | |
85 | base, | |
86 | 1); | |
87 | ||
88 | faked_power: pizza= | |
89 | (faked_base*faked_base*faked_base*faked_base*faked_base*faked_base*faked_base*faked_base*faked_base*faked_base*faked_base*faked_base, | |
90 | faked_base*faked_base*faked_base*faked_base*faked_base*faked_base*faked_base*faked_base*faked_base*faked_base*faked_base, | |
91 | faked_base*faked_base*faked_base*faked_base*faked_base*faked_base*faked_base*faked_base*faked_base*faked_base, | |
92 | faked_base*faked_base*faked_base*faked_base*faked_base*faked_base*faked_base*faked_base*faked_base, | |
93 | faked_base*faked_base*faked_base*faked_base*faked_base*faked_base*faked_base*faked_base, | |
94 | faked_base*faked_base*faked_base*faked_base*faked_base*faked_base*faked_base, | |
95 | faked_base*faked_base*faked_base*faked_base*faked_base*faked_base, | |
96 | faked_base*faked_base*faked_base*faked_base*faked_base, | |
97 | faked_base*faked_base*faked_base*faked_base, | |
98 | faked_base*faked_base*faked_base, | |
99 | faked_base*faked_base, | |
100 | faked_base, | |
101 | 1); | |
102 | ||
103 | var | |
104 | vbase, | |
105 | vfaked_base: int64; | |
106 | input_f:text; | |
107 | input_s:string; | |
108 | delta_A_operand, | |
109 | delta_B_operand, | |
110 | current, | |
111 | last: int64; | |
112 | register: array [1..10000] of int64; | |
113 | ||
114 | function f(x:char):byte; | |
115 | var | |
116 | ans:byte; | |
117 | begin | |
118 | if (x in ['a'..'z']) then begin | |
119 | ans:=10+ord(x)-ord('a'); | |
120 | end else if (x in ['0'..'9']) then begin | |
121 | ans:=ord(x)-ord('0'); | |
122 | end else begin | |
123 | ans:= 255; | |
124 | end; | |
125 | f:=ans; | |
126 | end; | |
127 | ||
128 | function g(y:string):int64; | |
129 | var | |
130 | ans:int64; | |
131 | k:byte; | |
132 | begin | |
133 | ans:=0; | |
134 | if (length(y) = base) then for k:= 1 to base do begin | |
135 | ans:= ans + f(y[k])*either_napole_or_sicilian^[k]; | |
136 | end; | |
137 | g:=ans; | |
138 | end; | |
139 | ||
140 | function p(q:longint):int64; | |
141 | var | |
142 | ans:int64; | |
143 | u:longint; | |
144 | begin | |
145 | ans:=1; | |
146 | if (q >= 1) then begin | |
147 | for u:= 1 to q do begin | |
148 | ans:= ans*faked_base; | |
149 | end; | |
150 | end; | |
151 | p:=ans; | |
152 | end; | |
153 | ||
154 | function h(b:longint; z:int64):int64; | |
155 | var | |
156 | ans, | |
157 | cz:int64; | |
158 | k, | |
159 | w:longint; | |
160 | begin | |
161 | ans:=z; | |
162 | if (b <> faked_base) then begin | |
163 | ans:=0; | |
164 | cz:=z; | |
165 | k:=1; | |
166 | while (cz >= b) do begin | |
167 | register[k]:= cz mod b; | |
168 | cz:= cz div b; | |
169 | k:=k+1; | |
170 | end; | |
171 | register[k]:=cz; | |
172 | for w:= k downto 1 do begin | |
173 | ans:= ans+register[w]*p(w-1); | |
174 | end; | |
175 | end; | |
176 | h:=ans; | |
177 | end; | |
178 | ||
179 | (* | |
180 | The filename of the data intended to be processed here should be | |
181 | passed as the first and unique parameter in the command line | |
182 | invocation to this program. The output is made directly to the | |
183 | console, so normally you should redirect it to a file in order | |
184 | to save the answer (Just a term of A217626 in each line, like | |
185 | in a b-file but without including the offsets at left) | |
186 | *) | |
187 | ||
188 | begin | |
189 | ||
190 | vbase:= base; (* Don't touch this!*) | |
191 | vfaked_base:= faked_base; (* Don't touch this!*) | |
192 | ||
193 | (* Do you want to see sparks?... disable the following enclosed block. ... It was a joke, dont do it.*) | |
194 | (* * ) | |
195 | ( * *) | |
196 | if (vbase <= 10) then begin | |
197 | either_napole_or_sicilian:= @faked_power; | |
198 | swissknife:= @vfaked_base; | |
199 | end else begin | |
200 | either_napole_or_sicilian:= @power; | |
201 | swissknife:= @vbase; | |
202 | end; | |
203 | (* * ) | |
204 | ( * *) | |
205 | ||
206 | if (paramcount() = 1) then begin | |
207 | assign(input_f, paramstr(1)); | |
208 | (*$i-*)reset(input_f);(*$i+*) | |
209 | if (IOResult = 0) then begin | |
210 | readln(input_f, input_s); | |
211 | delta_A_operand:= g(input_s); | |
212 | last:=0; | |
213 | while (not eof(input_f)) do begin | |
214 | readln(input_f,input_s); | |
215 | delta_B_operand:= g(input_s); | |
216 | current:= h(swissknife^, (delta_B_operand-delta_A_operand) div (swissknife^-1) ); | |
217 | writeln(current-last); | |
218 | last:= current; | |
219 | end; | |
220 | end else begin | |
221 | writeln('Unexpected error when processing: ',paramstr(1),'; **ABORTING**'); | |
222 | goto The_end; | |
223 | end; | |
224 | close(input_f); | |
225 | end else begin | |
226 | writeln('You must specify one and only one filename as invocation parameter. Please try again.'); | |
227 | end; | |
228 | The_end: | |
229 | end. |