4.9 KiB
id | title | challengeType | forumTopicId | dashedName |
---|---|---|---|---|
5e4ce2b6ac708cc68c1df25e | Ultima lettera-prima lettera | 5 | 385256 | last-letter-first-letter |
--description--
Un certo gioco per bambini comporta l'iniziare con una parola in una categoria particolare. Ogni partecipante a sua volta dice una parola, ma quella parola deve iniziare con la lettera finale della parola precedente. Una volta che una parola è stata data, non può essere ripetuta. Se un avversario non riesce a dare una parola nella categoria è fuori dal gioco.
Ad esempio, con "animali" come categoria,
Bambino 1: cane Bambino 2: echidna Bambino 1: alligatore Bambino 2: elefante ...
--instructions--
Scrivi una funzione che accetta un array di parole in input. La funzione dovrebbe restituire un array di parole dove la prima lettera di ogni parola è uguale a l'ultima lettera della parola precedente. Usa solo le parole nell'array di input e una volta usata una parola non può essere ripetuta. Le parole nell'array restituito devono essere selezionate e ordinate in modo che la sua lunghezza sia massimizzata.
--hints--
findLongestChain
dovrebbe essere una funzione.
assert(typeof findLongestChain == 'function');
findLongestChain(["certain", "each", "game", "involves", "starting", "with", "word"])
dovrebbe restituire un array.
assert(
Array.isArray(
findLongestChain([
'certain',
'each',
'game',
'involves',
'starting',
'with',
'word'
])
)
);
findLongestChain(["certain", "each", "game", "involves", "starting", "with", "word"])
dovrebbe restituire ["involves", "starting", "game", "each"]
.
assert.deepEqual(
findLongestChain([
'certain',
'each',
'game',
'involves',
'starting',
'with',
'word'
]),
['involves', 'starting', 'game', 'each']
);
findLongestChain(["audino", "bagon", "kangaskhan", "banette", "bidoof", "braviary", "exeggcute", "yamask"])
dovrebbe restituire ["braviary", "yamask", "kangaskhan"]
assert.deepEqual(
findLongestChain([
'audino',
'bagon',
'kangaskhan',
'banette',
'bidoof',
'braviary',
'exeggcute',
'yamask'
]),
['braviary', 'yamask', 'kangaskhan']
);
findLongestChain(["harp", "poliwrath", "poochyena", "porygon2", "porygonz", "archana"])
dovrebbe restituire ["poliwrath", "harp", "poochyena", "archana"]
.
assert.deepEqual(
findLongestChain([
'harp',
'poliwrath',
'poochyena',
'porygon2',
'porygonz',
'archana'
]),
['poliwrath', 'harp', 'poochyena', 'archana']
);
findLongestChain(["scolipede", "elephant", "zeaking", "sealeo", "silcoon", "tigers"])
dovrebbe restituire ["scolipede", "elephant", "tigers", "sealeo"]
.
assert.deepEqual(
findLongestChain([
'scolipede',
'elephant',
'zeaking',
'sealeo',
'silcoon',
'tigers'
]),
['scolipede', 'elephant', 'tigers', 'sealeo']
);
findLongestChain(["loudred", "lumineon", "lunatone", "machamp", "magnezone", "nosepass", "petilil", "pidgeotto", "pikachu"])
dovrebbe restituire ["machamp", "petilil", "lumineon", "nosepass"]
.
assert.deepEqual(
findLongestChain([
'loudred',
'lumineon',
'lunatone',
'machamp',
'magnezone',
'nosepass',
'petilil',
'pidgeotto',
'pikachu'
]),
['machamp', 'petilil', 'lumineon', 'nosepass']
);
--seed--
--seed-contents--
function findLongestChain(items) {
}
--solutions--
function findLongestChain(items) {
function Ref(index, first_char, last_char) {
this.index = index;
this.first_char = first_char;
this.last_char = last_char;
}
var items_len = items.length
var refs_len = items_len;
var refs = []
// enough space for all items
var longest_path_refs_len = 0;
var longest_path_refs = new Array(items_len);
function search(curr_len) {
if (curr_len > longest_path_refs_len) {
longest_path_refs_len = curr_len;
for (var i = 0; i < curr_len; i++) {
longest_path_refs[i] = refs[i];
}
}
// recursive search
var last_char = refs[curr_len - 1].last_char;
for (var i = curr_len; i < refs_len; i++)
if (refs[i].first_char == last_char) {
var aux = refs[curr_len];
refs[curr_len] = refs[i];
refs[i] = aux;
search(curr_len + 1);
refs[i] = refs[curr_len];
refs[curr_len] = aux;
}
}
for (var i = 0; i < items_len; i++) {
var itemsi_len = items[i].length;
refs.push(new Ref(i, items[i][0], items[i][itemsi_len - 1]));
}
// try each item as possible start
for (var i = 0; i < items_len; i++) {
var aux = refs[0];
refs[0] = refs[i];
refs[i] = aux;
search(1);
refs[i] = refs[0];
refs[0] = aux;
}
var longest_path_len = longest_path_refs_len;
var longest_path = new Array(longest_path_len);
for (var i = 0; i < longest_path_len; i++)
longest_path[i] = items[longest_path_refs[i].index];
return longest_path;
}