세 개의 정수를 가져 와서 정수 및 알파벳 문자 목록을 반환하는 함수


10

도전

우리는 세 개의 양의 정수 가지고 a, bc입력으로한다. 이 정수를 사용하여 먼저 [0, c]단계 (양쪽에 포함) 의 순서 로 단계를 b만듭니다. 예를 들어의 a=4, b=2, c=100경우 시퀀스는입니다 [0,2,4,...,96,98,100].

으로 나눌 수있는이 순서의 모든 숫자에 a대해 문자 'a'로 시작하고 'z'에 도달 한 후 'a'로 줄 바꿈하여 소문자 알파벳의 다음 문자로 바꿉니다.

예:

입력 : a=4, b=2, c=100
출력 :a2b6c10d14e18f22g26h30i34j38k42l46m50n54o58p62q66r70s74t78u82v86w90x94y98z

도전 규칙 :

  • 당신은 그 가정 할 수있다 a, b그리고 c, 경우에만 양의 정수입니다 b ≤ a ≤ c.
  • a는의 배수 라고 가정 할 수 있습니다 b.
  • c는로 나눌 수 있다고 가정 할 수 있습니다 b.
  • 선호되는 출력은 위와 같이 단일 연결된 문자열이지만 목록 / 배열도 허용됩니다.

테스트 사례 :

Input: a=4, b=2, c=100
Output:
a2b6c10d14e18f22g26h30i34j38k42l46m50n54o58p62q66r70s74t78u82v86w90x94y98z

Input: a=9, b=3, c=174
Output:
a36b1215c2124d3033e3942f4851g5760h6669i7578j8487k9396l102105m111114n120123o129132p138141q147150r156159s165168t174

Input: a=10, b=2, c=50
Output:
a2468b12141618c22242628d32343638e42444648f

Input: a=25, b=1, c=25
Output:
a123456789101112131415161718192021222324b

Input: a=6, b=6, c=48
Output:
abcdefghi

Input: a=6, b=3, c=48
Output: a3b9c15d21e27f33g39h45i

Input: a=2, b=1, c=100
Output: a1b3c5d7e9f11g13h15i17j19k21l23m25n27o29p31q33r35s37t39u41v43w45x47y49z51a53b55c57d59e61f63g65h67i69j71k73l75m77n79o81p83q85r87s89t91u93v95w97x99y

PHP 에서 답을 찾고 싶습니다만 ,이 도전은 모든 언어에 열려 있습니다. 이것은 이므로 답은 가능한 짧아야합니다. 기능 / 프로그램에는 표준 규칙이 적용 되며 기본 허점은 금지되어 있습니다.


1
또한 사용을 고려하십시오 샌드 박스 를 질문에 대한 조언과 피드백을 메인에 게시하기 전에 .
조 왕

3
PPCG에 오신 것을 환영합니다! 나는 도전 자체를 좋아하지만 설명에는 많은 것이 부족합니다. @JoKing이 언급했듯이 가장 선호되는 태그 는 어디에서나 [codegolf]가장 중요한 태그 입니다 . 또한 JoKing에서 언급 했으므로 언어별로 지정하지 않는 것이 좋습니다. 대신 모든 언어로 여는 것이 가장 좋습니다. 챌린지 자체에 대해서는 조금 더 지정하고 몇 가지 테스트 사례를 추가하십시오. 예제를 기반으로 범위가[0,c] 인 있지만 예제를 보지 않고도 명확해야합니다.
Kevin Cruijssen

1
제목을 좀 더 설명적인 것으로 바꾸는 것만으로도 좋습니다.
Jo King

1
나는 다시 도전 할 수 있도록 당신의 도전을 고칠 자유를 가졌습니다. 다음에 샌드 박스를 사용하여 메인에 게시하기 전에 도전을 완수하십시오. 내가 편집 한 내용을 살펴보고 향후 과제에 대해이 내용을 알도록하십시오. 잘못된 것이 있거나 잘못 해석 한 경우 자유롭게 다시 편집하십시오.
Kevin Cruijssen

