Alien Numbers

Ae esta questão é uma questão da antiga compeção do google para treino para esta nova…
mas eu não entendi… alguem sabe como resolver?
http://code.google.com/codejam/contest/dashboard?c=agdjb2RlamFtcg4LEghjb250ZXN0cxh5DA

tem q se cadastrar pra olhar a questão.

não é mais facil perguntar??

Problem

The decimal numeral system is composed of ten digits, which we represent as “0123456789” (the digits in a system are written from lowest to highest). Imagine you have discovered an alien numeral system composed of some number of digits, which may or may not be the same as those used in decimal. For example, if the alien numeral system were represented as “oF8”, then the numbers one through ten would be (F, 8, Fo, FF, F8, 8o, 8F, 88, Foo, FoF). We would like to be able to work with numbers in arbitrary alien systems. More generally, we want to be able to convert an arbitrary number that’s written in one alien system into a second alien system.

Input

The first line of input gives the number of cases, N. N test cases follow. Each case is a line formatted as

alien_number source_language target_languageEach language will be represented by a list of its digits, ordered from lowest to highest value. No digit will be repeated in any representation, all digits in the alien number will be present in the source language, and the first digit of the alien number will not be the lowest valued digit of the source language (in other words, the alien numbers have no leading zeroes). Each digit will either be a number 0-9, an uppercase or lowercase letter, or one of the following symbols !"#$%&’()*+,-./:;<=>?@[]^_`{|}~

Output

For each test case, output one line containing "Case #x: " followed by the alien number translated from the source language to the target language.

Limits

1 ≤ N ≤ 100.

Small dataset

1 ≤ num digits in alien_number ≤ 4,
2 ≤ num digits in source_language ≤ 10,
2 ≤ num digits in target_language ≤ 10.

Large dataset

1 ≤ alien_number (in decimal) ≤ 1000000000,
2 ≤ num digits in source_language ≤ 94,
2 ≤ num digits in target_language ≤ 94.

Sample

Input

Output

4
9 0123456789 oF8
Foo oF8 0123456789
13 0123456789abcdef 01
CODE O!CDE? A?JM!.

Case #1: Foo
Case #2: 9
Case #3: 10011
Case #4: JAM!

esse e nervoso…

erro na identação… la vai denovo…

Problem

The decimal numeral system is composed of ten digits, which we represent as “0123456789” (the digits in a system are written from lowest to highest). Imagine you have discovered an alien numeral system composed of some number of digits, which may or may not be the same as those used in decimal. For example, if the alien numeral system were represented as “oF8”, then the numbers one through ten would be (F, 8, Fo, FF, F8, 8o, 8F, 88, Foo, FoF). We would like to be able to work with numbers in arbitrary alien systems. More generally, we want to be able to convert an arbitrary number that’s written in one alien system into a second alien system.

Input

The first line of input gives the number of cases, N. N test cases follow. Each case is a line formatted as

alien_number source_language target_languageEach language will be represented by a list of its digits, ordered from lowest to highest value. No digit will be repeated in any representation, all digits in the alien number will be present in the source language, and the first digit of the alien number will not be the lowest valued digit of the source language (in other words, the alien numbers have no leading zeroes). Each digit will either be a number 0-9, an uppercase or lowercase letter, or one of the following symbols !"#$%&’()*+,-./:;<=>?@[]^_`{|}~

Output

For each test case, output one line containing "Case #x: " followed by the alien number translated from the source language to the target language.

Limits

1 ≤ N ≤ 100.

Small dataset

1 ≤ num digits in alien_number ≤ 4,
2 ≤ num digits in source_language ≤ 10,
2 ≤ num digits in target_language ≤ 10.

Large dataset

1 ≤ alien_number (in decimal) ≤ 1000000000,
2 ≤ num digits in source_language ≤ 94,
2 ≤ num digits in target_language ≤ 94.

Sample

Input :

4
9 0123456789 oF8
Foo oF8 0123456789
13 0123456789abcdef 01
CODE O!CDE? A?JM!.

Output:

Case #1: Foo
Case #2: 9
Case #3: 10011
Case #4: JAM!

Persistência é o caminho :slight_smile:
Você já tem idéias de como fazer? Se eu te der a resposta, fica muito chato, né? :slight_smile:

cara não faço a minima ideia… alguma dica?

hmmm … entendi, não é tão difícil não. O problema é o seguinte: o seu programa deve converter números entre sistemas numéricos arbitrários. O que assusta é que o conjunto de algarismos também é arbitrário. É um pouco trabalhoso de fato, mas a lógica não é difícil não.

Eu não sei se você já participou de competições de algoritmos, mas geralmente esses problemas são resolvidos assim:

1 - leia atentamente o problema, ele deve estar muito claro pra você
2 - após entender o problema, os casos de teste, escreva as entradas e as respectivas saídas, procure atender o maior número de possibilidades
3 - escreva a função/método principal
4 - refine a função/método principal de acordo com o seu algoritmo

Regex será de grande ajuda aqui!

