코알라, 게, 그리고 공채


21

두 개의 양의 정수 X와 Y가 주어지면 가능한 경우 출력에 정확히 X 쉼표 ( ,)와 Y 마침표 ( .) 가 포함되도록 다음 세 가지 ASCII 아트 동물의 조합을 출력 하십시오.

  1. 코알라 : 쉼표 1 개, 기간 2 개

    <.,.>
    
  2. 게 : 쉼표 2 개, 마침표 2 개

    ,<..>,
    
  3. 쉼표 : 3 개 이상의 쉼표, 1 기간

    <,,,.>
    

    또는 <,,,,.>또는 <,,,,,.>또는 <,,,,,,.>또는 <,,,,,,,.>기타

이 동물들의 조합이 정확히 X 쉼표와 Y 기간을 생성 할 수 없다면, 실패를 위장 할 단일 쉼표를 출력하십시오 :

~<.,,>~~

산출 동물은 임의의 양 및 순서로 존재할 수있다. 문자열, 공백 또는 줄 바꿈으로 구분되거나 각 동물이 하나의 요소 인 목록에있을 수 있습니다.

예를 들어, X = 7, Y = 5의 경우 모두 유효한 출력입니다 (빈 줄로 구분).

<.,.> <.,.> <,,,,,.>

<.,.>
<,,,,,.>
<.,.>

,<..>, <.,.> <,,,,.>

<,,,,.>
,<..>,
<.,.>

,<..>, <,,,.> ,<..>,

[",<..>,", ",<..>,", "<,,,.>"] (list syntax depends on language)

(적어도이 예에서) 작동 할 수있는 것보다 여러 세트의 동물이 있습니다. 그러나 당신은 출력 할 필요 기억 하나 개 가 존재하는 경우, 유효 솔루션을. 동물의 수 또는 별개의 동물의 수는 중요하지 않습니다.

해가없는 X = 3, Y = 3 또는 X = 1, Y = 5와 같은 입력의 경우 출력은 항상

~<.,,>~~

아마도 단일 요소 목록에있을 것입니다.

바이트 단위의 가장 짧은 코드가 이깁니다.


6
코알라는 다음과 같이 보인다 :-)
Luis Mendo

각 쌍 (X, Y)의 조합 수를 출력하는 작은 프로그램을 만들었습니다. 불행히도 최대 (128, 128)까지만 실행할 수 있었고 __int128bignum 라이브러리를 사용하기에는 너무 게으 르기 때문입니다. 다음은 CSV 덤프입니다. pastebin.com/ght5xkRu 첫 번째 행과 열은 X 및 Y 값입니다.
Fytch

답변:


4

루비, 139 바이트

Lambda 함수, x와 y를 인수로 사용하고 문자열을 반환

->x,y{c=y-2*n=y-(x>y ?1:0)>>1
x+=-c/2*s=[x-n,c*3].max
x<n||x>n*2?'~<.,,>~~':',<..>, '*(x-n)+'<.,.> '*(2*n-x)+"<%s.> "*c%[?,*s-=c/2*3,?,*3]}

솔루션이 존재하면 모든 코알라 + commapillars 또는 모든 코알라 + crabs로 수행 할 수 있습니다.

원칙은 최소한의 commapillars를 사용하는 것입니다. 숫자가 홀수이면 1 개의 commapillar을 사용합니다. 마침표보다 쉼표가 더 많지 않으면 0 쉼표를 사용하더라도 2를 사용합니다.

noncommapillars (crabs + koalas)에서 사용되는 기간은 반드시 짝수이고 noncommapillars의 수는 절반 (number of periods)-(number of commapillars)입니다. 모든 코알라에 대해 쉼표가 충분하지 않거나 모든 게에 대해 너무 많으면 해결책이 없습니다. 그렇지 않으면 솔루션을 반환합니다.

테스트 프로그램에서 언급

명확성을 위해 카멜레온 대신 "실패"를 사용합니다.

f=->x,y{c=y-2*n=y-(x>y ?1:0)>>1
#n=noncommapillars=y>>1 as they have 2 periods. c=commapillars=y-2*n, 1 for odd y, 0 for even y.
#if x>y there are too many commas to have 0 commapillars for even y. noncommapillars= y-1 >> 1, so 2 commapillars

x+=-c/2*s=[x-n,c*3].max
# s=number of commas allocated to commapillars. x-n to allow all noncommapillars to be koalas, but at least 3 per commapillar.
#-c/2 == -1 if there are commapillars, 0 if not (Ruby truncates toward -inf). Subtract commas for commapillars from x if necessary

x<n||x>n*2?'fail':',<..>, '*(x-n)+'<.,.> '*(2*n-x)+"<%s.> "*c%[?,*s-=c/2*3,?,*3]}
#if x<n (insufficient commas for all koalas) or x>n*2 (too many for all crabs) return fail. Else...
#return string off crabs, koalas, and (using % operator like sprintf) c commapillars (0..2), the second with 3 commas (if present) and the first with the rest.  



10.times{|j|10.times{|i|puts "%-20s %s"%[?.*j+?,*i,f[i,j]]}}
#all x,y from 0..9

산출

,                    fail
,,                   fail
,,,                  fail
,,,,                 fail
,,,,,                fail
,,,,,,               fail
,,,,,,,              fail
,,,,,,,,             fail
,,,,,,,,,            fail
.                    fail
.,                   fail
.,,                  fail
.,,,                 <,,,.>
.,,,,                <,,,,.>
.,,,,,               <,,,,,.>
.,,,,,,              <,,,,,,.>
.,,,,,,,             <,,,,,,,.>
.,,,,,,,,            <,,,,,,,,.>
.,,,,,,,,,           <,,,,,,,,,.>
..                   fail
..,                  <.,.>
..,,                 ,<..>,
..,,,                fail
..,,,,               fail
..,,,,,              fail
..,,,,,,             <,,,.> <,,,.>
..,,,,,,,            <,,,,.> <,,,.>
..,,,,,,,,           <,,,,,.> <,,,.>
..,,,,,,,,,          <,,,,,,.> <,,,.>
...                  fail
...,                 fail
...,,                fail
...,,,               fail
...,,,,              <.,.> <,,,.>
...,,,,,             <.,.> <,,,,.>
...,,,,,,            <.,.> <,,,,,.>
...,,,,,,,           <.,.> <,,,,,,.>
...,,,,,,,,          <.,.> <,,,,,,,.>
...,,,,,,,,,         <.,.> <,,,,,,,,.>
....                 fail
....,                fail
....,,               <.,.> <.,.>
....,,,              ,<..>, <.,.>
....,,,,             ,<..>, ,<..>,
....,,,,,            fail
....,,,,,,           fail
....,,,,,,,          <.,.> <,,,.> <,,,.>
....,,,,,,,,         <.,.> <,,,,.> <,,,.>
....,,,,,,,,,        <.,.> <,,,,,.> <,,,.>
.....                fail
.....,               fail
.....,,              fail
.....,,,             fail
.....,,,,            fail
.....,,,,,           <.,.> <.,.> <,,,.>
.....,,,,,,          <.,.> <.,.> <,,,,.>
.....,,,,,,,         <.,.> <.,.> <,,,,,.>
.....,,,,,,,,        <.,.> <.,.> <,,,,,,.>
.....,,,,,,,,,       <.,.> <.,.> <,,,,,,,.>
......               fail
......,              fail
......,,             fail
......,,,            <.,.> <.,.> <.,.>
......,,,,           ,<..>, <.,.> <.,.>
......,,,,,          ,<..>, ,<..>, <.,.>
......,,,,,,         ,<..>, ,<..>, ,<..>,
......,,,,,,,        fail
......,,,,,,,,       <.,.> <.,.> <,,,.> <,,,.>
......,,,,,,,,,      <.,.> <.,.> <,,,,.> <,,,.>
.......              fail
.......,             fail
.......,,            fail
.......,,,           fail
.......,,,,          fail
.......,,,,,         fail
.......,,,,,,        <.,.> <.,.> <.,.> <,,,.>
.......,,,,,,,       <.,.> <.,.> <.,.> <,,,,.>
.......,,,,,,,,      <.,.> <.,.> <.,.> <,,,,,.>
.......,,,,,,,,,     <.,.> <.,.> <.,.> <,,,,,,.>
........             fail
........,            fail
........,,           fail
........,,,          fail
........,,,,         <.,.> <.,.> <.,.> <.,.>
........,,,,,        ,<..>, <.,.> <.,.> <.,.>
........,,,,,,       ,<..>, ,<..>, <.,.> <.,.>
........,,,,,,,      ,<..>, ,<..>, ,<..>, <.,.>
........,,,,,,,,     ,<..>, ,<..>, ,<..>, ,<..>,
........,,,,,,,,,    <.,.> <.,.> <.,.> <,,,.> <,,,.>
.........            fail
.........,           fail
.........,,          fail
.........,,,         fail
.........,,,,        fail
.........,,,,,       fail
.........,,,,,,      fail
.........,,,,,,,     <.,.> <.,.> <.,.> <.,.> <,,,.>
.........,,,,,,,,    <.,.> <.,.> <.,.> <.,.> <,,,,.>
.........,,,,,,,,,   <.,.> <.,.> <.,.> <.,.> <,,,,,.>

4

비 펀지, 249 218 바이트

&::00p&::00g\`-2/:20p2*-3*:30p\20g-`:!00g20g-*\30g*+:30g-v>:#,_@
"~<.,,>~~"0_v#\g03+`g050`\0:-g02\p05:-\*2g02:-*/6+3g03p04<^
$"<">:#,_40p>:!#|_3-0" >.,,"40g3>3g#<\#-:#1_
0" ,>..<,">:#,_$>:!#|_1-
#@_1-0" >.,.<">:#,_$>:!

온라인으로 사용해보십시오!

이것은 현재의 알고리즘을 기반으로 루비 응답 하여 레벨 강 세인트 골프와 내 원래의 솔루션에 비해 크기가 크게 감소에 대한 더 큰 범위를 제공.


2

C # 6, 321303 바이트

using System.Linq;string F(int x,int y)=>S(x,y)??"~<.,,>~~";string S(int x,int y)=>x<0|y<0?null:y<1?x<1?"":null:y*3>x?S(x-1,y-2)!=null?S(x-1,y-2)+"<.,.> ":S(x-2,y-2)!=null?S(x-2,y-2)+",<..>, ":null:string.Concat(new int[y].Select((_,k)=>k<1?C(x-y*3+3):C(3)));string C(int x)=>$"<{new string(',',x)}.> ";

전화하십시오 F(). 다른 두 기능은 도우미입니다. repl.it 데모

// Coalesce failed combinations with commaleon
string F(int x,int y)=>S(x,y)??"~<.,,>~~";
// Get successful combination or null
string S(int x,int y)=>
    x<0|y<0
        // Fail: Out of range
        ?null
        :y<1
            ?x<1
                // Successful: All commas and periods accounted for
                ?""
                // Fail: Not enough periods for commas
                :null
            :y*3>x
                // Not all commapillars
                ?S(x-1,y-2)!=null
                    // Try koala
                    ?S(x-1,y-2)+"<.,.> "
                    // Try crab
                    :S(x-2,y-2)!=null
                        ?S(x-2,y-2)+",<..>, "
                        // Epic fail
                        :null
                // All commapillars
                :string.Concat(new int[y].Select((_,k)=>k<1
                    // This commapillar takes most of commas
                    ?C(x-y*3+3)
                    // The rest each takes 3
                    :C(3)));
// Generate single commapillar
string C(int x)=>$"<{new string(',',x)}.> ";
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.