บันทึกไปศูนย์บริการ DTAC

อันนี้เป็นบันทึกความประทับใจเฉยๆ เรื่องมันมีอยู่ว่า SIM ผมเสียไป SIM นึง คือผมใช้ Multi Sim แล้ว Sim ที่ใช้โทรพัง ผมเลยเอา Sim จาก Tablet มาแก้เป็น Sim หลักใช้แก้ขัด

วันนี้ผมไปศูนย์เพื่อขอ SIM ใหม่ ไปถึงพี่เค้ากดบัตรคิวให้ แล้วก็รอยาวๆ (ประมาณ 10 นาที) แล้วเค้าก็เรียกไป

ไป ถึงเค้าก็ถาม “จะทำไรคะ” เราก็บอกเปลี่ยน sim ครับ sim พัง เค้าก็ไปหยิบ sim ใหม่มาให้ แล้วเค้าก็ขอดู sim ที่พัง ตรงนี้แหละปัญหาเกิด เพราะรหัสบน sim ไม่ตรง(เพราะ sim หลักมันกลายเป็น sim ที่ผมใส่ในมือถือไปแล้ว 55+) เค้าก็ขอดู sim ที่ใช้ได้อยู่ ผมก็ให้เค้าไปนั่งมั่วสักพัก เค้าก็จดเบอร์ แล้วก็บอกรอสักครู่นะคะ แล้วก็เก็บเรียบ 2 sim หายไปราวๆ 10 นาทีจึงเสร็จ(ไม่น่าซนเลยกรุ ไม่งั้นเสร็จนานและ) ก็จบเรื่องนี้แต่วันนี้ผมไม่ได้มาเรื่องเดียวครับ

แต่ก่อนที่ผมจะได้ เอ่ยอะไร ก็มีพี่อีกคนมาแนะนำบอกให้เปลี่ยน package เพราะ package ปัจจุบันมันกาก(เค้าไม่พูดงี้หรอก แต่จับใจความได้งี้แหละ) คือของเก่าผมใช้ 899 บาทได้ 3G 2GB โทรฟรีกี่นาทีไม่รู้ลืม แต่เค้าแนะนำ package 799 บาท ได้ 3G 3GB แต่เค้าบอกโทรฟรีลดลง 50 นาที

ซึ่งอันนี้แหละจุดประสงค์ ที่ 2 ผมมาเปลี่ยน package คือผมเนี่ยทั้งเดือนโทรนิดเดียว เอามาทำไมเป็น 100 นาที ผมเลยขอเค้าแบบเป็น internet อย่างเดียว พอเค้าเปลี่ยนผลเค้าบอกระบบไม่ยอมให้เปลี่ยน เค้าเลยยกเลิก Multi Sim แล้วสมัครใหม่ ให้ได้ปกติ ที่น่าตกใจคือผมขอดูค่าโทรย้อนหลังผมเฉลี่ยเดือนนึงผมโทรไม่ถึง 20 นาที(ที่น่าตกใจกว่าคือมันเกิน 10 นาทีได้ไงวะ?)

สรุปที่ประทับใจคือเค้าเห็นใจลูกค้าอยากให้ลูกค้าได้ของที่ดีที่สุดในราคาเดิมหรือถูกกว่าครับ

ปล จริงๆลืมยกเลิกบริการ SMS

Challenge Accept เขียนภาษา C หาค่า Max ในบรรทัดเดียว

พอดีวันนั้นเล่น Facebook อยู่ดีๆแล้วเจอคำท้านี้เข้าครับ ผมเลยลองจัดสักหน่อย

นี่เป็น Function ที่ผมเขียนได้

int max(int *p){
return *(p+1)==0 ? *p : (*p > *(p+1) ? (((*(p+1) = *p) & 0) | max(++p)) : max(++p));
}

ส่วนอันนี้เป็นตัวอย่างวิธีใช้แบบเต็มๆ

#include <stdio.h>

int max(int *p){
	return *(p+1)==0 ? *p : (*p > *(p+1) ? (((*(p+1) = *p) & 0) | max(++p)) : max(++p));
}

int main(){
	int p[]={3,5,1,8,9,12,3,5,6,7,0};
	int i;
	//printf("%d\n",12 & 0);
	printf("%d",max(p));

	//for(i=0;i<10;i++) printf("%d\n",p[i]);
	return 0;
}

 

จาก Code นี้มีข้อจำกัด 2 เรื่อง

  • ข้อมูลในตัวแปรที่ส่งเข้าไปหายหมดนะครับ(คือมันจะเละไม่ได้ข้อมูลเดิมชัวร์)
  • ตัวสุดท้ายของ Array ต้องเป็น 0 เสมอ (จริงๆถึงไม่ 0 ส่วนมากมันก็เจอ 0 ถ้า index out of bound แต่ไม่ทุกกรณีแค่นั้น)

อธิบาย Code แบบเป็นส่วนๆ

  • *(p+1)==0 ? *p : บอกว่า *(p+1) (ค่าตัวหน้า) เป็น 0 รึเปล่า ถ้าใช่หมายถึงจบ จะ return *p (ค่าปัจจุบัน) ถ้าไม่ใช่ทำข้างล่าง
  • (*p > *(p+1) ? (((*(p+1) = *p) & 0) | max(++p)) : max(++p))
  • ถ้า *p > *(p+1) (ค่าปัจจุบันมากกว่าค่าถัดไป) เป็นจริง ให้ทำ (((*(p+1) = *p) & 0) | max(++p)) ตรงนี้ต้องแยกเป็นส่วนย่อยๆเยอะๆ
    *(p+1) = *p คือกำหนดค่าในช่องถัดไป เป็นค่าปัจจุบัน(เพราะค่าปัจจุบันมากกว่า)
    & 0 คือบรรทัดบนจะ return ค่า *p มา แต่เราไม่ต้องการจึง & 0 เพื่อบังคับให้   (((*(p+1) = *p) & 0) เป็น 0
    | คือการ or แบบ bit ซึ่งผมเอามาใช้ให้มันทำ 2 คำสั่งในบรรทัดเดียว จะได้ 0 | max(++p) คือโดยค่าถัดไปให้ max ไป recursion จากนั้นค่อย return
    การเอามา & 0 แล้ว or ทำให้มัน return เฉพาะค่า ที่มาจาก max(++p)
  • ถ้า  *p > *(p+1) (ค่าปัจจุบันมากกว่าค่าถัดไป) เป็นเท็จ return max(++p) ไปเทียบตัวต่อไปว่ามากกว่าไหมจนกว่าจะจบ

Code เหี้ยมากๆ อ่านไม่รู้เรื่องแน่ความหน้า Note กรุก็ไม่มั่นใจว่าอ่านอีกทีจะเข้าใจไหมเนี่ย 55+