3 ছাড়া গণনা করুন


45

পটভূমি

আমি যখন প্রাথমিক বিদ্যালয়ে ছিলাম তখন আমরা গণিত ক্লাসে একটি খেলা খেলতাম যা নীচে চলে।

সমস্ত বাচ্চা একটি বড় চেনাশোনাতে বসে এবং 1 থেকে শুরু করে ঘুরে ফিরে গণনা করে ।

তবে, গণনার সময় নিম্নলিখিত সংখ্যাগুলি অবশ্যই এড়িয়ে যেতে হবে:

  • সংখ্যাগুলি যা 3 এর গুণক ।
  • দশমিক প্রতিনিধিত্ব করে এমন একটি সংখ্যা 3

বাচ্চাদের প্রথম 15 সংখ্যাটি বলা উচিত

1 2 4 5 7 8 10 11 14 16 17 19 20 22 25

যখনই কারও একটি নম্বর ভুল হয়ে যায় - এমন একটি সংখ্যা বলে যা ক্রমানুসারে নেই বা এমন একটি সংখ্যা এড়িয়ে যায় - যা তাকে চেনাশোনা থেকে সরানো হয়। এখানে কেবল একটি বাচ্চা বাকি থাকবে না।

কার্য

আপনি এই খেলায় খারাপ, তাই আপনি প্রতারণার সিদ্ধান্ত নেন। এমন একটি প্রোগ্রাম বা একটি ফাংশন লিখুন যা সিকোয়েন্সের একটি সংখ্যা দেওয়া হয়, সিক্যুয়েন্সের পরবর্তী সংখ্যা গণনা করে।

আপনার প্রোগ্রামটি এমনভাবে সংখ্যক হ্যান্ডেল করতে হবে না যেগুলি আপনার ভাষার স্থানীয় সংখ্যার প্রকারটি ব্যবহার করে প্রতিনিধিত্ব করা যায় না, তবে আপনার প্রোগ্রামটি 251 ইনপুট পর্যন্ত সঠিকভাবে কাজ করে এবং আপনার অ্যালগোরিদম নির্বিচারে বড় ইনপুটগুলির জন্য কাজ করে।

ইনপুট এবং আউটপুট যে কোনও সুবিধাজনক বেস ব্যবহার করতে পারে।

যেহেতু আপনাকে আপনার কোড গোপন করতে হবে, তাই এটি যথাসম্ভব সংক্ষিপ্ত হতে হবে। আসলে, এটি , তাই বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী।

পরীক্ষার মামলা

  1 ->   2
  2 ->   4
 11 ->  14
 22 ->  25
 29 ->  40
251 -> 254

5
আমার মনে হচ্ছে আমাদের মতো চ্যালেঞ্জ ছিল ...
কনর ও'ব্রায়েন

5
7আমি যখন এটি খেলতাম তখন সর্বদা এটি এড়ানো হত তবে আপনি পরের নং লাইনে না গিয়ে বরং অন্য কিছু বলতে চাইবেন।
mbomb007

12
@ mbomb007: আমি যখন এটি খেলি তখন আপনাকে চেনাশোনা থেকে সরানো হবে না। পরিবর্তে, আপনি পান করবেন। তবে এটি প্রাথমিক বিদ্যালয়ে ছিল না। যাইহোক, 80 এরও বেশি বয়সী হওয়া অসম্ভব, বিশেষত প্রথম ঘন্টা পরে।
টমাসজ


4
@ এমবিম্ব ২০০7: এটি আপনি যা পান করছেন তার প্রমাণের উপর নির্ভর করবে depend
টমাসজ

উত্তর:


21

Brachylog , 10 বাইট

<.='e3:I'*

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

(?)<.                Output > Input
    .=               Assign a value to the Output
    . 'e3            3 cannot be an element of the Output (i.e. one of its digits)
        3:I'*(.)     There is no I such that 3*I = Output

3
এই অনেক বিষয়ে উত্তর Brachylog মধ্যে :) এত সুন্দর
Emigna

