Arsip: Fast & simple recognition

 
user image
more 19 years ago

ZeAL

gue punya beberapa constanta, sebut aja : RED = 1 GREEN = 2 BLUE = 4 YELLOW = 8 BLACK = 16 WHITE = 32 gimana cara yang paling cepat dan mudah untuk mengetahui constanta apa yang digunakan kalo misalnya gue dapet angka, misalnya 18 (yang tentu saja dibentuk dari constanta BLACK & GREEN), atau 21 ( yang dibentuk dari const BLACK, BLUE & RED) thanks in advance...
user image
more 19 years ago

kifmesoft

hi ZeAL.. salam kenal yang kulihat beberapa constanta tsb memiliki pola set bit, mulai dari bit 0 hingga bit 5, sehingga mungkin bisa dilakukan proses bit masking. trus cara yang kutau hanyalah cara yang mudah.. sperti ini misalnya :

  If ((BLACK Or GREEN) And angka) > 0 Then
    WriteLn('BLACK, GREEN, BLACK & GREEN');
kalo cara yang cepat saya blm tau.. but, pertanyaanmu sangat menggoda.. aku jadi penasaran.. hehaha.. :D thx
user image
more 19 years ago

ZeAL

lam kenal juga... kodenya bisa aja digunakan, tapi gw lg nyari yang simpel DAN cepat... kebetulan konstantanya banyak, dengan berbagai kombinasinya... kalo konstantanya ada 20, bisa habis resource cuma untuk milah2 const-nya. Rencananya ini untuk framework masive multiplayer online game.. jadi harus bener2 optimized! gitu... thanks buat tanggepannya....
user image
more 19 years ago

kifmesoft

wow.. keren.. berapakah jumlah langkah yang diperlukan shg bisa dikatakan cepat? jika dengan "n" buah constanta dapat ditemukan dengan "n" langkah, dan sudah masuk dalam kategori "cepat", maka menurutku proses berurutan ataupun loop mungkin sudah mencukupi... tetapi jika kurang cepat..., maka bolehkah jika menggunakan cara seperti Tabel Hash ? dengan bentuk constanta yang unik spt itu.. maka sangat mungkin untuk menemukannya hanya dg satu langkah saja..
user image
more 19 years ago

ZeAL

yaah.. pokoknya caranya & tekniknya terserah... looping oke, tabel juga boleh.. pokoknya yang simple, yet fast enough! kalo dari kode yang lo buat berarti kita harus buat sekian banyak kombinasi tergantung banyaknya konstanta. sedangkan rencananya konstantanya bakal banyak (puluhan sampe 100an konstanta).. ada ide lain..??? thanks bgt! ini dari forum gamedevid.org (game developer indonesia), sayangnya tanggapannya pake C++... gue ngerti sih kodenya, tapi berhubung projectnya pake delphi gue pengennya tinggal copy-paste aja... hihihi... :)

unsigned char angka,i=0;
angka<<cin("input angka");
while(angka!=0){
if(angka&1)
    cout<<pow(2,i);
++i;
angka>>=1;
}
user image
more 19 years ago

kifmesoft

kalo copy-paste EXEnya aja kan lebih cepat.. hahahaha sorry.. joke ;) kode C++ yang dituliskan itu agak kurang cepat, sebab kode itu pake Pow atau Power jika di Delphi. akan lebih cepat jika Pow dihilangkan, maka akan terlihat begini :

unsigned char angka, warna=1;
angka << cin("input angka");
while(angka != 0) {
  if (angka & 1)
    cout << warna;
  angka >>= 1;
  warna <<= 1;
}
dan kalo di paste ke Delphi jadinya seperti ini :

Var
  angka, warna: Byte;
......
Write('Input Angka: ');
ReadLn(angka);
warna:= 1;
While angka > 0 Do
Begin
  If Boolean(angka And 1) Then
    Write(warna);
  angka:= angka Shr 1;
  warna:= warna Shl 1;
End;
......
tapi kalo konstantanya sampe 100an, kayaknya gak bisa deh kalo di proses langsung dg cara bit masking spt itu.. panjang bit di variable Integer kan maksimal 64 bit pake loop seperti itu simple & cepat kok.. hanya saja, untuk konstanta yg sampe 100an variable angka perlu digandakan 2 kali (jika pake type Int64) sehingga didapat 128 bit. perlu ada improvisasi :) kalo menggunakan tabel (Array), yang kita buat bukanlah kombinasi tergantung banyaknya konstanta.. tetapi tergantung dari jumlah segmen-segmen bit yang kita bentuk.. misal kita menggunakan 128 bit dg segmentasi 4 bit: 1 segmen = 4 bit, maka terdapat 15 kombinasi (1 sampai 15), terus 16 bit adalah 4 x 15, 32 bit adalah 8 x 15 .... dan 128 bit adalah 32 x 15. 2^20 memang 1048576 dalam bentuk biner, tetapi 2^128 dengan segmentasi 4 bit pada kasus ini hanya 480, dengan kata lain definisi outputnya hanya 480 saja..!! :) dan proses eksekusi semuanya maksimal 32 step.. gambaran kode ini, mudah2an sesuai dan mudah dipahami...

Const
  RED = 1;
  GREEN = 2;
  BLUE = 4;
  YELLOW = 8;
  BLACK = 16;
  WHITE = 32;
  ............
  ............
Type
  TNextEvent = Procedure;
  TArrayOfEvent = Array [1..15] Of TNextEvent;
Procedure YellowRed;
Begin
  WriteLn('YELLOW & RED');
End;
Procedure BlackWhite;
Begin
  WriteLn('BLACK & WHITE');
End;
Procedure BlueGreenRed;
Begin
  WriteLn('BLUE, GREEN & RED');
End;
..................
..................
Var
  AksiSegmen1: TArrayOfEvent;
  AksiSegmen2: TArrayOfEvent;
  ..............
  angka: Integer;
  //  inisialisasi...
  AksiSegmen1[YELLOW Or RED]:= @YellowRed;
  AksiSegmen1[BLUE Or GREEN Or RED]:= @BlueGreenRed;
  AksiSegmen2[(BLACK Shr 4) Or (WHITE Shr 4)]:= @BlackWhite;
  ...............
  Write('Input Angka: ');
  ReadLn(angka);
  //  proses...
  AksiSegmen1[angka And 15];
  AksiSegmen2[(angka Shr 4) And 15];
  ................
cobalah dengan angka 57, maka outputnya adalah YELLOW & RED BLACK & WHITE kalo dengan angka 55, maka outputnya adalah BLUE, GREEN & RED BLACK & WHITE kira-kira spt itu ZeAL.. :)
user image
more 19 years ago

ZeAL

sip! Ini tanggapan/jawaban terlengkap, memuaskan DAN menjawab selama gue melanglang buana dari forum ke forum... Abis diforum lain gak seru.. masa gue nanya malah dibalik nanya... :( Atau jawabannya cuma, "pake table aja..".. Yaaa.. minimal psuedocode-nya kek... nice tutorial, btw... THANKS BERATZ kifmesoft! :) btw,
more ...
  • Pages:
  • 1
Share to

AI Forward

🚀 We're thrilled to partner with Alibaba Cloud for "AI Forward - Alibaba Cloud Global Developer Summit 2025" in Jakarta! Join us and explore the future of AI. Register now: https://int.alibabacloud.com/m/1000400772/
#AlibabaCloud #DeveloperSummit #Jakarta #AIFORWARD

Random Topic

Local Business Directory, Search Engine Submission & SEO Tools FreeWebSubmission.com SonicRun.com