ค้นหาเพื่อนห้าคนเพื่อทานไก่กับพอล


15

Paul เป็นหนึ่งในคนรู้จักชาวเบลเยียมของคุณและเขาต้องการให้คุณสร้างโปรแกรมที่แสดงผลอย่างน้อยหนึ่งในห้าสายต่อไปนี้ :

12496=>14288=>15472=>14536=>14264

14264=>12496=>14288=>15472=>14536

14536=>14264=>12496=>14288=>15472

15472=>14536=>14264=>12496=>14288

14288=>15472=>14536=>14264=>12496

มันหมายถึงเพื่อนที่เขาภูมิใจที่สุดและเขาอยากจะกินกับพวกเขา เปาโลคิดด้วยว่าหมายเลข 6 นั้นสมบูรณ์แบบและนั่นเป็นตัวเลขที่ควรค่าแก่การใช้ ดังนั้นคุณไม่สามารถใช้ตัวเลขอื่นนอกเหนือจาก "6"ในรหัสของคุณ (0 ถึง 5 และ 7 ถึง 9 เป็นสิ่งต้องห้าม) โปรแกรมของคุณไม่สามารถรับอินพุตใด ๆ ได้ เอาต์พุตสามารถมีขยะก่อนและ / หรือหลังสตริง แต่ควรมีอย่างน้อยหนึ่งในสตริงข้างต้น

ตัวอย่างเช่นนี่คือผลลัพธ์ที่ถูกต้อง:

220frefze
f**14288=>15472=>14536=>14264=>12496**fczfe fz**15472=>14536=>14264=>12496=>14288**zfe
fzehth

ฉัน "ligthly" บอกเป็นนัยในคำถามว่าฉันคาดหวังว่าสิ่งนี้จะได้รับการแก้ไข แต่รู้ได้อย่างไร อาจจะมีวิธีที่ดีกว่า ... หวังว่าคุณจะสนุก

นี่คือ code-golf: คะแนนต่ำสุดเป็นไบต์ที่ชนะ


3
ลำดับOEISที่เกี่ยวข้อง
Emigna

5
ฉันไม่สามารถเข้าใจได้ว่า Paul หรือไก่เกี่ยวข้องกับเรื่องนี้อย่างไร
Magic Octopus Urn

6
@carusocomputing: เครือข่ายที่เป็นมิตร '12496 => 14288 => 15472 => 14536 => 14264 "ถูกค้นพบโดยPaul Pouletในปี 1918 (นักคณิตศาสตร์ชาวเบลเยียม) และ" poulet "แปลว่า" ไก่ "ในภาษาฝรั่งเศส ตัวเลขที่สมบูรณ์แบบในแง่ที่ผลรวมของตัวหารคือ 6
Jylo

8
เดี๋ยวก่อนดังนั้น manchicken จึงหาลำดับของตัวเลขในปี 1918 ... และเราสนใจเกี่ยวกับลำดับของตัวเลขมากกว่า manchicken ทางคณิตศาสตร์ที่ชื่อว่า Paul?
Magic Octopus Urn

1
@ เดนนิสนี่เป็นเรื่องจริงฉันไม่ได้คาดหวังคำตอบที่ดีขนาด 4 ไบต์คุณประหลาดใจอยู่เสมอ: ฉันเพิ่มกฎนี้เพราะฉันหวังว่าจะได้เปรียบถ้ามีใครทำซ้ำมากกว่าจำนวนเต็มและแสดงผลลัพธ์ทั้งหมดที่เป็นมิตร กลุ่มที่ไม่มีการเข้ารหัสอย่างหนักเป็นจำนวนเชิงซ้อนก่อน แต่ในท้ายที่สุดดูเหมือนว่าจะสนับสนุนการแปลงฐานอย่างมากและการแปลงอักขระแม้ในภาษาที่ไม่ใช่กอล์ฟ ฉันคิดว่าคำถามออกแบบนั้นยากจริงๆ! ยังคง Enigma ใช้คุณสมบัติของการส่งออกและมีคะแนนที่สูงขึ้นเพื่อให้ห่างไกล :)
Jylo

คำตอบ:


12

05AB1E , 18 17 ไบต์

•w[•Y·FDѨO})„=>ý

ลองออนไลน์!

คำอธิบาย

•w[•                # base 214 encoding of 12496
    Y·F             # loop 2*2 times
       D            # duplicate top of stack
        Ñ           # push divisors
         ¨          # remove the last element (itself)
          O         # sum
           }        # end loop
            )       # wrap in list
             „=>ý   # join list on "=>"