3
@ এমিগনা এটি প্রায়শই যথেষ্ট পরিমাণে গোল্ফ বোধ করেন না কারণ এটি মূলত সরাসরি চ্যালেঞ্জকে বর্ণনা করে। সেই ভাষায় প্রচুর উত্তরের ক্ষেত্রে এটি :)
ফ্যাটালাইজ করুন

14

জাভাস্ক্রিপ্ট (ES6), 30 বাইট

f=n=>++n%3*!/3/.test(n)?n:f(n)

সূচক 2 এবং সূচক 3 উভয়ই এই ফাংশনটির সাথে 4 নম্বরটি ফিরিয়ে দেয়
nl-x

1
@ এনএল-এক্স হ্যাঁ, কারণ 4 এবং 2 এবং 3 উভয়ের পরে ক্রমের পরবর্তী সংখ্যা number এটি সূচকযুক্ত নয়; এটি কেবল ক্রমের পরবর্তী সংখ্যা।
ইটিএইচ প্রোডাকশনস

আমি মনে করি আমি এটি বুঝতে শুরু করছি ... আমার খারাপ
nl-x

8

জে, 24 বাইট

3(]0&({$:)~e.&":+.0=|)>:

সরল-ফরোয়ার্ড পন্থা যা নিয়ম অনুসারে বৈধ যে পরবর্তী সংখ্যাটি না পাওয়া পর্যন্ত ইনপুট এন থেকে কেবল পুনরাবৃত্ত হয়।

ফরম পাঁচটি স্মাইলির, $:, :), 0=, =|, এবং >:

ব্যবহার

   f =: 3(]0&({$:)~e.&":+.0=|)>:
   (,.f"0) 1 2 11 22 29 251
  1   2
  2   4
 11  14
 22  25
 29  40
251 254

ব্যাখ্যা

3(]0&({$:)~e.&":+.0=|)>:  Input: integer n
                      >:  Increment n
3                         The constant 3
 (                   )    Operate dyadically with 3 (LHS) and n+1 (RHS)
                    |       Take (n+1) mod 3
                  0=        Test if equal to 0
             &":            Format both 3 and n+1 as a string
           e.               Test if it contains '3' in str(n+1)
                +.          Logical OR the results from those two tests
  ]                         Right identity, gets n+1
   0&(   )~                 If the result from logical OR is true
       $:                     Call recursively on n+1
      {                       Return that as the result
                            Else act as identity function and return n+1

ঠিক আছে, জে সম্ভবত সম্ভবত সবচেয়ে হাসি-প্রবণ প্রোগ্রামিং ভাষা।
অ্যাডম

8

পাইথন 2, 73 66 43 বাইট

Xnor আমাকে 2 ভেরিয়েবল ব্যবহার করে নির্বোধ হওয়ার কথা বলার জন্য ধন্যবাদ, এবং মিচ শোয়ার্জকেও ধন্যবাদ।

x=~input()
while'3'[:x%3]in`x`:x-=1
print-x

1
দ্বি-পরিবর্তনশীল আপডেটটি অনেক জটিল দেখাচ্ছে too আমার মনে হয় আপনার দরকার আছে x=input()+1 while'3'[:x%3]in`x`:x+=1 print x
xnor

@ এক্সনর, ওহ হ্যাঁ আমাকে নির্বোধ আমি জানি না কেন আমি এটি করেছি
ড্যানিয়েল

x=~input()যোগ করে পরিবর্তে বিয়োগ করে এবং মুদ্রণের মাধ্যমে শুরু করে একটি বাইট উন্নতি -x
মিচ শোয়ার্টজ

1
@ আর্টায়ার এই সম্পাদনায় প্রবর্তিত 3 টি ভুলের মধ্যে 1 টিই।
মিচ শোয়ার্টজ

1
@ ডপপ্প বর্তমান সংশোধন (স্থান ব্যতীত) 43 বাইট? mothereff.in/…
আর্টিয়ার


7

পার্ল, 19 বাইট

18 বাইট কোড +1 এর জন্য -p

++$_%3&&!/3/||redo

ব্যবহার

perl -pe '++$_%3&&!/3/||redo' <<< 8
10

perl -pe '++$_%3&&!/3/||redo' <<< 11
14

1
@ dan1111 এটি পার্ল, আপনি কী আশা করেছিলেন? নির্মলতা?
এরিক আউটগল্ফার

1
@ এরিকথগল্ফার কি? এটি "স্ব-ডকুমেন্টিং কোড" এর খুব সংজ্ঞা।

@ dan1111 দেখে মনে হচ্ছে আপনি পার্লকে চেনেন। পার্ল বিখ্যাত অদ্ভুততার কারণে কীভাবে কাজ করে সে সম্পর্কে আমার কোনও ধারণা নেই।
এরিক আউটগল্ফার

@ dan1111 ধন্যবাদ! এটা কত সংক্ষিপ্ত পরিণত সঙ্গে বেশ খুশি!
ডম হেস্টিংস

1
@ ডমহাস্টিংস ওয়েল, পিপিসিগিতে আমরা পার্লকে অদ্ভুততার শীর্ষ স্তর হিসাবে এবং জেলি / অ্যাকচুয়ালি / ও 5 এবি 1 ই কে জগাখিচির শীর্ষ স্তর হিসাবে গ্রহণ করি। দেখে মনে হচ্ছে আপনি তখন এই চ্যালেঞ্জটি কখনও দেখেন নি :)
এরিক দ্য আউটগোল্ফার

6

জাভা 8, 57 56 55 50 বাইট

1 বাইটের জন্য @ নাম্বারকনটকে ধন্যবাদ 5 কেটের ক্রুইজসেন কে ধন্যবাদ 5 বাইটের জন্য

i->{for(;++i%3<1|(i+"").contains("3"););return i;}

এটা একটা Function<Integer, Integer>

ব্যাখ্যা

নিষ্পাপ বাস্তবায়ন যা এটি গ্রহণযোগ্য সংখ্যায় না পৌঁছানো পর্যন্ত কেবল বৃদ্ধি করে ments

পরীক্ষা ক্লাস

public class CodeGolf {

    public static void main(String[] args) {
        Function<Integer, Integer> countingGame = i->{for(;++i%3<1|(i+"").contains("3"););return i;};
        int val = 1;
        for (int i = 0; i < 10; i++) {
            System.out.print(val + " ");
            val = countingGame.apply(val);
        }
    }

}

পরীক্ষার শ্রেণীর ফলাফল:

1 2 4 5 7 8 10 11 14 16

2
আপনি এর |পরিবর্তে ব্যবহার করতে পারেন||
নম্বরের নট

1
@ নাম্বারকনোট আমার কোনও ধারণা নেই যে বিটওয়াইজ অপারেটররা কিছু প্রসঙ্গে লজিক্যাল হিসাবে কাজ করেছে! ধন্যবাদ!
সকরাটিক ফিনিক্স

1
কেন do-while? i->{for(;++i%3<1|(i+"").contains("3"););return i;}
লুফের

@KevinCruijssen ওয়েল ... আমি তুলনা চিন্তা whileএবং do-whileতাঁদের উভয়েরই আমাকে একই স্কোর দিয়েছেন, কিন্তু আমি পথ পছন্দ do-whileলাগছিল ... আমি একটি ব্যবহার ভাবিনি forলুপ ... ধন্যবাদ!
সকরাটিক ফিনিক্স

5

জাপট, 18 বাইট

°U%3*!Us f'3 ?U:ßU

এটি অনলাইনে পরীক্ষা করুন

আমি অবশেষে ব্যবহার করার সুযোগ পেয়েছি ß:-)

কিভাবে এটা কাজ করে

                    // Implicit: U = input integer
°U%3                // Increment U, and take its modulo by 3.
     !Us f'3        // Take all matches of /3/ in the number, then take logical NOT.
                    // This returns true if the number does not contain a 3.
    *               // Multiply. Returns 0 if U%3 === 0  or the number contains a 3.
             ?U     // If this is truthy (non-zero), return U.
               :ßU  // Otherwise, return the result of running the program again on U.
                    // Implicit: output last expression

5

পাওয়ারশেল ভি 2 +, 46 বাইট

for($a=$args[0]+1;$a-match3-or!($a%3)){$a++}$a

ইনপুট নেয় $args[0], যোগ করে 1, সংরক্ষণ করে $a, একটি forলুপ শুরু করে । শর্তসাপেক্ষে লুপটি চলতে থাকে যখন হয় $a-match3(রেজেক্স ম্যাচ) -or $a%3শূন্য হয় ( !যার মধ্যে হয় 1)। লুপটি কেবল বৃদ্ধি করে $a++। লুপের শেষে, আমরা কেবল $aপাইপলাইনে রাখি এবং Write-Outputপ্রোগ্রামের সমাপ্তির সাথে অন্তর্নিহিত মাধ্যমে আউটপুট ঘটে।

উদাহরণ

PS C:\Tools\Scripts\golfing> 1,2,11,22,29,33,102,251,254|%{"$_ --> "+(.\count-without-three.ps1 $_)}
1 --> 2
2 --> 4
11 --> 14
22 --> 25
29 --> 40
33 --> 40
102 --> 104
251 --> 254
254 --> 256

4

আর, 46 বাইট

n=scan()+1;while(!n%%3|grepl(3,n))n=n+1;cat(n)

আমি মনে করি যে স্ট্যান্ডআউটে মুদ্রণের পরিবর্তে কোনও মান ফেরত দেওয়া অনুমোদিত, সুতরাং আপনি কেবলমাত্র nপরিবর্তে 5 বাইট সংরক্ষণ করতে পারবেন cat(n)
rturnbull

4

পাইথন 2, 49 44 42 বাইট

f=lambda x:'3'[:~x%3]in`~x`and f(x+1)or-~x

অন্যান্য পাইথন এন্ট্রি এটি মারায় (সম্পাদনা করুন: আর কোনও নয় :- ডি), তবে আমি এটি পোস্ট করেছি কারণ আমি বরং এটির পুনরাবৃত্তি পদ্ধতির পছন্দ করি। আমাকে এই খাটো করতে সাহায্য করার জন্য মিচ শোয়ার্জ এবং এরিক গল্ফারকে ধন্যবাদ।


1
আপনি পাইথন 2 এটা করতে পারেন: f=lambda x:f(x+1)if x%3>1or'3'in`x+1`else-~x। আপনি পাইথন 3 রাখতে চান, তাহলে আপনি গলফ স্থায়ী হতে পারে x+1জন্য -~xএবং স্থান মুছে ফেলুন।
এরিক আউটগল্ফার

@ এরিক্থে গল্ফার ধন্যবাদ! আমি এটি পাইথন 2 এ পরিবর্তন করব, কারণ এটি দীর্ঘতর হবে।
0WJYxW9FMN

42 এস: f=lambda x:'3'[:~x%3]in`~x`and f(x+1)or-~xএবংf=lambda x:f(x+1)if'3'[:~x%3]in`~x`else-~x
মিচ শোয়ার্জ

3

লুয়া, 58 বাইট

i=...+1while(i%3==0or(i..""):find"3")do i=i+1 end print(i)

3

পাইকে, 13 বাইট

Whii3%!3`i`{|

এখানে চেষ্টা করুন!

              - i = input
W             - do:
 hi           -  i += 1
   i3%!       -    not (i % 3)
            | -   ^ or V
       3`i`{  -    "3" in str(i)
              - while ^

1
প্রথমে আমি যদিও whileএটি শুরুতে বলেছি ।
কনর ও'ব্রায়েন

আপনি যদি এটি এক নজরে দেখেন তবে আমি দেখতে পাচ্ছি
ব্লু

3

সি #, 56 , 51 বাইট।

এটি একটি সি # উত্তরের জন্য আশ্চর্যজনকভাবে সংক্ষিপ্ত!

x=>{while(++x%3<1|(x+"").Contains("3"));return x;};

আপনি t=x=>(++x)%3<1|(x+"").Contains("3")?t(x):x; ভিজ্যুয়াল স্টুডিওতে এটি পুনরাবৃত্ত করে তুললে আপনি এটিকে 43 এ নামতে পারেন , আপনার কেবলমাত্র ভেরিয়েবলটি সংজ্ঞায়িত করতে হবে এবং এটিকে নালায় সেট করতে হবে Func<int, int> t = null;এবং তারপরে নিম্নলিখিত লাইনে পুনরাবৃত্তি ফাংশনটি সংজ্ঞায়িত করতে হবে।
Grax32

সমস্যাটি হ'ল আমি যদি এটি পুনরাবৃত্ত করতে পারি তবে আমি তখন ফাংশন এবং সংজ্ঞা টাইপ করতে হবে।
মরগান থ্র্যাপ

এই নির্দেশিকা দেখতে আমি কোথাও যেতে পারি? আমি সি # গল্ফিং এখানে বিভ্রান্ত দেখতে পাচ্ছি।
Grax32

@ গ্র্যাক্স মূলত, কোন পুনরাবৃত্ত ক্রিয়াকলাপের ক্ষেত্রে কোনও নামের জন্য অ্যাসাইনমেন্ট ব্যতীত কোড চালানোর জন্য আপনার প্রয়োজনীয় কোডগুলি অন্তর্ভুক্ত করতে হবে। দুর্ভাগ্যক্রমে আপনি কোথায় গাইডলাইনসের একটি নলিত সেট পাবেন তা আমি জানি না।
মরগান থ্রাপ

@ মরগানথ্র্যাপ দয়া করে আমার 49 # বাইটে পুনরাবৃত্তি সহ উত্তরটি দেখুন>
লী

3

হাস্কেল, 50 48 বাইট

f n=[x|x<-[n..],mod x 3>0,notElem '3'$show x]!!1

আইডিয়নে চেষ্টা করে দেখুন। @ চার্লি হার্ডিংয়ের জন্য 2 বাইট সংরক্ষণ করা হয়েছে ।

বিকল্প: (50 বাইট)

g=f.(+1)
f n|mod n 3<1||(elem '3'.show)n=g n|1<3=n

1
এছাড়াও 50 বাইট: until(\x->mod x 3>0&&notElem '3'(show x))succ.succ
নিমি

3

পাইথ, 11 বাইট

f&-I`T3%T3h

এটি অনলাইনে ব্যবহার করে দেখুন: বিক্ষোভ বা পরীক্ষার স্যুট

ব্যাখ্যা:

f&-I`T3%T3hQ   implicit Q at the end
f         hQ   find the smallest integer T >= input + 1 which fulfills:
  -I`T3           T is invariant under removing the digit 3
 &                and
       %T3        T mod 3 leaves a positive remainder


2

রুবি, 47 বাইট

i=gets.to_i;i while(i+=1)%3==0||"#{i}"=~/3/;p i

আমি সত্যিই মনে করি এটি আরও গল্ফ করা যেতে পারে।


আপনি iপরিবর্তে ব্যবহার করতে পারেন"#{i}"
এমএমএইচএমডে

2

এমএটিএল , 14 বাইট

`Qtt3\wV51-hA~

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

`       % Do...while
  Q     %   Add 1. Takes input implicitly in the first iteration
  tt    %   Duplicate twice
  3\    %   Modulo 3
  wV    %   Swap, string representation
  51-   %   Subtract 51, which is ASCII for '3'
  h     %   Concatenate
  A~    %   True if any result was 0. That indicates that the number
        %   was a multiple of 3 or had some '3' digit; and thus a 
        %   new iteration is needed

2

ল্যাবরেথ , 117 102 বাইট

?       """""""""""_
):_3    (         0/{!@
;  %;:}_';:_3-_10 1
"  1            %;_
""""_""""""""{;;'

এটি অনলাইন চেষ্টা করুন!

ল্যাবরেথ একটি দ্বি-মাত্রিক, স্ট্যাক-ভিত্তিক প্রোগ্রামিং ভাষা এবং জংশনে, দিকটি স্ট্যাকের শীর্ষ দ্বারা নির্ধারিত হয় (ধনাত্মক ডানদিকে যায়, নেতিবাচক বামে যায়, শূন্য সরল যায়)। এই প্রোগ্রামগুলিতে দুটি প্রধান লুপ রয়েছে। প্রথমটি পূর্ণসংখ্যার ইনপুটটি 3 এবং বর্ধিত হয় যদি 0 হয় তবে দ্বিতীয়টি বারবার শেষ সংখ্যাটি 3 (3 কে বিয়োগ করে এবং 10 দ্বারা সংশোধন করে) পরীক্ষা করে এবং তারপরে একটি নতুন শেষ সংখ্যা পেতে 10 দ্বারা বিভাজক হয়।


2

পিএইচপি, 60 55 54 46 বাইট

কয়েকটি বাইট বন্ধ করে দেওয়ার জন্য @ ব্যবহারকারী59178 কে ধন্যবাদ, @ বাইটের জন্য অ্যালেক্সহাউয়ানস্কি, আরও কয়েকটি বাইটের জন্য @ টাইটাস

for(;strstr($i=++$argv[1],51)|$i%3<1;);echo$i;

কমান্ড লাইন থেকে কল করা -r। সংখ্যাটি 3 এর একাধিক হওয়ার সময় লুপ হয় বা এর সংখ্যাগুলিতে 3 থাকে Na


1
কোনও প্রোগ্রামের পরিবর্তে কমান্ড লাইন থেকে ইনপুট নেওয়ার জন্য একটি প্রোগ্রাম ব্যবহার করে আপনি 7 বাইট সংরক্ষণ করতে পারেন: for($i=$argv[1];!(++$i%3)|strpos(" $i",'3'););echo$i;এটি $iব্যবহার করার সময়ও বরাদ্দ দিয়ে আরও ভাল করা সম্ভব ।
ব্যবহারকারী59178

@ ব্যবহারকারী59178 আমি ধরে নিয়েছি ফাংশনটি to i
জ্যান্সারহাল

ইনপুট এবং আউটপুট কীভাবে সঠিক জিনিস দেওয়া এবং গ্রহণ করা হয় ততক্ষণ বেশিরভাগ সময় প্রশ্নগুলি বেশ নমনীয়। এছাড়াও, অন্যান্য ভাষায় উত্তরগুলি খুঁজছেন, বেশিরভাগ স্টাডাউটে মুদ্রণ করতে পছন্দ করুন।
ব্যবহারকারী59178

এর সাথে বাইট সংরক্ষণ করুনstrpos(_.$i,'3')
অ্যালেক্স হাওয়ানস্কি

সঙ্গে এক বাইট সংরক্ষণ %3<1, সঙ্গে এক 51পরিবর্তে '3', সঙ্গে আরো দুটি strstr($i)পরিবর্তে strpos(_.$i)এবং সোয়াপিং দ্বারা অন্য দুই |: দ্বিতীয় সংস্করণে operands <?for(;strstr($i=++$argv[1],51)|$i%3<1;);echo$i;> 48 বাইট -
তিতাস

2

পিএইচপি, 47 বাইট

জ্যান্সারহাল দ্বারা অনুপ্রাণিত , তবে সর্বশেষ ধারণাটি একটি নিজস্ব উত্তরকে ন্যায়সঙ্গত করে।

while(strstr($n+=$n=&$argn%3,51));echo$n;

অথবা

while(strpbrk($n+=$n=&$argn%3,3));echo$n;

এটি ইনপুটটিও ক্রম থেকে আসে তা থেকে এই সুবিধাটি নেয়: $n%3==1নতুন মডুলোটি হ'ল 2। জন্য $n%3==2, নতুন মডুলো হয় 4-3=1$n%3==0কখনও হয় না।

পাইপ হিসাবে চালনা করুন-R বা তাদের অনলাইনে চেষ্টা করুন


2

এপিএল (ডায়ালগ ইউনিকোড) , 33 28 27 19 বাইট এসবিসিএস

1∘+⍣{('3'∊⍕⍺)<×3|⍺}

এটি অনলাইন চেষ্টা করুন!

-6 আদমকে ধন্যবাদ। -8 এনএনজি ধন্যবাদ।

পুরানো ব্যাখ্যা:

1-⍨g⍣((×3|⊢)>'3'∊⍕)∘(g←+∘1)
                       +∘1   curry + with 1, gives the increment function
                             increments the left argument so we do not return the number itself
                    (g   )  assign to "g"
                            compose g with the repeat
                            does parsing the argument to a string...
             '3'            ...contain '3'?
        3|⊢                  residue of a division by 3
         )                 direction (0 if 0, 1 if greater, ¯1 is lower)
     (      >     )          and not (we want the left side to be 1, the right side 0)
   g                        repeat "g" (increment) until this function is true ^
1-⍨                          afterwards, decrement: inversed -

এপিএল (ডায়ালগ প্রসারিত) , 23 17 বাইট এসবিসিএস

1∘+⍣(3(×⍤|>∊⍥⍕)⊣)

এটি অনলাইন চেষ্টা করুন!

আদমকে ধন্যবাদ। -6 ngn ধন্যবাদ।

পুরানো ব্যাখ্যা:

0+⍣(3(×⍤|>∊⍥⍕)⊢)⍢(1+⊢)⊢
0                        the left argument (⍺)
 +⍣(3(×⍤|>∊⍥⍕)⊢)         the left function (⍺⍺)
                 (1+⊢)   the right function (⍵⍵)
                             (increments its argument)
                        the right argument (⍵)
                             (just returns the input)
                        under:
                             calls (⍵⍵ ⍵) first, which increments the input
                             also (⍵⍵ ⍺) which gives 1
                             then calls (⍺incremented ⍺⍺ incremented)
                             afterwards, does the opposite of ⍵⍵, and decrements the result
                         fixpoint: repeats the left operation until the right side is truthy
 +                       calls + with incremented and the input (so, 1+input)
   (3(×⍤|>∊⍥⍕)⊢)         right operation
    3                    on its left, "3"
                        on its right, the current iteration
      ×⍤|                divisibility check: × atop |
        |                    starts with 3|⊢ (residue of ⊢/3)
      ×                      then returns the direction (0 if 0, 1 if greater, ¯1 is lower)
          ∊⍥⍕            contains 3:
                           stringifies both its arguments (3 and ⊢)
          ∊⍥                checks for membership
         >               divisibility "and not" contains 3

2

পার্ল 6 , 27 25 24 বাইট

{max $_+1...{!/3/&$_%3}}

এটি অনলাইন চেষ্টা করুন!

ইনপুটটির চেয়ে প্রথম সংখ্যাটি বৃহত্তর সন্ধান করে যার সাথে তিনটি নেই এবং বাকিটি 3 দ্বারা মোডুলুয়েড করার সময় বাকি রয়েছে I আমি শর্তটি নিয়ে অভিনব কিছু করার আশা করছিলাম, !/3/&*%3তবে এটি এর সাথে কাজ করে না !:(

ব্যাখ্যা:

{                      }   # Anonymous code block
     $_+1                  # From the input+1
         ...               # Get the series
            {         }    # That ends when
             !/3/            # The number does not contain a 3
                 &           # and
                  $_%3       # The number is not divisible by 3
 max                       # And get the last element of the series

1

সি, 81 বাইট

f(int n){int m;l:if(++n%3){for(m=n;m>0;m/=10)if(m%10==3)goto l;return n;}goto l;}

1

রেটিকুলার, 30 বাইট

in v
?v$>1+d3,qds:3@cQm*
;\$o

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

1: আরম্ভ

in v

এটি iএনপুটটিকে একটি ওম্বারে রূপান্তরিত করে n, তারপর নীচে যায় ( v)

2: লুপ

?v$>1+d3,qds:3@cQm*
   >                 go right!              [n]
    1+               add 1                  [n+1]
      d3,            duplicate and mod 3    [n+1, (n+1)%3]
         qd          reverse and duplicate  [(n+1)%3, n+1, n+1]
           s         cast to string         [(n+1)%3, n+1, `n+1`]
            :3@c     count numbers of "3"   [(n+1)%3, n+1, `n+1`.count(3)]
                Qm*  negate and rotate      [n+1, continue?]
?v                   terminate if continue
  $                  drop continue

3: ফাইনাল

;\$o
 \$o  drop and output
;     terminate

1

ব্যাচ, 93 বাইট

@set/pn=
:l
@set/an+=1,r=n%%3
@if %r%==0 goto l
@if not "%n:3=%"=="%n%" goto l
@echo %n%

STDIN এ ইনপুট নেয়।


1

সিজেম, 19 বাইট

ri{)__3%!\`'3e=e|}g

অনলাইন

ব্যাখ্যা:

ri{)__3%!\`'3e=e|}g
r                   Get token
 i                  Convert to integer
  {              }  Block
   )                 Increment
    _                Duplicate
     _               Duplicate
      3              Push 3
       %             Modulo
        !            NOT gate
         \           Swap
          `          String representation
           '3        Push '3'
             e=      Count occurrences
               e|    OR gate
                  g While popped ToS is true

যদি কম ভার্জোজ ব্যাখ্যা জিজ্ঞাসা করা হত, আমি এটি করতাম:

ri{)__3%!\`'3e=e|}g
ri                  Get integer
  {              }  Block
   )                 Increment
    __               Triplicate
      3%!            Test non-divisibility with 3
         \           Swap
          `'3e=      Count occurrences of '3' in string repr
               e|    OR gate
                  g While popped ToS is true

1

পাইথ, 19 বাইট

JhQW|!%J3/`J\3=hJ;J

পরীক্ষা স্যুট

আমি নিশ্চিত যে আমি এটি গল্ফ করতে পারি ... এটি আমার সিজেএম উত্তরের মতো।

ব্যাখ্যা:

JhQW|!%J3/`J\3=hJ;J
  Q                 Evaluated input
 h                  Increment
J                   Assign J to value
       J            Variable J
        3           Value 3
      %             Modulo
     !              Logical NOT
           J        Variable J
          `         String representation
            \3      Value "3"
         /          Count occurrences
    |               Logical OR
               h    Increment
                J   Variable J
              =     Apply function then assign
                 ;  End statement block
                  J Variable J

আমি একটি উপায় সংক্ষিপ্ত সমাধান পোস্ট। তবুও আপনার পদ্ধতির জন্য এখানে একটি পরামর্শ: ভেরিয়েবলটি ব্যবহার করবেন না J। আপনি বৃদ্ধি করতে পারেন Q। এবং যদি আপনি এটি চালাক করে থাকেন তবে আপনি অপারেশনটিকে কিছুক্ষণ শর্তের সাথে ইনলাইন করতে পারেন: W|!%=hQ3/Q \ 3; Q` `
জাকুবে

দুঃখিত:W|!%=hQ3/`Q\3;Q
Jakube

@ জাকুব ভেরিয়েবলটি কেবলমাত্র বৃদ্ধি করা নয়, ধন্যবাদ।
এরিক দি আউটগল্ফার

1

Clojure, 73 বাইট

(fn c[n](let[m(inc n)](if(or(=(rem m 3)0)(some #(=\3 %)(str m)))(c m)m)))

n3 দ্বারা বিভাজ্য হওয়ার সময় পুনরাবৃত্তভাবে লুপ হয় বা তার স্ট্রিং উপস্থাপনায় একটি 3 থাকে। যদিও আমি অযৌক্তিক পুনরাবৃত্তি ব্যবহার করছি, এটি 2999999টিকে একটি ইনপুট হিসাবে পরিচালনা করতে সক্ষম হয়েছিল, সুতরাং এটি ঠিক হওয়া উচিত।

Ungolfed

(defn count-without-3 [n]
  (let [m (inc n)]
    (if (or (= (rem m 3) 0)
            (some #(= \3 %) (str m)))
      (count-without-3 m)
      m)))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.