vai precisar não … hehehehe

Uma dica?

Procure não importar bibliotecas Java. Pelo menos nas maratonas, muitos códigos ficam barrados por causa do Time Limit Exceed.

na verdade não entendi muito bem oq deve ser feito… oque entendi e que ele tenque converter um conjunto numerico em um outro alienigena…

Parece difícil mas não é, basta ter uma boa base de como os números funcionam:

O sistema numérico decimal é chamado de base 10 por existem 10 algarismos para representá-lo, de 0 à 9.

Os sistema binário é base 2, é representado por 0 e 1.

Octal é base 8, de 0 à 7; Hexadecimal é base 16, é representado por 0 à 9, e pelos caracteres A à F. Há também o sistema base64, que é formado por 64 caracteres imprimíveis.

Tomando por exemplo a conversão entre os sistema hexadecimal e decimal:

Base 10 -> base 16

0 -> 0, 1 -> 1, (…), 9 -> 9, 10 -> A, 11 -> B, 12 -> C, 13 -> D, 14 -> E, 15 -> F.

Bem isso forma a nossa base. E com essa base formados todos os outro números do sistema. Para formar números maiores que a base, nos pegamos um algarismo da base, e o multiplicamos pela própria base.

Por exemplo, o número 2008 na base 10 é formado por:

2 * 10^3 + 0 * 10^2 + 0 * 10^1 + 8 * 10^0 (^ é o símbolo de potência)

ou seja

2000 + 000 + 00 + 8 = 2008.

O número 7D8 na base 16 (lembre-se, 10 na base 16 é 16 na base 10):

7 * 10^2 + D * 10^1 + 8 * 10^0 =

7 * 100 + D * 10 + 8 * 1 =

700 + D0 + 8 = 7D8

Traduzindo o número acima p/ a base 10 (lembre que D é 13):

7 * 16^2 + 13 * 16^1 + 8 * 16^0 =

7 * 256 + 13 * 16 + 8 * 1 =

1792 + 208 + 8 = 2008

Portando o número 7D8 base 16 é 2008 base 10, e vice-versa.

Agora o exercício:

O exercício fala que a conversão é feita passando por parâmetro o número e as duas bases de conversão

numero_alien linguagem_fonte linguagem_alvo

Digamos que a nossa linguagem alien é base 16, e a nossa é base 10: Vamos traduzir o número 7D8

7D8 0123456789ABCDEF 0123456789

Coloquei o número alien, os dígitos da linguagem alien, e os digitos da nossa linguagem. O exercício também diz que os digitos devem estar ordenados do menor valor ao maior valor. Por isso começamos com 0 e terminamos com F. O mesmo com decimal de 0 à 9.

O programa com a entrada acima vai imprimir 2008.

P/ fazer o programa, as dicas são:

:arrow: Conte o número de digitos em ambas as linguagens. O número de dígitos é igual à base.

:arrow: O primeiro dígito sempre é “zero” naquela linguagem.

:arrow: O último dígito sempre é a base menos um.

:arrow: 10 em qualquer base é sempre o valor daquela base.

:arrow: O calculo é feito usando soma, multiplicação, divisão inteira, e resto dessa divisão. Na minha explicação só usei soma e multiplicação, a operação reversa que requer divisões.

No exemplo acima:

CODE O!CDE? A?JM!.

Se quisermos colocar as duas bases em decimal:

O -> 0
! -> 1
C -> 2
D -> 3
E -> 4
? -> 5

A -> 0
? -> 1
J -> 2
M -> 3
! -> 4
. -> 5

Como ambos são base 6, o resultado é feito só trocando as letras de um por sua respectiva em outro.

C -> 2 -> J
O -> 0 -> A
D -> 3 -> M
E -> 4 -> !

puts pior que e facil mesmo… era so isto então… pelo enunciado e pelo exemplo que usam eles meio que “assuntam” vc fazendo vc pensar que e algo complexo mas na verdade é bem simples…

[quote=Andre Brito]Uma dica?

Procure não importar bibliotecas Java. Pelo menos nas maratonas, muitos códigos ficam barrados por causa do Time Limit Exceed.[/quote]isso quer dizer que não podemos utilizar nem a java.lang, como String.indexOf, java.io, entre outros?

[editado pelo mesmo]
outra pergunta, como deverá ser entregue este codigo? Na lata mesmo o main e o nosso codigo que resolve o problema! Podemos mandar um jar, juntamente com o codigo?

respondem todas as minhas perguntas acima idiotas. :?

Não tenho certeza disso, mas pelo que entendi, você não precisa enviar o código fonte. Somente o arquivo de output.

Sobre o que mandar eu entendi que tem que primeiro mandar o output (saída) e depois um fonte de como tu resolveu o problema:

Se usou outras bibliotecas tem que colocar o link delas.
Se usou um script (bat, sh…) tem que mandar ele tbm.
Se resolveu na MÃO tem que mandar uma descrição de como conseguiu realizar esse feito.

Não vai ser fácil o desafio cavalheiros…