ในระยะสั้นเราคำนวณแต่ละหมายเลขเป็น f(n+1) = sum(divisors(f(n)) - f(n)


5

Pyke ขนาด 16 ไบต์

wヰw$VDlsh)J"=>

ลองที่นี่!

wヰ             -  12496
  w$            -   4
    V    )      -  repeat ^:
     D          -   duplicate(^)
      l         -     factors(^)
       s        -    sum(^)
        h       -   ^ + 1
          J     - v.join(^)
           "=>  -  "=>"

เมื่อใดก็ตามที่สตริงตัวอักษรอยู่ท้ายโปรแกรมจะสลับกับโทเค็นก่อนหน้าซึ่งจะช่วยประหยัด 1 ไบต์ในกรณีเช่นนี้ factorsฟังก์ชั่นของ Pyke ไม่ได้รวมหมายเลขตัวเองหรือ 1 หากอนุญาตให้ใช้หมายเลขนั้นจะสามารถบันทึกได้ 1 ไบต์โดยแทนที่w$ด้วย4

Pyke, 21 ไบต์

uバ㟐㱰㣈㞸J"=>

ลองที่นี่!

สร้างรายการหมายเลขที่ต้องการและรวมเข้าด้วยกัน ไม่น่าสนใจมากนอกเหนือจากเคล็ดลับกับสาย


4

MATLAB, 44 ไบต์

['','=>@EBIJ=@>DDIJ=A@C>IJ=@A?BIJ=@>B@'-6-6]

ลองออนไลน์!

ฉันไม่ได้พบรูปแบบในตัวเลข (และมันจะยากที่จะใช้รูปแบบเพื่ออะไรเลยเพราะฉันไม่สามารถใช้ตัวเลข) ดังนั้นฉันจะไปหาวิธีไร้เดียงสา

'=>@EBIJ=@>DDIJ=A@C>IJ=@A?BIJ=@>B@'เป็นสตริง'12496=>14288=>15472=>14536=>14264'เมื่อเพิ่ม 12 ลงในค่า ASCII ตอนนี้ให้ใส่สตริงนั้นลบ6+6และเชื่อมโยงกับสตริงว่าง''เพื่อแปลงเป็นอาร์เรย์อักขระ


ใช่ขอโทษฉันต้องการป้องกันการเข้ารหัสของตัวเลขอย่างหนัก แต่แน่นอนว่าให้ขอบกับภาษา 'กอล์ฟ' ไม่มีรูปแบบแม้ว่าแต่ละหมายเลขจะเป็นผลรวมของตัวหารของตัวเลขก่อนหน้า
Jylo

1
ฉันชอบวิธีที่สตริงยังคงมี=>อยู่
Neil

3

อักขระ JavaScript (ES6), 57 ไบต์ / 47 (UTF-8)

ขอบคุณ user5090812 สำหรับการบันทึก 10 B

_=>[...'バ㟐㱰㣈㞸'].map(a=>a.charCodeAt()).join`=>`

คำอธิบาย

バ㟐㱰㣈㞸ครั้งแรกที่เราสร้างอาร์เรย์และกรอกด้วยตัวอักษรในสตริง จากนั้นเราวนรอบสตริง ( aมีค่าขององค์ประกอบปัจจุบัน) และเราเปลี่ยนอักขระเป็นรหัสอักขระ =>จากนั้นเราก็เข้าร่วมค่าทั้งหมดในอาร์เรย์โดย

เก่า: 67 ไบต์

_=>[6,6,6,6,6].map((_,a)=>`バ㟐㱰㣈㞸`.charCodeAt(a)).join`=>`

คำอธิบาย

อันดับแรกเราสร้างอาร์เรย์ที่มีความยาว 5 จากนั้นเราเปลี่ยนค่าของอาร์เรย์ในแต่ละดัชนีสำหรับรหัสอักขระของอักขระที่ดัชนีเดียวกันนั้นในสตริงバ㟐㱰㣈㞸ซึ่งเป็นตัวเลขของเพื่อนทั้งหมดของ Paul ตามลำดับ เมื่อเราได้รับนั้นเราเข้าร่วมอาร์เรย์ด้วยกันและเราใช้=>เป็นตัวคั่น

การใช้

หากต้องการใช้งานให้เรียกใช้สิ่งนี้:

f=_=>[...'バ㟐㱰㣈㞸'].map(a=>a.charCodeAt()).join`=>`;alert(f())

เอาท์พุต

12496=>14288=>15472=>14536=>14264

