“ เขียน” เครื่องคิดเลขอย่างง่ายโดยไม่ต้องเขียนโค้ดบรรทัดเดียว


25

มันง่ายมาก:

สร้างโปรแกรมโดยไม่ต้องเขียนโค้ดบรรทัดเดียว รหัสอาจประกอบด้วยคำถามและคำตอบของ Stack Overflow ที่มีอยู่เท่านั้น

โปรแกรมควรสร้างตัวเลขสุ่มสองตัวและเอาท์พุทตัวเลข

  • เพิ่มไปยัง
  • หักออกจาก
  • คูณด้วยและ
  • หารด้วย

ซึ่งกันและกัน

กฎระเบียบ

คุณต้องรวมลิงค์ไปยังคำถาม / คำตอบที่คุณใช้ในคำตอบ คุณไม่สามารถแก้ไขรหัสที่คุณพบโดยมีข้อยกเว้นดังต่อไปนี้:

  1. คุณสามารถเปลี่ยนชื่อตัวแปรฟังก์ชั่นและวิธีการได้ (นี่ไม่ได้หมายความว่าคุณสามารถเปลี่ยนการเรียกใช้เมธอดได้โดยเปลี่ยนให้สแกนเนอร์เนอร์เน็ทอิน () เป็นสแกนเนอร์เน็กซ์ไลน์ () และอ้างว่าคุณกำลังเปลี่ยนชื่อเมธอดการเปลี่ยนแปลงจะต้องอยู่ในคำจำกัดความ นิติบุคคลเดียวกัน.) วิธีการแก้ปัญหาควรจะยังคงทำงานถ้าตัวแปรฟังก์ชั่นหรือวิธีการจะถูกเปลี่ยนชื่ออีกครั้ง

  2. คุณสามารถปรับการเยื้องอย่างเหมาะสม

  3. คุณสามารถสันนิษฐานได้ว่าโหลดโมดูลที่เหมาะสมเพื่อให้โค้ดขนาดเล็กทำงานได้ (เช่นการนำเข้าคำสั่งสำหรับ Java และ Python โดยใช้คำสั่งสำหรับ C # และ C ++ และรายการเทียบเท่าในทุกภาษา) หากข้อมูลโค้ดรวมถึงการนำเข้าให้คุณคุณสามารถย้ายรายการเหล่านั้นไปยังด้านบนของรหัสได้

  4. หากภาษานั้นต้องการให้โค้ดอยู่ในเนื้อความของเมธอดบางประเภทในการดำเนินการ (เช่นpublic static void main(String[] args)สำหรับ Java, static int Main(string[] args)สำหรับ C #, และอื่น ๆ ) คุณสามารถล้อมโค้ดของคุณในวิธีที่เหมาะสม แต่เนื้อหาของวิธีการหลักนั้นจะต้องไม่ถูกแก้ไข

  5. คุณต้องระบุรายการที่ชัดเจนของการเปลี่ยนชื่อตัวแปร / วิธี / ฟังก์ชั่น / คลาสใด ๆ

  6. คุณไม่สามารถนำตัวอย่างโค้ด (หมายถึงถ้าคุณนำบล็อคโค้ดจากการโพสต์คุณดำเนินการทั้งหมด) ให้คำอธิบายสั้น ๆ ว่าโค้ดทำอะไรให้กับคนที่ไม่คุ้นเคยกับภาษาที่คุณใช้ คุณต้องใช้ตัวอย่างข้อมูลที่โพสต์ก่อนเริ่มการท้าทายนี้

การประกวดความนิยมดังนั้นผู้ที่โหวตมากที่สุดจึงเป็นผู้ชนะ!

วันกำหนดส่ง

ฉันจะยอมรับข้อเสนอที่มีคะแนนโหวตมากที่สุดในช่วงปลายเดือนสิงหาคมหน้า 6


สวัสดีไมเคิลและยินดีต้อนรับสู่การแลกเปลี่ยน PPCG! หนึ่งในกฎสำหรับการท้าทายรหัสในเว็บไซต์นี้คือพวกเขาจะต้องมีเงื่อนไขการชนะวัตถุประสงค์ดังนั้นคุณควรเลือกเงื่อนไขดังกล่าวสำหรับหนึ่งนี้ นี่เป็นความท้าทายที่คล้ายกันซึ่งอาจทำให้คุณมีความคิด
isaacg

สวัสดี @isaacg ขอบคุณ ฉันจะดูและลบ / แก้ไขอันนี้
chris p bacon

@isaacg หวังว่าตอนนี้ก็โอเคแล้ว คุณมีประสบการณ์มากกว่าฉันที่นี่กำหนดเวลาปิดหรือไกลเกินไปหรือไม่?
chris p bacon

มันดีกว่ามาก กำหนดเวลาใกล้เกินไป แต่มาตรฐานประมาณ 1-2 สัปดาห์
isaacg

ตกลงขอบคุณอีกครั้ง
chris p เบคอน

คำตอบ:


17

J, 7 คำถาม / คำตอบ, ไม่เกี่ยวกับ J

echo a%b[echo a*b[echo a-b[echo a+b[b=:?2147483647 [a=:?2147483647

มันเป็นวิธีที่ถูกทำสวยฉันจะไม่โกหก นี่คือคำตอบ SO ที่ฉันใช้:

ฉันเปลี่ยนชื่อตัวแปรfooเป็นaและbในรหัส


ฉันจินตนาการว่าการใช้วิธีการนี้จะยากกว่าใน APL แต่ก็ยังมีโอกาสที่ดีในการค้นหาตัวละครในบล็อกโค้ดด้วยตนเอง
JohnE

1
@ JohnE นั่นคือข้อดีของการเป็นเสียง ASCII!
เสียชีวิต

1
ฉันชอบคำตอบนี้ แต่คำถามระบุว่า "คุณไม่สามารถใช้ตัวอย่างของตัวอย่าง" - สิ่งนี้กำลังทำอะไรใช่มั้ย
ลุง

3
@ unclemeat "หากคุณบล็อกรหัสจากโพสต์คุณจะทำสิ่งทั้งหมด" สำหรับฉันดูเหมือนว่ามีหลายบล็อครหัสในโพสต์คุณสามารถใช้เพียงหนึ่ง แต่คุณไม่สามารถเป็นส่วนหนึ่งของบล็อกรหัส
ทำให้เสียชีวิต

สิ่งเหล่านี้มาจากบล็อคโค้ดที่สมบูรณ์ - ดูที่แหล่งที่มา
Sean Latham

7

Python 2, 7 6 ข้อมูลอ้างอิง

การสร้างโซลูชันนี้ไม่ง่ายอย่างที่คิด การค้นหา Stack Overflow สำหรับรหัสเฉพาะนั้นยากเนื่องจากสัญลักษณ์จะไม่รวมอยู่ในการค้นหา

ฉันได้พบวิธีที่จะทำเช่นนี้กับตัวเลขสุ่ม 2000 บิตโดยใช้คำตอบที่แตกต่างกันในสถานที่ของ Ref # 1 แต่ฉันไม่สามารถทดสอบบนสภาพแวดล้อมออนไลน์ที่ผมใช้เพราะมันเกี่ยวข้องกับการgetrandbitsที่สายos.urandom, ให้ฉันNotImplementedError, ดังนั้นฉันจึงไปทางนี้แทน นี่สามารถใช้งานได้จริงกับ TIO

ลองออนไลน์

#assumed to be loaded
import random

n1 = []
n1.append(random.randint(1, 100))

n2 = []
n2.append(random.randint(1, 100))

r1 = map(sum, zip(n1, n2))
r2 = map(lambda t: t[0] - t[1] ,zip(n1, n2))

ab = [n1[i]*n2[i] for i in range(len(n1))]

r1, last = r1[0], r1[-1]
r2, last = r2[0], r2[-1]
ab, last = ab[0], ab[-1]
n2, last = n2[0], n2[-1]

print r1
print r2
print ab
ab = float(ab) / n2
ab = float(ab) / n2
print ab

อ้างอิง

import random จะถือว่ามีการโหลดเนื่องจากคำถามแจ้งว่าได้รับอนุญาต

  1. lst = []และlst.append(random.randint(1, 100))- ที่นี่

  2. map(sum, zip(r1, r2)), map(lambda t: t[0] - t[1] ,zip(r1, r2)), r1และr2- ที่นี่

  3. result = float(a) / b- ที่นี่

  4. ab = [a[i]*b[i] for i in range(len(a))]- ที่นี่

  5. first, last = some_list[0], some_list[-1]- ที่นี่

  6. print x- ที่นี่

เปลี่ยนชื่อเป็น

  1. lstเปลี่ยนชื่อเป็นn1และn2(อ้างอิง # 1: ฉันใช้รหัสทั้งหมดสองครั้ง)

  2. r1และr2เปลี่ยนชื่อเป็นn1และn2(อ้างอิง # 2: ฉันใช้ตัวแปรแยกต่างหากในภายหลังเพื่อกำหนดแผนที่และแบ่งในการพิมพ์ครั้งล่าสุดเนื่องจากคำตอบรวมอยู่ด้วย)

  3. resultและaเปลี่ยนชื่อเป็นabและbเปลี่ยนชื่อเป็นn2(Ref # 3)

  4. aและbเปลี่ยนชื่อเป็นn1และn2(อ้างอิง # 4)

  5. firstและsome_listทั้งเปลี่ยนชื่อr1, r2, abหรือn2ขึ้นอยู่กับสาย (การอ้างอิง # 5: ฉันใช้สี่ครั้งนี้โปรดทราบว่าใช้เฉพาะการมอบหมายครั้งแรกเท่านั้นดังนั้นฉันจึงไม่เปลี่ยนชื่อlast)

  6. xมีการเปลี่ยนชื่อไปr1, r2หรือabขึ้นอยู่กับสาย (Ref # 6)


1

ทศนิยมอ้างอิง 2 รายการ

82D82D00D30001D30041D301212010D301200D30001D30042D301212010D301200D30001D30043D301212010D301200D30001D30044D30122

คำสั่งที่ใช้:

  • 0 SET (ดัชนีสแต็กเริ่มต้น)
  • 1 PUSH
    • 2 CHAR
  • 2 POP
  • 3 I / O
    • 00 สแต็กที่ซ้ำกัน
    • 01 จากสแต็กถึง STDOUT
  • 4 คณิตศาสตร์
    • 1 เพิ่ม
    • 2 ลบออก
    • 3 คูณ
    • 4 การแบ่ง
  • 8 BUILTIN
    • 2 กดจำนวนเต็มแบบสุ่มเพื่อสแต็ก

รุ่นที่อธิบาย:

82D       ; push random INT    - stack contains {r1}
82D       ; push random INT    - stack contains {r1, r2}

00D300    ; duplicate stack[0] - stack contains {r1, r2, r1}
01D300    ; duplicate stack[1] - stack contains {r1, r2, r1, r2}
41D       ; math +             - stack contains {r1, r2, r1+r2}
301       ; print from stack to output
2         ; pop                - stack contains {r1, r2}

12010D3012; print newline

00D300    ; duplicate stack[0] - stack contains {r1, r2, r1}
01D300    ; duplicate stack[1] - stack contains {r1, r2, r1, r2}
42D       ; math -             - stack contains {r1, r2, r1-r2}
301       ; print from stack to output
2         ; pop                - stack contains {r1, r2}

12010D3012; print newline

00D300    ; duplicate stack[0] - stack contains {r1, r2, r1}
01D300    ; duplicate stack[1] - stack contains {r1, r2, r1, r2}
43D       ; math *             - stack contains {r1, r2, r1*r2}
301       ; print from stack to output
2         ;                    - stack contains {r1, r2}

12010D3012; print newline

00D300    ; duplicate stack[0] - stack contains {r1, r2, r1}
01D300    ; duplicate stack[1] - stack contains {r1, r2, r1, r2}
44D       ; math /             - stack contains {r1, r2, r1/r2}
301       ; print from stack to output

แหล่งที่มา:

ลองออนไลน์! คุณจะต้องปิดใช้งานแคชเอาต์พุตหากไม่ได้ปิดใช้งานโดยอัตโนมัติ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.