바울과 닭을 먹을 다섯 친구 찾기


15

Paul은 벨기에 지인 중 한 명이며 다음 5 개 중 하나 이상의 문자열출력 하는 프로그램을 만들고 싶습니다 .

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

그것은 그가 가장 자랑스럽게 생각하는 친구들을 대표하며 친구들과 함께 먹고 싶어합니다. Paul은 또한 숫자 6이 완벽하다고 생각합니다. 따라서 코드에서 "6"이외의 다른 숫자를 사용할 수 없습니다 (0 ~ 5 및 7 ~ 9는 금지됨). 프로그램은 입력을받을 수 없습니다. 출력은 문자열 앞뒤에 가비지를 포함 할 수 있지만 위 문자열 중 하나 이상을 포함해야합니다.

예를 들어 이것은 유효한 출력입니다.

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

나는이 문제가 어떻게 해결 될지에 대한 질문에 "거의"힌트를 주었지만 어떻게 알 수 있는가? 아마도 더 좋은 방법이있을 것입니다 ... 재미 있기를 바랍니다.

이것은 코드 골프입니다 : 가장 낮은 점수는 바이트입니다.


3
관련 OEIS 시퀀스.
Emigna

5
바울이나 닭이 이것과 어떤 관계가 있는지 알 수 없습니다.
Magic Octopus Urn

6
@carusocomputing : 사교성 체인 '12496 => 14288 => 15472 => 14536 => 14264 "는 1918 년 (벨기에 수학자) Paul Poulet에 의해 발견되었으며 ,"poulet "은 프랑스어로"chicken "을 의미합니다. 제수의 합이 6이라는 점에서 완벽한 수입니다.
Jylo

8
잠깐만 요, 한 병아리는 1918 년에 일련의 숫자를 찾았습니다 ... 그리고 우리는 수학이라는 이름의 바울보다 수열에 더 관심이 있습니까?
Magic Octopus Urn

1
@Dennis, 글쎄, 이것은 사실이다. 나는 bruteforce 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

파이크, 16 바이트

wヰw$VDlsh)J"=>

여기 사용해보십시오!

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

문자열 리터럴이 프로그램의 끝에있을 때마다, 바로 앞의 토큰과 교환하여 이와 같은 경우 1 바이트를 절약합니다. 파이크의 factors기능은 숫자 자체도 포함되지 않습니다 1. 번호가 허용 된 경우, 1 바이트는 대체하여 저장 될 수 w$4

파이크, 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) 자

10 B 저장을위한 user5090812 님에게 감사합니다

_=>[...'バ㟐㱰㣈㞸'].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 제안 해 주셔서 감사합니다!
Luke

3

루비, 36 바이트 (26 자)

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

왜 안돼? 지옥으로 지루합니다.

이전 버전-53 바이트

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

설명 : 기본 25의 숫자를 인코딩하면 5 개의 6 개의 무료 문자열이 제공되며 해독하려면 6을 사용하여 숫자 25 만 표시하면됩니다 (6-1) (6-1) => ~ -6 ~ -6


26이 아닌 UTF8로 36 바이트를 계산합니다.
smls

1
나는 그가 바이트가 아닌 문자를 세는 것 같아요. 나는 항상 사이트를 바이트 수로 사용 합니다.
Luke

지금 카운트를 수정했습니다.
GB

3

펄 6 , 63 59 바이트

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

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

.parse-base유효하지 않은 숫자가없는 (2-36)에서 지원되는 유일한 염기이기 때문에 밑이 25 인 숫자를 해독합니다 .

-3 바이트를위한 Neil에게 감사합니다.

펄 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 숫자를 사용하지 않고 아라비아-인도 블록의 유니 코드 숫자를 대신 사용합니다 (각각 2 바이트)! { }문자열 보간은 펄 6 숫자 리터럴로 해석하고 자신의 ASCII 표현으로도 캐릭터 라인하고 있는지 확인하십시오.

좋아, 이것은 속임수입니다-그래서 나는 그것을 주요 대답으로 사용하지 않았습니다 ... :)


