目次

学習点からランク生成(AWK)

 北海道の高校の入学試験では、学力点に学習点を
 加味して、合否判定をしています。

 学習点は、次のように計算。

 全教科(9教科)の成績表の値(1から5で表現)
 の総和を求めておきます。

 各学年の成績表の合計値に、重みをつけます。
  1年次の全学期成績表の合計×2
  2年次の全学期成績表の合計×2
  3年次の全学期成績表の合計×3

 重みをつけた3値の総計を求めて、ランクに当てはめ。
   A 315 - 296
   B 295 - 276
   C 275 - 256
   D 255 - 236
   E 235 - 216
   F 215 - 196
   G 195 - 176
   H 175 - 156
   I 155 - 136
   J 135 - 116
   K 115 -  96
   L  95 -  76
   M  75 -  56

 計算値から、ランクを生成するためのスクリプトは、以下。

{
  xx = $1 - 15
  # quotient
  q = int(xx / 20)
  # residue
  r = xx % 20
  # adjust
  if ( r == 0 ) { q = q - 1 }
  xx = 79 - q
  # show
  printf("%s : %d %c\n",$0,q,xx)
}

 各ランクの最高点と最低点の差が19なので、隣り合う
 ランクの点数差は20になってます。20で割ったときの
 商と余りを利用すればよいと気づきました。

 余りが0から19になるのは、よいのですが
 1から19と余りが並んだ方が、処理が簡単
 なので、オフセットの15を引いています。

 56から315の自然数を生成して、テキストファイルに
 格納して、確認してみると以下。



 I/Oリダイレクトでテキストファイルに落として
 内容を見てみます。

56 : 2 M
57 : 2 M
58 : 2 M
59 : 2 M
60 : 2 M
61 : 2 M
62 : 2 M
63 : 2 M
64 : 2 M
65 : 2 M
66 : 2 M
67 : 2 M
68 : 2 M
69 : 2 M
70 : 2 M
71 : 2 M
72 : 2 M
73 : 2 M
74 : 2 M
75 : 2 M
76 : 3 L
77 : 3 L
78 : 3 L
79 : 3 L
80 : 3 L
81 : 3 L
82 : 3 L
83 : 3 L
84 : 3 L
85 : 3 L
86 : 3 L
87 : 3 L
88 : 3 L
89 : 3 L
90 : 3 L
91 : 3 L
92 : 3 L
93 : 3 L
94 : 3 L
95 : 3 L
96 : 4 K
97 : 4 K
98 : 4 K
99 : 4 K
100 : 4 K
101 : 4 K
102 : 4 K
103 : 4 K
104 : 4 K
105 : 4 K
106 : 4 K
107 : 4 K
108 : 4 K
109 : 4 K
110 : 4 K
111 : 4 K
112 : 4 K
113 : 4 K
114 : 4 K
115 : 4 K
116 : 5 J
117 : 5 J
118 : 5 J
119 : 5 J
120 : 5 J
121 : 5 J
122 : 5 J
123 : 5 J
124 : 5 J
125 : 5 J
126 : 5 J
127 : 5 J
128 : 5 J
129 : 5 J
130 : 5 J
131 : 5 J
132 : 5 J
133 : 5 J
134 : 5 J
135 : 5 J
136 : 6 I
137 : 6 I
138 : 6 I
139 : 6 I
140 : 6 I
141 : 6 I
142 : 6 I
143 : 6 I
144 : 6 I
145 : 6 I
146 : 6 I
147 : 6 I
148 : 6 I
149 : 6 I
150 : 6 I
151 : 6 I
152 : 6 I
153 : 6 I
154 : 6 I
155 : 6 I
156 : 7 H
157 : 7 H
158 : 7 H
159 : 7 H
160 : 7 H
161 : 7 H
162 : 7 H
163 : 7 H
164 : 7 H
165 : 7 H
166 : 7 H
167 : 7 H
168 : 7 H
169 : 7 H
170 : 7 H
171 : 7 H
172 : 7 H
173 : 7 H
174 : 7 H
175 : 7 H
176 : 8 G
177 : 8 G
178 : 8 G
179 : 8 G
180 : 8 G
181 : 8 G
182 : 8 G
183 : 8 G
184 : 8 G
185 : 8 G
186 : 8 G
187 : 8 G
188 : 8 G
189 : 8 G
190 : 8 G
191 : 8 G
192 : 8 G
193 : 8 G
194 : 8 G
195 : 8 G
196 : 9 F
197 : 9 F
198 : 9 F
199 : 9 F
200 : 9 F
201 : 9 F
202 : 9 F
203 : 9 F
204 : 9 F
205 : 9 F
206 : 9 F
207 : 9 F
208 : 9 F
209 : 9 F
210 : 9 F
211 : 9 F
212 : 9 F
213 : 9 F
214 : 9 F
215 : 9 F
216 : 10 E
217 : 10 E
218 : 10 E
219 : 10 E
220 : 10 E
221 : 10 E
222 : 10 E
223 : 10 E
224 : 10 E
225 : 10 E
226 : 10 E
227 : 10 E
228 : 10 E
229 : 10 E
230 : 10 E
231 : 10 E
232 : 10 E
233 : 10 E
234 : 10 E
235 : 10 E
236 : 11 D
237 : 11 D
238 : 11 D
239 : 11 D
240 : 11 D
241 : 11 D
242 : 11 D
243 : 11 D
244 : 11 D
245 : 11 D
246 : 11 D
247 : 11 D
248 : 11 D
249 : 11 D
250 : 11 D
251 : 11 D
252 : 11 D
253 : 11 D
254 : 11 D
255 : 11 D
256 : 12 C
257 : 12 C
258 : 12 C
259 : 12 C
260 : 12 C
261 : 12 C
262 : 12 C
263 : 12 C
264 : 12 C
265 : 12 C
266 : 12 C
267 : 12 C
268 : 12 C
269 : 12 C
270 : 12 C
271 : 12 C
272 : 12 C
273 : 12 C
274 : 12 C
275 : 12 C
276 : 13 B
277 : 13 B
278 : 13 B
279 : 13 B
280 : 13 B
281 : 13 B
282 : 13 B
283 : 13 B
284 : 13 B
285 : 13 B
286 : 13 B
287 : 13 B
288 : 13 B
289 : 13 B
290 : 13 B
291 : 13 B
292 : 13 B
293 : 13 B
294 : 13 B
295 : 13 B
296 : 14 A
297 : 14 A
298 : 14 A
299 : 14 A
300 : 14 A
301 : 14 A
302 : 14 A
303 : 14 A
304 : 14 A
305 : 14 A
306 : 14 A
307 : 14 A
308 : 14 A
309 : 14 A
310 : 14 A
311 : 14 A
312 : 14 A
313 : 14 A
314 : 14 A
315 : 14 A

 間違いなく、学習点のランクを生成しています。

 動作確認できたなら、関数にして使いやすくします。

function get_asc(x) {
  # subtract offset
  xx = x - 15
  # quotient
  q = int(xx / 20)
  # residue
  r = xx % 20
  # adjust
  if ( r == 0 ) { q = q - 1 }
  # convert
  result = 79 - q

  return result
}


目次

inserted by FC2 system