5
테스트 사례가에서 'z'까지 감싸지는 것은 없습니다 'a'. 포함 된 것을 포함시켜 주시겠습니까?
OOBalance

답변:


8

PHP , 67 바이트

우선, 멋진 도전을 게시 해 주셔서 감사합니다! 나는 정말로 그것을 해결하는 것을 즐겼다 :) 자, 여기 내 67 바이트 솔루션이있다 :

<?for(;$i<=($p=$argv)[3];$i+=$p[2])echo$i%$p[1]?$i:chr($l++%26+97);

그것을 실행하려면 :

php -n <filename> {a} {b} {c}

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


다음은 동일한 솔루션이며 설명 주석이 있습니다.

$a      = $argv[1];
$b      = $argv[2];
$c      = $argv[3];
$letter = 'a';
for ($i = 0; $i <= $c; $i += $b) {
    if ($i % $a) { // If $i is divisible by $a, the modulo (%) operator will return a remainder of 0, which PHP sees as a falsey value.
        echo $i;
    } else {
        $letter++;
        $letter %= 26; // Wrap $letter around to `a` after it gets to `z`.
        echo chr($letter + 97); // Use PHP's chr function to get the character. 97 is the index of `a`. http://php.net/manual/en/function.chr.php
    }
}

나는 60 바이트 솔루션을했지만 랩을하지 않습니다 :(

<?for($l=a;$i<=($p=$argv)[3];$i+=$p[2])echo$i%$p[1]?$i:$l++;

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


6

Japt , 15 바이트

;0ôWV £CgX/U ªX

온라인으로 테스트하십시오!

설명

;0ôWV £CgX/U ªX    Implicit: U, V, W = inputs
;                  Reset C to the lowercase alphabet (among other variable resets).
 0ôWV              Create the inclusive range [0...W], using a step of V.
      £            Map each item X by this function:
       CgX/U         Get the character at index (X / U) in the lowercase alphabet. If X is
                     not divisible by U, this is a non-integer and the result is undefined.
             ªX      In this case (literally, if falsy), replace it with X.
                   Implicit: output result of last expression

1
순서대로 입력을받는 14 바이트c,a,b .
얽히고 설킨

5

R , 65 63 바이트

function(a,b,c,z=seq(0,c,b)){z[x]=rep(letters,sum(x<-!z%%a));z}

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

JayCe 덕분에 2 바이트가 절약되었습니다!

R이 숫자를 문자열로 강제 변환하므로 문자열 목록을 반환합니다. 인쇄하려면 후행을 z로 바꾸십시오 cat(z,sep="").


l=필요하지 않은 것 같습니다 . TIO
JayCe

물론 @JayCe 아. 너무 많은 값을 생성하지 못하게하기 위해 거기에 넣었지만 그렇게하는 것은 골치 아픈 일이 아닙니다!
주세페

5

클로저, 84 79 77 바이트

#(for[i(range 0(inc %3)%2)](if(=(mod i %1)0)(char(+(mod(/ i %1)26)(int \a)))i))

작은 사랑을주는 Livin

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

(@NikoNyrh 덕분에 7 바이트!)


PPCG에 오신 것을 환영합니다! 함수를 호출하고 결과를 온라인 으로 시도 하기 위해 추가해야 할 사항을 알고 있습니까?
Laikoni

1
@Laikoni 내 게시물에 "온라인으로 사용해보기"를 추가했습니다. 내 코드의 오류도 수정 했으므로 알림을 보내 주셔서 감사합니다!
Lispy Louie

좋은 일 :) 외부 기능을 통해 내부 기능 을 표현하는 데 #(...)사용 하면 3 바이트를 절약 할 수 있습니다 fn. 당신이 그것에있는 동안 당신은 construct로 대체 map하고 for4 바이트를 더 저장할 수 있습니다 .
NikoNyrh

@NikoNyrh 좋은 관찰!
Lispy Louie

그리고 %1에 의해 대체 될 수 있습니다 %)
NikoNyrh

