Score:1

ฟังก์ชันแฮช: สร้างตัวระบุตัวอักษร 3 ตัวที่ไม่ซ้ำกัน

ธง cn

ฉันต้องสร้างฟังก์ชันการสร้างรหัสที่ใช้ตัวเลข 4 หลักและส่งคืนตัวระบุ 3 ตัวอักษรที่ไม่ซ้ำกัน

ฉันมีฟังก์ชันที่สร้างรหัส 2 ตัวอักษรจากตัวเลข 3 หลักโดยมีข้อจำกัดบางประการ (ระหว่าง 100 ถึง 775) แต่ฉันไม่แน่ใจว่าจะเปลี่ยนอย่างไรเพื่อให้ตรงกับข้อกำหนดใหม่

ถ้า order_id < 775:
  ตัวอักษร = รายการ ('ABCDEFGHIJKLMNOPQRSTUVWXYZ')
  alpha_index = ''
  _i_1 = 0
  _i_2 = 0
  ถ้า order_id >=100 และ order_id < 775:
    เพิ่มขึ้น = 4*int((order_id-100)/100)
    _mod_100 = order_id%100
    ถ้า _mod_100 > 25 :
      _i_1 = (_mod_100/25)+เพิ่มขึ้น
      _i_2 = _mod_100%25
      alpha_index += ตัวอักษร[int(_i_1-1)]
      alpha_index += ตัวอักษร[int(_i_2-1)]
    อื่น:
      ดัชนี = str(order_id)[1]+str(order_id)[2]
      ดัชนี = int (ดัชนี)
      ถ้าเพิ่มขึ้น:
        alpha_index = ตัวอักษร[เพิ่มขึ้น-1]
      alpha_index += ตัวอักษร[ดัชนี] 
    alpha_order_id = alpha_index+str(order_id)[3:]
อื่น:
  alpha_order_id = order_id

ความช่วยเหลือใด ๆ ที่ชื่นชม

kelalaka avatar
in flag
$26^3 = 17576 > 9999$ แค่คูณด้วย $x$ ใช้ mod 17576?
fgrieu avatar
ng flag
นี่เป็นคำถามเกี่ยวกับการเขียนโปรแกรมเบื้องต้น โดยไม่เกี่ยวข้องกับการเข้ารหัส
Paul Uszak avatar
cn flag
@fgrieu ไม่มีความเกี่ยวข้องเลย? ไม่มีอะไร? แฮชชิ่ง - ไม่? เอกลักษณ์ของการตอบสนอง - ไม่? รู้เบื้องต้นเกี่ยวกับแฮชเข้ารหัส (โซลูชัน) - ไม่? การแฮชสากล - ไม่? นี่ไม่ใช่วิธีการขยายฐานผู้ใช้ fgrieu
Majed Badawi avatar
cn flag
@fgrieu ฉันไม่แน่ใจว่าอะไรเป็นพื้นฐานเกี่ยวกับเรื่องนี้และเหตุใดจึงถูกทำเครื่องหมายว่า "นอกหัวข้อ" ฉันไม่มีประสบการณ์ในการเข้ารหัสและหวังว่าจะได้รับความช่วยเหลือ ฉันอธิบายปัญหาอย่างชัดเจนและแสดงความพยายาม โปรดแนะนำสถานที่ที่จะถามคำถามนี้หากสถานที่นี้ไม่เหมาะสำหรับคำถามนี้ (DBA, SO...)
fgrieu avatar
ng flag
คำถามที่ถามไม่เกี่ยวกับการเข้ารหัส: การกล่าวถึงแฮชเพียงอย่างเดียวอยู่ในชื่อเรื่อง ไม่ใช่ในคำสั่งปัญหา นี่เป็นเรื่องเกี่ยวกับการเปลี่ยนฐานของตัวเลข: จาก 4 หลักในฐาน 10 เป็น 3 หลัก|อักขระในฐาน 26 การเปลี่ยนฐานคือคณิตศาสตร์ระดับประถมศึกษา/วิทยาการคอมพิวเตอร์ ไม่ใช่การเข้ารหัส คำแนะนำ: สำหรับเหตุผลในความคิดเห็นแรก การรวมกันของตัวเลข 4 หลักในฐาน 10 สามารถแสดงเป็น 3 หลัก|อักขระในฐาน 26
Majed Badawi avatar
cn flag
@fgrieu ควรสร้างตัวอักษรตัวที่สามในโซลูชันด้านบนอย่างไรเพื่อรับประกันผลลัพธ์ที่ไม่ซ้ำกันทุกครั้งจากตัวเลข 4 หลัก ฉันกำลังมองหาวิธีเปลี่ยนโซลูชันด้านบนเพื่อรองรับสิ่งนี้ คำแนะนำหรืออัลกอริทึมอื่น ๆ ในการวิจัยได้รับการชื่นชม
fgrieu avatar
ng flag
ฉันจะยกตัวอย่างและให้คุณเขียนโค้ด (ที่ฉันแนะนำให้คุณทำตั้งแต่เริ่มต้น) สมมติว่าคุณต้องการแปลง 9876 เป็น 3 หลัก|อักขระในฐาน 26 เราคำนวณ 9796%26=22 ซึ่งเข้ารหัสด้วยอักขระ `W` ยังคงต้องเข้ารหัส 9796//26=379เราคำนวณ 379%26=15 ซึ่งเข้ารหัสด้วยอักขระ `P` ยังคงมีการเข้ารหัส 379//26=14 (เรารู้ว่าผลลัพธ์น้อยกว่า 26 สำหรับเหตุผลที่ kelalaka ให้ไว้ในความคิดเห็น) เข้ารหัสด้วยอักขระ `O` บ่อยครั้ง ในการเปลี่ยนฐาน เราเขียนผลลัพธ์ด้วยอักขระตัวแรกที่ได้รับทางด้านขวา: `OPW` อีกครั้งนั่นคือการเปลี่ยนฐานหรือการเข้ารหัส
Paul Uszak avatar
cn flag
แทนที่จะเป็นรหัสของคุณ ฟังก์ชันแฮชการเข้ารหัสเช่น SHA-x/ MD5? ดังนั้น `H(input) >> n` โดยที่ n คือจำนวนกะที่เหมาะสมเพื่อให้ได้อักขระ 3 ตัว เนื่องจากคุณกำลังจะ 4 ต่อ 3 ให้ค้นหาหลักการของ Pigeon Hole และการคาดเดาคืออะไร และความแตกต่างระหว่างฟังก์ชันแฮชอย่างง่าย เช่น hashCode ของ Java และฟังก์ชันเข้ารหัส

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา