Multiplication Table

  • warning: realpath() [function.realpath]: SAFE MODE Restriction in effect. The script whose uid is 1005 is not allowed to access /tmp owned by uid 0 in /var/www/sites/sugree/codenone.com/subdomains/www/html/includes/file.inc on line 190.
  • warning: realpath() [function.realpath]: SAFE MODE Restriction in effect. The script whose uid is 1005 is not allowed to access /tmp owned by uid 0 in /var/www/sites/sugree/codenone.com/subdomains/www/html/includes/file.inc on line 190.

พอดีไปเจอโจทย์มา นับว่าง่ายมากถึงมากที่สุด แต่ก็อยากรู้ว่ามือโปรเขียนยังไง ตรงไปตรงมาครับ สูตรคูณ แถวบนสุดกับคอลัมน์ซ้ายสุดเป็นตัวตั้ง

    1   2   3   4   5   6   7   8   9  10  11  12 
    2   4   6   8  10  12  14  16  18  20  22  24 
    3   6   9  12  15  18  21  24  27  30  33  36 
    4   8  12  16  20  24  28  32  36  40  44  48 
    5  10  15  20  25  30  35  40  45  50  55  60 
    6  12  18  24  30  36  42  48  54  60  66  72 
    7  14  21  28  35  42  49  56  63  70  77  84 
    8  16  24  32  40  48  56  64  72  80  88  96 
    9  18  27  36  45  54  63  72  81  90  99 108 
   10  20  30  40  50  60  70  80  90 100 110 120 
   11  22  33  44  55  66  77  88  99 110 121 132 
   12  24  36  48  60  72  84  96 108 120 132 144 

จะพิมพ์หรือไม่พิมพ์ก็ได้

คุณสุกรีใช้คำว่ามือโปร เดี๋ยวจะไม่มีใครกล้าเข้ามาตอบนะครับ :)

ปกติผมก็ใช้ loop ธรรมดาแหล่ะครับ
แต่ลองพยายามคิดแบบอื่นๆดูบ้าง
สำหรับ ruby ก็ได้หน้าตาออกมาแบบนี้ครับ

code

sugree's picture

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

ผจญภัยใน Codenone เว็บแห่งจินตนาการ

อืม ruby มันเจ๋งจริงแฮะ เหมาะสำหรับการเขียนแบบนี้มากๆ python ยังยืดเยื้ออยู่มาก ทำได้แต่ก็ไม่งามเท่า

แบบลูปธรรมดาผมก็อยากเห็นนะ สไตล์การเขียนแต่ละคนไม่เหมือนกัน แค่ลูปก็ไม่เหมือนแล้ว เหมือนทอดไข่เจียว ทอดออกมาไม่เหมือนกันซักคน

บาร์นี่ นี่ต้องมีลูกก่อนนะครับ ถึงจะรู้จัก
ลูกผมชอบมากเลย

sugree's picture

ผมร้องได้หลายเพลงนะ อย่างน้อยก็

ฉันกับเธอ เธอกับฉัน เรารักกันและเป็นเพื่อนกัน ด้วยอ้อมแขนอบอุ่น อยากจะโอบกอดเธอเอาไว้ ให้เข้าใจว่าฉันรักเธอ

หรือ

I love you You love me We’re a happy family With a great big hug And a kiss from me to you Won’t you say you love me too?

นั่งดูทุกตอน… ฟังเพลงนี้เหมือนยากล่อมประสาท สะกดจิตทีละหน่อย ดีกว่าเทเลทัปปี้ ดูแล้วจะหลับ

หึๆ
สำหรับคนที่ยังไม่มีลูก
ลองผลิตดูสักคนนะครับ
รับรองว่าจะต้องร้องเพลงนี้ได้ในไม่ช้า

sugree's picture

แนวคิดเดียวกับของคุณ pphetra เป๊ะ โชคดีที่ map() รับลิสต์ได้หลายตัว เลยไม่ต้องใช้ zip() แค่นี้ก็ดูไม่จืด

Python

ลองเอาแนวคิดแบบ lazy evaluation บ้าง
เริ่มด้วยการ declare ตาราง แบบ infinite

-- ตารางประกอบจากแถว
tables start = rows start start
-- แต่ละแถว ประกอบด้วย column
rows n start = cols n start : rows (n+1) start
cols n i = [n,i,n*i] : cols n (i+1)

ถ้าลองสั่ง tables 2 ดูจะได้ตารางประมาณนี้ออกมา

[[[2,2,4],[2,3,6],[2,4,8],...]
,[[3,2,6],[3,3,9],[3,4,12],...]
,...

แน่นอนว่ามันเป็น infinite array ทั้งด้านกว้างและด้านยาว

จากนั้นก็ define function ที่ scope เอาเฉพาะช่วงที่ต้องการ
pp xs n = map (\x -> take n x) (take n xs)
ต้องการสูตร 2-12 ก็สั่ง pp (tables 2) 11

Note: take n คือการบอกว่าให้เอาเฉพาะ n ตัวแรก ออกมาจาก array

haskell อีกแบบ
let xs = range(2,12) in [[x,y,x*y] | x <- xs, y <- xs]

haskell อีกแบบ
map (\(x,y) -> (x,y,x*y)) (range((2,2),(12,12)))

rerngrit's picture

เกือบกลายเป็นกระทู้ยุให้ทำลูกไปซะแล้วมั้ยล่ะ

โจทย์น่าสนุกจัง ผมอ่านของคนอื่นไม่ค่อยจะรู้เรื่องเลย ทำไมเขียนได้สั้นขนาดนั้น! o_O’

ผมขอใช้ Plua นะครับ (เข้าใจว่าเป็นภาษา Lua ที่พัฒนาให้เขียนบน Palm) ผมเขียนเป็นแต่แบบง่ายๆ -_-’ พอดีว่าไม่ใช่โปรแกรมเมอร์

start=1
stop=12
 
for n=start,stop,1 do
 
for i=start,stop,1 do
j=".999"
d=i*n
 
jsp=ptextwidth(j)
txtsp=ptextwidth(d)
 
pmoveto((jsp*i)-txtsp,5+(11*n))
 
write(i*n)
 
end
 
end
 
pevent()
veer's picture

scheme แบบถึก

(define (multab a b) 
  (define (x-iter x y)
    (cond 
      ((<= x a) 
       (display (* x y))
       (display " ")
       (x-iter (+ x 1) y))))
  (define (y-iter y)
    (cond
      ((<= y b)
       (x-iter 1 y)
       (display "\n")
       (y-iter (+ y 1)))))
  (y-iter 1))
 
(multab 12 12)
veer's picture

scheme แบบไม่อยาก pass parameter หลายตัวใน x-iter เกรงจะไม่เท่ห์

(define (multab min_x max_x min_y max_y) 
 
  (define (build-x-iter y) 
    (lambda (x) 
      (define (x-iter x)
        (cond ((<= x max_x)               
               (display (* x y))
               (display " ")
               (x-iter (+ x 1)))))
      (x-iter x)))
 
  (define (y-iter y)
    (cond ((<= y max_y)
           ((build-x-iter y) 
            min_x)
           (display "\n")
           (y-iter (+ y 1)))))
 
  (y-iter min_y))
 
(multab 2 5 4 8)

haskell อีกแบบ
[[x,y,x*y] | x <- [2..12], y <- [2..12]]

เอ๊ะ มันเหมือนอันที่ post ไปแล้วนี่น่า

ย้าย Codenone

ประกาศย้าย Codenone ไปใช้ Forum ของ Blognone แทนครับ ตามไปตั้งกระทู้ต่อได้ที่ Codenone Forum (รายละเอียดอ่านจากกระทู้ ย้าย Codenone ไปรวมกับ Blognone)

กระทู้เก่าๆ จะย้ายตามไปในภายหลัง ตอนนี้ปิดการโพสต์กระทู้ไว้ เหลือไว้เฉพาะอ้างอิงเท่านั้น