Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
First solution in Uncategorized category for Unix Match. Part 1 by vvm70
import assert from "assert";
function unixMatch(filename: string, pattern: string): boolean {
if(filename.length <= pattern.split('?').length)
return false;
if(pattern.includes('*')) {
let setPtrn = new Set(pattern);
if(setPtrn.size == 1 && setPtrn.has('*') || setPtrn.size == 2 && setPtrn.has('*') && setPtrn.has('?') || pattern == '*.*' && filename.includes('.'))
return true;
if(pattern.includes('*.')) {
pattern = pattern.split('.').slice(-1)[0];
filename = filename.split('.').slice(-1)[0];
}
if(pattern.includes('.*')) {
pattern = pattern.split('.')[0];
filename = filename.split('.')[0];
}
}
if(pattern.length != filename.length)
return false
for(let i = 0; i < pattern.length; i++)
if(pattern[i] != '?' && pattern[i] != filename[i])
return false;
return true;
}
console.log('Example:');
console.log(unixMatch('somefile.txt', '*'));
// These "asserts" are used for self-checking
assert.equal(unixMatch('somefile.txt', '*'), true);
assert.equal(unixMatch('other.exe', '*'), true);
assert.equal(unixMatch('my.exe', '*.txt'), false);
assert.equal(unixMatch('log1.txt', 'log?.txt'), true);
assert.equal(unixMatch('log12.txt', 'log?.txt'), false);
assert.equal(unixMatch('log12.txt', 'log??.txt'), true);
console.log("Coding complete? Click 'Check' to earn cool rewards!");
Aug. 5, 2020
Comments: