2021-06-15 00:49:18 -07:00
---
id: 5a23c84252665b21eecc8024
2022-02-19 12:56:08 +05:30
title: Puzzle sui nomi degli Stati
2021-06-15 00:49:18 -07:00
challengeType: 5
forumTopicId: 302323
dashedName: state-name-puzzle
---
# --description--
2022-02-19 12:56:08 +05:30
Questo compito è ispirato dalla colonna DDJ di Mark Nelson "Wordplay" e una delle sfide del puzzle settimanale da Will Shortz sulla NPR Weekend Edition [\[1\]](https://www.npr.org/templates/story/story.php?storyId=9264290) e originariamente attribuito a David Edelheit. La sfida è di prendere i nomi di due stati dell'USA, mischiarli, poi riarrangiare le lettere per formare i nomi di due *diversi* stati dell'USA (così da avere 4 nomi di stati diversi). Quali sono questi Stati? Il problema è stato ristampato su [Unicon Discussion Web ](https://tapestry.tucson.az.us/twiki/bin/view/Main/StateNamesPuzzle ) che include diverse soluzioni con analisi. Diverse tecniche possono essere utili e potresti voler fare riferimento a [ Gödel numbering ](https://en.wikipedia.org/wiki/Goedel_numbering ), [relazioni di equivalenza ](https://en.wikipedia.org/wiki/Equivalence_relation ), e [classi di equivalenza ](https://en.wikipedia.org/wiki/Equivalence_classes ). I meriti fondamentali di questi sono stati discussi nell'Unicon Discussion Web. È stata presentata anche una seconda sfida sotto forma di una serie di nuovi Stati fittizi.
2021-06-15 00:49:18 -07:00
# --instructions--
2022-02-19 12:56:08 +05:30
Scrivere una funzione per risolvere la sfida per la gamma data di nomi di Stati. La funzione dovrebbe restituire un array. Ogni elemento deve essere un oggetto in questa forma: `{"from":[],"to":[]}` . L'array "from" dovrebbe contenere i nomi originali e l'array "to" dovrebbe contenere i nomi risultanti.
2021-06-15 00:49:18 -07:00
# --hints--
2022-02-19 12:56:08 +05:30
`solve` dovrebbe essere una funzione.
2021-06-15 00:49:18 -07:00
```js
assert(typeof solve == 'function');
```
2022-02-19 12:56:08 +05:30
`solve(["New Mexico", "New York", "North Carolina ", "North Dakota", "Ohio", "Oklahoma", "Oregon", "Pennsylvania", "Rhode Island", "South Carolina", "South Dakota"])` dovrebbe restituire un array.
2021-06-15 00:49:18 -07:00
```js
assert(
Array.isArray(
solve([
'New Mexico',
'New York',
'North Carolina ',
'North Dakota',
'Ohio',
'Oklahoma',
'Oregon',
'Pennsylvania',
'Rhode Island',
'South Carolina',
'South Dakota'
])
)
);
```
2022-02-19 12:56:08 +05:30
`solve(["New Mexico", "New York", "North Carolina ", "North Dakota", "Ohio", "Oklahoma", "Oregon", "Pennsylvania", "Rhode Island", "South Carolina", "South Dakota"])` dovrebbe restituire `[{ from: ["North Carolina ", "South Dakota"], to: ["North Dakota", "South Carolina"] }]` .
2021-06-15 00:49:18 -07:00
```js
assert.deepEqual(
solve([
'New Mexico',
'New York',
'North Carolina ',
'North Dakota',
'Ohio',
'Oklahoma',
'Oregon',
'Pennsylvania',
'Rhode Island',
'South Carolina',
'South Dakota'
]),
[
{
from: ['North Carolina ', 'South Dakota'],
to: ['North Dakota', 'South Carolina']
}
]
);
```
2022-02-19 12:56:08 +05:30
`solve(["New York", "New Kory", "Wen Kory", "York New", "Kory New", "New Kory"])` dovrebbe restituire `[{ from: ["New Kory", "New York"], to: ["Wen Kory", "York New"] }, { from: ["New Kory", "New York"], to: ["Kory New", "Wen Kory"] }, { from: ["New Kory", "New York"], to: ["Kory New", "York New"] }, { from: ["New York", "Wen Kory"], to: ["New Kory", "York New"] }, { from: ["New York", "Wen Kory"], to: ["Kory New", "New Kory"] }, { from: ["New York", "Wen Kory"], to: ["Kory New", "York New"] }, { from: ["New York", "York New"], to: ["New Kory", "Wen Kory"] }, { from: ["New York", "York New"], to: ["Kory New", "New Kory"] }, { from: ["New York", "York New"], to: ["Kory New", "Wen Kory"] }, { from: ["Kory New", "New York"], to: ["New Kory", "Wen Kory"] }, { from: ["Kory New", "New York"], to: ["New Kory", "York New"] }, { from: ["Kory New", "New York"], to: ["Wen Kory", "York New"] }, { from: ["New Kory", "Wen Kory"], to: ["Kory New", "York New"] }, { from: ["New Kory", "York New"], to: ["Kory New", "Wen Kory"] }, { from: ["Kory New", "New Kory"], to: ["Wen Kory", "York New"] }]` .
2021-06-15 00:49:18 -07:00
```js
assert.deepEqual(
solve([
'New York',
'New Kory',
'Wen Kory',
'York New',
'Kory New',
'New Kory'
]),
[
{ from: ['New Kory', 'New York'], to: ['Wen Kory', 'York New'] },
{ from: ['New Kory', 'New York'], to: ['Kory New', 'Wen Kory'] },
{ from: ['New Kory', 'New York'], to: ['Kory New', 'York New'] },
{ from: ['New York', 'Wen Kory'], to: ['New Kory', 'York New'] },
{ from: ['New York', 'Wen Kory'], to: ['Kory New', 'New Kory'] },
{ from: ['New York', 'Wen Kory'], to: ['Kory New', 'York New'] },
{ from: ['New York', 'York New'], to: ['New Kory', 'Wen Kory'] },
{ from: ['New York', 'York New'], to: ['Kory New', 'New Kory'] },
{ from: ['New York', 'York New'], to: ['Kory New', 'Wen Kory'] },
{ from: ['Kory New', 'New York'], to: ['New Kory', 'Wen Kory'] },
{ from: ['Kory New', 'New York'], to: ['New Kory', 'York New'] },
{ from: ['Kory New', 'New York'], to: ['Wen Kory', 'York New'] },
{ from: ['New Kory', 'Wen Kory'], to: ['Kory New', 'York New'] },
{ from: ['New Kory', 'York New'], to: ['Kory New', 'Wen Kory'] },
{ from: ['Kory New', 'New Kory'], to: ['Wen Kory', 'York New'] }
]
);
```
# --seed--
## --seed-contents--
```js
function solve(input) {
}
```
# --solutions--
```js
function solve(input) {
var orig = {};
input.forEach(function(e) {
orig[__helpers.removeWhiteSpace(e).toLowerCase()] = e;
});
input = Object.keys(orig);
var map = {};
for (var i = 0; i < input.length - 1 ; i + + ) {
var pair0 = input[i];
for (var j = i + 1; j < input.length ; j + + ) {
var pair = [pair0, input[j]];
var s = pair0 + pair[1];
var key = s.split('').sort();
var val = map[key] ? map[key] : [];
val.push(pair);
map[key] = val;
}
}
var result = [];
Object.keys(map).forEach(key => {
for (var i = 0; i < map [ key ] . length - 1 ; i + + ) {
var a = map[key][i];
for (var j = i + 1; j < map [ key ] . length ; j + + ) {
var b = map[key][j];
if (new Set([a[0], b[0], a[1], b[1]]).size < 4 ) continue ;
var from = [orig[a[0]], orig[a[1]]].sort();
var to = [orig[b[0]], orig[b[1]]].sort();
result.push({
from,
to
});
}
}
});
return result;
}
```