| Felix Halim .NET | ||||||||
|
University Experience
IOI 2002 Yong In, Korea
ACM ICPC Regional Manila 2003
ACM ICPC Regional Manila 2004
ACM ICPC Regional Manila 2005
ACM ICPC Regional Kaohsiung 2006
ACM ICPC Regional Singapore 2007
ACM ICPC World Final Tokyo 2007
Google India Code Jam 2005
Google India Code Jam 2006
Indonesia National Contest 2007
Indonesia National Contest 2008
|
||||||||
Problem C - No Pause TelegraphComplete Problem Statement hereSoal ini memberikan anda kode morse. Anda harus men-translasi kode tersebut menjadi huruf-huruf sesuai pengkodean berikut: A .-- B -. C --- D .. E --.. F --.- G .-.Kode morse "jejadian" diatas adalah unik karena tidak ada prefix dari kode morse yang satu merupakan prefix dari kode morse yang lain. Jadi, suatu rangkaian kode-kode morse yang menggunakan pengkodean diatas pasti dapat ditranslasi menjadi hasil yang unik. Untuk melihat soal lengkapnya, silahkan click link problem statement diatas. Untuk menyelesaikan soal ini, solusinya straight forward: anda bisa men-translasi satu-persatu kode morse di input menjadi huruf dan menampungnya ke dalam suatu temporary variable. Jika ada input yang tidak ada kode morsenya, maka anda tinggal print "could not be translated" dan berhenti. Jika semua input berhasil ditranslasi, maka print-lah temporary variable-nya. Kodenya dapat dilihat dibawah ini, tersedia 2 versi (C dan Java). Kedua source code ini melakukan hal yang sama dan mempunyai function yang sama. Tetapi solusi Java lebih terlihat manusiawi di function getMorse() karena Java mempunyai built-in method startsWith() di object String yang sangat sesuai untuk problem ini (untuk mengecek apakah suatu kode morse merupakan prefix dari input saat ini).
#include <stdio.h>
#include <string.h>
char input[1000], temp[1000];
char *morse[7] = {".--","-.","---","..","--..","--.-",".-."};
int get_morse(int idx){
int i,a,b;
for (i=0; i<7; i++){
for (a=idx,b=0; ; a++,b++){
if (morse[i][b]=='\0') return i;
if (input[a]=='\0' || input[a] != morse[i][b]) break;
}
}
return -1; // kode morse tidak ketemu!
}
char* translate(){
int i,j,k;
for (i=j=0; input[i]!='\0'; ){
k = get_morse(i);
if (k==-1) return "could not be translated";
temp[j++] = 'A'+k;
i += strlen(morse[k]);
}
temp[j] = '\0';
return temp;
}
int main(){
while (gets(input)){
puts(translate());
}
}
import java.util.*;
public class NoPause {
String[] morse = new String[]{".--","-.","---","..","--..","--.-",".-."};
public int getMorse(String prefix){
for (int i=0; i<morse.length; i++)
if (prefix.startsWith(morse[i])) return i;
return -1; // kode morse tidak ketemu!
}
public String translate(String input){
String temp = "";
for (int i=0,j=0; i<input.length(); ){
int k = getMorse(input.substring(i));
if (k==-1) return "could not be translated";
temp += (char) ('A'+k);
i += morse[k].length();
}
return temp;
}
public void solve(){
Scanner scan = new Scanner(System.in);
while (scan.hasNextLine())
System.out.println(translate(scan.nextLine()));
scan.close();
}
public static void main(String[] args){
new NoPause().solve();
}
}
Lihat problem lain:
|
||||||||