3

자바 10, 93 83 바이트

(a,b,c)->{var r="";for(int i=0;i<=c;i+=b)r+=i%a<1?(char)(i/a%26+97):i+"";return r;}

여기에서 온라인으로 사용해보십시오 . 10 바이트 골프를위한 Scrooble 에게 감사드립니다 .

언 골프 드 :

(a, b, c) -> { // lambda taking 3 integer arguments and returning a String
    var r = ""; // we build the result String in steps
    for(int i = 0; i <= c; i+=b) // loop over the range [0,c] in steps of b
        r += i % a < 1 ? (char) (i / a % 26 + 97) : "" + i; // if i is a multiple of a, append the next letter to r as a char, else append i
    return r; // return the result
}

3

펄 6 ,  60  50 바이트

->\a,\b,\c{[~] (0,b...c).map:{$_%a??$_!!('a'..'z')[$++%26]}}

그것을 테스트

{$^a;(0,$^b...$^c).map:{$_%$a??$_!!chr 97+$++%26}}

그것을 테스트

{  # bare block lambda with parameters $a,$b,$c

  $^a; # declare param $a, but don't use it
       # (so $a can be used in the inner block)

  (
    0, $^b ... $^c  # the base sequence

  ).map:            # for each of those values
  {
    $_ % $a         # is it not divisible by `$a` ( shorter than `%%` )

    ??  $_          # if it isn't divisible just return it

    !!              # otherwise return the following

        chr         # a character from the following number

          97 +      # 'a'.ord +
          $++       # self incrementing value (starts at 0)
          % 26      # wrap around back to 'a'
  }
}

->\a,\b,\cuse use $^aetc 등 을 사용하여 바이트를 잃고 있습니다. chr 97+$++%26보다 약간 짧습니다 ("a".."z")[$++%26]. 마지막으로, 챌린지에는 필요하지 않으므로 연결을 생략 할 수 있습니다. 총 10 바이트를 절약 할 수 있으며, 50
Ramillies


3

05AB1E , 17 15 바이트

/ݹ*εD³ÖiA¾è¼}?

@MagicOctopusUrn 덕분에 -2 바이트 .

순서대로 입력을 bca받습니다.

온라인으로 시도 하거나 모든 테스트 사례를 확인하십시오 .

설명:

/               # Divide the second (implicit) input `c` by the first (implicit) input `b`
                #  i.e. 2 and 100 → 50
 Ý              # Take the range [0, `divided_c`]
                #  i.e. 50 → [0,1,2,...,48,49,50]
  ¹*            # Multiply it with the first input `b`
                #  [0,1,2,...,48,49,50] → [0,2,4,...,96,98,100]
    εD          # For-each in this list:
      ³Öi       #  If the current number is divisible by the third input `a`:
                #   i.e. 8 and `a=4` → 1 (truthy)
                #   i.e. 10 and `a=4` → 0 (falsey)
         A      #   Push the lowercase alphabet
          ¾     #   Push the counter_variable (which starts at 0 by default)
           è    #   Index the alphabet with this counter_variable (wraps around by default)
         ¼      #   Increase the counter_variable by 1
            }   #  Close the if
             ?  #  Output without new-line
                #  (If the if was not entered, the input is implicitly output as else-case)

1
이것은 작동하는 것 같지만 어떤 언어입니까? 그리고 그것을 PHP 함수로 나누고 어떻게 할 수 있습니까?
Mochesane

1
언어는 05AB1E입니다. github에 대한 링크이며 내 게시물의 제목에 있습니다. 그리고이 언어가 PHP와 완전히 다른 것을 두려워합니다. 05AB1E는 코드 골프를 위해 디자인 된 반면, PHP는 웹 개발을위한 하이퍼 텍스트 프리 프로세서입니다. 챌린지 설명을 편집하여 모든 언어에서 사용할 수 있도록 조언하지만 PHP 답변을 선호한다고 언급합니다. 다시 열면 PHP에 능숙한 사람이 코드 골프 답변을 할 수 있다고 확신합니다. 도전 과제를 편집 / 수정하는 데 도움이 필요하면 알려주십시오.
케빈 크루이 센

