รหัสแอนนาแกรม


10

ลองทำอีกครั้ง

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

  • หนึ่งจะต้องทดสอบว่าตัวเลขที่ป้อนมีความสุขหรือดีเลิศและเอาท์พุทถ้าตัวเลขนั้นเป็นอย่างใดอย่างหนึ่ง (ตัวอย่างเช่น7ต้องออกhappy primeและ4ต้องเอาท์พุทsad non-prime)

  • อีกอันจะต้องเอาท์พุทขนาดของโค้ดเป็นไบต์เช่นคำ (โปรแกรม 60- ไบต์จะเอาท์พุทsixty, โปรแกรม 39- ไบต์จะเอาท์พุทthirty-nine)

หากต้องการคำชี้แจงใด ๆ เกี่ยวกับกฎอย่าลังเลที่จะบอกฉัน

นี่คือการแข่งขันกอล์ฟรหัสดังนั้นโปรแกรมที่สั้นที่สุดชนะ!


สิ่งที่ป้องกันไม่ให้ใครทำ/*program1*/program2แล้วprogram1/*program2*/? ฉันคิดว่าคุณไม่ควรแสดงความคิดเห็น
William Barbosa

@WilliamBarbosa ทำไม ที่แทบจะไม่เป็นทางออกที่ดีที่สุด
Martin Ender

แต่คุณสามารถแบ่งปันบางส่วนและไม่แบ่งปันชิ้นส่วนอื่น ๆ ซึ่งทำให้ง่ายขึ้นมาก
ภูมิใจ haskeller

1
@proudhaskeller การแบนความคิดเห็นไม่ได้ช่วยแก้ปัญหานั้น คุณสามารถใส่อักขระลงในสตริงชื่อตัวแปรหรือส่วนต่าง ๆ ของรหัสที่ไม่ได้ถูกใช้งานด้วยเหตุผลอื่น
Martin Ender

1
FWIW ฉันไม่คิดว่าคุณควรลบการส่งของคุณเอง OP หรือไม่มันเป็นคำตอบที่น่าสนใจ
เดนนิส

คำตอบ:


6

CJam, 80 49 48 ตัวอักษร

ปรับปรุง : แรงบันดาลใจจากการใช้งานของเดนนิสในการคำนวณผลรวมของตัวเลขสองหลักนี่คือรุ่นที่สั้นกว่า

Happy / Sad Prime / Non-prime:

ri:T{Ab2f#:+}G*X="happy""sad"?STmp4*"non-prime">

มันทำงานอย่างไร:

ri:T                                "Read input as integer and store it in T"
    {       }G*                     "Run this code block 16 times"
     Ab                             "Convert the number into base 10"
       2f#                          "Calculate square of each digit"
          :+                        "Sum all the squared digits and put the sum on stack"
X=                                  "Compare the sum after 16th iteration to 1"
  "happy""sad"?                     "If sum is 1, put `happy` to stack, otherwise `sad`"
               ST                   "Put space on stack then put the value of T on stack"
                 mp4*               "Put 4 to stack if input is prime, otherwise 0"
                     "non-prime">   "Put `non-prime` to stack and slice out first four characters if the input number is prime"

สี่สิบแปด

""A"forTy-eiGhT""ri:{b2#:+}*X=appsadSmp4*nnpm>"?

มันทำงานอย่างไร:

""                                  "Push empty string to stack"
  A                                 "Push 10 to stack"
   "forTy-eiGhT"                    "Push `forTy-eiGhT` to stack"
                "ri:....pm>"        "Push this string to stack too"
                            ?       "Keep `forTy-eiGhT` on stack and pop the other string"

ลองออนไลน์

โปรแกรมแรกอ่านหมายเลขจาก STDIN


โซลูชัน 80 ตัวอักษรดั้งเดิมของฉัน

Happy / Sad Prime / Non-prime:

r:N{1/~]{i_*T+:T;}/T_s\1=:H!X):XK<&0:T;}g;H"happy""sad"?SNimp"prime"_"non-"\+?:Y

แปดสิบ

"eigHTY""r:N{1/~]{i_*T+:T}/_s\1=:H!X):XK<&0:T}happysad?SNmp";"prim_";"non-\?:+";

4

CJam, 50 49 ไบต์

การทดสอบความสุขและความเป็นอันดับหนึ่ง

