Tìm năm người bạn để ăn gà với Paul


15

Paul là một trong những người quen ở Bỉ của bạn và anh ấy muốn bạn tạo một chương trình tạo ra ít nhất một trong năm chuỗi sau:

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

Nó đại diện cho những người bạn mà anh ấy tự hào nhất, và anh ấy muốn ăn cùng họ. Paul cũng nghĩ rằng số 6 là hoàn hảo, và đó là số duy nhất đáng sử dụng. Vì vậy, bạn không thể sử dụng bất kỳ chữ số nào khác ngoài "6" trong mã của mình (0 đến 5 và 7 đến 9 đều bị cấm). Chương trình của bạn không thể lấy bất kỳ đầu vào. Đầu ra có thể chứa rác trước và / hoặc sau chuỗi nhưng phải chứa ít nhất một trong các chuỗi trên.

Ví dụ: đây là một đầu ra hợp lệ:

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

Tôi "ligthly" gợi ý trong câu hỏi như làm thế nào tôi mong điều này sẽ được giải quyết, nhưng làm thế nào để biết? Có lẽ có một cách tốt hơn ... Hy vọng bạn có niềm vui.

Đây là code-golf: điểm thấp nhất trong byte thắng.


3
Trình tự OEIS liên quan .
Emigna

5
Tôi không thể hiểu Paul hay gà phải làm gì với điều này.
Bạch tuộc ma thuật Urn

6
@carusocomputing: Chuỗi hòa đồng '12496 => 14288 => 15472 => 14536 => 14264 "được tìm thấy bởi Paul Poulet , vào năm 1918 (một nhà toán học người Bêlarut). Và" poulet "có nghĩa là" gà "trong tiếng Pháp. con số hoàn hảo theo nghĩa là tổng của số chia của nó là 6.
Jylo

8
Đợi đã, vì vậy một người đàn ông đã tìm thấy một dãy số vào năm 1918 ... và chúng ta quan tâm nhiều hơn đến dãy số so với người đàn ông toán học tên là Paul?
Bạch tuộc ma thuật Urn

1
@Dennis, điều này đúng, tôi không mong đợi câu trả lời 4 byte tàn bạo, bạn luôn luôn ngạc nhiên: p Tôi đã thêm quy tắc này bởi vì tôi hy vọng sẽ đưa ra một lợi thế nếu ai đó lặp đi lặp lại qua các số nguyên và xuất ra tất cả đều hòa đồng chuỗi mà không mã hóa cứng một số phức tạp đầu tiên. Nhưng cuối cùng, nó dường như rất thích chuyển đổi cơ sở và chuyển đổi nhân vật ngay cả trong ngôn ngữ không phải là golf. Tôi nghĩ rằng thiết kế câu hỏi là thực sự khó! Tuy nhiên, Enigma đã sử dụng thuộc tính của đầu ra và có số điểm cao hơn cho đến nay :)
Jylo

Câu trả lời:


12

05AB1E , 18 17 byte

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

Hãy thử trực tuyến!

Giải trình

•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 "=>"

Nói tóm lại, chúng tôi tính toán từng số là f(n+1) = sum(divisors(f(n)) - f(n)


5

Pyke, 16 byte

wヰw$VDlsh)J"=>

Hãy thử nó ở đây!

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

Bất cứ khi nào một chuỗi ký tự ở cuối chương trình, nó sẽ hoán đổi nó bằng mã thông báo ngay trước nó, tiết kiệm 1 byte trong các trường hợp như thế này. factorsHàm của Pyke không bao gồm chính số đó hoặc 1. Nếu số được phép, 1 byte có thể được lưu bằng cách thay thế w$bằng4

Pyke, 21 byte

uバ㟐㱰㣈㞸J"=>

Hãy thử nó ở đây!

Tạo một danh sách các số cần thiết và tham gia chúng. Không thú vị lắm ngoài trò lừa bằng dây.


4

MATLAB, 44 byte

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

Hãy thử trực tuyến!

Tôi đã không tìm thấy một mẫu trong các số (và thật khó để sử dụng mẫu này cho bất kỳ cách nào, vì tôi không thể sử dụng số), vì vậy tôi sẽ chỉ sử dụng cách tiếp cận ngây thơ.

'=>@EBIJ=@>DDIJ=A@C>IJ=@A?BIJ=@>B@' là chuỗi '12496=>14288=>15472=>14536=>14264' khi 12 được thêm vào các giá trị ASCII. Bây giờ, nhập chuỗi đó, trừ 6+6và nối với chuỗi trống ''để chuyển đổi nó thành một mảng ký tự.


Vâng, xin lỗi, tôi muốn ngăn chặn việc mã hóa số cứng, nhưng chắc chắn sẽ mang lại lợi thế cho ngôn ngữ 'golfy'. Không có mẫu mặc dù mỗi số là tổng của ước của số trước.
Jylo

1
Tôi thích cách chuỗi mã hóa vẫn chứa =>.
Neil

3

Ký tự JavaScript (ES6), 57 byte / 47 (UTF-8)

Cảm ơn người dùng5090812 đã lưu 10 B

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

Giải trình

Đầu tiên chúng ta tạo một mảng và điền nó với các ký tự trong chuỗi バ㟐㱰㣈㞸. Sau đó, chúng tôi lặp qua chuỗi ( acó giá trị của phần tử hiện tại) và chúng tôi thay đổi ký tự thành mã ký tự của nó. Sau đó, chúng tôi tham gia tất cả các giá trị trong mảng bằng=> .

Cũ: 67 byte

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

Giải trình

Đầu tiên chúng ta tạo một mảng có độ dài 5. Sau đó, chúng ta thay đổi các giá trị của mảng tại mỗi chỉ mục cho mã ký tự của ký tự ở cùng chỉ mục đó trong chuỗi バ㟐㱰㣈㞸, là số của tất cả bạn bè của Paul theo thứ tự. Khi chúng tôi nhận được điều đó, chúng tôi tham gia mảng với nhau và chúng tôi sử dụng=> như dấu phân cách.

Sử dụng

Để sử dụng nó, chỉ cần chạy này:

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

Đầu ra

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

Làm thế nào về _ => [... '㟐 㣈 㞸'] .map (s => s.charCodeAt ()). Tham gia` => `
user5090812

@ user5090812 Cảm ơn bạn đã gợi ý!
Lu-ca

3

Ruby, 36 byte (26 ký tự)

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

Bởi vì, tại sao không. Chán chết.

phiên bản cũ hơn - 53 byte

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

Giải thích: mã hóa các số trong cơ sở 25 cung cấp cho 5 chuỗi sáu số tự do, để giải mã chúng, tôi chỉ phải biểu diễn số 25 chỉ bằng 6: (6-1) (6-1) => ~ -6 ~ -6


Tôi đếm 36 byte với UTF8, không phải 26.
smls

1
Tôi đoán anh ấy đã đếm các ký tự, và không phải là byte. Tôi luôn luôn sử dụng trang web này để đếm byte.
Lu-ca

Sửa lỗi ngay bây giờ.
GB

3

Perl 6 , 63 59 byte

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

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

Giải mã các số từ cơ sở 25, vì đó là cơ sở duy nhất được hỗ trợ bởi .parse-base (2 đến 36) trong đó không có số nào có chữ số không hợp lệ.

Cảm ơn Neil cho -3 byte.

Perl 6 , 82 75 byte

{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)}

Giải mã số 15472 trong cơ sở 36, sau đó tạo chuỗi bằng cách tính mỗi số là tổng các ước số thích hợp của số trước đó.

Perl 6 , 69 byte (47 ký tự) - không lọc

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

Không sử dụng bất kỳ chữ số ASCII bị cấm nào, thay vào đó sử dụng các chữ số Unicode từ khối Chỉ thị Ả Rập (mỗi loại 2 byte)! Các { }phép nội suy chuỗi đảm bảo rằng chúng được phân tích cú pháp dưới dạng chữ số Perl 6, và sau đó được xâu chuỗi thành các biểu diễn ASCII của chúng.

Được rồi, đây là gian lận - đó là lý do tại sao tôi không sử dụng nó làm câu trả lời chính của mình ... :)


Vì tôi không dễ dàng truy cập vào trình thông dịch Perl 6, nó có hoạt động để viết --$/*$/không?
Neil

@Neil: Nó. Cảm ơn! Trong thực tế, nó thậm chí hoạt động nếu tôi nội tuyến bài tập, như thế --($/=6)*$/).
smls

3

Thạch , 5 4 byte

ȷṗȷỌ

In tất cả năm chuỗi. Lợi dụng thực tế là đầu ra "rác" được cho phép và chôn lấp năm chuỗi trong 10 3003 ký tự đầu ra.

Làm thế nào nó hoạt động

ȷṗȷỌ  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.

Giá trị bù byte của chuỗi yêu cầu trong đầu ra là gì?
Neil

Có bằng chứng nào hỗ trợ cho bất kỳ một chuỗi yêu cầu nào thực sự được in không?
Erik the Outgolfer

1
@Neil Độ lệch ký tự phải là 48049051056053060061048051049055055060061048052051054049060061048051052050053060061048051049053051000 . Không chắc chắn về byte.
Dennis

@EriktheOutgolfer Nếu thực sự bạn có ý nghĩa với những hạn chế về thời gian và bộ nhớ hợp lý thì không. Mặc dù vậy, thách thức không chỉ định bất kỳ giới hạn nào và chúng không giới hạn theo mặc định.
Dennis

@Dennis Không, ý tôi là bao giờ. Tất nhiên, nó ngụ ý rằng nó sẽ không hoàn thành công việc của mình bất cứ lúc nào sớm. Tuy nhiên, đánh giá theo mã, tôi nghĩ rằng thực sự không thể in bất kỳ chuỗi nào trong số đó. Sau đó, một lần nữa, tôi chỉ nghĩ ra một số bằng chứng hợp lý ...
Erik the Outgolfer 15/1/2017

2

C, 94 84 77 byte

Đơn giản. Cảm ơn đặc biệt @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 ');}


Ít nhất là trên ideone, bạn có thể di chuyển char*mbên trong for()để lưu một byte và nó cũng làm cho hàm có thể sử dụng lại (điều kiện cần thiết của các hàm). Ngoài ra, bạn xuất ra một null trailing; *++msẽ sửa nó. Ngoài ra, bạn có thể lưu một số byte bằng cách trừ 60 thay vì 66 : g(){for(char*m="!mnpuryzmpnttyzmqpsnyzmpqoryzmpnrp";*++m;)putchar(*m-66+6);}.
Neil

Hoặc bạn có thể sao chép cách tiếp cận từ câu trả lời MATLAB, điều này sẽ lưu một byte khác lên trên đó.
Neil

@Neil trình biên dịch của tôi sẽ không cho phép tôi khai báo bên trong vòng lặp for initial declaration used outside C99 modenhưng tôi rất vui khi đơn giản hóa putar. Cảm ơn!
cleblanc

1

PHP, 73 63 60 byte

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

Chạy với -nr.

một chút ít lười biếng: mất chuỗi như danh sách các =>1(ascii)(ascii)
ví dụ: 124, 96, =>1, 42, 88, =>1, 54, 72, =>1, 45, 36, =>1, 42, 64;
in =>1theo chỉ mục chuỗi, nối thêm mã ascii

phá vỡ

            # 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

C ++, 92 byte

#include <cstdio>
int main(){for(char c:"UVX]ZabUXV\\abUYX[VabUXYWZabUXVZX")putchar(c-6*6);}

1

PHP, 53 byte

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

Đổ lục giác:

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                             ')));

Đầu ra:

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

Giải trình:

Mỗi phần nguyên gồm năm chữ số được mã hóa dưới dạng một endian ngắn không dấu, sau đó được nối với nhau và kết quả được nén lại. Điều này xảy ra để tạo ra một hơi byte không có ký tự chữ số vi phạm, sau đó được mã hóa cứng thành một chuỗi. Để giải nén, giải nén luồng, giải nén quần short hai byte, diễn giải từng chuỗi như một chuỗi và nối với >=.


làm thế nào về một sự cố?
Tít

1

Java 8, 134 byte

Chơi gôn

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

Ungolfed, chương trình đầy đủ:

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

Hàng loạt, 191 byte

@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%

Tôi ước tính rằng sẽ mất tối thiểu 32 byte để tính toán mỗi số chỉ sử dụng 6s cộng với 32 khác để in ra tất cả, đó là 192 byte, vì vậy tôi chiến thắng bằng cách tính chuỗi hòa giải. Ngoài ra, tôi nghĩ rằng năm %giây liên tiếp là một kỷ lục đối với tôi. Ngoài ra, mẹo Batch gọn gàng: %n%được thay thế trước khi forvòng lặp được đánh giá, do đó vòng lặp sẽ tính toán tất cả các yếu tố nvà trừ chúng n, do đó dẫn đến kết quả phủ định của kết quả mong muốn.


1

Thạch , 12 byte

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

In chuỗi thứ tư và không có gì khác.

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

“<ọ’ÆṣÐĿ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 byte

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

Chỉnh sửa - Cảm ơn Stewie Griffin đã lưu 6 byte!

Ngoài ra, một giải pháp khác sẽ là đầu ra tất cả các hoán vị có thể. OP nói rác là tốt.

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

Có quá nhiều dư thừa trong việc chuyển đổi từ inthoặc listsang str. Tôi đoán điều này sẽ dễ dàng hơn trong một số ngôn ngữ bí truyền, nhưng tôi không biết ngôn ngữ nào trong số đó.


Bạn có thể thêm 66 thay vì 12? Điều này sẽ tiết kiệm một byte khác.
GB

Nó sẽ vượt ra khỏi phạm vi @ GBII bình thường, nghĩa là bạn sẽ phải đếm hai byte cho mỗi ký tự.
Stewie Griffin

Tôi thấy, tôi đã không đếm các ký tự '=>'.
GB
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.