Desafio EA Canadá

Publicado: 19/10/2004 em IntoSpaces
Olá Pessoal!
Ontem recebi de meu amigo Fernando Datorre o começo de um programa em C# para tentar verificar a veracidade de um "desafio" que a EACanada havia feito em um de de seus outdoors.

Vejam o outdoor.

Interessante não? Se transformarmos isso em uma string teremos a frase "Now Hiring", que significa "Estamos contratando". Essa seria uma pré-seleção
para candidatos a uma vaga na empresa, se passasse dessa provavelmente ele conheceria a linguagem C e teria uma capacidade de interpretação muito boa da mensagem passada pela publicidade.

Bom como pra gente isso é um desafio fomos implementar alguma rotina para interpretar o outdoor.
Em C/C++ é bem simples, não tem segredo algum, a flexibilidade que nos é proporcionada é fantástica, vejam!

#include <stdio.h>
void main()
{
    char msg[] = {78,111,119,32,72,105,114,105,110,103,0};
    printf("%s",msg);
}

Com isso matamos a charada sem problemas. Depois para implementar em C# a coisa mudou um pouco de figura…
No modo console ficou quase tudo na mesma, tendo em vista a sobrecarga de metodos do Console.WriteLine().
Vejam como está bem simples, só foram adicionados os ítens padrões da OO do .NET

Um pouco mais de código foi necessário
O C# é um pouco mais rígido devido à sua forte Orientação à Objetos, ele não aceita essa coersão de char[] para string, salvo que não fiz testes usando Console.

using System;
namespace ConsoleEA
{
   class EA
   {
       [STAThread]
       static void Main(string[] args)
       {
            char[] msg = {(char)78,(char)111,(char)119,(char)32,(char)72,
            (
char)105,(char)114,(char)105,
(char)110,(char)103,(char)0};
            Console.WriteLine(msg);
            Console.ReadLine();
       }
    }
}

Notem que a diferença aqui está na declaração do char array, onde é necessário fazer o Cast dos caracteres, isso é um ponto bom do C#, nos obriga a fazer as coisas explicitamente!
Problemas só surgiram na implementação para Winforms, lá sim tivemos que trabalhar um pouco a cabeça pois ficou um pouco mais dinânico e string e char[], apesar de serem "a mesma coisa" são diferentes na OO do .NET.

Utilizamos um textBox para digitar os caracteres na forma "10,10,10,10" e assim fazer a interpretação deles e transformar em string no final.
Vejam

private

void button1_Click(object sender, System.EventArgs e)
{
   string[] chars = txtNumbers.Text.Split(‘,’);
   char[] msg = new char[chars.Length];

    for(int i = 0; i < chars.Length -1; i++)
       msg[i] = (
char)Convert.ToInt32(chars[i]); 

    this.label.Text = new string(msg);
}

De forma natural, para converter a string digitada no textBox usamos o metodo split da classe System.String, separando os valores em um array de string, o próximo passo foi declarar um array de char e converter cada posição do string[] para inteiro e depois char, assim teríamos o array de caracteres.
O último problema foi o de transformar um char[] em string, sendo que um Cast simplesmente não funcionaria. Uma solução encontrada está nos construtores da classe System.String, que aceita como valor um char[] e faz a conversão automaticamente, poupando um possível trabalho árduo.
No final chegamos ao resultado e se fosse aqui acho que daria pra se candidatar à vaga, se iria conseguir não sei, mas a primeira fase, a da "entrevista" já tinha ido!

E aí alguém tem solução melhor para o Winform?
Se quiserem ver como ficou o programa vejam em http://www.shindesign.net/thespoke/pt-br/19-10-2004/EAWinform.exe

[]’s
Shinji

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s