วิธีการเกี่ยวกับ _ => [... 'バ㟐㱰㣈㞸'] .map (s => s.charCodeAt ()). join` => `
user5090812

@ user5090812 ขอบคุณสำหรับคำแนะนำ!
ลุค

3

Ruby, 36 ไบต์ (26 ตัวอักษร)

p"バ㟐㱰㣈㞸".unpack("U*")*"=>"

เพราะเหตุใด น่าเบื่อเหมือนนรก

รุ่นที่เก่ากว่า - 53 ไบต์

p %w(jol mld oim n6b mke).map{|x|x.to_i ~-6*~-6}*'=>'

คำอธิบาย: การเข้ารหัสตัวเลขในฐาน 25 ให้ 5 สตริงอิสระหกเพื่อถอดรหัสพวกเขาฉันต้องแสดงหมายเลข 25 โดยใช้เพียง 6: (6-1) (6-1) => ~ -6 ~ -6


ฉันนับ 36 ไบต์ด้วย UTF8 ไม่ใช่ 26.
smls

1
ฉันเดาว่าเขานับตัวอักษรไม่ใช่จำนวนไบต์ ฉันมักจะใช้เว็บไซต์นี้เพื่อนับไบต์
ลุค

แก้ไขการนับทันที
GB

3

Perl 6 , 63 59 ไบต์