Perl 6 인터프리터에 쉽게 액세스 할 수 없으므로 작성하는 것이 효과가 --$/*$/있습니까?
Neil

@ 닐 : 그렇습니다. 감사! 실제로, 과제를 인라인하면 작동합니다 --($/=6)*$/).
smls

3

젤리 , 5 4 바이트

ȷṗȷỌ

다섯 개의 문자열을 모두 인쇄합니다. "쓰레기"출력이 허용되고 10 3003 자 출력 에 5 개의 문자열을 묻습니다 .

작동 원리

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

필요한 문자열 중 하나를 실제로 지원한다는 증거가 있습니까?
Outgolfer Erik

1
@Neil 문자 오프셋은 48049051056053060061048051049055055060061048052051054049060061048051052050053060061048051049053051000 이어야합니다 . 바이트에 대해 확실하지 않습니다.
Dennis

@EriktheOutgolfer 실제로 당신이 합리적인 시간과 메모리 제약을 의미 한다면, 그렇지 않습니다. 이 과제는 제한을 지정하지 않으며 기본적으로 무제한입니다.
데니스

@ 데니스 아니, 내 말은 물론 그것은 곧 곧 일을 끝내지 않을 것이라는 것을 암시합니다. 그러나 코드로 판단하면 실제로 해당 문자열을 인쇄하지 않을 것이라고 생각합니다. 그리고 다시, 나는 단지 몇 가지 합리적인 증거를 생각했습니다.
Outgolfer Erik

2

C, 94 84 77 바이트

바보 같은 간단한. 특별 감사 @ @

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


적어도 IDE에서는 char*m내부를 이동하여 for()바이트를 저장할 수 있으며 함수를 재사용 할 수 있습니다 (필요한 함수 조건). 또한 후행 널을 출력합니다. *++m고칠 것입니다. 또한 66 대신 60을 빼서 바이트를 절약 할 수 있습니다 g(){for(char*m="!mnpuryzmpnttyzmqpsnyzmpqoryzmpnrp";*++m;)putchar(*m-66+6);}.
Neil

또는 MATLAB 답변의 접근 방식을 복사하여 그 위에 다른 바이트를 저장할 수 있습니다.
Neil

@Neil 컴파일러는 for 루프 내에서 선언 할 수 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

C ++, 92 바이트

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

1

PHP, 53 바이트

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

육각 덤프 :

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

설명:

5 자리 정수 섹션 각각은 부호없는 짧은 리틀 엔디안으로 인코딩 된 다음 함께 연결되고 결과가 압축됩니다. 이로 인해 문제가되는 숫자 문자가없는 바이트 스팀이 생성되어 문자열로 하드 코딩됩니다. 스트림을 추출하고 압축 해제하려면 2 바이트 반바지를 압축 해제하고 각각을 문자열로 해석 한 다음와 결합하십시오 >=.


고장은 어떻습니까?
Titus

1

자바 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%

나는 6s와 다른 32를 사용하여 각 숫자를 계산하는 데 적어도 32 바이트가 필요 하며, 이미 192 바이트 인 모든 숫자 를 인쇄하는 것으로 추정합니다 . 그래서 나는 원만한 체인을 계산하여 승리했습니다. 또한, 나는 5 %s의 연속이 나에게 레코드 라고 생각 합니다. 또한 깔끔한 배치 트릭 : 루프가 평가 %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

파이썬 2, 78 72 바이트

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

편집 -6 바이트를 절약 한 Stewie Griffin 에게 감사드립니다 !

또한 다른 해결책은 가능한 모든 순열을 출력하는 것입니다. 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. 나는 일부 난해한 언어에서는 이것이 더 쉬울 것이라고 생각하지만 그중 어느 것도 모른다.


12 대신 66을 추가 할 수 있습니까? 다른 바이트를 절약 할 수 있습니다.
GB

일반적인 ASCII 범위 @GB를 벗어나므로 문자 당 2 바이트를 계산해야합니다.
Stewie Griffin

나는 '=>'문자를 세지 않았다.
GB
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.