1
/ݹ*vyD³ÖiA¾è¼}?16입니다. y대신을 사용 하는 대신을 복제합니다 . 알파벳 문자 ë를 입력 ?하면 무시됩니다. 실제로 /ݹ*εD³ÖiA¾è¼}?출력 배열을 덮어 쓰므로 현재 승자> :)를 묶을 수 있기 때문에 15도 작동합니다.
Magic Octopus Urn

트윗 담아 가기 :) 암시적인 것을 잊었다 ë.
케빈 크루이 센



2

CJam , 23 바이트

q~),@/f%{0W):W26%'a+t}%

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

q~                              a b c
  ),                            a b [0…c]
    @/                          b [[0…a-1] [a…2a-1] ... […c]]
      f%                        [[0 b…a-b] [a a+b…2a-b] ... […c]]

        {0          t}%         Replace each first with:
          W):W26%'a+            ++W % 26 + 'a'

입력을 읽고 b a c삭제하는 @것은 22 바이트입니다 (유효한지 확실하지 않음).


2

파이썬 2 , 65 63 바이트

OP가 허용한다고 말했기 때문에 목록을 반환합니다.

lambda a,b,c:[[chr(n/a%26+97),n][n%a>0]for n in range(0,c+1,b)]

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


창작 과정에서 사용 된 이전 버전 (뒤로 작업) :

84 바이트

생성기 표현식을 리턴합니다.

def f(a,b,c,x=0):
    for n in range(0,c+1,b):yield n%a and n or chr(x%26+97);x+=n%a==0

111 바이트

알파벳 생성기를 사용하고 목록을 반환합니다.

def g(x=0):
    while 1:yield chr(x%26+97);x+=1
A=g()
f=lambda a,b,c:[n%a and n or next(A)for n in range(0,c+1,b)]

아 맞아 내가 사용할 때 옵션이 아니 었습니다 next. 좋은.
mbomb007


1

Excel VBA, 76 바이트

입력 취 a, bc에서 [A1], [B1][C1]는 각각 다음 VBE 실행 창으로 출력한다.

For i=0To[C1]Step[B1]:j=i Mod[A1]:?IIf(j,i,Chr(97+k)):k=(k-(j=0))Mod 26:Next


1

코 틀린, 80 79 바이트

OOBalance 덕분에 -1 !

{a,b,c->var s="";for(x in 0..c step b)s+=if(x%a>0)x else(x/a%26+97).toChar();s}

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

코 틀린에서 처음으로 골프를 타거나 다른 일을한다! 아마 향상 될 수 있습니다.

이 Java 답변 과 매우 유사하며 작성 후 깨달았습니다. return거의 같은 점수를 위해 삼진을 절약하십시오 .


많지 않지만-뒤에 공백을 생략하여 -1 바이트 else입니다.
OOBalance

1

Python3 - 111 , 101 , 98 , 94 바이트

