This Chat is read-only. Login to resume chatting.
def number_to_words(number):
# Dictionary for numbers to words
num_to_word = {
0: 'zero', 1: 'one', 2: 'two', 3: 'three', 4: 'four',
5: 'five', 6: 'six', 7: 'seven', 8: 'eight', 9: 'nine',
10: 'ten', 11: 'eleven', 12: 'twelve', 13: 'thirteen', 14: 'fourteen',
15: 'fifteen', 16: 'sixteen', 17: 'seventeen', 18: 'eighteen', 19: 'nineteen',
20: 'twenty', 30: 'thirty', 40: 'forty', 50: 'fifty',
60: 'sixty', 70: 'seventy', 80: 'eighty', 90: 'ninety'
}
# Split the number into triplets
triplets = []
while number > 0:
triplets.append(number % 1000)
number = number // 1000
# Convert each triplet to words
words = []
for triplet in triplets:
if triplet == 0:
words.append('zero')
continue
triplet_words = []
hundreds = triplet // 100
remainder = triplet % 100
if hundreds > 0:
triplet_words.append(num_to_word[hundreds] + ' hundred')
if remainder > 0:
if remainder in num_to_word:
triplet_words.append(num_to_word[remainder])
else:
tens = (remainder // 10) * 10
units = remainder % 10
triplet_words.append(num_to_word[tens] + ' ' + num_to_word[units])
words.append(' '.join(triplet_words))
return ' '.join(reversed(words))
# Example usage
number = 6157885
print(number_to_words(number))def encode_number_to_words(number):
# Predefined list of words
word_list = [
'apple', 'banana', 'cherry', 'date', 'elderberry', 'fig', 'grape', 'honeydew',
'kiwi', 'lemon', 'mango', 'nectarine', 'orange', 'papaya', 'quince', 'raspberry',
'strawberry', 'tangerine', 'ugli', 'vanilla', 'watermelon', 'xigua', 'yellow', 'zucchini'
]
# Split the number into triplets
triplets = []
while number > 0:
triplets.append(number % 1000)
number = number // 1000
# Map each triplet to a word
words = []
for triplet in triplets:
if triplet < len(word_list):
words.append(word_list[triplet])
else:
words.append(str(triplet)) # Fallback to the number itself if out of range
return ' '.join(reversed(words))
# Example usage
number = 6157885
print(encode_number_to_words(number))def encode_number_to_words(number_str):
# Predefined list of words
word_list = [
'apple', 'banana', 'cherry', 'date', 'elderberry', 'fig', 'grape', 'honeydew',
'kiwi', 'lemon', 'mango', 'nectarine', 'orange', 'papaya', 'quince', 'raspberry',
'strawberry', 'tangerine', 'ugli', 'vanilla', 'watermelon', 'xigua', 'yellow', 'zucchini'
]
# Pad the number string with leading zeros to make its length a multiple of 3
padded_number_str = number_str.zfill((len(number_str) + 2) // 3 * 3)
# Split the number string into triplets
triplets = [padded_number_str[i:i+3] for i in range(0, len(padded_number_str), 3)]
# Map each triplet to a word
words = []
for triplet in triplets:
# Convert the triplet to an integer
triplet_int = int(triplet)
if triplet_int < len(word_list):
words.append(word_list[triplet_int])
else:
words.append(triplet) # Fallback to the triplet itself if out of range
return ' '.join(words)
# Example usage
number_str = '000000199356'
print(encode_number_to_words(number_str))def test_encode_number_to_words():
test_cases = [
('100023336956', '100 zucchini 336 956'),
('000000199356', 'apple apple 199 356'),
('6157885', 'nectarine papaya honeydew'),
('123', 'nectarine'),
('456789', 'nectarine papaya kiwi'),
('123456789123', 'nectarine papaya kiwi nectarine'),
('1', 'nectarine'),
('12', 'nectarine'),
('1234', 'nectarine papaya'),
('12345', 'nectarine papaya'),
('123456', 'nectarine papaya'),
('1234567', 'nectarine papaya kiwi'),
('12345678', 'nectarine papaya kiwi'),
('123456789', 'nectarine papaya kiwi'),
('1234567891', 'nectarine papaya kiwi nectarine'),
('12345678912', 'nectarine papaya kiwi nectarine'),
('123456789123', 'nectarine papaya kiwi nectarine')
]
for number_str, expected in test_cases:
result = encode_number_to_words(number_str)
assert result == expected, f"Failed for {number_str}: expected {expected}, got {result}"
print(f"Test passed for {number_str}: {result}")
# Run the test function
test_encode_number_to_words()def decode_words_to_number(encoded_str):
# Predefined list of words
word_list = [
'apple', 'banana', 'cherry', 'date', 'elderberry', 'fig', 'grape', 'honeydew',
'kiwi', 'lemon', 'mango', 'nectarine', 'orange', 'papaya', 'quince', 'raspberry',
'strawberry', 'tangerine', 'ugli', 'vanilla', 'watermelon', 'xigua', 'yellow', 'zucchini'
]
# Create a reverse dictionary to map words back to numbers
word_to_num = {word: str(idx) for idx, word in enumerate(word_list)}
# Split the encoded string into words
words = encoded_str.split()
# Map each word back to its triplet
triplets = []
for word in words:
if word in word_to_num:
triplets.append(word_to_num[word].zfill(3))
else:
triplets.append(word.zfill(3))
# Combine the triplets to form the original number
original_number = ''.join(triplets)
return original_number
# Example usage
encoded_str = '100 zucchini 336 956'
print(decode_words_to_number(encoded_str)) # Output: 100023336956def test_decode_words_to_number():
test_cases = [
('100 zucchini 336 956', '100023336956'),
]
for encoded_str, expected in test_cases:
result = decode_words_to_number(encoded_str)
assert result == expected, f"Failed for {encoded_str}: expected {expected}, got {result}"
print(f"Test passed for {encoded_str}: {result}")
# Run the test function
test_decode_words_to_number()def decode_words_to_number(encoded_str):
# Predefined list of words
word_list = [
'apple', 'banana', 'cherry', 'date', 'elderberry', 'fig', 'grape', 'honeydew',
'kiwi', 'lemon', 'mango', 'nectarine', 'orange', 'papaya', 'quince', 'raspberry',
'strawberry', 'tangerine', 'ugli', 'vanilla', 'watermelon', 'xigua', 'yellow', 'zucchini'
]
# Create a reverse dictionary to map words back to numbers
word_to_num = {word: str(idx) for idx, word in enumerate(word_list)}
# Split the encoded string into words
words = encoded_str.split()
# Map each word back to its triplet
triplets = []
for word in words:
if word in word_to_num:
triplets.append(word_to_num[word])
else:
triplets.append(word)
# Combine the triplets to form the original number
original_number = ''.join(triplets)
return original_number
def test_decode_words_to_number():
test_cases = [
('100 zucchini 336 956', '10023336956'),
]
for encoded_str, expected in test_cases:
result = decode_words_to_number(encoded_str)
assert result == expected, f"Failed for {encoded_str}: expected {expected}, got {result}"
print(f"Test passed for {encoded_str}: {result}")
# Run the test function
test_decode_words_to_number()def encode_number_to_words(number_str):
# Predefined list of words
word_list = [
'apple', 'banana', 'cherry', 'date', 'elderberry', 'fig', 'grape', 'honeydew',
'kiwi', 'lemon', 'mango', 'nectarine', 'orange', 'papaya', 'quince', 'raspberry',
'strawberry', 'tangerine', 'ugli', 'vanilla', 'watermelon', 'xigua', 'yellow', 'zucchini'
]
# Pad the number string with leading zeros to make its length a multiple of 3
padded_number_str = number_str.zfill((len(number_str) + 2) // 3 * 3)
# Split the number string into triplets
triplets = [padded_number_str[i:i+3] for i in range(0, len(padded_number_str), 3)]
# Map each triplet to a word
words = []
for triplet in triplets:
# Convert the triplet to an integer
triplet_int = int(triplet)
if triplet_int < len(word_list):
words.append(word_list[triplet_int])
else:
words.append(triplet) # Fallback to the triplet itself if out of range
return ' '.join(words)
def decode_words_to_number(encoded_str):
# Predefined list of words
word_list = [
'apple', 'banana', 'cherry', 'date', 'elderberry', 'fig', 'grape', 'honeydew',
'kiwi', 'lemon', 'mango', 'nectarine', 'orange', 'papaya', 'quince', 'raspberry',
'strawberry', 'tangerine', 'ugli', 'vanilla', 'watermelon', 'xigua', 'yellow', 'zucchini'
]
# Create a reverse dictionary to map words back to numbers
word_to_num = {word: str(idx).zfill(3) for idx, word in enumerate(word_list)}
# Split the encoded string into words
words = encoded_str.split()
# Map each word back to its triplet
triplets = []
for word in words:
if word in word_to_num:
triplets.append(word_to_num[word])
else:
triplets.append(word.zfill(3))
# Combine the triplets to form the original number
original_number = ''.join(triplets)
return original_number
def test_decode_words_to_number():
test_cases = [
('100 zucchini 336 956', '100023336956'),
('000000199356', '000000199356'),
('6157885', '006157885'),
]
for encoded_str, expected in test_cases:
result = decode_words_to_number(encoded_str)
assert result == expected, f"Failed for {encoded_str}: expected {expected}, got {result}"
print(f"Test passed for {encoded_str}: {result}")
# Run the test function
test_decode_words_to_number()def encode_number_to_words(number_str):
# Predefined list of words
word_list = [
'apple', 'banana', 'cherry', 'date', 'elderberry', 'fig', 'grape', 'honeydew',
'kiwi', 'lemon', 'mango', 'nectarine', 'orange', 'papaya', 'quince', 'raspberry',
'strawberry', 'tangerine', 'ugli', 'vanilla', 'watermelon', 'xigua', 'yellow', 'zucchini'
]
# Pad the number string with leading zeros to make it 12 digits long
padded_number_str = number_str.zfill(12)
# Split the number string into triplets
triplets = [padded_number_str[i:i+3] for i in range(0, len(padded_number_str), 3)]
# Map each triplet to a word
words = []
for triplet in triplets:
# Convert the triplet to an integer
triplet_int = int(triplet)
if triplet_int < len(word_list):
words.append(word_list[triplet_int])
else:
words.append(triplet) # Fallback to the triplet itself if out of range
return ' '.join(words)
def decode_words_to_number(encoded_str):
# Predefined list of words
word_list = [
'apple', 'banana', 'cherry', 'date', 'elderberry', 'fig', 'grape', 'honeydew',
'kiwi', 'lemon', 'mango', 'nectarine', 'orange', 'papaya', 'quince', 'raspberry',
'strawberry', 'tangerine', 'ugli', 'vanilla', 'watermelon', 'xigua', 'yellow', 'zucchini'
]
# Create a reverse dictionary to map words back to numbers
word_to_num = {word: str(idx).zfill(3) for idx, word in enumerate(word_list)}
# Split the encoded string into words
words = encoded_str.split()
# Map each word back to its triplet
triplets = []
for word in words:
if word in word_to_num:
triplets.append(word_to_num[word])
else:
triplets.append(word.zfill(3))
# Combine the triplets to form the original number
original_number = ''.join(triplets)
return original_number
def test_encode_and_decode():
test_cases = [
('100023336956', '100 zucchini 336 956'),
('199356', '000000199356'),
('6157885', '006157885'),
('123', '000000000123'),
('456789', '000456789'),
('123456789123', '123456789123'),
]
for number_str, expected_encoded in test_cases:
# Test encoding
encoded_result = encode_number_to_words(number_str)
assert encoded_result == expected_encoded, f"Encoding failed for {number_str}: expected {expected_encoded}, got {encoded_result}"
print(f"Encoding test passed for {number_str}: {encoded_result}")
# Test decoding
decoded_result = decode_words_to_number(encoded_result)
assert decoded_result == number_str.zfill(12), f"Decoding failed for {encoded_result}: expected {number_str.zfill(12)}, got {decoded_result}"
print(f"Decoding test passed for {encoded_result}: {decoded_result}")
# Run the test function
test_encode_and_decode()<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Number-Word Converter</title>
<style>
body {
font-family: Arial, sans-serif;
margin: 20px;
}
textarea, input {
width: 100%;
padding: 8px;
margin: 5px 0 15px;
display: inline-block;
border: 1px solid #ccc;
border-radius: 4px;
box-sizing: border-box;
}
button {
background-color: #4CAF50;
color: white;
padding: 10px 15px;
margin: 8px 0;
border: none;
border-radius: 4px;
cursor: pointer;
}
button:hover {
background-color: #45a049;
}
.container {
border-radius: 5px;
background-color: #f2f2f2;
padding: 20px;
}
</style>
</head>
<body>
<div class="container">
<h2>Number-Word Converter</h2>
<label for="wordList">Word List (JSON Array):</label>
<textarea id="wordList" rows="4">["apple", "banana", "cherry", "date", "elderberry", "fig", "grape", "honeydew", "kiwi", "lemon", "mango", "nectarine", "orange", "papaya", "quince", "raspberry", "strawberry", "tangerine", "ugli", "vanilla", "watermelon", "xigua", "yellow", "zucchini"]</textarea>
<h3>Convert Numbers to Words</h3>
<label for="numbers">Numbers (comma-separated):</label>
<input type="text" id="numbers" placeholder="Enter numbers">
<button onclick="convertNumbersToWords()">Convert to Words</button>
<p id="numbersResult"></p>
<h3>Convert Words to Numbers</h3>
<label for="words">Words (space-separated):</label>
<input type="text" id="words" placeholder="Enter words">
<button onclick="convertWordsToNumbers()">Convert to Numbers</button>
<p id="wordsResult"></p>
</div>
<script>
let wordList = [];
document.getElementById('wordList').addEventListener('change', function() {
try {
wordList = JSON.parse(this.value);
alert("Word list updated successfully!");
} catch (e) {
alert("Invalid JSON format for word list.");
}
});
function encodeNumberToWords(numberStr) {
const paddedNumberStr = numberStr.padStart(12, '0');
const triplets = paddedNumberStr.match(/.{1,3}/g) || [];
return triplets.map(triplet => {
const tripletInt = parseInt(triplet, 10);
return tripletInt < wordList.length ? wordList[tripletInt] : triplet;
}).join(' ');
}
function decodeWordsToNumber(encodedStr) {
const wordToNum = wordList.reduce((acc, word, idx) => {
acc[word] = String(idx).padStart(3, '0');
return acc;
}, {});
const words = encodedStr.split(' ');
const triplets = words.map(word => wordToNum[word] || word.padStart(3, '0'));
return triplets.join('').replace(/^0+/, '') || '0';
}
function convertNumbersToWords() {
const numbersInput = document.getElementById('numbers').value;
const numbers = numbersInput.split(',').map(num => num.trim());
const results = numbers.map(encodeNumberToWords);
document.getElementById('numbersResult').innerText = results.join(', ');
}
function convertWordsToNumbers() {
const wordsInput = document.getElementById('words').value;
const result = decodeWordsToNumber(wordsInput);
document.getElementById('wordsResult').innerText = result;
}
</script>
</body>
</html><!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Number-Word Converter</title>
<style>
body {
font-family: Arial, sans-serif;
margin: 20px;
}
textarea, input {
width: 100%;
padding: 8px;
margin: 5px 0 15px;
display: inline-block;
border: 1px solid #ccc;
border-radius: 4px;
box-sizing: border-box;
}
button {
background-color: #4CAF50;
color: white;
padding: 10px 15px;
margin: 8px 0;
border: none;
border-radius: 4px;
cursor: pointer;
}
button:hover {
background-color: #45a049;
}
.container {
border-radius: 5px;
background-color: #f2f2f2;
padding: 20px;
}
</style>
</head>
<body onload="loadWordList()">
<div class="container">
<h2>Number-Word Converter</h2>
<label for="wordList">Word List (JSON Array):</label>
<textarea id="wordList" rows="4"></textarea>
<h3>Convert Numbers to Words</h3>
<label for="numbers">Numbers (comma-separated):</label>
<input type="text" id="numbers" placeholder="Enter numbers">
<button onclick="convertNumbersToWords()">Convert to Words</button>
<p id="numbersResult"></p>
<h3>Convert Words to Numbers</h3>
<label for="words">Words (space-separated):</label>
<input type="text" id="words" placeholder="Enter words">
<button onclick="convertWordsToNumbers()">Convert to Numbers</button>
<p id="wordsResult"></p>
</div>
<script>
let wordList = [
"Apple", "Banana", "Cherry", "Orange", "Mango", "Grapes", "Watermelon", "Strawberry",
"Blueberry", "Raspberry", "Pineapple", "Peanut", "Butter", "Sugar", "Coffee",
"Chocolate", "Vanilla", "Biscuit", "Scone", "Sandwich", "Hamburger", "Pizza",
"Spaghetti", "Lasagne", "Taco", "Burrito", "Sushi", "Pancake", "Waffle", "Omelette",
"Salad", "Soup", "Steak", "Chicken", "Turkey", "Duck", "Pasta", "Rice", "Bread",
"Toast", "Jam", "Jelly", "Honey", "Syrup", "Cereal", "Porridge", "Yoghurt", "Milkshake",
"Smoothie", "Lemonade", "Juice", "Soda", "Tea", "Milk", "Cheese", "Cracker", "Pretzel",
"Popcorn", "Peanut Butter", "Jellybean", "Lollipop", "Cupcake", "Muffin", "Doughnut",
"Bagel", "Croissant", "Tiramisu", "Brownie", "Caramel", "Marshmallow", "Pudding",
"Custard", "Fudge", "Toffee", "Liquorice", "Gumdrop", "Macaroon", "Baguette", "Ciabatta",
"Focaccia", "Pita", "Tortilla", "Dumpling", "Noodle", "Ravioli", "Calzone", "Quiche",
"Soufflé", "Flan", "Gelato", "Sorbet", "Parfait", "Sundae", "Frappé", "Latte",
"Cappuccino", "Espresso", "Mocha", "Chai", "Biscotti", "Cucumber", "Tomato", "Potato",
"Lettuce", "Cabbage", "Broccoli", "Carrot", "Onion", "Garlic", "Pepper", "Spinach",
"Pumpkin", "Cauliflower", "Beetroot", "Radish", "Turnip", "Sweetcorn", "Peas", "Beans",
"Lentils", "Chickpea", "Aubergine", "Courgette", "Celery", "Asparagus", "Artichoke",
"Brussels Sprout", "Leek", "Shallot", "Spring Onion", "Mushroom", "Truffle", "Avocado",
"Coconut", "Pomegranate", "Kiwi", "Pear", "Peach", "Plum", "Apricot", "Nectarine",
"Fig", "Date", "Melon", "Lime", "Lemon", "Clementine", "Tangerine", "Grapefruit",
"Cranberry", "Blackberry", "Elderberry", "Gooseberry", "Boysenberry", "Cloudberry",
"Dewberry", "Loganberry", "Mulberry", "Salmon", "Tuna", "Cod", "Haddock", "Mackerel",
"Sardine", "Herring", "Trout", "Anchovy", "Carp", "Catfish", "Swordfish", "Monkfish",
"Plaice", "Halibut", "Turbot", "Sea Bass", "Red Snapper", "Mahi-Mahi", "Grouper",
"Lobster", "Crab", "Shrimp", "Prawn", "Scallop", "Mussel", "Oyster", "Clam", "Squid",
"Octopus", "Eel", "Caviar", "Almond", "Walnut", "Cashew", "Pistachio", "Hazelnut",
"Pecan", "Macadamia", "Brazil Nut", "Pine Nut", "Chestnut", "Sunflower Seed",
"Pumpkin Seed", "Sesame Seed", "Flaxseed", "Chia Seed", "Quinoa", "Barley", "Oats",
"Rye", "Millet", "Buckwheat", "Farro", "Bulghur", "Couscous", "Polenta", "Semolina",
"Amaranth", "Wild Rice", "Basin", "Basket", "Bottle", "Bowl", "Bucket", "Candle",
"Carpet", "Curtain", "Cushion", "Lamp", "Mirror", "Painting", "Picture", "Pillow",
"Plate", "Pot", "Rug", "Shelf", "Soap", "Statue", "Table", "Towel", "Vase", "Blanket",
"Clock", "Coat", "Dress", "Glove", "Hat", "Jacket", "Jeans", "Jumper", "Scarf",
"Shirt", "Shoe", "Skirt", "Sock", "Tie", "T-shirt", "Trousers", "Umbrella", "Belt",
"Boot", "Cap", "Cardigan", "Coat", "Dressing Gown", "Earring", "Glasses", "Handbag",
"Necklace", "Pyjamas", "Ring", "Sandals", "Sunglasses", "Sweater", "Tights", "Trainers",
"Wallet", "Watch", "Bracelet", "Brooch", "Backpack", "Briefcase", "Camera", "Compass",
"Diary", "Flask", "Headphones", "Journal", "Key", "Lighter", "Map", "Notebook", "Pen",
"Pencil", "Phone", "Radio", "Tape", "Torch", "Tripod", "Walkman", "Binoculars",
"Calculator", "Calendar", "Compass", "Drill", "Hammer", "Ladder", "Level", "Pliers",
"Saw", "Screwdriver", "Shovel", "Spade", "Tape Measure", "Toolbox", "Wrench", "Broom",
"Brush", "Duster", "Hoover", "Mop", "Sponges", "Bucket", "Bicycle", "Car", "Bus",
"Train", "Plane", "Boat", "Ship", "Truck", "Van", "Motorcycle", "Scooter", "Tractor",
"Helicopter", "Submarine", "Rocket", "Skateboard", "Sled", "Stroller", "Wheelchair",
"Balloon", "Kite", "Parachute", "Raft", "Sailboat", "Surfboard", "Unicycle", "Wagon",
"Yacht", "Zeppelin", "Ambulance", "Canoe", "Glider", "Hovercraft", "Jet Ski", "Rickshaw",
"Skis", "Snowboard", "Space Shuttle", "Tank", "Taxi", "Tram", "Ball", "Bat", "Club",
"Dart", "Golf", "Hockey", "Puck", "Racket", "Shuttlecock", "Table Tennis", "Tennis",
"Volleyball", "Basketball", "Football", "Baseball", "Cricket", "Rugby", "Badminton",
"Squash", "Pool", "Snooker", "Darts", "Bowling", "Curling", "Fencing", "Archery",
"Boxing", "Wrestling", "Judo", "Karate", "Taekwondo", "Sumo", "Weightlifting",
"Gymnastics", "Athletics", "Cycling", "Swimming", "Diving", "Synchronized Swimming",
"Water Polo", "Rowing", "Canoeing", "Sailing", "Equestrian", "Pentathlon", "Heptathlon",
"Decathlon", "Triathlon", "Marathon", "Sprint", "Hurdles", "Relay", "Long Jump",
"High Jump", "Pole Vault", "Shot Put", "Discus", "Hammer Throw", "Javelin", "Biathlon",
"Cross-Country Skiing", "Ice Hockey", "Figure Skating", "Speed Skating", "Bobsleigh",
"Luge", "Skeleton", "Snowboarding", "Freestyle Skiing", "Alpine Skiing", "Nordic Combined",
"Ski Jumping", "Band", "Choir", "Orchestra", "Singer", "Guitar", "Piano", "Violin",
"Drum", "Flute", "Trumpet", "Saxophone", "Clarinet", "Trombone", "Cello", "Harp",
"Accordion", "Banjo", "Harmonica", "Xylophone", "Tambourine", "Triangle", "Viola",
"Double Bass", "French Horn", "Tuba", "Oboe", "Bassoon", "Piccolo", "Conductor",
"Composer", "Lyricist", "Producer", "Director", "Actor", "Actress", "Dancer",
"Choreographer", "Screenwriter", "Cinematographer", "Editor", "Makeup Artist",
"Costume Designer", "Set Designer", "Sound Engineer", "Lighting Technician",
"Stage Manager", "Cameraman", "Stuntman", "Author", "Poet", "Novelist", "Playwright",
"Journalist", "Reporter", "Editor", "Columnist", "Critic", "Blogger", "Illustrator",
"Cartoonist", "Photographer", "Painter", "Sculptor", "Architect", "Designer",
"Potter", "Weaver", "Blacksmith", "Goldsmith", "Silversmith", "Carpenter", "Mason",
"Glazier", "Plumber", "Electrician", "Mechanic", "Tailor", "Cobbler", "Baker",
"Butcher", "Chef", "Brewer", "Vintner", "Farmer", "Gardener", "Florist", "Landscaper",
"Forester", "Fisherman", "Hunter", "Miner", "Jeweller", "Watchmaker", "Bookbinder",
"Printer", "Publisher", "Librarian", "Curator", "Archaeologist", "Astronomer",
"Biologist", "Chemist", "Physicist", "Geologist", "Meteorologist", "Paleontologist",
"Psychologist", "Sociologist", "Anthropologist", "Economist", "Historian", "Linguist",
"Philosopher", "Theologian", "Mathematician", "Statistician", "Engineer", "Programmer",
"Analyst", "Technician", "Scientist", "Researcher", "Professor", "Teacher", "Lecturer",
"Tutor", "Instructor", "Coach", "Trainer", "Mentor", "Advisor", "Consultant",
"Counsellor", "Therapist", "Doctor", "Nurse", "Surgeon", "Dentist", "Pharmacist",
"Veterinarian", "Optician", "Audiologist", "Chiropractor", "Physiotherapist",
"Podiatrist", "Psychiatrist", "Radiographer", "Paramedic", "Midwife", "Dietitian",
"Nutritionist", "Speech Therapist", "Occupational Therapist", "Social Worker",
"Caregiver", "Attendant", "Warden", "Guard", "Police Officer", "Detective", "Sheriff",
"Marshal", "Soldier", "Sailor", "Pilot", "Captain", "Admiral", "General", "Colonel",
"Major", "Lieutenant", "Sergeant", "Corporal", "Private", "Cadet", "Recruit", "Veteran",
"Firefighter", "Lifeguard", "Rescuer", "Volunteer", "Donor", "Philanthropist",
"Sponsor", "Ambassador", "Diplomat", "Mayor", "Governor", "Senator", "Representative",
"Minister", "Secretary", "President", "Vice President", "Chancellor", "Premier",
"Monarch", "Prince", "Princess", "Duke", "Duchess", "Earl", "Countess", "Baron",
"Baroness", "Lord", "Lady", "Sir", "Dame", "Knight", "Esquire", "Citizen", "Resident",
"Immigrant", "Emigrant", "Tourist", "Traveller", "Explorer", "Pioneer", "Settler",
"Nomad", "Refugee", "Student", "Pupil", "Graduate", "Alumnus", "Scholar", "Fellow",
"Intern", "Apprentice", "Trainee", "Employee", "Employer", "Manager", "Supervisor",
"Director", "Executive", "Entrepreneur", "Businessman", "Businesswoman", "Investor",
"Partner", "Colleague", "Assistant", "Secretary", "Clerk", "Accountant", "Auditor",
"Banker", "Economist", "Analyst", "Consultant", "Marketer", "Salesperson", "Retailer",
"Wholesaler", "Trader", "Merchant", "Shopkeeper", "Vendor", "Customer", "Client",
"Consumer", "User", "Subscriber", "Member", "Participant", "Attendee", "Guest",
"Host", "Organiser", "Planner", "Coordinator", "Facilitator", "Moderator", "Speaker",
"Presenter", "Performer", "Artist", "Musician", "Dancer", "Actor", "Comedian",
"Magician", "Clown", "Acrobat", "Juggler", "Mime", "Puppeteer", "Ventriloquist",
"Hypnotist", "Illusionist", "Escapologist", "Stunt Performer"
];
function loadWordList() {
document.getElementById('wordList').value = JSON.stringify(wordList, null, 2);
}
function encodeNumberToWords(numberStr) {
const paddedNumberStr = numberStr.padStart(12, '0');
const triplets = paddedNumberStr.match(/.{1,3}/g) || [];
return triplets.map(triplet => {
const tripletInt = parseInt(triplet, 10);
return tripletInt < wordList.length ? wordList[tripletInt] : triplet;
}).join(' ');
}
function decodeWordsToNumber(encodedStr) {
const wordToNum = wordList.reduce((acc, word, idx) => {
acc[word] = String(idx).padStart(3, '0');
return acc;
}, {});
const words = encodedStr.split(' ');
const triplets = words.map(word => wordToNum[word] || word.padStart(3, '0'));
return triplets.join('').replace(/^0+/, '') || '0';
}
function convertNumbersToWords() {
const numbersInput = document.getElementById('numbers').value;
const numbers = numbersInput.split(',').map(num => num.trim());
const results = numbers.map(encodeNumberToWords);
document.getElementById('numbersResult').innerText = results.join(', ');
}
function convertWordsToNumbers() {
const wordsInput = document.getElementById('words').value;
const result = decodeWordsToNumber(wordsInput);
document.getElementById('wordsResult').innerText = result;
}
</script>
</body>
</html>