В эту субботу наша команда в составе Leonid, Lomir и меня "разогревались" на тестовом раунде "Challenge 24 Contest". Задачи уже доступны. В этом раунде не было никакого рейтинга, а просто можно было ознакомиться с правилами и системой. Хотя лично для меня задачи были вполне себе серьезные. Например, P, конечно, совсем простая, но остальные для меня вполне реальны.
Мне нравится этот контест тем, что он не заточен исключительно на алгоритмические задачи. Например, в Q надо было сделать хорошую эвристику, в R - типа взломать код, ну а S - это алгоритм.
Я по-пенсионерски попросился решать R. В итоге написал какой-то невообразимый велосипед на С++, которым таки получилось сделать играемый wav, прослушать сообщения и сдать задачу, и только потом, немного успокоившись, на питоне получилась короткая программа, делающая чистые 16-битные wav'ы.
import wave, struct
def make_soundfile(sample, freq, fname):
frate = 7000
data_size = len(sample)
sine_list = []
for x in sample:
sine_list.append(float(x) / 2 * 32768)
wav_file = wave.open(fname + ".wav", "w")
nchannels = 1
sampwidth = 2
framerate = int(frate)
nframes = data_size
comptype = "NONE"
compname = "not compressed"
wav_file.setparams((nchannels, sampwidth, framerate, nframes, comptype, compname))
for s in sine_list:
wav_file.writeframes(struct.pack('h', int(s)))
wav_file.close()
for n in range(1, 11):
fname = "test-%02d.tst" % n
print fname
sample = open(fname).readlines()
sample = sample[1:]
freq = len(sample)
make_soundfile(sample, freq, fname)
Конечно, авторское решение было еще проще.
awk 'NR > 1 {printf "%c",int(128*($1+1))}' *.in >/dev/dsp
Погдядим, что будет в реальном раунде в эту субботу.
Комментариев нет:
Отправить комментарий