Felix Halim .NET  
Google 
Name:  Message:

Problem C - No Pause Telegraph

Complete Problem Statement here

Soal 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:

  1. The Chosen Sub Matrix
  2. Avoiding Financial Nightmare
  3. No Pause Telegraph
  4. Burger, French Fries, Soft Drink
  5. Taxi!
Kembali ke halaman utama

© Felix Halim 2009 (Loaded in 0.00172 secs)