q=iter(map(chr,range(97,123)))
[next(q)if x%a==0else x for x in[y*b for y in range((c+b)//b)]]

아마도 가장 짧지는 않지만 개선의 여지가 있습니다.

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


1
몇 개의 공백을 제거 할 수 있습니다next(q)if x%a==0else x for x in[y*b
mbomb007

@ mbomb007 좋은 전화, 당신이 그렇게 할 수 있다는 것을 몰랐다. 감사!
Braeden Smith

1
당신은 볼하실 수 있습니다 파이썬에서 골프를위한 팁
mbomb007

1

, 22 바이트

NθNη⭆Φ⊕N¬﹪ιη⎇﹪ιθι§β÷ιθ

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 설명:

Nθ                      Input `a`
  Nη                    Input `b`
       N                Third input (`c`)
      ⊕                 Increment
     Φ                  Filter over implicit range
           η            `b`
          ι             Current value
         ﹪              Modulo
        ¬               Not (i.e. divisible)
    ⭆                   Map over result and join
              ι         Current value
               θ        `a`
             ﹪          Modulo
            ⎇           Ternary
                ι       Current value
                    ι   Current value
                     θ  `a`
                   ÷    Divide
                  β     Predefined lowercase alphabet
                 §      Cyclically index

1

하스켈 , 71 69 바이트

(a#b)c=do n<-[0,b..c];[show n,[['a'..]!!mod(div n a)26]]!!(0^mod n a)

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


이전 71 바이트 :

(a#b)c=do n<-[0,b..c];last$show n:[[['a'..]!!mod(div n a)26]|mod n a<1]

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

설명:

(a#b)c=                         -- given the inputs a, b and c
  do n<-[0,b..c];               -- take n from the range from 0 to c with increments of b
  last$   :[   |mod n a<1]      -- if n is not divisible by a
       show n                   -- then use n converted to a string
            [   mod(div n a)26] -- otherwise divide n by a 
             ['a'..]!!          -- and use the character at this position in the alphabet

1

CJam , 64 63 바이트 ( ouch )

97:Y;riri:Bri\/),[{B*}*]{X\_@\%0={Yc\Y):Y'{i={97:Y;}&}{X\}?}fX;

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

설명

97:Y;                                                                 Set a variable "Y" to the ASCII value of 'a' and pop the variable from the stack
     ri                                                               Read one chunk of the input (Space-delimited)
       ri:B                                                           Set a variable "B" to the next input chunk
           ri\/                                                       Divide the next input chunk by the top value in the stack (B)
               1+                                                     Add one to make the values inclusive
                 ,                                                    Turn it into an array
                   {B*}*                                              Multiply all the array values by B
                  [     ]                                             Capture the results in an array
                         {                                   }fX      Massive for loop
                          X\_@\%0=                                    If X modulo (A value) equals zero
                                  {                   }               If condition true
                                   Yc\                                Push the character with an ASCII value of Y
                                      Y):Y                            Increase the value of Y
                                          '{i=                        If Y's value is that same as that of "{" (the character after z in ASCII)
                                              {97:Y;}                 Set Y's value back to ASCII 'a'
                                                     &                If-only flag
                                                       {  }           If condition false (from X\_@\%0=)
                                                        X\            Push X onto the stack
                                                           ?          If-else flag
                                                               ;      Pop A value from the stack

이것은 확실히 더 나아질 수 있으므로 자유롭게 참여하십시오!


변경

헬렌 은 바이트를 끊었다!

낡은: 97:Y;riri:Bri\/1+,[{B*}*]{X\_@\%0={Yc\Y):Y'{i={97:Y;}&}{X\}?}fX;
New :97:Y;riri:Bri\/),[{B*}*]{X\_@\%0={Yc\Y):Y'{i={97:Y;}&}{X\}?}fX;

변경하여 1+)우리가 바이트 차단 할 수 있습니다.



0

클로저, 117 바이트

#(loop[R""A 0 i 0](if(> i %3)R(let[?(=(mod i %)0)](recur(str R(if ?(char(+(mod A 26)97))i))(if ?(inc A)A)(+ i %2)))))

그러한 명령. : /


0

C (gcc / clang), 80 68 바이트

f(a,b,c,i){for(i=0;i<=c;i+=b)i%a?printf("%d",i):putchar(i/a%26+97);}

내 자바 답변 포트 . 여기에서 온라인으로 사용해보십시오 .


printf(L"搥挥"+!(i%a),i%a?i:i/a%26+97)대신 추천i%a?printf("%d",i):putchar(i/a%26+97)
천장 고양이


0

파이썬 2와 3-123 128 바이트

d=-1
lambda a,b,c:[s()if i%a<1else i for i in range(0,c+1,b)]
def s():global d;d=(d+1)%26;return'abcdefghijklmnopqrstuvwxyz'[d]

당신은 f=앞에 두고 lambda다음으로 전화해야 f(a,b,c)하지만 그것이 허용되는 것은 확실합니다.


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