หลีกเลี่ยงการทำซ้ำตัวอักษรระหว่างโปรแกรมง่าย ๆ ห้าโปรแกรม


12

คุณกำลังท้าทายคือการเขียน 5 โปรแกรมที่แตกต่างกันสำหรับงาน 5 อย่างต่อไปนี้:

  1. พิมพ์ Hello, World!

  2. รับอินพุตด้วย STDIN ส่งออกแฟคทอเรียลคุณสามารถสมมติว่าอินพุตเป็นจำนวนเต็ม> = 0

  3. รับจำนวนเต็ม N คำนวณผลรวมของจำนวนเฉพาะ <= N

  4. กำหนดอินพุตด้วย STDIN เอาท์พุทตัวอักษรที่ใช้ในอินพุต ตัวอย่างเช่นการป้อนข้อมูลที่เป็นคุณจะต้องเอาท์พุทHello world helowrdโปรดทราบว่าการส่งออกเป็นตัวพิมพ์เล็ก คุณสามารถสันนิษฐานได้ว่าอินพุตนั้นเป็นตัวอักษรเสมอกับ whitespaces และ whitespaces จะถูกละเว้น

  5. เอาท์พุทเพชรต่อไปนี้แบบนี้

       *
      ***
     *****
    *******
     *****
      ***
       *
    

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

print("Hello, World!");

แล้วคุณจะไม่สามารถใช้ตัวอักษรต่อไปนี้ (ตัวพิมพ์ใหญ่หรือรูปแบบตัวพิมพ์เล็ก): p, r, i, n, t, h, e, l, o, w, dในโปรแกรมอื่น ๆ ถ้าคุณต้องใช้มันคุณสามารถ 'ซื้อ' ตัวอักษรแต่ละตัวเป็นจำนวน 8 ไบต์ ดังนั้นหากคุณต้องการใช้จดหมายlอีกครั้งในโปรแกรมอื่นคุณจะได้รับโทษ 8 ไบต์ หลังจากที่คุณชำระค่าปรับแล้วคุณสามารถใช้ตัวอักษรแต่ละตัวได้มากเท่าที่คุณต้องการในโปรแกรมนี้ ตัวละครอื่น ๆ ไม่สำคัญ นอกจากนี้โปรแกรมทั้ง 5 ควรเป็นภาษาเดียวกัน

นี่คือจำนวนไบต์น้อยที่สุดจึงจะชนะ!


3
นี่เป็นความท้าทายที่แตกต่างกันเล็กน้อยที่เรามีอยู่แล้ว แต่ไม่แตกต่างกันมากพอที่จะไม่เป็นคู่หูในสายตาของฉัน
Mego

3
@Mego ฉันลงคะแนนให้ปิดเป็นซ้ำหลาย ๆ โดยไม่มีข้อ จำกัด แต่ข้อ จำกัด ทำให้มันเป็นเกมใหม่ทั้งหมด
trichoplax

1
หากคุณใช้ตัวอักษรที่ระบุใน 3 โปรแกรมคุณจ่ายค่าปรับ 8 ไบต์สองครั้ง (16 ไบท์) หรือไม่?
trichoplax

1
@trichoplax ใช่คุณจ่าย 16 ไบต์
Adnan

1
@trichoplax แทบจะไม่ โซลูชันที่มีอยู่สำหรับปัญหาที่ติดค้างจะยังคงแข่งขันได้ การแก้ปัญหาที่ดีที่สุดที่นี่จะเป็นการรวมกันของการแก้ปัญหาคำถาม duped 'กับคะแนนที่สูงขึ้นจากการลงโทษ
Mego

คำตอบ:


10

CJam, 73 ไบต์

"Obkkh+'Phukc&"7f^
q~m!
ri){'j3+_3++~},:+
lS-el_&
4{_' *4@-Y*('**+}%_1>W%\+N*

แต่ละบรรทัดเป็นโปรแกรมเต็มรูปแบบ ลองใช้งานออนไลน์: 1 | 2 | 3 | 4 | 5

แผนที่ตัวอักษร

 bc  f h  k   op    u       18
            m   q            4
        ij       r          17
    e      l      s          7
             n        w y   27

หากคุณต้องการ (และแต่ละโปรแกรมของคุณเหมาะสมในบรรทัด) คุณสามารถใช้โปรแกรม CJam นี้เพื่อสร้างแผนที่ตัวอักษรสำหรับการส่งของคุณเอง


พิสูจน์ว่า osascript ไม่ได้ถูกสร้างขึ้นสำหรับสิ่งนี้: การส่งทั้งหมดของคุณน้อยกว่า 2 ในโปรแกรมของฉัน XD +1 ดีมาก
Addison Crump

4

Pyth, 90 ไบต์

ความพยายามครั้งแรก ...

ภารกิจที่ 1: 20 ไบต์

+"Hello, "+C87"orld!

ภารกิจที่ 2, 3 ไบต์

.!Q

งาน 3, 9 ไบต์

sf}TPTSvz

ภารกิจ 4, 6 + 8 = 14 ไบต์