li_{Ab2f#:+}30*(T="happy""sad"?S@mp4*"non-prime">

อ่านตัวเลขจาก STDIN การทดสอบทั้งสองใช้ได้กับเลขจำนวนเต็ม 64 บิตเท่านั้น

ลองออนไลน์

ความยาวของตัวเอง

A"forTy-nine""l_{b2#:+}30*(=happsadS@mp4*pim>"?""

พิมพ์สี่สิบเก้า


+1 สำหรับการปรับปรุง 31 ไบต์และ "forTy-Nine"
Josiah Winslow

3

Golfscript - 81

โปรแกรมนี้จะทดสอบว่ามีความสุขและ / หรือจำนวนมาก

~.:a;0.{).a\%!@+\}a*;2="""non-"if"prime"@ {`0\{48-.*+}/}9*("sad ""happy "if@@#get

โปรแกรมนี้เป็นแอนนาแกรมของข้อความสุดท้ายส่งออก "eighty-one" (ไบต์เป็นคำ)

;"eighty-one"#   !""""""""%()***++-..../002489:;=@@@@\\\`aaaaadffiimnppprs{{{}}}~

นี่ควรเป็นตัวอย่าง


2
หืมให้การอ้างอิงสำหรับการแข่งขันกอล์ฟรหัสใน GolfScript อาจไม่ใช่ความคิดที่ดีที่สุด ฉันเชื่อว่าอันนี้ค่อนข้างยากที่จะเอาชนะและด้วยเหตุนี้จึงทำให้หมดกำลังใจเล็กน้อยสำหรับผู้เข้าร่วม
Martin Ender

ฉันเห็นคนไม่สังเกตเห็นคุณเขียนคำถามและ upvoting คุณ ... ฉันเห็นด้วยกับมาร์ติน
ภูมิใจ haskeller

@proudhaskeller ไม่มีอะไรผิดปกติในการตอบรับด้วยตนเอง
Justin

ฉันว่าไม่มีอะไรผิดปกติกับการตอบตัวเองหรือแสดงความคิดเห็นรหัส
Josiah Winslow

2
@JosiahWinslow มีคือไม่มีอะไรผิดปกติกับมัน ฉันแค่บอกว่าคุณอาจพลาดคำตอบที่น่าสนใจอีกต่อไปหากคุณโพสต์คำตอบที่ดีมากด้วยตัวคุณเองทันที
Martin Ender

1

J - 87 อักขระ

ความพยายามที่ไร้เดียงสาใน J ไม่มีการใช้ไลบรารี่มาตรฐาน แต่ฉันสงสัยว่ามันจะสั้นกว่านี้หากใช้มัน

((sad`happy{~1 e.(,[:+/@:*:,.&.":@{:)^:(1-{:e.}:)^:_);@,' ';'gtv]non-prime'}.~4+4*1&p:)
'((ad`app{~1 .(,[:+/@:*:,.&.":@{:)^:(1-{:.}:)^:_);@, ;onprm}.~4+4*1&p:)']'eighty-seven'
('(ad`app{~1 .(,[:+/@:*:,.&.:@{:)^:(1-{:.}:)^:);@, ;onprm}.~4+4*1&p:']'eighty-seven'"_)

บรรทัดที่อยู่ด้านบนสุดคือกริยาที่ใช้จำนวนเต็มและวินิจฉัยความสุขและอันดับแรกของมันเป็นสตริงเอาต์พุต บรรทัดที่สองคือนิพจน์ที่ส่งคืนสตริงeighty-sevenในขณะที่บรรทัดที่สามเป็นฟังก์ชันคงที่ทำเช่นเดียวกัน ฉันรวมทั้งคู่ไว้เพราะพวกเขาทั้งคู่เป็นไปได้และเพราะฉันไม่รู้ว่าการพิจารณาคดีจะเป็นอย่างไรในคำตอบของฟังก์ชั่นซึ่งตรงข้ามกับรายการของโปรแกรมและ J ไม่มีสิ่งที่ไม่มีฟังก์ชั่นที่ไม่มีข้อโต้แย้ง อาร์กิวเมนต์หุ่น

เราเสียการตรวจสอบความสุขไปมาก (,[:+/@:*:,.&.":@{:)เป็นตัวหลักที่รวมผลบวกกำลังสองของตัวเลขและ(1-{:e.}:)เป็นการทดสอบว่าตัวเลขนั้นเกิดขึ้นหรือไม่ sad`happy{~1 e.เปลี่ยนสิ่งนี้ให้เป็นผลลัพธ์ของคำและเราแนบสิ่งนั้นไว้ที่ด้านหน้าของสตริงnon-primeและอาจตัดออกอักขระสี่ตัวถ้าจำนวนนั้นเป็นจำนวนเฉพาะ

ในแอนนาแกรมเราจะซ่อนบิตทั้งหมดที่ไม่ได้'eighty-seven'อยู่ในสตริงที่เราไม่สนใจ ฉันทำได้ดีกว่านี้ถ้า J มีตัวอักษรมากขึ้นเพื่อนำกลับมาใช้ใหม่ แต่ก็ไม่เป็นเช่นนั้น


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