“The convoluted converter”
Previous
Next
try {
if (process.argv.length === 4) {
const target = process.argv[2];
const input = process.argv[3];
if (target === "-bin" || target === "-hex" || target === "-dec") {
if (/^(0b[01]+|0x[0-9a-fA-F]+|0|[1-9]\d*)$/.test(input)) {
let decimal;
const prefix = input.substr(0, 2);
if (prefix === "0b") decimal = parseInt(input.substr(2), 2);
else if (prefix === "0x") decimal = parseInt(input.substr(2), 16);
else decimal = parseInt(input);
if (target === "-bin") console.log("0b" + decimal.toString(2));
else if (target === "-hex") console.log("0x" + decimal.toString(16));
else console.log(decimal.toString());
} else {
throw "Input number invalid";
}
} else {
throw "Target option invalid";
}
} else {
throw "Wrong number of arguments";
}
} catch (e) {
console.log("Error: " + e);
process.exit(1);
}
const convert = (target, input) => {
let decimal;
const prefix = input.substr(0, 2);
if (prefix === "0b") decimal = parseInt(input.substr(2), 2);
else if (prefix === "0x") decimal = parseInt(input.substr(2), 16);
else decimal = parseInt(input);
if (target === "-bin") return "0b" + decimal.toString(2);
else if (target === "-hex") return "0x" + decimal.toString(16);
else return decimal.toString();
};
const options = ["-bin", "-hex", "-dec"];
const inputShape = /^(0b[01]+|0x[0-9a-fA-F]+|0|[1-9]\d*)$/;
try {
if (process.argv.length === 4) {
const target = process.argv[2];
const input = process.argv[3];
if (options.includes(target)) {
if (inputShape.test(input)) {
const result = convert(target, input);
console.log(result);
} else {
throw "Input number invalid";
}
} else {
throw "Target option invalid";
}
} else {
throw "Wrong number of arguments";
}
} catch (e) {
console.log("Error: " + e);
process.exit(1);
}
const convert = (target, input) => {
let decimal;
const prefix = input.substr(0, 2);
if (prefix === "0b") decimal = parseInt(input.substr(2), 2);
else if (prefix === "0x") decimal = parseInt(input.substr(2), 16);
else decimal = parseInt(input);
if (target === "-bin") return "0b" + decimal.toString(2);
else if (target === "-hex") return "0x" + decimal.toString(16);
else return decimal.toString();
};
const options = ["-bin", "-hex", "-dec"];
const inputShape = /^(0b[01]+|0x[0-9a-fA-F]+|0|[1-9]\d*)$/;
try {
if (process.argv.length !== 4) {
throw "Wrong number of arguments";
}
const target = process.argv[2];
if (!options.includes(target)) {
throw "Target option invalid";
}
const input = process.argv[3];
if (!inputShape.test(input)) {
throw "Input number invalid";
}
const result = convert(target, input);
console.log(result);
} catch (e) {
console.log("Error: " + e);
process.exit(1);
}
const toDecimal = (input) => {
switch(input.substr(0, 2)) {
case "0b": return parseInt(input.substr(2), 2);
case "0x": return parseInt(input.substr(2), 16);
}
return parseInt(input);
};
const convert = (target, input) => {
const decimal = toDecimal(input);
if (target === "-bin") return "0b" + decimal.toString(2);
else if (target === "-hex") return "0x" + decimal.toString(16);
else return decimal.toString();
};
const options = ["-bin", "-hex", "-dec"];
const inputShape = /^(0b[01]+|0x[0-9a-fA-F]+|0|[1-9]\d*)$/;
try {
if (process.argv.length !== 4) {
throw "Wrong number of arguments";
}
const target = process.argv[2];
if (!options.includes(target)) {
throw "Target option invalid";
}
const input = process.argv[3];
if (!inputShape.test(input)) {
throw "Input number invalid";
}
const result = convert(target, input);
console.log(result);
} catch (e) {
console.log("Error: " + e);
process.exit(1);
}
const targetConverters = {
"-bin": d => "0b" + d.toString(2),
"-hex": d => "0x" + d.toString(16),
"-dec": d => d.toString(),
};
const inputConverters = {
"0b": i => parseInt(i.substr(2), 2),
"0x": i => parseInt(i.substr(2), 16),
"": i => parseInt(i)
};
const convert = (target, input) => {
const toDecimal = inputConverters[input.substr(0, 2)] || inputConverters[""];
const decimal = toDecimal(input);
return targetConverters[target](decimal);
};
const options = ["-bin", "-hex", "-dec"];
const inputShape = /^(0b[01]+|0x[0-9a-fA-F]+|0|[1-9]\d*)$/;
try {
if (process.argv.length !== 4) {
throw "Wrong number of arguments";
}
const target = process.argv[2];
if (!options.includes(target)) {
throw "Target option invalid";
}
const input = process.argv[3];
if (!inputShape.test(input)) {
throw "Input number invalid";
}
const result = convert(target, input);
console.log(result);
} catch (e) {
console.log("Error: " + e);
process.exit(1);
}
const converters = {
"-bin": {base: 2, prefix: "0b"},
"-hex": {base: 16, prefix: "0x"},
"-dec": {base: 10, prefix: ""},
};
const convert = (target, input) => {
const inputConverter = Object.values(converters)
.find(c => c.prefix === input.substr(0, 2)) || converters["-dec"];
const decimal = parseInt(
input.substr(inputConverter.prefix.length),
inputConverter.base
);
const targetConverter = converters[target];
return targetConverter.prefix + decimal.toString(targetConverter.base);
};
const inputShape = /^(0b[01]+|0x[0-9a-fA-F]+|0|[1-9]\d*)$/;
try {
if (process.argv.length !== 4) {
throw "Wrong number of arguments";
}
const target = process.argv[2];
if (!Object.keys(converters).includes(target)) {
throw "Target option invalid";
}
const input = process.argv[3];
if (!inputShape.test(input)) {
throw "Input number invalid";
}
const result = convert(target, input);
console.log(result);
} catch (e) {
console.log("Error: " + e);
process.exit(1);
}
const converters = {
"-bin": {prefix: "0b", base: 2, shape: /^0b[01]+$/},
"-hex": {prefix: "0x", base: 16, shape: /^0x[0-9a-fA-F]+$/},
"-dec": {prefix: "", base: 10, shape: /^(0|[1-9]\d*)$/},
};
const convert = (inputConverter, target, input) => {
const decimal = parseInt(
input.substr(inputConverter.prefix.length),
inputConverter.base
);
const targetConverter = converters[target];
return targetConverter.prefix + decimal.toString(targetConverter.base);
};
try {
if (process.argv.length !== 4) {
throw "Wrong number of arguments";
}
const target = process.argv[2];
if (!Object.keys(converters).includes(target)) {
throw "Target option invalid";
}
const input = process.argv[3];
const inputConverter = Object.values(converters).find(p => p.shape.test(input));
if (!inputConverter) {
throw "Input number invalid";
}
const result = convert(inputConverter, target, input);
console.log(result);
} catch (e) {
console.log("Error: " + e);
process.exit(1);
}
const converters = {
"-bin": {prefix: "0b", base: 2, shape: /^0b[01]+$/},
"-hex": {prefix: "0x", base: 16, shape: /^0x[0-9a-fA-F]+$/},
"-dec": {prefix: "", base: 10, shape: /^(0|[1-9]\d*)$/},
};
const convert = (target, input) => {
const inputConverter = Object.values(converters).find(p => p.shape.test(input));
if (!inputConverter) {
throw "Input number invalid";
}
const targetConverter = converters[target];
if (!targetConverter) {
throw "Target option invalid";
}
const decimal = parseInt(
input.substr(inputConverter.prefix.length),
inputConverter.base
);
return targetConverter.prefix + decimal.toString(targetConverter.base);
};
try {
if (process.argv.length !== 4) {
throw "Wrong number of arguments";
}
const target = process.argv[2];
const input = process.argv[3];
const result = convert(target, input);
console.log(result);
} catch (e) {
console.log("Error: " + e);
process.exit(1);
}
const converters = {
"-bin": {prefix: "0b", base: 2, shape: /^0b[01]+$/},
"-hex": {prefix: "0x", base: 16, shape: /^0x[0-9a-fA-F]+$/},
"-dec": {prefix: "", base: 10, shape: /^(0|[1-9]\d*)$/},
};
const convert = (target, input) => {
const inputConverter = Object.values(converters).find(p => p.shape.test(input))
|| (() => {throw "Input number invalid"})();
const targetConverter = converters[target]
|| (() => {throw "Target option invalid"})();
const decimal = parseInt(
input.substr(inputConverter.prefix.length),
inputConverter.base
);
return targetConverter.prefix + decimal.toString(targetConverter.base);
};
try {
if (process.argv.length !== 4) {
throw "Wrong number of arguments";
}
const target = process.argv[2];
const input = process.argv[3];
const result = convert(target, input);
console.log(result);
} catch (e) {
console.log("Error: " + e);
process.exit(1);
}
const numberSystems = [
{name: "bin", prefix: "0b", base: 2, shape: /^0b[01]+$/},
{name: "hex", prefix: "0x", base: 16, shape: /^0x[0-9a-fA-F]+$/},
{name: "dec", prefix: "", base: 10, shape: /^(0|[1-9]\d*)$/},
];
const convert = (targetName, input) => {
const inputNS = numberSystems.find(n => n.shape.test(input))
|| (() => {throw "Input number invalid"})();
const targetNS = numberSystems.find(n => n.name === targetName)
|| (() => {throw "Target option invalid"})();
const intermediate = parseInt(
input.substr(inputNS.prefix.length),
inputNS.base
);
return targetNS.prefix + intermediate.toString(targetNS.base);
};
try {
if (process.argv.length !== 4) {
throw "Wrong number of arguments";
}
const targetName = process.argv[2].substr(1);
const input = process.argv[3];
const result = convert(targetName, input);
console.log(result);
} catch (e) {
console.log("Error: " + e);
process.exit(1);
}
#10. Single level of abstraction
Previous
Next
const numberSystems = [
{name: "bin", prefix: "0b", base: 2, shape: /^0b[01]+$/},
{name: "hex", prefix: "0x", base: 16, shape: /^0x[0-9a-fA-F]+$/},
{name: "dec", prefix: "", base: 10, shape: /^(0|[1-9]\d*)$/},
];
const normalise = (ns, input) => parseInt(input.substr(ns.prefix.length), ns.base);
const translate = (ns, intermediate) => ns.prefix + intermediate.toString(ns.base);
const convert = (targetName, input) => {
const inputNS = numberSystems.find(n => n.shape.test(input))
|| (() => {throw "Input number invalid"})();
const targetNS = numberSystems.find(n => n.name === targetName)
|| (() => {throw "Target option invalid"})();
const intermediate = normalise(inputNS, input);
return translate(targetNS, intermediate);
};
try {
if (process.argv.length !== 4) {
throw "Wrong number of arguments";
}
const targetName = process.argv[2].substr(1);
const input = process.argv[3];
const result = convert(targetName, input);
console.log(result);
} catch (e) {
console.log("Error: " + e);
process.exit(1);
}