{$/=6;$/--;join "=>",<JOL MLD OIM N6B MKE>».parse-base($/*$/)}

{join "=>",<JOL MLD OIM N6B MKE>».parse-base(--($_=6)*$_)}

ถอดรหัสตัวเลขจากฐาน 25 เนื่องจากเป็นเพียงฐานเดียวที่สนับสนุนโดย.parse-base(2 ถึง 36) โดยที่ไม่มีตัวเลขใดที่ไม่ถูกต้อง

ขอบคุณ Neil สำหรับ -3 ไบต์

Perl 6 , 82 75 ไบต์

{my \a="BXS".parse-base(6*6);join "=>",(a,{sum grep $_%%*,^$_}...^{$_==a if $++})}

{my \a="BXS".parse-base(6*6);join "=>",({$/=$_//a;sum grep $/%%*,^$/}...a)}

ถอดรหัสตัวเลข15472ในฐาน 36 แล้วสร้างลำดับโดยการคำนวณแต่ละตัวเลขเป็นผลรวมของตัวหารที่เหมาะสมของตัวเลขก่อนหน้า

Perl 6 , 69 ไบต์ (47 ตัวอักษร) - ไม่ใช่การแข่งขัน

{"{١٢۴۹6}=>{١۴۲۸۸}=>{١۵۴۷۲}=>{١۴۵۳6}=>{١۴۲6۴}"}

ไม่ใช้หลัก ASCII ที่ต้องห้ามใด ๆ ใช้ตัวเลข Unicode จากบล็อกอารบิก - อินดิคแทน (2 ไบต์ต่อ 1) การ{ }แก้ไขสตริงทำให้แน่ใจว่าพวกมันถูกวิเคราะห์คำว่าเป็นตัวอักษร Perl 6 ตัวเลขแล้วจึงนำไปรวมกับการแทน ASCII

โอเคนี่คือการโกง - นั่นเป็นเหตุผลที่ฉันไม่ได้ใช้มันเป็นคำตอบหลักของฉัน ... :)


เนื่องจากฉันไม่สามารถเข้าถึงล่ามภาษา Perl 6 ได้การเขียน--$/*$/ใช่ไหม
Neil

@ Neil: มัน ขอบคุณ! ในความเป็นจริงก็ยังทำงานถ้าฉัน inline --($/=6)*$/)ที่ได้รับมอบหมายเช่น
smls

3

เยลลี่ , 5 4 ไบต์

ȷṗȷỌ

พิมพ์สตริงทั้งห้า ใช้ประโยชน์จากความจริงที่ว่าอนุญาตให้ใช้เอาต์พุต "ขยะ" และฝังห้าสตริงใน10 3003อักขระของเอาต์พุต

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

ȷṗȷỌ  Main link. No arguments.

ȷ     Set the return value to 1000.
 ṗȷ   Cartesian power; form all arrays of length 1000 that consist of integers in
      [1, ..., 1000].
   Ọ  Unordinal; convert all integers to characters.

อ็อฟเซ็ตไบต์ของสตริงที่ต้องการภายในเอาต์พุตคืออะไร?
Neil

มีหลักฐานใด ๆ ที่จะสนับสนุนสตริงที่ต้องการอย่างใดอย่างหนึ่งถูกพิมพ์จริงหรือไม่?
Erik the Outgolfer

1
@Neil อักขระที่ควรจะชดเชย48049051056053060061048051049055055060061048052051054049060061048051052050053060061048051049053051000 ไม่แน่ใจเกี่ยวกับไบต์
Dennis

@EriktheOutgolfer ถ้าจริงๆแล้วคุณหมายถึงเวลาและข้อ จำกัด ด้านความจำที่สมเหตุสมผล ความท้าทายไม่ได้ระบุขีด จำกัด ใด ๆ และจะไม่ จำกัด โดยค่าเริ่มต้น
Dennis

@ เดนนิสไม่ฉันหมายถึงเคย แน่นอนมันบอกเป็นนัย ๆ ว่ามันจะไม่เสร็จงานเร็ว ๆ นี้ อย่างไรก็ตามเมื่อพิจารณาจากรหัสแล้วฉันคิดว่ามันไม่น่าจะเป็นไปได้ที่จะพิมพ์สตริงเหล่านั้น จากนั้นอีกครั้งฉันแค่คิดถึงหลักฐานที่สมเหตุสมผล ...
Erik the Outgolfer

2

C, 94 84 77 77 ไบต์

ง่าย ๆ ขอขอบคุณเป็นพิเศษ @Neil

g(){char*m="!mnpuryzmpnttyzmqpsnyzmpqoryzmpnrp";for(;*++m;)putchar(*m-66+6);}

f () {printf ("% d =>% d =>% d =>% d =>% d", '~' 'r' - 'd', '~' 'd' - 'h', ' ~ ' ' r '-' L ',' ~ ' ' z '+' d ',' ~ '*' t '-' P ');}


อย่างน้อยบน ideone คุณสามารถย้ายchar*mด้านในfor()เพื่อบันทึก byte และยังทำให้ฟังก์ชันสามารถใช้ซ้ำได้ (เงื่อนไขที่จำเป็นของฟังก์ชัน) นอกจากนี้คุณยังส่งออก null ต่อท้าย; *++mจะแก้ไขว่า นอกจากนี้คุณยังสามารถบันทึกไบต์บางส่วนโดยการลบ 60 แทน g(){for(char*m="!mnpuryzmpnttyzmqpsnyzmpqoryzmpnrp";*++m;)putchar(*m-66+6);}66:
Neil

หรือคุณสามารถคัดลอกแนวทางจากคำตอบ MATLAB ซึ่งจะช่วยประหยัดไบต์อื่น ๆ
Neil

@Neil คอมไพเลอร์ของฉันจะไม่ให้ฉันประกาศภายในของ for loop initial declaration used outside C99 modeแต่ฉันยินดีที่จะลดความซับซ้อนของ putchar ขอบคุณ!
cleblanc

1

PHP, 73 63 60 ไบต์

for(;$c="|`*X6H-$*@"[$i];)echo!!$i&++$i?"=>".!!6:"",ord($c);

-nrทำงานด้วย

เล็ก ๆ น้อย ๆ ขี้เกียจน้อย: ใช้เวลาสตริงเป็นรายการของ=>1(ascii)(ascii)
เช่น: 124, 96, =>1, 42, 88, =>1, 54, 72, =>1, 45, 36, =>1, 42, 64;
พิมพ์=>1โดยดัชนีสตริงผนวกรหัส ascii

ชำรุด

            # loop through string with index $i
for(;$c="|`*X6H-$*@"[$i];)echo
            # string ascii values: 124,96,42,88,54,72,45,36,42,64
    !!$i        # true if $i>0
    &++$i       # odd if (old) $i is 0,2,4,6,8
                # -> true for 2,4,6,8
        ?"=>".!!6   # if true, print "=>1"
        :"",        # else print nothing
    ord($c);    # print ascii value


1

PHP, 53 ไบต์

<?=join('=>',unpack('v*',gzinflate('�`p������s')));

การถ่ายโอนข้อมูล Hex:

00000000: 3c3f 3d6a 6f69 6e28 273d 3e27 2c75 6e70  <?=join('=>',unp
00000010: 6163 6b28 2776 2a27 2c67 7a69 6e66 6c61  ack('v*',gzinfla
00000020: 7465 2827 bb60 70c1 bcc0 e684 c50e 7300  te('.`p.......s.
00000030: 2729 2929 3b                             ')));

เอาท์พุท:

12496=>14288=>15472=>14536=>14264

คำอธิบาย:

แต่ละส่วนจำนวนเต็มห้าหลักถูกเข้ารหัสเป็น endian ตัวย่อที่ไม่ได้ลงนามและต่อกันเข้าด้วยกันและผลลัพธ์คือ gzipped สิ่งนี้เกิดขึ้นกับการผลิตไอน้ำแบบไบท์ที่ไม่มีตัวอักษรผิดหลักซึ่งจะถูกเขียนลงในสตริง สารสกัดยกเลิก gzip >=กระแสแกะกางเกงขาสั้นสองไบต์ตีความแต่ละสตริงและเข้าร่วมกับ


วิธีการเกี่ยวกับการสลายหรือไม่
ติตัส

1

Java 8, 134 ไบต์

แข็งแรงเล่นกอล์ฟ:

()->{String s="";for(String a:new String[]{"JOL","MLD","OIM","N6B","MKE"}){if(!s.isEmpty())s+=("=>");s+=Long.valueOf(a,25);}return s;}

Ungolfed โปรแกรมเต็มรูปแบบ:

import java.util.function.*;

public class FindFiveFriendsToEatChickenWithPaul {

  public static void main(String[] args) {
    System.out.println(toString(() -> {
      String s = "";
      for (String a : new String[] { "JOL", "MLD", "OIM", "N6B", "MKE" }) {
        if (!s.isEmpty()) s += ("=>");
        s += Long.valueOf(a, 25);
      }
      return s;
    }));

  }

  private static String toString(Supplier<String> s) {
    return s.get();
  }

}

1

แบตช์ 191 ไบต์

@set/as=n=66*(66+66+66+6*6)+66/6+66/6+6,u=6/6
@call:t
@call:t
@echo %s: ==^>%
@exit/b
:t
@call:c
:c
@for /l %%i in (%u%,%u%,%n%)do @set/an-=%%i*!(%n%%%%%i)
@set/an=-n
@set s=%s% %n%

ฉันคาดว่าจะต้องใช้เวลาอย่างน้อย 32 ไบต์ในการคำนวณตัวเลขแต่ละตัวโดยใช้เพียง6s บวกอีก 32 เพื่อพิมพ์ออกมาทั้งหมดซึ่งมีอยู่แล้ว 192 ไบต์ดังนั้นฉันชนะโดยการคำนวณโซ่ที่เป็นมิตร นอกจากนี้ฉันคิดว่าห้า%ในแถวเป็นบันทึกสำหรับฉัน นอกจากนี้เคล็ดลับ Batch ที่เรียบร้อย: การ%n%แทนที่ก่อนที่forลูปจะถูกประเมินดังนั้นลูปจะคำนวณปัจจัยทั้งหมดของnและลบออกจากnดังนั้นจึงส่งผลให้เกิดการปฏิเสธของผลลัพธ์ที่ต้องการ


1

เยลลี่ 12 ไบต์

“<ọ’ÆṣÐĿj“=>

พิมพ์สตริงที่สี่และไม่มีอะไรอื่น

ลองออนไลน์!

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

“<ọ’ÆṣÐĿj“=>  Main link. No arguments.

“<ọ’          Yield the 1-based indices of '<' and 'ọ' in Jelly's code page, i.e.,
              [61, 222], and convert the array from base 250 to integer.
              This yields 15472.
      ÐĿ      Iteratively call the link to the left until the results are no longer
              unique and return the array of all unique results.
    Æṣ        Compute the proper digit sum of the previous value (initially 15472).
        j“=>  Join, separating by the string "=>".

0

Python 2, 78 72 ไบต์

print''.join(chr(ord(x)-6-6)for x in'=@>DDIJ=A@C>IJ=@A?BIJ=@>B@IJ=>@EB')

แก้ไข - ขอบคุณStewie Griffinสำหรับการบันทึก 6 ไบต์!

อีกวิธีหนึ่งคือการส่งออกพีชคณิตที่เป็นไปได้ทั้งหมด OP บอกว่าขยะดี

from itertools import permutations
print str(list(permutations(''.join(str(x)+'.'for x in range(int('9'*5)).replace(',','').replace('\'','') 
# also 9 and 5 need to be converted using ord and chr

มีความซ้ำซ้อนมากเกินไปในการแปลงจากเป็นintหรือเพื่อlist strฉันเดาว่ามันจะง่ายกว่าในภาษาลึกลับบางอย่าง แต่ฉันก็ไม่รู้เลย


คุณเพิ่ม 66 แทน 12 ได้ไหม นี่จะช่วยประหยัดอีกไบต์
GB

มันจะออกมาจากช่วงปกติของ ASCII @GB ซึ่งหมายความว่าคุณจะต้องนับสองไบต์ต่อตัวอักษร
Stewie Griffin

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