तीन पूर्णांकों को लेने और पूर्णांकों और वर्णमाला-अक्षरों की सूची वापस करने के लिए एक फ़ंक्शन


10

चुनौती

हम तीन धनात्मक पूर्णांक ले a, bऔर cइनपुट के रूप में। इन पूर्णांकों का उपयोग करते हुए, पहले सीमा में एक अनुक्रम बनाएं [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]मैं सुझाता हूं सबसे आम है। जोकिंग द्वारा भी उल्लेख किया गया है, यह विशिष्ट भाषा बनाने की सिफारिश नहीं की गई है। इसके बजाय इसे सभी भाषाओं के लिए खोलना सबसे अच्छा है। चुनौती के रूप में, कृपया थोड़ा और निर्दिष्ट करें और कुछ और परीक्षण मामले जोड़ें। उदाहरण के आधार पर मैं देख सकता हूं कि सीमा है [0,c], लेकिन यह उदाहरण को देखे बिना स्पष्ट होना चाहिए।
केविन क्रूज़सेन

1
मुझे लगता है कि आपको बस इतना करने की ज़रूरत है कि शीर्षक को कुछ और वर्णनात्मक में बदल दिया जाए और यह अच्छा है
जो किंग

1
मैंने आपकी चुनौती को ठीक करने की स्वतंत्रता ली, ताकि इसे फिर से खोला जा सके। अगली बार मुख्य में पोस्ट करने से पहले एक चुनौती को सही करने के लिए सैंडबॉक्स का उपयोग करें। कृपया एक नज़र डालें जो मैंने संपादित किया है ताकि आप इसे भविष्य की चुनौतियों के लिए जान सकें। यदि कुछ भी गलत है या मैं किसी चीज़ की गलत व्याख्या करता हूं, तो उसे फिर से संपादित करने के लिए स्वतंत्र महसूस करें।
केविन क्रूज़सेन

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}

या इसे ऑनलाइन आज़माएं!


यहाँ एक ही समाधान ungolfed और स्पष्टीकरण टिप्पणियों के साथ है:

$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

जाप , 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

आर , 65 63 बाइट्स

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

इसे ऑनलाइन आज़माएं!

2 बाइट्स ने बचाया JayCe को धन्यवाद!

स्ट्रिंग्स की सूची लौटाता है, क्योंकि आर स्ट्रिंग्स की संख्याओं को कम करेगा। प्रिंट करने के लिए, बस के zसाथ अनुगामी बदलें cat(z,sep="")


ऐसा लगता l=है कि आवश्यकता नहीं है। TIO
JayCe

@ जयके आह। मैंने इसे कई मूल्यों को उत्पन्न करने से रोकने के लिए वहां रखा था, लेकिन ऐसा करने के लिए यह अन-गोल्फ है!
Giuseppe

5

क्लोजर, 84 79 77 बाइट्स

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

गिविन 'लिस्प थोड़ा प्यार

इसे ऑनलाइन आज़माएं!

(-7 बाइट्स @NikoNyrh को धन्यवाद!)


PPCG में आपका स्वागत है! क्या आप जानते हैं कि फ़ंक्शन को कॉल करने के लिए क्या जोड़ा जाना चाहिए और परिणाम को ऑनलाइन आज़माएं ?
लकोनी

1
@ लिकोनी मैंने अपनी पोस्ट में "ऑनलाइन प्रयास करें" जोड़ा। मैंने अपने कोड में एक त्रुटि भी ठीक की, इसलिए मुझे याद दिलाने के लिए धन्यवाद!
लिस्फी लूई

अच्छा काम :) आप 3 बाइट्स बचा सकते हैं यदि आप बाहरी कार्य को अंदर से व्यक्त #(...)करने के fnलिए उपयोग करते हैं। जब आप इस पर होते हैं तो आप निर्माण के mapसाथ बदल सकते हैं forऔर आगे 4 बाइट बचा सकते हैं ।
निकोनिरह

@NikoNyrh अच्छा अवलोकन!
लिस्बी लूई

और %1द्वारा प्रतिस्थापित किया जा सकता है %;)
निकोइरह

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 बाइट्स गोल्फ के लिए स्क्रूबल के लिए धन्यवाद ।

