diff --git a/curriculum/challenges/chinese-traditional/01-responsive-web-design/applied-visual-design/adjust-the-hue-of-a-color.md b/curriculum/challenges/chinese-traditional/01-responsive-web-design/applied-visual-design/adjust-the-hue-of-a-color.md
index e1f1a301308..c0b27399f37 100644
--- a/curriculum/challenges/chinese-traditional/01-responsive-web-design/applied-visual-design/adjust-the-hue-of-a-color.md
+++ b/curriculum/challenges/chinese-traditional/01-responsive-web-design/applied-visual-design/adjust-the-hue-of-a-color.md
@@ -27,19 +27,19 @@ dashedName: adjust-the-hue-of-a-color
# --hints--
-應使用 `hsl()` 函數來設置顏色爲 `green`。
+你的代碼應該使用 `hsl()` 函數來聲明綠色。
```js
assert(code.match(/\.green\s*?{\s*?background-color\s*:\s*?hsl/gi));
```
-應使用 `hsl()` 函數來設置顏色爲 `cyan`。
+你的代碼應該使用 `hsl()` 函數來聲明藍綠色。
```js
assert(code.match(/\.cyan\s*?{\s*?background-color\s*:\s*?hsl/gi));
```
-應使用 `hsl()` 函數來設置顏色爲 `blue`。
+你的代碼應該使用 `hsl()` 函數來聲明藍色。
```js
assert(code.match(/\.blue\s*?{\s*?background-color\s*:\s*?hsl/gi));
diff --git a/curriculum/challenges/chinese-traditional/01-responsive-web-design/basic-html-and-html5/add-images-to-your-website.md b/curriculum/challenges/chinese-traditional/01-responsive-web-design/basic-html-and-html5/add-images-to-your-website.md
index 47c6216a901..4cad10bdb0c 100644
--- a/curriculum/challenges/chinese-traditional/01-responsive-web-design/basic-html-and-html5/add-images-to-your-website.md
+++ b/curriculum/challenges/chinese-traditional/01-responsive-web-design/basic-html-and-html5/add-images-to-your-website.md
@@ -27,7 +27,7 @@ dashedName: add-images-to-your-website
讓我們給上面例子的 `img` 添加 `alt` 屬性。
```html
-
+
```
# --instructions--
diff --git a/curriculum/challenges/chinese-traditional/01-responsive-web-design/css-flexbox/align-elements-using-the-justify-content-property.md b/curriculum/challenges/chinese-traditional/01-responsive-web-design/css-flexbox/align-elements-using-the-justify-content-property.md
index 8ffd31a75d6..33275b38eea 100644
--- a/curriculum/challenges/chinese-traditional/01-responsive-web-design/css-flexbox/align-elements-using-the-justify-content-property.md
+++ b/curriculum/challenges/chinese-traditional/01-responsive-web-design/css-flexbox/align-elements-using-the-justify-content-property.md
@@ -11,7 +11,7 @@ dashedName: align-elements-using-the-justify-content-property
flex 子元素有時不能充滿整個 flex 容器, 所以我們經常需要告訴 CSS 以什麼方式排列 flex 子元素,以及調整它們的間距。 幸運的是,我們可以通過 `justify-content` 屬性的不同值來實現。 在介紹屬性的可選值之前,我們要先理解一些重要術語。
-[這張圖片的元素橫着排列,很好地描述了下面的概念。](https://www.w3.org/TR/css-flexbox-1/images/flex-direction-terms.svg)
+[這裏有一張來自 W3C 的有用的圖片,說明了下面關於“行” flex 容器的概念。](https://www.w3.org/TR/css-flexbox-1/images/flex-direction-terms.svg)
回憶一下,如果把 flex 容器設爲一個行,它的子元素會從左到右逐個排列; 如果把 flex 容器設爲一個列,它的子元素會從上到下逐個排列。 子元素排列的方向被稱爲 **main axis(主軸)**。 對於行,主軸水平貫穿每一個項目; 對於列,主軸垂直貫穿每一個項目。
diff --git a/curriculum/challenges/chinese-traditional/02-javascript-algorithms-and-data-structures/basic-javascript/access-array-data-with-indexes.md b/curriculum/challenges/chinese-traditional/02-javascript-algorithms-and-data-structures/basic-javascript/access-array-data-with-indexes.md
index f71b808172f..dd056fd9651 100644
--- a/curriculum/challenges/chinese-traditional/02-javascript-algorithms-and-data-structures/basic-javascript/access-array-data-with-indexes.md
+++ b/curriculum/challenges/chinese-traditional/02-javascript-algorithms-and-data-structures/basic-javascript/access-array-data-with-indexes.md
@@ -19,21 +19,19 @@ dashedName: access-array-data-with-indexes
```js
const array = [50, 60, 70];
-array[0];
+console.log(array[0]);
const data = array[1];
```
-現在 `array[0]` 的值是 `50`, `data` 的值爲 `60`.
-
-**注意:**數組名與方括號之間不應該有任何空格,比如`array [0]` 。 儘管 JavaScript 能夠正確處理這種情況,但是當其他程序員閱讀你寫的代碼時,這可能讓他們感到困惑。
+`console.log(array[0])` 打印 `50`,`data` 的值爲 `60`。
# --instructions--
-創建一個名爲 `myData` 的變量,使用方括號取出 `myArray` 數組中第一個元素的值並將其賦值給新創建的變量。
+創建一個名爲 `myData` 的變量,並使用括號表示法將其設置爲等於 `myArray` 的第一個值。
# --hints--
-變量 `myData` 應該等於`myArray` 數組中第一個元素的值。
+變量 `myData` 應該等於 `myArray` 的第一個值。
```js
assert(
@@ -51,7 +49,7 @@ assert(
);
```
-應該使用括號訪問變量 `myArray` 中的數據。
+應使用括號表示法訪問變量 `myArray` 中的數據。
```js
assert(
diff --git a/curriculum/challenges/chinese-traditional/02-javascript-algorithms-and-data-structures/basic-javascript/find-the-length-of-a-string.md b/curriculum/challenges/chinese-traditional/02-javascript-algorithms-and-data-structures/basic-javascript/find-the-length-of-a-string.md
index a9ff76320f9..7e013d29c91 100644
--- a/curriculum/challenges/chinese-traditional/02-javascript-algorithms-and-data-structures/basic-javascript/find-the-length-of-a-string.md
+++ b/curriculum/challenges/chinese-traditional/02-javascript-algorithms-and-data-structures/basic-javascript/find-the-length-of-a-string.md
@@ -15,13 +15,13 @@ dashedName: find-the-length-of-a-string
console.log("Alan Peter".length);
```
-字符串 `10` 將會出現在控制檯中。
+值 `10` 將顯示在控制檯中。 請注意,“Alan” 和 “Peter” 之間的空格字符也被計算在內。
例如,如果我們創建了一個變量 `const firstName = "Ada"`,我們可以通過使用 `firstName.length` 找出字符串 `Ada` 的長度屬性。
# --instructions--
-使用 `.length` 屬性來獲得變量 `lastName` 的長度,並把它賦值給變量 `lastNameLength`。
+使用 `.length` 屬性將 `lastNameLength` 設置爲 `lastName` 中的字符數。
# --hints--
diff --git a/curriculum/challenges/chinese-traditional/02-javascript-algorithms-and-data-structures/debugging/use-typeof-to-check-the-type-of-a-variable.md b/curriculum/challenges/chinese-traditional/02-javascript-algorithms-and-data-structures/debugging/use-typeof-to-check-the-type-of-a-variable.md
index 32ab6a8dc8c..8c8d66da89c 100644
--- a/curriculum/challenges/chinese-traditional/02-javascript-algorithms-and-data-structures/debugging/use-typeof-to-check-the-type-of-a-variable.md
+++ b/curriculum/challenges/chinese-traditional/02-javascript-algorithms-and-data-structures/debugging/use-typeof-to-check-the-type-of-a-variable.md
@@ -32,7 +32,7 @@ JavaScript 有七種原始(不可變)數據類型: `Boolean`,`Null`,`U
應在兩個 `console.log()` 語句中使用 `typeof` 來檢查變量的類型。
```js
-assert(code.match(/console\.log\(typeof[\( ].*\)?\)/g).length == 2);
+assert(code.match(/console\.log\s*\(typeof[\( ].*\)?\)/g).length == 2);
```
應使用 `typeof` 來檢查變量 `seven` 的類型。
diff --git a/curriculum/challenges/chinese/01-responsive-web-design/applied-visual-design/adjust-the-hue-of-a-color.md b/curriculum/challenges/chinese/01-responsive-web-design/applied-visual-design/adjust-the-hue-of-a-color.md
index d8a1e6fecb7..7f4458ee446 100644
--- a/curriculum/challenges/chinese/01-responsive-web-design/applied-visual-design/adjust-the-hue-of-a-color.md
+++ b/curriculum/challenges/chinese/01-responsive-web-design/applied-visual-design/adjust-the-hue-of-a-color.md
@@ -27,19 +27,19 @@ dashedName: adjust-the-hue-of-a-color
# --hints--
-应使用 `hsl()` 函数来设置颜色为 `green`。
+你的代码应该使用 `hsl()` 函数来声明绿色。
```js
assert(code.match(/\.green\s*?{\s*?background-color\s*:\s*?hsl/gi));
```
-应使用 `hsl()` 函数来设置颜色为 `cyan`。
+你的代码应该使用 `hsl()` 函数来声明蓝绿色。
```js
assert(code.match(/\.cyan\s*?{\s*?background-color\s*:\s*?hsl/gi));
```
-应使用 `hsl()` 函数来设置颜色为 `blue`。
+你的代码应该使用 `hsl()` 函数来声明蓝色。
```js
assert(code.match(/\.blue\s*?{\s*?background-color\s*:\s*?hsl/gi));
diff --git a/curriculum/challenges/chinese/01-responsive-web-design/basic-html-and-html5/add-images-to-your-website.md b/curriculum/challenges/chinese/01-responsive-web-design/basic-html-and-html5/add-images-to-your-website.md
index 832c96355cf..9f6ee80e180 100644
--- a/curriculum/challenges/chinese/01-responsive-web-design/basic-html-and-html5/add-images-to-your-website.md
+++ b/curriculum/challenges/chinese/01-responsive-web-design/basic-html-and-html5/add-images-to-your-website.md
@@ -27,7 +27,7 @@ dashedName: add-images-to-your-website
让我们给上面例子的 `img` 添加 `alt` 属性。
```html
-
+
```
# --instructions--
diff --git a/curriculum/challenges/chinese/01-responsive-web-design/css-flexbox/align-elements-using-the-justify-content-property.md b/curriculum/challenges/chinese/01-responsive-web-design/css-flexbox/align-elements-using-the-justify-content-property.md
index 60898ae264e..abee21b4ee2 100644
--- a/curriculum/challenges/chinese/01-responsive-web-design/css-flexbox/align-elements-using-the-justify-content-property.md
+++ b/curriculum/challenges/chinese/01-responsive-web-design/css-flexbox/align-elements-using-the-justify-content-property.md
@@ -11,7 +11,7 @@ dashedName: align-elements-using-the-justify-content-property
flex 子元素有时不能充满整个 flex 容器, 所以我们经常需要告诉 CSS 以什么方式排列 flex 子元素,以及调整它们的间距。 幸运的是,我们可以通过 `justify-content` 属性的不同值来实现。 在介绍属性的可选值之前,我们要先理解一些重要术语。
-[这张图片的元素横着排列,很好地描述了下面的概念。](https://www.w3.org/TR/css-flexbox-1/images/flex-direction-terms.svg)
+[这里有一张来自 W3C 的有用的图片,说明了下面关于“行” flex 容器的概念。](https://www.w3.org/TR/css-flexbox-1/images/flex-direction-terms.svg)
回忆一下,如果把 flex 容器设为一个行,它的子元素会从左到右逐个排列; 如果把 flex 容器设为一个列,它的子元素会从上到下逐个排列。 子元素排列的方向被称为 **main axis(主轴)**。 对于行,主轴水平贯穿每一个项目; 对于列,主轴垂直贯穿每一个项目。
diff --git a/curriculum/challenges/chinese/02-javascript-algorithms-and-data-structures/basic-javascript/access-array-data-with-indexes.md b/curriculum/challenges/chinese/02-javascript-algorithms-and-data-structures/basic-javascript/access-array-data-with-indexes.md
index 49d0771b122..7d526095d55 100644
--- a/curriculum/challenges/chinese/02-javascript-algorithms-and-data-structures/basic-javascript/access-array-data-with-indexes.md
+++ b/curriculum/challenges/chinese/02-javascript-algorithms-and-data-structures/basic-javascript/access-array-data-with-indexes.md
@@ -19,21 +19,19 @@ dashedName: access-array-data-with-indexes
```js
const array = [50, 60, 70];
-array[0];
+console.log(array[0]);
const data = array[1];
```
-现在 `array[0]` 的值是 `50`, `data` 的值为 `60`.
-
-**注意:**数组名与方括号之间不应该有任何空格,比如`array [0]` 。 尽管 JavaScript 能够正确处理这种情况,但是当其他程序员阅读你写的代码时,这可能让他们感到困惑。
+`console.log(array[0])` 打印 `50`,`data` 的值为 `60`。
# --instructions--
-创建一个名为 `myData` 的变量,使用方括号取出 `myArray` 数组中第一个元素的值并将其赋值给新创建的变量。
+创建一个名为 `myData` 的变量,并使用括号表示法将其设置为等于 `myArray` 的第一个值。
# --hints--
-变量 `myData` 应该等于`myArray` 数组中第一个元素的值。
+变量 `myData` 应该等于 `myArray` 的第一个值。
```js
assert(
@@ -51,7 +49,7 @@ assert(
);
```
-应该使用括号访问变量 `myArray` 中的数据。
+应使用括号表示法访问变量 `myArray` 中的数据。
```js
assert(
diff --git a/curriculum/challenges/chinese/02-javascript-algorithms-and-data-structures/basic-javascript/find-the-length-of-a-string.md b/curriculum/challenges/chinese/02-javascript-algorithms-and-data-structures/basic-javascript/find-the-length-of-a-string.md
index 777f94b37ea..b93708f70e3 100644
--- a/curriculum/challenges/chinese/02-javascript-algorithms-and-data-structures/basic-javascript/find-the-length-of-a-string.md
+++ b/curriculum/challenges/chinese/02-javascript-algorithms-and-data-structures/basic-javascript/find-the-length-of-a-string.md
@@ -15,13 +15,13 @@ dashedName: find-the-length-of-a-string
console.log("Alan Peter".length);
```
-字符串 `10` 将会出现在控制台中。
+值 `10` 将显示在控制台中。 请注意,“Alan” 和 “Peter” 之间的空格字符也被计算在内。
例如,如果我们创建了一个变量 `const firstName = "Ada"`,我们可以通过使用 `firstName.length` 找出字符串 `Ada` 的长度属性。
# --instructions--
-使用 `.length` 属性来获得变量 `lastName` 的长度,并把它赋值给变量 `lastNameLength`。
+使用 `.length` 属性将 `lastNameLength` 设置为 `lastName` 中的字符数。
# --hints--
diff --git a/curriculum/challenges/chinese/02-javascript-algorithms-and-data-structures/debugging/use-typeof-to-check-the-type-of-a-variable.md b/curriculum/challenges/chinese/02-javascript-algorithms-and-data-structures/debugging/use-typeof-to-check-the-type-of-a-variable.md
index 4ee63153ae2..9ccc8cc1343 100644
--- a/curriculum/challenges/chinese/02-javascript-algorithms-and-data-structures/debugging/use-typeof-to-check-the-type-of-a-variable.md
+++ b/curriculum/challenges/chinese/02-javascript-algorithms-and-data-structures/debugging/use-typeof-to-check-the-type-of-a-variable.md
@@ -32,7 +32,7 @@ JavaScript 有七种原始(不可变)数据类型: `Boolean`,`Null`,`U
应在两个 `console.log()` 语句中使用 `typeof` 来检查变量的类型。
```js
-assert(code.match(/console\.log\(typeof[\( ].*\)?\)/g).length == 2);
+assert(code.match(/console\.log\s*\(typeof[\( ].*\)?\)/g).length == 2);
```
应使用 `typeof` 来检查变量 `seven` 的类型。
diff --git a/curriculum/challenges/espanol/01-responsive-web-design/basic-html-and-html5/add-images-to-your-website.md b/curriculum/challenges/espanol/01-responsive-web-design/basic-html-and-html5/add-images-to-your-website.md
index 75a8b8bcc46..e66a4ce7660 100644
--- a/curriculum/challenges/espanol/01-responsive-web-design/basic-html-and-html5/add-images-to-your-website.md
+++ b/curriculum/challenges/espanol/01-responsive-web-design/basic-html-and-html5/add-images-to-your-website.md
@@ -27,7 +27,7 @@ Idealmente, el atributo `alt` no debe contener caracteres especiales a menos que
Agreguemos un atributo `alt` a nuestro ejemplo `img` anterior:
```html
-
+
```
# --instructions--
diff --git a/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/debugging/use-typeof-to-check-the-type-of-a-variable.md b/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/debugging/use-typeof-to-check-the-type-of-a-variable.md
index 4b04c965cc0..c6dc2709d7d 100644
--- a/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/debugging/use-typeof-to-check-the-type-of-a-variable.md
+++ b/curriculum/challenges/espanol/02-javascript-algorithms-and-data-structures/debugging/use-typeof-to-check-the-type-of-a-variable.md
@@ -32,7 +32,7 @@ Agrega dos sentencias `console.log()` para comprobar el `typeof` de cada una de
Tu código debe utilizar `typeof` en dos sentencias `console.log()` para comprobar el tipo de las variables.
```js
-assert(code.match(/console\.log\(typeof[\( ].*\)?\)/g).length == 2);
+assert(code.match(/console\.log\s*\(typeof[\( ].*\)?\)/g).length == 2);
```
Tu código debe utilizar `typeof` para comprobar el tipo de la variable `seven`.
diff --git a/curriculum/challenges/italian/01-responsive-web-design/basic-html-and-html5/add-images-to-your-website.md b/curriculum/challenges/italian/01-responsive-web-design/basic-html-and-html5/add-images-to-your-website.md
index 6ca5b31c872..80189c6d8ed 100644
--- a/curriculum/challenges/italian/01-responsive-web-design/basic-html-and-html5/add-images-to-your-website.md
+++ b/curriculum/challenges/italian/01-responsive-web-design/basic-html-and-html5/add-images-to-your-website.md
@@ -27,7 +27,7 @@ Idealmente l'attributo `alt` non dovrebbe contenere caratteri speciali a meno ch
Aggiungiamo un attributo `alt` al nostro esempio `img` precedente:
```html
-
+
```
# --instructions--
diff --git a/curriculum/challenges/italian/02-javascript-algorithms-and-data-structures/debugging/use-typeof-to-check-the-type-of-a-variable.md b/curriculum/challenges/italian/02-javascript-algorithms-and-data-structures/debugging/use-typeof-to-check-the-type-of-a-variable.md
index df81a31911c..780546a7d78 100644
--- a/curriculum/challenges/italian/02-javascript-algorithms-and-data-structures/debugging/use-typeof-to-check-the-type-of-a-variable.md
+++ b/curriculum/challenges/italian/02-javascript-algorithms-and-data-structures/debugging/use-typeof-to-check-the-type-of-a-variable.md
@@ -32,7 +32,7 @@ Aggiungi due istruzioni `console.log()` per controllare il `typeof` di ciascuna
Il tuo codice dovrebbe utilizzare `typeof` in due istruzioni `console.log()` per controllare il tipo delle variabili.
```js
-assert(code.match(/console\.log\(typeof[\( ].*\)?\)/g).length == 2);
+assert(code.match(/console\.log\s*\(typeof[\( ].*\)?\)/g).length == 2);
```
Il tuo codice dovrebbe utilizzare `typeof` per controllare il tipo della variabile `seven`.
diff --git a/curriculum/challenges/italian/10-coding-interview-prep/rosetta-code/fibonacci-word.md b/curriculum/challenges/italian/10-coding-interview-prep/rosetta-code/fibonacci-word.md
index a91cde3a3f2..b7017696419 100644
--- a/curriculum/challenges/italian/10-coding-interview-prep/rosetta-code/fibonacci-word.md
+++ b/curriculum/challenges/italian/10-coding-interview-prep/rosetta-code/fibonacci-word.md
@@ -18,7 +18,7 @@ Forma F_Wordn come F_Wordn-1 concatento con with F_w
# --instructions--
-Scrivi una funzione che restituisci le Parole di Fibonacci fino a `n`. `n` verrà fornito come parametro per la funzione. La funzione dovrebbe restituire un array di oggetti. Gli oggetti dovrebberi essere della forma: `{ N: 1, Length: 1, Entropy: 0, Word: '1' }`.
+Scrivi una funzione che restituisci le Parole di Fibonacci fino a `n`. `n` verrà fornito come parametro per la funzione. La funzione dovrebbe restituire un array di oggetti. Gli oggetti dovrebberi essere della forma: `{ N: 1, Length: 1, Entropy: 0, Word: '1' }`. `Entropy` è calcolata per la parola `Word` [come descritto qui](https://en.wikipedia.org/wiki/Entropy_%28information_theory%29) e arrotondato a 8 cifre decimali di accuratezza.
# --hints--
@@ -34,10 +34,16 @@ assert(typeof fibWord === 'function');
assert(Array.isArray(fibWord(5)));
```
-`fibWord(5)` dovrebbe restituire `[{ N:1, Length:1, Entropy:0, Word:"1" },{ N:2, Length:1, Entropy:0, Word:"0" },{ N:3, Length:2, Entropy:1, Word:"01" },{ N:4, Length:3, Entropy:0.9182958340544896, Word:"010" },{ N:5, Length:5, Entropy:0.9709505944546688, Word:"01001" }]`.
+`fibWord(5)` dovrebbe restituire `[{ N:1, Length:1, Entropy:0, Word:"1" },{ N:2, Length:1, Entropy:0, Word:"0" },{ N:3, Length:2, Entropy:1, Word:"01" },{ N:4, Length:3, Entropy:0.91829583, Word:"010" },{ N:5, Length:5, Entropy:0.97095059, Word:"01001" }]`.
```js
-assert.deepEqual(fibWord(5), ans);
+assert.deepEqual(fibWord(5), words5);
+```
+
+`fibWord(7)` dovrebbe restituire `[{ N:1, Length:1, Entropy:0, Word:"1" },{ N:2, Length:1, Entropy:0, Word:"0" },{ N:3, Length:2, Entropy:1, Word:"01" },{ N:4, Length:3, Entropy:0.91829583, Word:"010" },{ N:5, Length:5, Entropy:0.97095059, Word:"01001" }, { N:6, Length:8, Entropy:0.954434, Word:'01001010' }, { N:7, Length:13, Entropy:0.9612366, Word:'0100101001001' }]`.
+
+```js
+assert.deepEqual(fibWord(7), words7);
```
# --seed--
@@ -45,15 +51,23 @@ assert.deepEqual(fibWord(5), ans);
## --after-user-code--
```js
-let ans=[ { N: 1, Length: 1, Entropy: 0, Word: '1' },
-
+const words5 = [
+ { N: 1, Length: 1, Entropy: 0, Word: '1' },
{ N: 2, Length: 1, Entropy: 0, Word: '0' },
-
{ N: 3, Length: 2, Entropy: 1, Word: '01' },
+ { N: 4, Length: 3, Entropy: 0.91829583, Word: '010' },
+ { N: 5, Length: 5, Entropy: 0.97095059, Word: '01001' }
+];
- { N: 4, Length: 3, Entropy: 0.9182958340544896, Word: '010' },
-
- { N: 5, Length: 5, Entropy: 0.9709505944546688, Word: '01001' }];
+const words7 = [
+ { N: 1, Length: 1, Entropy: 0, Word: '1' },
+ { N: 2, Length: 1, Entropy: 0, Word: '0' },
+ { N: 3, Length: 2, Entropy: 1, Word: '01' },
+ { N: 4, Length: 3, Entropy: 0.91829583, Word: '010' },
+ { N: 5, Length: 5, Entropy: 0.97095059, Word: '01001' },
+ { N: 6, Length: 8, Entropy: 0.954434, Word: '01001010' },
+ { N: 7, Length: 13, Entropy: 0.9612366, Word: '0100101001001' }
+];
```
## --seed-contents--
@@ -67,55 +81,33 @@ function fibWord(n) {
# --solutions--
```js
+// Round to digits
+function roundFloat(num, digits) {
+ return Math.round(num * 10.0**digits) / (10.0**digits);
+}
+
+// Entropy calculation for string with only 0 and 1
+function entropy(word) {
+ function digitEntropy(count) {
+ return count < 1 ? 0
+ : - count / word.length * Math.log2(count / word.length);
+ }
+ const numZeros = word.split('').filter(e => e === '0').length;
+ const numOnes = word.length - numZeros;
+ return roundFloat(digitEntropy(numZeros) + digitEntropy(numOnes), 8);
+}
+
+// Compute array of Fibonacci words
function fibWord(n) {
- function entropy(s) {
- //create an object containing each individual char
- //and the amount of iterations per char
- function prob(s) {
- var h = Object.create(null);
- s.split('').forEach(function(c) {
- h[c] && h[c]++ || (h[c] = 1);
- });
- return h;
- }
-
- s = s.toString(); //just in case
- var e = 0, l = s.length, h = prob(s);
-
- for (var i in h ) {
- var p = h[i]/l;
- e -= p * Math.log(p) / Math.log(2);
- }
- return e;
- }
- var wOne = "1", wTwo = "0", wNth = [wOne, wTwo], w = "", o = [];
-
- for (var i = 0; i < n; i++) {
- if (i === 0 || i === 1) {
- w = wNth[i];
- } else {
- w = wNth[i - 1] + wNth[i - 2];
- wNth.push(w);
- }
- var l = w.length;
- var e = entropy(w);
-
- if (l <= 21) {
- o.push({
- N: i + 1,
- Length: l,
- Entropy: e,
- Word: w
- });
- } else {
- o.push({
- N: i + 1,
- Length: l,
- Entropy: e,
- Word: "..."
- });
- }
- }
- return o;
+ return [...Array(n).keys()]
+ .reduce((words, i) => {
+ const word = i === 0 ? "1"
+ : i === 1 ? "0"
+ : words[i - 1].Word + words[i - 2].Word;
+ words.push(
+ { N: i + 1, Length: word.length, Entropy: entropy(word), Word: word }
+ );
+ return words;
+ }, []);
}
```
diff --git a/curriculum/challenges/italian/11-machine-learning-with-python/machine-learning-with-python-projects/rock-paper-scissors.md b/curriculum/challenges/italian/11-machine-learning-with-python/machine-learning-with-python-projects/rock-paper-scissors.md
index d41ea8ad1fd..3431c02ef4b 100644
--- a/curriculum/challenges/italian/11-machine-learning-with-python/machine-learning-with-python-projects/rock-paper-scissors.md
+++ b/curriculum/challenges/italian/11-machine-learning-with-python/machine-learning-with-python-projects/rock-paper-scissors.md
@@ -10,11 +10,51 @@ dashedName: rock-paper-scissors
In questa sfida creerai un programma per giocare a carta, sasso, forbici. Un programma che sceglie a caso di solito vincerà il 50% delle volte. Per superare questa sfida il tuo programma deve giocare partite contro quattro diversi bot, vincendo almeno il 60% dei giochi in ogni partita.
-Puoi accedere [alla descrizione completa del progetto e al codice iniziale su Replit](https://replit.com/github/freeCodeCamp/boilerplate-rock-paper-scissors).
+Lavorerari a [questo progetto con il nostro codice d'inizio su Replit](https://replit.com/github/freeCodeCamp/boilerplate-rock-paper-scissors).
-Dopo essere andato a quel collegamento, fai un fork del progetto. Una volta completato il progetto in base alle istruzioni riportate in 'README.md', invia il link del progetto qui sotto.
+Stiamo ancora sviluppando la parte di didattica interattiva per il programma di machine learning. Per ora, dovrai utilizzare altre risorse per imparare a superare questa sfida.
-Stiamo ancora sviluppando ila parte di didattica interattiva per il programma di machine learning. Per ora, dovrai utilizzare altre risorse per imparare a superare questa sfida.
+# --instructions--
+
+Nel file `RPS.py` ti è data una funzione chiamata `player`. La funzione prende un argomento che è una stringa che descrive l'ultima mossa dell'avversario ("R" per sasso, "P" per carta, o "S" per forbici). La funzione dovrebbe restituire una stringa che rappresenza la prossima mossa da giocare ("R", "P", o "S").
+
+Una funzione giocatore riceverà una stringa vuota come argomento per la prima mano in una partita visto che non ci sono mani precedenti.
+
+Il file `RPS.py` mostra una funzione di esempio che devi aggiornare. La funzione di esempio è definita con due argomenti (`player(prev_play, opponent_history = [])`). La funzione non è mai chiamata con un secondo argomento, quindi quello è completamente opzionale. La ragione per cui la funzione di esempio contiene un secondo argomento (`opponent_history = []`) è perché è l'unico modo per salvare lo stato tra invocazioni consecutive della funzione `player`. Hai bisogno dell'argomento `opponent_history` solo se vuoi tenere traccia delle mosse del tuo avversario.
+
+*Suggerimento: per sconfiggere tutti e quattro gli avversari, il tuo programma potrebbe avere bisogno di diverse strategie che cambiano a seconda di come gli avversari giocano.*
+
+## Sviluppo
+
+Non cambiare `RPS_game.py`. Scrivi tutto il tuo codice in `RPS.py`. Per lo sviluppo, puoi usare `main.py` per testare il tuo codice.
+
+`main.py` importa la funzione di gioco e i bot da `RPS_game.py`.
+
+Per testare il tuo codice, fai una partita usando la funzione `play`. La funzione `play` prende quattro argomenti:
+
+- due giocatori per giocare uno contro l'altro (i giocatori sono in realtà funzioni)
+- il numero di mani da giocare nella partita
+- un argomento opzionale per vedere la storia di ogni partita. Impostalo su `True` per vedere questi messaggi.
+
+```py
+play(player1, player2, num_games[, verbose])
+```
+
+Per esempio, ecco come chiamare la funzione se vuoi che `player` e `quincy` giochino 1000 mani uno contro l'altro e vuoi vedere il risultato di ogni mano:
+
+```py
+play(player, quincy, 1000, verbose=True)
+```
+
+Clicca sul pulsante "run" e `main.py` esguirà.
+
+## Test
+
+I test unitari per questo progetto sono in `test_module.py`. Abbiamo importato i test da `test_module.py` in `main.py` per tua comodità. Se decommenti l'ultima riga in `main.py` i test eseguiranno automaticamente ogni volta che usi il pulsante "run".
+
+## Invio
+
+Copia l'URL del tuo progetto e consegnalo nell'input qua sotto.
# --hints--
diff --git a/curriculum/challenges/italian/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/5f3326b143638ee1a09ff1e3.md b/curriculum/challenges/italian/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/5f3326b143638ee1a09ff1e3.md
new file mode 100644
index 00000000000..e724a5a5019
--- /dev/null
+++ b/curriculum/challenges/italian/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/5f3326b143638ee1a09ff1e3.md
@@ -0,0 +1,54 @@
+---
+id: 5f3326b143638ee1a09ff1e3
+title: Step 4
+challengeType: 0
+dashedName: step-4
+---
+
+# --description--
+
+Per preparati a creare del contenuto, aggiungi un elemento `body` sotto l'elemento `head`.
+
+# --hints--
+
+Dovresti avere un tag di apertura `
`.
+
+```js
+assert(code.match(//i));
+```
+
+Dovresti avere un tag di chiusura ``.
+
+```js
+assert(code.match(/<\/body>/i));
+```
+
+Non dovresti cambiare l'elemento `head`. Assicurati di non aver eliminato il tag di chiusura.
+
+```js
+assert(code.match(//i));
+assert(code.match(/<\/head>/i));
+```
+
+Il tuo elemento `body` dovrebbe essere all'interno dell'elemento `head`.
+
+```js
+assert(code.match(/<\/head>[.\n\s]*/im));
+```
+
+# --seed--
+
+## --seed-contents--
+
+```html
+
+
+--fcc-editable-region--
+
+
+ Cafe Menu
+
+--fcc-editable-region--
+
+```
+
diff --git a/curriculum/challenges/italian/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/5f3477ae34c1239cafe128be.md b/curriculum/challenges/italian/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/5f3477ae34c1239cafe128be.md
new file mode 100644
index 00000000000..d74bcd62e5b
--- /dev/null
+++ b/curriculum/challenges/italian/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/5f3477ae34c1239cafe128be.md
@@ -0,0 +1,73 @@
+---
+id: 5f3477ae34c1239cafe128be
+title: Step 14
+challengeType: 0
+dashedName: step-14
+---
+
+# --description--
+
+Ora hai tre tipi di selettori con lo stesso stile. È possibile aggiungere lo stesso gruppo di stili a molti elementi separando i selettori con virgole in questo modo:
+
+```css
+selector1, selector2 {
+ property: value;
+}
+```
+
+Usa un singolo tipo di selettore per centrare gli elementi `h1`, `h2` e `p` contemporaneamente.
+
+# --hints--
+
+Dovresti usare un singolo tipo di selettore per tutti e tre gli elementi, `h1, h2, p`. Assicurati di utilizzare quell'ordine.
+
+```js
+const hasSelector = new __helpers.CSSHelp(document).getStyle('h1, h2, p');
+assert(hasSelector);
+```
+
+Dovresti avere un solo selettore nel tuo elemento `style`.
+
+```js
+const selectors = new __helpers.CSSHelp(document).getCSSRules().filter(x => x.selectorText)
+assert(selectors.length === 1);
+```
+
+# --seed--
+
+## --seed-contents--
+
+```html
+
+
+
+
+ Cafe Menu
+--fcc-editable-region--
+
+--fcc-editable-region--
+
+
+
+
CAMPER CAFE
+
Est. 2020
+
+
+
+
Coffee
+
+
+
+
+```
+
diff --git a/curriculum/challenges/italian/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/5f3477ae8466a9a3d2cc953c.md b/curriculum/challenges/italian/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/5f3477ae8466a9a3d2cc953c.md
new file mode 100644
index 00000000000..2532ccf517e
--- /dev/null
+++ b/curriculum/challenges/italian/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/5f3477ae8466a9a3d2cc953c.md
@@ -0,0 +1,67 @@
+---
+id: 5f3477ae8466a9a3d2cc953c
+title: Step 16
+challengeType: 0
+dashedName: step-16
+---
+
+# --description--
+
+Ora che hai il CSS nel file `styles.css`, rimuovi l'elemento `style` e tutto il suo contenuto. Una volta rimosso, il testo centrato tornerà a sinistra.
+
+# --hints--
+
+Non dovresti avere un elemento `style` nel tuo codice.
+
+```js
+assert(!code.match(/style/i));
+```
+
+Non dovresti avere alcun selettore CSS nel tuo file HTML.
+
+```js
+(getUserInput) => {
+ const html = getUserInput('editableContents');
+ assert(!html.includes('style'));
+ assert(!html.includes('text-align'));
+}
+```
+
+# --seed--
+
+## --seed-contents--
+
+```html
+
+
+--fcc-editable-region--
+
+
+ Cafe Menu
+
+
+--fcc-editable-region--
+
+
+
CAMPER CAFE
+
Est. 2020
+
+
+
+
Coffee
+
+
+
+
+```
+
+```css
+h1, h2, p {
+ text-align: center;
+}
+```
+
diff --git a/curriculum/challenges/italian/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/5f3477ae9675db8bb7655b30.md b/curriculum/challenges/italian/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/5f3477ae9675db8bb7655b30.md
new file mode 100644
index 00000000000..bf52176ae92
--- /dev/null
+++ b/curriculum/challenges/italian/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/5f3477ae9675db8bb7655b30.md
@@ -0,0 +1,87 @@
+---
+id: 5f3477ae9675db8bb7655b30
+title: Step 13
+challengeType: 0
+dashedName: step-13
+---
+
+# --description--
+
+Nello step precedente, hai usato un selettore di tipo (type selector) per lo stile dell'elemento `h1`. Centra gli elementi `h2` e `p` con un nuovo selettore di tipo per ciascuno.
+
+# --hints--
+
+Non dovresti cambiare il selettore esistente per `h1`.
+
+```js
+const hasH1 = new __helpers.CSSHelp(document).getStyle('h1');
+assert(hasH1);
+```
+
+Dovresti aggiungere un nuovo selettore per `h2`.
+
+```js
+const hasH2 = new __helpers.CSSHelp(document).getStyle('h2');
+assert(hasH2);
+```
+
+Dovresti aggiungere un nuovo selettore per `p`.
+
+```js
+const hasP = new __helpers.CSSHelp(document).getStyle('p');
+assert(hasP);
+```
+
+I tuoi elementi `h1` dovrebbero avere una proprietà `text-align` di `center`.
+
+```js
+const h1TextAlign = new __helpers.CSSHelp(document).getStyle('h1')?.getPropertyValue('text-align');
+assert(h1TextAlign === 'center');
+```
+
+I tuoi elementi `h2` dovrebbero avere una prorpietà `text-align` di `center`.
+
+```js
+const h2TextAlign = new __helpers.CSSHelp(document).getStyle('h2')?.getPropertyValue('text-align');
+assert(h2TextAlign === 'center');
+```
+
+I tuoi elementi `p` dovrebbero avere una prorpietà `text-align` di `center`.
+
+```js
+const pTextAlign = new __helpers.CSSHelp(document).getStyle('p')?.getPropertyValue('text-align');
+assert(pTextAlign === 'center');
+```
+
+# --seed--
+
+## --seed-contents--
+
+```html
+
+
+
+
+ Cafe Menu
+--fcc-editable-region--
+
+--fcc-editable-region--
+
+
+
+
CAMPER CAFE
+
Est. 2020
+
+
+
+
Coffee
+
+
+
+
+```
+
diff --git a/curriculum/challenges/italian/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/5f3477cb2e27333b1ab2b955.md b/curriculum/challenges/italian/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/5f3477cb2e27333b1ab2b955.md
new file mode 100644
index 00000000000..8d60df3cbf3
--- /dev/null
+++ b/curriculum/challenges/italian/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/5f3477cb2e27333b1ab2b955.md
@@ -0,0 +1,89 @@
+---
+id: 5f3477cb2e27333b1ab2b955
+title: Step 17
+challengeType: 0
+dashedName: step-17
+---
+
+# --description--
+
+Ora è necessario collegare il file `styles.css` in modo che gli stili verranno applicati di nuovo. Annida un elemento `link` auto-chiudente nell'elemento `head`. Dagli un attributo `rel` con valore di `stylesheet`, un attributo `type` con valore di `text/css`, e un attributo `href` con valore `styles.css`.
+
+# --hints--
+
+Il tuo codice dovrebbe avere un elemento `link`.
+
+```js
+// link is removed -> if exists, replaced with style
+const link = document.querySelector('body > style');
+assert(link);
+```
+
+Non dovresti cambiare l'elemento `head` esistente. Assicurati di non aver eliminato il tag di chiusura.
+
+```js
+assert($('head').length === 1);
+```
+
+Il tuo elemento `link` dovrebbe essere un elemento auto-chiudente.
+
+```js
+assert(code.match(//i));
+```
+
+Il tuo elemento `link` dovrebbe essere all'interno dell'elemento `head`.
+
+```js
+assert(code.match(/[\w\W\s]*[\w\W\s]*<\/head>/i))
+```
+
+Il tuo elemento `link` dovrebbe avere un attributo `rel` con valore di `stylesheet`.
+
+```js
+assert(code.match(/rel=('|")stylesheet\1/i));
+```
+
+Il tuo elemento `link` dovrebbe avere un attributo `type` con il valore `text/css`.
+
+```js
+assert(code.match(/type=('|")text\/css\1/i));
+```
+
+Il tuo elemento `link` dovrebbe avere un attributo `href` con un valore di `styles.css`.
+
+```js
+assert(code.match(/href=('|")styles.css\1/i));
+```
+
+# --seed--
+
+## --seed-contents--
+
+```html
+
+
+--fcc-editable-region--
+
+
+ Cafe Menu
+
+--fcc-editable-region--
+
+
+
CAMPER CAFE
+
Est. 2020
+
+
+
+
Coffee
+
+
+
+
+```
+
+```css
+h1, h2, p {
+ text-align: center;
+}
+```
diff --git a/curriculum/challenges/italian/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/5f3477cb303c5cb61b43aa9b.md b/curriculum/challenges/italian/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/5f3477cb303c5cb61b43aa9b.md
new file mode 100644
index 00000000000..f589185f60f
--- /dev/null
+++ b/curriculum/challenges/italian/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/5f3477cb303c5cb61b43aa9b.md
@@ -0,0 +1,70 @@
+---
+id: 5f3477cb303c5cb61b43aa9b
+title: Step 19
+challengeType: 0
+dashedName: step-19
+---
+
+# --description--
+
+Il testoè di nuovo centrato quindi il collegamento al file CSS funziona. Aggiungi un altro stile al file che cambia la proprietà `background-color` in `brown` per l'elemento `body`.
+
+# --hints--
+
+Dovresti usare un selettore `body`.
+
+```js
+const hasBody = new __helpers.CSSHelp(document).getStyle('body');
+assert(hasBody);
+```
+
+Dovresti impostare la proprietà `background-color` su `brown`.
+
+```js
+const hasBackground = new __helpers.CSSHelp(document).getCSSRules().some(x => x.style['background-color'] === 'brown');
+assert(hasBackground);
+```
+
+Il tuo elemento `body` dovrebbe avere uno sfondo marrone (`brown`).
+
+```js
+const bodyBackground = new __helpers.CSSHelp(document).getStyle('body')?.getPropertyValue('background-color');
+assert(bodyBackground === 'brown');
+```
+
+# --seed--
+
+## --seed-contents--
+
+```html
+
+
+
+
+
+ Cafe Menu
+
+
+
+
+
CAMPER CAFE
+
Est. 2020
+
+
+
+
Coffee
+
+
+
+
+```
+
+```css
+--fcc-editable-region--
+h1, h2, p {
+ text-align: center;
+}
+--fcc-editable-region--
+
+```
+
diff --git a/curriculum/challenges/italian/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/6140d0069049f5139d78da40.md b/curriculum/challenges/italian/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/6140d0069049f5139d78da40.md
new file mode 100644
index 00000000000..e679f61af54
--- /dev/null
+++ b/curriculum/challenges/italian/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/6140d0069049f5139d78da40.md
@@ -0,0 +1,77 @@
+---
+id: 6140d0069049f5139d78da40
+title: Step 8
+challengeType: 0
+dashedName: step-8
+---
+
+# --description--
+
+La proprietà `transform-origin` viene utilizzata per impostare il punto attorno al quale viene applicata una trasformazione CSS. Ad esempio, quando si esegue una rotazione `rotate` (che farai più tardi in questo progetto), ila proprietà `transform-origin` determina intorno a quale punto l'elemento è ruotato.
+
+Dai al selettore `.line` una proprietà `transform-origin` di `0% 0%`. Questo sposterà il punto di origine di `0%` da sinistra e `0%` dall'alto, impostandolo nell'angolo in alto a sinistra dell'elemento.
+
+# --hints--
+
+Il selettore `.line` dovrebbe avere una proprietà `transform-origin` impostata a `0% 0%`.
+
+```js
+const transformOrigin = new __helpers.CSSHelp(document).getStyle('.line')?.transformOrigin;
+assert(transformOrigin === '0% 0%' || transformOrigin === '0% 0% 0px');
+```
+
+# --seed--
+
+## --seed-contents--
+
+```html
+
+
+
+
+ Ferris Wheel
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+```css
+.wheel {
+ border: 2px solid black;
+ border-radius: 50%;
+ margin-left: 50px;
+ position: absolute;
+ height: 55vw;
+ width: 55vw;
+ max-width: 500px;
+ max-height: 500px;
+}
+
+--fcc-editable-region--
+.line {
+ background-color: black;
+ width: 50%;
+ height: 2px;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+}
+--fcc-editable-region--
+```
diff --git a/curriculum/challenges/italian/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/6140d10d50636e14695013b2.md b/curriculum/challenges/italian/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/6140d10d50636e14695013b2.md
new file mode 100644
index 00000000000..fd689449586
--- /dev/null
+++ b/curriculum/challenges/italian/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/6140d10d50636e14695013b2.md
@@ -0,0 +1,85 @@
+---
+id: 6140d10d50636e14695013b2
+title: Step 9
+challengeType: 0
+dashedName: step-9
+---
+
+# --description--
+
+Crea un selettore per selezionare il tuo secondo elemento `.line`. Imposta la proprietà `transform` a `rotate(60deg)`.
+
+Ricorda che la proprietà `transform` ti permette di manipolare la forma di un elemento. In questo caso, utilizzando il valore `rotate(60deg)` ruoterà l'elemento attorno al suo punto `transform-origin` di 60 gradi in senso orario.
+
+# --hints--
+
+Dovresti creare un selettore `.line:nth-of-type(2)`.
+
+```js
+assert(new __helpers.CSSHelp(document).getStyle('.line:nth-of-type(2)'));
+```
+
+Il selettore `.line:nth-of-type(2)` dovrebbe avere una proprietà `transform` con valore di `rotate(60deg)`.
+
+```js
+assert(new __helpers.CSSHelp(document).getStyle('.line:nth-of-type(2)')?.transform === 'rotate(60deg)');
+```
+
+# --seed--
+
+## --seed-contents--
+
+```html
+
+
+
+
+ Ferris Wheel
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+```css
+.wheel {
+ border: 2px solid black;
+ border-radius: 50%;
+ margin-left: 50px;
+ position: absolute;
+ height: 55vw;
+ width: 55vw;
+ max-width: 500px;
+ max-height: 500px;
+}
+
+.line {
+ background-color: black;
+ width: 50%;
+ height: 2px;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform-origin: 0% 0%;
+}
+
+--fcc-editable-region--
+
+--fcc-editable-region--
+```
diff --git a/curriculum/challenges/italian/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/6140d263016325162fd076fe.md b/curriculum/challenges/italian/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/6140d263016325162fd076fe.md
new file mode 100644
index 00000000000..c56f831c954
--- /dev/null
+++ b/curriculum/challenges/italian/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/6140d263016325162fd076fe.md
@@ -0,0 +1,111 @@
+---
+id: 6140d263016325162fd076fe
+title: Step 11
+challengeType: 0
+dashedName: step-11
+---
+
+# --description--
+
+Crea un selettore `.cabin`. Imposta il `background-color` a `red`, `width` a `20%` e `height` a `20%`.
+
+# --hints--
+
+Dovresti avere un selettore `.cabin`.
+
+```js
+assert(new __helpers.CSSHelp(document).getStyle('.cabin'));
+```
+
+Il selettore `.cabin` dovrebbe avere una proprietà `background-color` impostata su `red`.
+
+```js
+assert(new __helpers.CSSHelp(document).getStyle('.cabin')?.backgroundColor === 'red');
+```
+
+Il selettore `.cabin` dovrebbe avere una proprietà `width` impostata a `20%`.
+
+```js
+assert(new __helpers.CSSHelp(document).getStyle('.cabin')?.width === '20%');
+```
+
+Il selettore `.cabin` dovrebbe avere una proprietà `height` impostata a `20%`.
+
+```js
+assert(new __helpers.CSSHelp(document).getStyle('.cabin')?.height === '20%');
+```
+
+# --seed--
+
+## --seed-contents--
+
+```html
+
+
+
+
+ Ferris Wheel
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+```css
+.wheel {
+ border: 2px solid black;
+ border-radius: 50%;
+ margin-left: 50px;
+ position: absolute;
+ height: 55vw;
+ width: 55vw;
+ max-width: 500px;
+ max-height: 500px;
+}
+
+.line {
+ background-color: black;
+ width: 50%;
+ height: 2px;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform-origin: 0% 0%;
+}
+
+.line:nth-of-type(2) {
+ transform: rotate(60deg);
+}
+.line:nth-of-type(3) {
+ transform: rotate(120deg);
+}
+.line:nth-of-type(4) {
+ transform: rotate(180deg);
+}
+.line:nth-of-type(5) {
+ transform: rotate(240deg);
+}
+.line:nth-of-type(6) {
+ transform: rotate(300deg);
+}
+
+--fcc-editable-region--
+
+--fcc-editable-region--
+```
diff --git a/curriculum/challenges/italian/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/6140d36b8b747718b50d4b7a.md b/curriculum/challenges/italian/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/6140d36b8b747718b50d4b7a.md
new file mode 100644
index 00000000000..1e5d27b83a3
--- /dev/null
+++ b/curriculum/challenges/italian/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/6140d36b8b747718b50d4b7a.md
@@ -0,0 +1,100 @@
+---
+id: 6140d36b8b747718b50d4b7a
+title: Step 13
+challengeType: 0
+dashedName: step-13
+---
+
+# --description--
+
+Dai al selettore `.cabin` una proprietà `transform-origin` di `50% 0%`. Questo farà si che il punto di origine sia spostato di `50%` da sinistra e `0%` dall'alto, posizionandolo al centro del bordo superiore dell'elemento.
+
+# --hints--
+
+Il tuo selettore `.cabin` dovrebbe avere una proprietà `transform-origin` impostata su `50% 0%`.
+
+```js
+const transformOrigin = new __helpers.CSSHelp(document).getStyle('.cabin')?.transformOrigin;
+assert(transformOrigin === '50% 0%' || transformOrigin === '50% 0% 0px');
+```
+
+# --seed--
+
+## --seed-contents--
+
+```html
+
+
+
+
+ Ferris Wheel
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+```css
+.wheel {
+ border: 2px solid black;
+ border-radius: 50%;
+ margin-left: 50px;
+ position: absolute;
+ height: 55vw;
+ width: 55vw;
+ max-width: 500px;
+ max-height: 500px;
+}
+
+.line {
+ background-color: black;
+ width: 50%;
+ height: 2px;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform-origin: 0% 0%;
+}
+
+.line:nth-of-type(2) {
+ transform: rotate(60deg);
+}
+.line:nth-of-type(3) {
+ transform: rotate(120deg);
+}
+.line:nth-of-type(4) {
+ transform: rotate(180deg);
+}
+.line:nth-of-type(5) {
+ transform: rotate(240deg);
+}
+.line:nth-of-type(6) {
+ transform: rotate(300deg);
+}
+
+--fcc-editable-region--
+.cabin {
+ background-color: red;
+ width: 20%;
+ height: 20%;
+ position: absolute;
+ border: 2px solid;
+}
+--fcc-editable-region--
+```
diff --git a/curriculum/challenges/italian/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/6140d94b5fab7f1d73c9bedb.md b/curriculum/challenges/italian/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/6140d94b5fab7f1d73c9bedb.md
new file mode 100644
index 00000000000..16885c88755
--- /dev/null
+++ b/curriculum/challenges/italian/14-responsive-web-design-22/learn-css-animation-by-building-a-ferris-wheel/6140d94b5fab7f1d73c9bedb.md
@@ -0,0 +1,137 @@
+---
+id: 6140d94b5fab7f1d73c9bedb
+title: Step 16
+challengeType: 0
+dashedName: step-16
+---
+
+# --description--
+
+La regola `@keyframes` è usata per definire il flusso di un'animazione CSS. All'interno della regola `@keyframes`, puoi creare selettori per punti specifici nella sequenza di animazione, come `0%` o `25%`, oppure puoi usare `from` e `to` per definire l'inizio e la fine della sequenza.
+
+Le regole `@keyframes` richiedono che venga assegnato loro un nome, da utilizzare come referenza in altre regole. Ad esempio, la regola `@keyframes freeCodeCamp { }` è chiamata `freeCodeCamp`.
+
+È ora di iniziare ad animare. Crea una regola `@keyframes` chiamata `wheel`.
+
+# --hints--
+
+Dovresti avere una regola `@keyframes`.
+
+```js
+assert(new __helpers.CSSHelp(document).getCSSRules('keyframes')?.length === 1);
+```
+
+La tua nuova regola `@keyframes` dovrebbe avere un nome di `wheel`.
+
+```js
+assert(new __helpers.CSSHelp(document).getCSSRules('keyframes')?.[0]?.name === 'wheel');
+```
+
+# --seed--
+
+## --seed-contents--
+
+```html
+
+
+
+
+ Ferris Wheel
+
+
+
+
+
+
+```
+
+```css
+body {
+ background-image: url(https://cdn.freecodecamp.org/curriculum/css-cafe/beans.jpg);
+}
+
+h1, h2, p {
+ text-align: center;
+}
+
+.menu {
+ width: 80%;
+ background-color: burlywood;
+ margin-left: auto;
+ margin-right: auto;
+}
+```
diff --git a/curriculum/challenges/portuguese/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/5f3c866dbf362f99b9a0c6d0.md b/curriculum/challenges/portuguese/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/5f3c866dbf362f99b9a0c6d0.md
new file mode 100644
index 00000000000..0dd426b68dc
--- /dev/null
+++ b/curriculum/challenges/portuguese/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/5f3c866dbf362f99b9a0c6d0.md
@@ -0,0 +1,117 @@
+---
+id: 5f3c866dbf362f99b9a0c6d0
+title: Passo 38
+challengeType: 0
+dashedName: step-38
+---
+
+# --description--
+
+Os elementos `p` estão aninhados em um elemento `article` com o atributo de classe `item`. Você pode estilizar todos os elementos `p` aninhados em qualquer lugar dos elementos com uma classe chamada `item` como esta:
+
+```css
+.item p { }
+```
+
+Usando o seletor acima, adicione uma propriedade `display` com valor `inline-block` para que os elementos `p` se comportem mais como elementos `inline`.
+
+# --hints--
+
+Você deve usar o seletor `.item p`.
+
+```js
+const hasItemP = new __helpers.CSSHelp(document).getStyle('.item p');
+assert(hasItemP);
+```
+
+Você deve definir a propriedade `display` como `inline-block`.
+
+```js
+const hasDisplay = new __helpers.CSSHelp(document).getCSSRules().some(x => x.style.display === 'inline-block');
+assert(hasDisplay);
+```
+
+Seu seletor `.item p` deve definir a propriedade `display` para `inline-block`.
+
+```js
+const itemPDisplay = new __helpers.CSSHelp(document).getStyle('.item p')?.getPropertyValue('display');
+assert(itemPDisplay === 'inline-block');
+```
+
+# --seed--
+
+## --seed-contents--
+
+```html
+
+
+
+
+
+ Cafe Menu
+
+
+
+
+
+
CAMPER CAFE
+
Est. 2020
+
+
+
+
Coffee
+
+
French Vanilla
+
3.00
+
+
+
Caramel Macchiato
+
3.75
+
+
+
Pumpkin Spice
+
3.50
+
+
+
Hazelnut
+
4.00
+
+
+
Mocha
+
4.50
+
+
+
+
+
+
+```
+
+```css
+body {
+ background-image: url(https://cdn.freecodecamp.org/curriculum/css-cafe/beans.jpg);
+}
+
+h1, h2, p {
+ text-align: center;
+}
+
+.menu {
+ width: 80%;
+ background-color: burlywood;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+--fcc-editable-region--
+
+--fcc-editable-region--
+
+.flavor {
+ text-align: left;
+}
+
+.price {
+ text-align: right;
+}
+```
diff --git a/curriculum/challenges/portuguese/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/5f47633757ae3469f2d33d2e.md b/curriculum/challenges/portuguese/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/5f47633757ae3469f2d33d2e.md
new file mode 100644
index 00000000000..5d38b1a76d2
--- /dev/null
+++ b/curriculum/challenges/portuguese/14-responsive-web-design-22/learn-basic-css-by-building-a-cafe-menu/5f47633757ae3469f2d33d2e.md
@@ -0,0 +1,106 @@
+---
+id: 5f47633757ae3469f2d33d2e
+title: Passo 46
+challengeType: 0
+dashedName: step-46
+---
+
+# --description--
+
+Se você tornar a largura da visualização da página menor, você notará, em algum ponto, que parte do texto à esquerda começa a quebrar para a próxima linha. Isso ocorre porque a largura dos elementos `p` do lado esquerdo só pode ocupar `50%` do espaço.
+
+Uma vez que você sabe que os valores à direita têm significativamente menos caracteres, altere o valor `width` da classe `flavor` para `75%` e a `width` da classe `price` para `25%`.
+
+# --hints--
+
+Você deve definir a propriedade `width` para `75%` em seu seletor `.flavor`.
+
+```js
+const flavorWidth = new __helpers.CSSHelp(document).getStyle('.flavor')?.getPropertyValue('width');
+assert(flavorWidth === '75%');
+```
+
+Você deve definir a propriedade `width` para `25%` em seu seletor `.price`.
+
+```js
+const priceWidth = new __helpers.CSSHelp(document).getStyle('.price')?.getPropertyValue('width');
+assert(priceWidth === '25%');
+```
+
+# --seed--
+
+## --seed-contents--
+
+```html
+
+
+
+
+
+ Cafe Menu
+
+
+
+