@G{rw0

ภารกิจที่ 5, 44 ไบต์

"   *
  ***
 *****
*******
 *****
  ***
   *

3

osascript, 759 ไบต์

ฉันรู้ว่านี่จะเป็นจำนวนมากเมื่อฉันเริ่ม อู

ภารกิจที่ 1: 15 ไบต์

"สวัสดีชาวโลก!"

ฉันรู้ว่ามันจะไม่ดีจากจุดนี้

ภารกิจที่ 2: 64 + 8 * 4 = 96 Bytes

ในการทำงาน
ตั้ง o เป็น 1
ทำซ้ำ
ตั้งค่า o เป็น * o
ตั้งค่าเป็น a-1
ปลาย
โอ
ปลาย

โอ้ว้าว

ภารกิจ 3: 170 + 8 * 13 = 274 Bytes

ในการทำงาน
ตั้งค่าเป็น 0
ตั้งค่า t เป็นเท็จ
ทำซ้ำกับ i จาก 2 เป็น a
ตั้งค่า t เป็นจริง
ทำซ้ำด้วย c ตั้งแต่ 2 ถึง i-1
ถ้า i mod c = 0 ให้ตั้งค่า t เป็น false
ปลาย
ถ้า t จากนั้นตั้งค่า o เป็น o + i
ปลาย
ปลาย

เดนนิสก้าวร้าว

ภารกิจที่ 4: 225 + 8 * 13 = 329

ในการทำงาน
ตั้ง o เป็น ""
ทำซ้ำกับ i ในรายการของ
ทำซ้ำโดยใช้ c เป็นตัวอักษรของ i
ถ้า c ไม่อยู่ใน o แล้ว
ถ้าจำนวน ASCII ของ c <91 แล้ว
ตั้งค่าเป็น o & (อักขระ ASCII ของ (หมายเลข ASCII ของ c + 32))
อื่น
ตั้งค่า o เป็น o & c
ปลาย
ปลาย
ปลาย
ปลาย
โอ
ปลาย

...

ภารกิจที่ 5: 45 ไบต์

"*
  ***
 *****
*******
 *****
  ***
   *"

ดังนั้นใช่ ฉันรู้ว่าฉันจะแพ้ตั้งแต่ต้น แต่มันน่าสนใจฉันสนใจที่จะรู้ว่ามีวิธีการทำเช่นนี้ในตัวละครน้อยลงหรือไม่ ตัวละครแผนที่ (จัดทำโดยเดนนิส):

   วันที่ 15
cdef hi lmnop rstu w 160
a nop rstu 57
abcdef hi lmnop rstu w 214
                            39
                             0

จำนวนตัวอักษรด้านบนปิดเล็กน้อย - การขึ้นบรรทัดใหม่ทำให้เกิดปัญหาเนื่องจากมีการขึ้นบรรทัดใหม่

หมายเหตุ: เหตุผลที่ไม่ได้ใช้สิ่งที่ชอบa's charactersหรือไม่ชอบคือ'ตัวละครที่จะต้องใช้เมื่อดำเนินการจากบรรทัดคำสั่ง osascript ถ้าฉันเคยใช้'ฉันจะต้องใช้\'อะไรที่คล้ายกันซึ่งจะไม่ช่วยฉันเลย นอกจากนี้มันยังจำได้"ว่าเป็นตัวยึดสตริงเท่านั้นดังนั้นฉันจึงเมาด้วยเช่นกัน แต่มันก็สนุกดี


1

NARS2000 APL, 144 ไบต์ (85 ตัวอักษร)

ภารกิจที่ 1, 21 ไบต์ (17 ตัวอักษร)

⎕←"Hello, World!"

ภารกิจ 2, 10 ไบต์ (4 ตัวอักษร)

⎕←!⎕

งาน 3, 22 ไบต์ (11 ตัวอักษร)

⎕←+/¯2π⍳2π⎕

งาน 4, 53 ไบต์ (29 ตัวอักษร)

⎕←∪Q[26∣Q⍸⍞∩Q←⎕AV[97+⍳26]∪⎕A]

งาน 5, 38 ไบต์ (24 ตัวอักษร)

⎕←" *"[1+4<∘.+⍨(⍳3),⊖⍳4]

1
โปรแกรมเหล่านั้นเต็มจริงหรือ ฉันไม่รู้จัก NARS2000 (และไม่มีในแพลตฟอร์มของฉัน) แต่ทุกภาษาที่ฉันรู้จำเป็นต้องกำหนดให้พิมพ์นอก REPL
เดนนิส

@Dennis ขออภัยลืมฉันเล่นซอภายใน REPL
Oberon

คุณไม่ได้รับอนุญาตให้ส่งออกช่องว่างต่อท้ายสำหรับเพชร
lirtosiast

1

Jelly , 46 ไบต์ (ไม่ใช่การแข่งขัน)

“3ḅaė;œ»
Ɠ!
ÆRS
ɠQḲŒl
4Ḷ¤‘+¤ṖṚṭ×”*Fµ4Ḷṭ4ḶṚṖ¤F×⁶+⁸Y

ลองออนไลน์! (คัดลอก / วางแต่ละตัวอย่างข้อมูล)

เห็นได้ชัดว่าข้อ จำกัด ไม่ได้ จำกัด การเล่นกอล์ฟ :) เพียงแค่คำแนะนำสำหรับคนสุดท้ายแน่นอน

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