Ungolfed:

(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,\c: बस का उपयोग करें $^aआदि और chr 97+$++%26की तुलना में काफी कम है ("a".."z")[$++%26]। अंत में, आप सहमति को छोड़ सकते हैं क्योंकि चुनौती की आवश्यकता नहीं है। यही कारण है कि कुल में 10 बाइट्स की बचत होगी, 50 छोड़ने
Ramillies


3

05AB1E , 17 15 बाइट्स

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

-2 बाइट्स @MagicOctopusUrn को धन्यवाद ।

ऑर्डर में इनपुट लेता है 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 है। जीथब के लिए एक लिंक और मेरी पोस्ट के शीर्षक में है। और मुझे डर है कि यह भाषा PHP की तुलना में पूरी तरह से अलग है .. 05AB1E कोडगॉल्फिंग के लिए डिज़ाइन किया गया है, जबकि PHP वेब विकास के लिए एक हाइपरटेक्स्ट प्री-प्रोसेसर है। मैं चुनौती विवरण को संपादित करने और इसे सभी भाषाओं के लिए उपलब्ध कराने की सलाह दूंगा, लेकिन आप एक PHP उत्तर पसंद करते हैं। एक बार इसे फिर से खोलने के बाद मुझे यकीन है कि कोई व्यक्ति जो PHP के साथ कुशल है, वह इसके लिए एक कोड-गोल्फ उत्तर बनाने में सक्षम है। यदि आपको अपनी चुनौती को संपादित करने / तय करने में कोई मदद चाहिए तो मुझे बताएं।
केविन क्रूज़सेन

1
/ݹ*vyD³ÖiA¾è¼}?16 है, बस yका उपयोग करने के बजाय डुप्लिकेट ë, जो? अगर यह एक वर्णमाला चार धक्का अनदेखी करेंगे। दरअसल, /ݹ*εD³ÖiA¾è¼}?15 के लिए भी काम करता है, क्योंकि हम आउटपुट एरे को ओवर राइट कर रहे हैं, तो आप मौजूदा विजेता> :) को टाई कर सकते हैं।
मैजिक ऑक्टोपस Urn

@MagicOctopusUrn धन्यवाद! :) निहितार्थ के बारे में भूल गए ë
केविन क्रूज़सेन



2

सीजेएम , 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 बाइट्स

एक सूची लौटाती है, क्योंकि ओपी ने कहा है कि स्वीकार्य है।

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

PHP , 79 बाइट्स

नोट: PHP में बहुत अच्छा नहीं है

<?for(@$l=a;$i<=($p=$argv)[3];$i+=$p[2])$o.=$i%$p[1]?$i:substr($l++,-1);echo$o;

इसे ऑनलाइन आज़माएं!


पीएचपी , 84 बाइट्स

यह सिर्फ फंक्शन फॉर्मेट में कोड के समान है (चूंकि आप एक PHP उत्तर चाहते थे शायद यह आपके लिए बेहतर है)

function f($a,$b,$c,$l=a){for(;$i<=$c;$i+=$b)$o.=$i%$a?$i:substr($l++,-1);return$o;}

इसे ऑनलाइन आज़माएं!


1

एक्सेल VBA, 76 बाइट्स

ले जाता है इनपुट, a, b, और cसे [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

Kotlin, 80 79 बाइट्स

-1 OOBalance के लिए धन्यवाद !

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

इसे ऑनलाइन आज़माएं!

कोटलिन में मेरा पहली बार गोल्फ (या कुछ और) करना! शायद सुधारा जा सकता है।

इस जावा उत्तर के समान , मुझे इसे लिखने के बाद एहसास हुआ। पर सहेजें returnऔर लगभग समान स्कोर के लिए टर्नरी पर हारें।


यह अधिक नहीं है, लेकिन -1 बाइट के बाद अंतरिक्ष को छोड़ कर else
OOBalance

1

पायथन 3 - 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 अच्छी कॉल, एहसास नहीं था कि आप ऐसा कर सकते हैं। धन्यवाद!
ब्रेडन स्मिथ


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;
नया: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

सी (जीसीसी / क्लैंग), 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)
ceilingcat


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)लेकिन मुझे पूरा यकीन है कि इसकी अनुमति है।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.