#!/usr/bin/perl
sub f
{($_,$n)=@_;s/(-?\d+)?~(-?\d+)?|(-?\d+)/!(defined$3?$n!=$3:length$1&&$1>$n||length$2&&$n>$2)+0/ge;s/skip
/&&!/g
;s/,/||/g
;eval}
# Testing.
use Test::More;
ok f('10~20 ', 14);
ok f('10~20 ', 20);
ok !f('10~20 skip 14~18', 17);
ok f('~ skip 6 ', 8 );
ok f('16,17 skip 16 ', 16);
ok !f('(16,17) skip 16 ', 16);
ok f('~10,5~ ', 8 );
ok f('~10,5~ ', 4 );
ok f('6 skip 6,~ ', 6 );
ok f('-20~-10 ', -14);
ok !f('-20~-10 ', -21);
ok !f('0~2 ', -2);
ok f('~2 ', -2);
ok !f('0 ', 1);
done_testing;
IyEvdXNyL2Jpbi9wZXJsCgpzdWIgZnsoJF8sJG4pPUBfO3MvKC0/XGQrKT9+KC0/XGQrKT98KC0/XGQrKS8hKGRlZmluZWQkMz8kbiE9JDM6bGVuZ3RoJDEmJiQxPiRufHxsZW5ndGgkMiYmJG4+JDIpKzAvZ2U7cy9za2lwLyYmIS9nO3MvLC98fC9nO2V2YWx9CgojIFRlc3RpbmcuCgp1c2UgVGVzdDo6TW9yZTsKCm9rICBmKCcxMH4yMCAgICAgICAgICAgJywgMTQpOwpvayAgZignMTB+MjAgICAgICAgICAgICcsIDIwKTsKb2sgIWYoJzEwfjIwIHNraXAgMTR+MTgnLCAxNyk7Cm9rICBmKCd+IHNraXAgNiAgICAgICAgJywgOCApOwpvayAgZignMTYsMTcgc2tpcCAxNiAgICcsIDE2KTsKb2sgIWYoJygxNiwxNykgc2tpcCAxNiAnLCAxNik7Cm9rICBmKCd+MTAsNX4gICAgICAgICAgJywgOCApOwpvayAgZignfjEwLDV+ICAgICAgICAgICcsIDQgKTsKb2sgIGYoJzYgc2tpcCA2LH4gICAgICAnLCA2ICk7Cm9rICBmKCctMjB+LTEwICAgICAgICAgJywgLTE0KTsKb2sgIWYoJy0yMH4tMTAgICAgICAgICAnLCAtMjEpOwpvayAhZignMH4yICAgICAgICAgICAgICcsIC0yKTsKb2sgIGYoJ34yICAgICAgICAgICAgICAnLCAtMik7Cm9rICFmKCcwICAgICAgICAgICAgICAgJywgMSk7CmRvbmVfdGVzdGluZzsK