Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

Joro_Paspalev avatar Joro_Paspalev 23 Точки

Задача 5. C# Messages от More Exercise Introduction

Здравейте, може ли малко помощ на тази задача :

1.Messages

Write a program, which emulates typing an SMS, following this guide:

1

2

abc

3

def

4

ghi

5

jkl

6

mno

7

pqrs

8

tuv

9

wxyz

 

0

space

 

Following the guide, 2 becomes “a”, 22 becomes “b” and so on.

Examples

Input

Output

 

Input

Output

 

Input

Output

5

44

33

555

555

666

hello

9

44

33

999

0

8

44

33

777

33

hey there

7

6

33

33

8

0

6

33

meet me

Hints

  • A native approach would be to just put all the possible combinations of digits in a giant switch statement.
  • A cleverer approach would be to come up with a mathematical formula, which converts a number to its alphabet representation:

Digit

2

3

4

5

6

7

8

9

  • Index
  • 0 1 2
  • 3 4 5
  • 6 7 8
  • 9 11 12
  • 13 14 15
  • 16 17 18 19
  • 20 21 22
  • 23 24 25 26
  • Letter
  • a b c
  • d e f
  • g h i
  • j  k  l
  • m  n  o
  • p  q  r  s
  • t u v
  • w  x  y  z
  • Let’s take the number 222 (c) for example. Our algorithm would look like this:
    • Find the number of digits the number has “e.g. 222 è 3 digits
    • Find the main digit of the number “e.g.  222 è 2
    • Find the offset of the number. To do that, you can use the formula: (main digit - 2) * 3
    • If the main digit is 8 or 9, we need to add 1 to the offset, since the digits 7 and 9 have 4 letters each
    • Finally, find the letter index (a è 0, c è 2, etc.). To do that, we can use the following formula: (offset + digit length - 1).
    • After we’ve found the letter index, we can just add that to the ASCII code of the lowercase letter “a” (97)

И трите нулеви тестове минават, но след това се чупи някъде. Моля някой за малко съвет? 

Направил съм я по стандартния начин с Switch case конструкция, като входните данни от конзолата първо се четяха като целочислени тип Integer, сега ги направих да са String, но отново същия резултат в Judge 20/100 точки.

Ето и кода: https://pastebin.com/tQtUbLey - Вариант със string

https://pastebin.com/jd1gR5nG - Вариант с Integer

 

0
Module: C# Advanced
tt104 avatar tt104 15 Точки

Картинка:

индекс:    0                        25
           |                        |
символи:   abcdefghijklmnopqrstuvwxyz
           |  |  |  |  |  |   |  |
бутон:     2  3  4  5  6  7   8  9
бутон[3]:  2  3  4  5  6  7  8  9
           22
           222
отместване:012

Надявам се да е станало ясно "Каква е идеята на формулата".

Малко по-различно решение (тествано само с един примерен вход):

static char LineToSymbol(string line)
{
    // validate
    if (line.Length <= 0 || line.Length > 4) throw new ArgumentException ("Unexpected line length");
    if (line[0] < '0' || line[0] > '9') throw new ArgumentException ("Unexpected button");
    for (int i = 1; i < line.Length; i++)
        if (line[i - 1] != line[i]) throw new ArgumentException ("Unexpected line content");
    int[] btns = { 1, 0, 3, 3, 3, 3, 3, 4, 3, 4 }; // btn_size [symbols]
    if (btns[line[0] - '0'] < line.Length) throw new ArgumentException ("Unexpected button content");
    // compute
    int[] btn = { 0, 0, 1, 4, 7, 10, 13, 16, 20, 23 }; // offset of each button into "symbols"
    const string symbols = " abcdefghijklmnopqrstuvwxyz";
    return symbols[btn[line[0] - '0'] + (line.Length - 1)];
}

static void Main()
{
    int lines_count;
    if (!int.TryParse (Console.ReadLine (), out lines_count)) throw new Exception ("Not a number");
    if (lines_count <= 0 || lines_count >= 1 << 8) throw new Exception ("Odd number of buttons");
    StringBuilder message = new StringBuilder ();
    while (lines_count-- > 0) message.Append (LineToSymbol (Console.ReadLine ()));
    Console.WriteLine (message.ToString ());
    Console.ReadLine ();
}

 

1
15/01/2023 10:09:37
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.