*, /, +, -% অপারেটর ব্যবহার না করে একটি সংখ্যা 3 দিয়ে ভাগ করুন


48

বরাত দিয়ে তাই এই প্রশ্ন (ভক্ষক সতর্কতা!):

এই প্রশ্নটি একটি ওরাকল সাক্ষাত্কারে জিজ্ঞাসা করা হয়েছে।

*, /, +, -%, অপারেটর ব্যবহার না করে আপনি কীভাবে 3 দ্বারা একটি সংখ্যা ভাগ করবেন?

নম্বরটি স্বাক্ষরিত বা স্বাক্ষরযুক্ত হতে পারে।

কাজটি সমাধানযোগ্য, তবে আপনি যদি সংক্ষিপ্ততম কোডটি লিখতে পারেন তবে দেখুন।

নিয়মাবলী:

  • প্রয়োজনীয় পূর্ণসংখ্যা বিভাগ সম্পাদন করুন ( /3)
  • অ পাঠ্য-ভিত্তিক অপারেটার ব্যবহার করবেন না *, /, +, -, অথবা %(অথবা যেমন তাদের সমতুল, __div__বা add())। এটাও বৃদ্ধিশীল এবং অপারেটরদের decrementing মত, প্রযোজ্য i++বা i--। স্ট্রিং কনটেনটেশন এবং ফর্ম্যাটিংয়ের জন্য অপারেটরগুলির ব্যবহার ঠিক। Operaণাত্মক -সংখ্যার জন্য অ্যানারি অপারেটর, বা *সি-তে একটি পয়েন্টার উপস্থাপনের জন্য বিভিন্ন অপারেটরের জন্য এই অক্ষরগুলি ব্যবহার করা ঠিক আছে।
  • ইনপুট মানটি নির্বিচারে বড় হতে পারে (যা আপনার সিস্টেম হ্যান্ডেল করতে পারে) ইতিবাচক এবং নেতিবাচক উভয়ই
  • ইনপুট STDIN বা ARGV এ থাকতে পারে বা অন্য কোনও উপায়ে প্রবেশ করতে পারে
  • উপরের কাজটি করতে আপনি সবচেয়ে সংক্ষিপ্ত কোড তৈরি করুন

1
ইতিবাচক হলে কীভাবে ফলাফলটি গোল করা উচিত? কিভাবে নেতিবাচক?
dfeuer

উত্তর:


15

জে, 45 44 10 অক্ষর

".,&'r3'":

নেতিবাচক সাথে কাজ করে:

".,&'r3'": 15
5
   ".,&'r3'": _9
_3
   ".,&'r3'": 3e99
1e99

": - পাঠ্য হিসাবে ফর্ম্যাট

,&'r3'- r3শেষ সংযোজন

". - স্ট্রিং এক্সিকিউট করুন, যেমন 15r3


1
আপনি যদি এটি কাজ করে 3 3 3 #: 9। দেখে মনে হচ্ছে আপনার টিনারি নম্বরটি কত দীর্ঘ হবে তা আপনার জানা দরকার। _3]\i.কোনও কিছুর জন্য সম্ভাব্য সূচনা পয়েন্টও, তবে আমি জানি না যে এটি এখানে আপনার সমাধানের চেয়ে কম হবে কিনা। #_3]\i.এটি যেহেতু দাঁড়িয়ে আছে তাতে সমস্যা হ'ল এটি সর্বদা ডাউনের পরিবর্তে গোল হয়ে যায়।
গ্যারেথ

1
##~3=_3#\i.11 অক্ষরের জন্য হতে পারে ?
গ্যারেথ

1
আসলে, আপনি নিজের সাথে 10 টি অক্ষর সঙ্কুচিত করতে পারেন ##~0 0 1$~
গ্যারেথ

1
আপনি একটি হুক ব্যবহার করে এটি নীচে সঙ্কুচিত করতে পারেন 3#.}:(#:~$&3)তবে এটি এখনও দীর্ঘ এবং এটি নেতিবাচক সংখ্যা ইস্যুটি ঠিক করে না।
গ্যারেথ

1
হ্যাঁ, আপনি পারেন ব্যবহার করতে পারেন পাওয়ার ফাংশন ^: বা এজেন্ডা @. একটি জন্য ifবা if...elseপ্রতিস্থাপন। @.এক্ষেত্রে আপনি শর্তের ভিত্তিতে একটি বা অন্যটি নির্বাচন করতে '`' অক্ষরের সাথে জড়িত দুটি ক্রিয়া (জে স্পোকের একটি জরিদ) ব্যবহার করতে সক্ষম হতে পারেন ।
গ্যারেথ

56

সি, 167503724710

এখানে আমার সমস্যার সমাধান। আমি স্বীকার করি যে এটি কোনও কঠোর কোড গল্ফ প্রতিযোগিতা জয়ের সম্ভাবনা নেই, তবে এটি অন্তর্নির্মিত বিভাগ কার্যকারিতা কল করতে কোনও কৌশল ব্যবহার করে না, এটি বহনযোগ্য সিতে লেখা হয়েছে (মূল স্ট্যাক ওভারফ্লো প্রশ্নটি জিজ্ঞাসা করা হয়েছে), এটি নিখুঁতভাবে কাজ করে নেতিবাচক সংখ্যাগুলির জন্য, এবং কোডটি ব্যতিক্রমীভাবে পরিষ্কার এবং স্পষ্ট।

আমার প্রোগ্রামটি নিম্নলিখিত স্ক্রিপ্টের আউটপুট :

#!/usr/bin/env python3
import sys

# 71
sys.stdout.write('''#include <stdint.h>
#include <stdio.h>
int32_t div_by_3(int32_t input){''')

# 39 * 2**32
for i in range(-2**31, 2**31):
    # 18 + 11 + 10 = 39
    sys.stdout.write('if(input==%11d)return%10d;' % (i, i / 3))

# 95
sys.stdout.write(r'''return 7;}int main(int c,char**v){int32_t n=atoi(a[1]);printf("%d / 3 = %d\n",n, div_by_3(n));}''')

চরিত্রের গণনা: 71 + 39 * 2 ** 32 + 95 = 167503724710

benchmarks

এটি জিজ্ঞাসা করা হয়েছিল যে এটি কত সময় নেয় এবং কত স্মৃতি ব্যবহার করবে, তাই এখানে কিছু মানদণ্ড দেওয়া হল:

  • স্ক্রিপ্ট কার্যকর করার সময় - ./test.py | pv --buffer-size=1M --average-rate > /dev/nullপ্রায় 30 সেকেন্ডের জন্য চালানো প্রায় 14.8 এমবি / সেকেন্ডের হার দেয়। আউটপুট এর হার মোটামুটি ধ্রুবক হিসাবে ধরে নেওয়া যেতে পারে, সুতরাং সমাপ্তির চলমান সময়টি প্রায় 167503724710 বি / (14.8 * 1048576 বি / গুলি) ≈ 10794 s হওয়া উচিত।
  • সংকলনের সময় - টিসিসি সংকলক সি কোডটি 29.6 এমবি / সেকেন্ডে সংকলনের দাবি করে যা 167503724710 বি / (29.6 * 1048576 বি / গুলি) ≈ 5397 s এর সংকলনের সময় তৈরি করে। (অবশ্যই এটি স্ক্রিপ্ট সহ একটি পাইপলাইনে চালানো যেতে পারে))
  • সংকলিত কোডের আকার - আমি এটি ব্যবহার করে অনুমানের চেষ্টা করেছি ./test.py | tcc -c - -o /dev/stdout | pv --buffer-size=1M --average-rate > /dev/null, তবে এটি tccপুরো উত্স ফাইলটি না পড়া পর্যন্ত কিছুই আউটপুট করে না বলে মনে হচ্ছে।
  • চলমান মেমোরির ব্যবহার - যেহেতু অ্যালগরিদম লিনিয়ার (এবং টিসিসি লাইনগুলিতে অপ্টিমাইজ করে না), মেমরির ওভারহেডটি কয়েকটি কিলোবাইট (অবশ্যই কোড ব্যতীত অবশ্যই) হওয়া উচিত।

22
এটি হার্ডকোডিং এর প্রতিমূর্তি। +++++++++++
জো জেড।

4
বলা হচ্ছে, আমি নিশ্চিত যে আপনি যদি তাদের একটি 160 গিগাবাইট উত্স ফাইল দিয়েছিলেন এবং তাদের এটি সঙ্কলন করতে এবং এটি পরীক্ষা করতে বলেছিলেন তবে তারা আপনার মতো পাগলের মতো দেখতে চাইবে।
জো জেড।

16
যদি আমার বস আমাকে - - / *% ছাড়াই তিনটি দিয়ে একটি বিভাগ গণনা করতে বলেছিলেন তবে আমি মনে করব যে সে পাগল।
মিকাআল মায়ার

এবং এখনও, এর a[b]জন্য একটি সিনট্যাকটিক চিনি *(a + b), যা সংযোজন করে।
কনরাড বোরোস্কি

12
@ নিকোলাস বারবুলেসকো স্ট্যাক এক্সচেঞ্জের উত্তরগুলিতে আকারের বাধা রয়েছে।
টিমটেক

38

রুবি 28

b=->n{n.to_s(3).chop.to_i 3}

3 দ্বারা বিভক্ত করতে আমাদের কেবলমাত্র বেস 3 নম্বরটিতে চলমান শূন্যটি অপসারণ করতে হবে: 120 -> 11110 -> 1111 -> 40

নেতিবাচক সাথে কাজ করে:

ice distantstar:~/virt/golf [349:1]% ruby ./div3.rb
666
222
ice distantstar:~/virt/golf [349]% ruby ./div3.rb
-15        
-5

রুবি, 60 45

বিকল্পভাবে, w / o বেস রূপান্তর ব্যবহার করে:

d = -> n {x = n.abs; আর = (0..1.0 / 0)। পদক্ষেপ (3) .টেক (এক্স)। ইনডেক্স এক্স; এন> 0? r: -r

d=->n{(r=1.step(n.abs,3).to_a.size);n>0?r:-r}

1
বেস রূপান্তর ছাড়া বিকল্প নিষিদ্ধ /অপারেটর যেখানে Float::INFINITYওঠে 1.0/0। রুবি 2.1, এক মে গলফ সঙ্গে (0..1.0/0).step(3)মধ্যে 0.step(p,3), অপসারণ /। বড় সমস্যা হল -rব্যবহারসমূহ -অস্বীকার করতে। বিয়োগের অপারেটর ব্যতীত 1 টি বিয়োগ করতে পূর্ণসংখ্যার # পূর্বে গালি দিয়ে এতে পরিবর্তন -rকরতে 5 টি অক্ষর লাগে~r.pred
25:57

26

গণিত, 13 টি চর

Mean@{#,0,0}&

এটি দুষ্ট: ডিআই অনুমান করে আপনি সংরক্ষণ করতে &পারেন এবং একটি সরল ভেরিয়েবল ব্যবহার করতে পারেন (অন্যরাও এটি করেন)।
ইয়ভেস ক্লেট

3
@ ইয়ভসক্লেট: গড়টি অন্তর্নিহিত দুষ্ট।
গিটারপিকার

18

জাভাস্ক্রিপ্ট, 56

alert(Array(-~prompt()).join().replace(/,,,/g,1).length)

nপুনরাবৃত্তি করার দৈর্ঘ্যের একটি স্ট্রিং তৈরি করে ,এবং এর সাথে প্রতিস্থাপন ,,,করে 1। তারপরে, এটি স্ট্রিংয়ের ফলাফলের দৈর্ঘ্য পরিমাপ করে। (আশা করি একাকার -করার অনুমতি দেওয়া হয়েছে!)


+1 তবে এটি নেতিবাচক মানগুলির সাথে কাজ করে না
ফ্রান্সেসকো ক্যাসুলা

আহ, প্রশ্ন ... এই গণনাটি কীভাবে হয়? এটি -নেগেশন অপারেটর ব্যবহার করে ।
প্যাট্রিক রবার্টস

@ পেট্রিক আমি কোনও বিয়োগফলকে বোঝানোর জন্য স্পেসিফিকেশনটি নিয়েছি - আপনি চাইলে আপনি এর -~সাথে প্রতিস্থাপন করতে পারেনparseInt()
কেসি চু

@ ক্যাসিচু দ্বারা -~prompt()প্রদত্ত মানটি এর চেয়ে বড় parseInt(prompt())। আপনি কীভাবে এটি মোকাবেলা করবেন তা নিশ্চিত নন।
প্যাট্রিক রবার্টস

alert(Array(parseInt(prompt())).slice(1).join().replace(/,,,/g,1).length)
কেসি চু

16

পাইথন, 41 38

print"-"[x:]+`len(xrange(2,abs(x),3))`

xrange প্রায় তাত্ক্ষণিকভাবে বড় সংখ্যা হ্যান্ডেল করতে সক্ষম হতে পারে বলে মনে হয় (আমার মনে হয় সীমা দীর্ঘ সময়ের জন্য একই)।

>>> x = -72
-24

>>> x = 9223372036854775806
3074457345618258602

2
10/33 এর সমান, 4 নয়
জোয়েল কর্নেট

এরকম print" -"[x<0]+LEN (পরিসীমা (2, ABS (x) এর, 3)) `` এটা 39 অক্ষর নিচে শেভ করবে
জোএল Cornett

গোলফেক্সচেঞ্জের মন্তব্য বিন্যাসটি এটিকে গোলমাল করছে। উপরের দিকে আমি len()শর্টহ্যান্ড হিসাবে সংযুক্ত করতে ব্যাকটিক্স ব্যবহার করেছিrepr()
জোয়েল কর্নেট

আমি এটি আপডেট করেছি। আমি ব্যবহার করতে পারি না range, কারণ এটি আসলে তালিকা তৈরি করবে। xrangeকেবল ভান করে, তাই এটি সময় / স্মৃতি নষ্ট না করে বিপুল সংখ্যক হ্যান্ডেল করতে সক্ষম।
grc

2
এটি পাইথন 3% এর প্রচার করুন;) আমি একক চর বিছানো বিটিডব্লু পছন্দ করি।
জোয়েল করনেট

11

হাস্কেল, 90 106

d n=snd.head.dropWhile((/=n).fst)$zip([0..]>>=ν)([0..]>>=replicate 3>>=ν);ν q=[negate q,q]

একটি অসীম (অলস) [(0,0),(0,0),(-1,0),(1,0),(-2,0),(2,0),(-3,-1),(3,1), ...]সন্ধানের তালিকা তৈরি করে , মেলে না এমন সমস্ত উপাদানগুলিকে ছাঁটাই করে n( /=হাস্কেলের ক্ষেত্রে অসমতা) এবং যা প্রথমটি দেয় তা ফিরিয়ে দেয়।

কোনও নেতিবাচক সংখ্যা না থাকলে এটি অনেক সহজ হয়:

25 27

(([0..]>>=replicate 3)!!)

কেবল তালিকার nতম উপাদানটি প্রদান করে [0,0,0,1,1,1,2, ...]


3
ওও আমি দ্বিতীয় সমাধানটি কখনই ভাবিনি। আমি পাইথনে এমন কিছু বাস্তবায়িত করতে সক্ষম হতে পারি
অ্যাকোলিট

8

সি #, 232 বাইট

আমার প্রথম কোড গল্ফ ... এবং যেহেতু কোনও সি # ছিল না এবং আমি এখানে চেষ্টা না করে আলাদা পদ্ধতি চেষ্টা করতে চেয়েছিলাম, ভেবেছিলাম আমি এটি একটি শট দেব। এখানে অন্যদের মতো, কেবল অ-নেতিবাচক সংখ্যা।

class l:System.Collections.Generic.List<int>{}class p{static void Main(string[] g){int n=int.Parse(g[0]);l b,a=new l();b=new l();while(a.Count<n)a.Add(1);while(a.Count>2){a.RemoveRange(0,3);b.Add(1);}System.Console.Write(b.Count);}}

Ungolfed

class l : System.Collections.Generic.List<int>
{ }
class p
{
    static void Main(string[] g)
    {
        int n = int.Parse(g[0]);
        l b, a = new l();
        b = new l();
        while (a.Count < n) a.Add(1);
        while (a.Count > 2)
        {
            a.RemoveRange(0, 3);
            b.Add(1);
        }
        System.Console.Write(b.Count);
    }
}

2
প্রায় 5 বছর পরে .. আপনি স্থানটি সরিয়ে string[] g, এটিকে রূপান্তর করে 1 বাইট সংরক্ষণ করতে পারেনstring[]g
মেটোনিয়েম

"নন-পাঠ্য-ভিত্তিক অপারেটরগুলি *, /, +, -, বা% (বা তাদের সমকক্ষ, যেমন ডিভ বা অ্যাড () হিসাবে ব্যবহার করবেন না - - আপনি কি সমতুল্য ব্যবহার করছেন না .Add?
জোনাথন ফ্রেচ

@ জোনাথানফ্রেচ যে যোগ করার পদ্ধতিটি দুটি সংখ্যার উপর নির্ভর করে না, এটি কেবলমাত্র একটি সংকলনে একটি মূল্য যুক্ত করে
অজ্ঞতার

7

পার্ল (26 22)

$_=3x pop;say s|333||g

এই সংস্করণ (আব) পার্লের রেজেক্স ইঞ্জিন ব্যবহার করে। এটি শেষ কমান্ড লাইন আর্গুমেন্ট ( pop) হিসাবে একটি সংখ্যা পড়ে এবং 3এই দৈর্ঘ্যের ( "3" x $number) এর একটি স্ট্রিং তৈরি করে । রেজেক্স সাবস্টিটিউশন অপারেটর ( s///এখানে ধাঁধার নিয়মের কারণে এবং একটি gলোবাল পতাকা সহ বিভিন্ন বিস্ময়করদের দ্বারা লিখিত) খালি স্ট্রিং দ্বারা তিনটি অক্ষর প্রতিস্থাপন করে এবং প্রতিস্থাপনের সংখ্যাটি প্রদান করে, যা ইনপুট নম্বরটি পূর্ণসংখ্যায় ভাগ করে তিনটি করে। এমনকি এটি ছাড়াও লেখা যেতে পারে 3তবে উপরের সংস্করণটি মজাদার দেখাচ্ছে।

$ perl -E '$_=3x pop;say s|333||g' 42
14

2
আরে @ মেমোভে, দুর্দান্ত কাজ! আপনি আরও কয়েকটি চর সংরক্ষণ করতে পারেন (4) করে $_=3x pop;say s|333||g
ডম হেস্টিংস

2
যখন ইনপুট 0, 1 বা 2 হয়, তখন এটি একটি খালি স্ট্রিং প্রিন্ট করে। এটা 0 প্রিন্ট করার প্রয়োজন ফেলেন, তাহলে এটি আরো 3 অক্ষর (মোট 25) দরকার: '$_=3x pop;say s|333||g||0। 99999999 এর মতো বৃহত সংখ্যার সাথে ধীরে ধীরে ধীরে ধীরে নামান এবং নেতিবাচক সংখ্যার সাথে কাজ করে না।
kernigh

1
-pকমান্ডলাইনে ব্যবহার করুন, এবং আপনি করতে পারেন: $_=3x$_;$_=0|s|...||g0, 1, বা 2 ইনপুটগুলির কভারেজ সহ মোট 22 টির জন্য।
এক্সকালি

6

সি, 160 টি অক্ষর

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

আউটপুট মাঝে মাঝে একটি অগ্রণী শূন্য অন্তর্ভুক্ত করে - এর কবজির অংশ।

main(int n,char**a){
char*s=a[1],*x=0;
if(*s==45)s=&s[1];
for(;*s;s=&s[1])n=&x[*s&15],x="036"[(int)x],*s=&x["000111222333"[n]&3],x="012012012012"[n]&3;
puts(a[1]);
}

বিঃদ্রঃ:

  • অপব্যবহারের অ্যারে অ্যাক্সেস অতিরিক্ত প্রয়োগ করতে।
  • ঝাঁকুনি 4.0 সঙ্গে সংকলন, অন্যান্য সংকলক বাধা দিতে পারে।

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

./a.out -6            -2
./a.out -5            -1
./a.out -4            -1
./a.out -3            -1
./a.out -2            -0
./a.out -1            -0
./a.out 0             0
./a.out 1             0
./a.out 2             0
./a.out 3             1
./a.out 4             1
./a.out 5             1
./a.out 6             2
./a.out 42            14
./a.out 2011          0670

6

পাইথন 42

int(' -'[x<0]+str(len(range(2,abs(x),3))))

যেহেতু এখানে পোস্ট করা প্রতিটি সমাধানই এখানে দশমিকের ছাঁটাই করে ফেলেছে তা আমার সমাধান যা এটি করে।

পাইথন 50 51

int(' -'[x<0]+str(len(range([2,0][x<0],abs(x),3))))

পাইথন যেহেতু মেঝে বিভাগ করে, তাই এখানে আমার সমাধান যা প্রয়োগ করে।

ইনপুট পূর্ণসংখ্যার পরিবর্তনশীল x এ।

পাইথন ২.7 এ পরীক্ষা করা হয়েছে তবে আমি সন্দেহ করি এটি 3 তেও কাজ করে।


নেতিবাচক মান পরিস্থিতির উভয় বিকল্প প্রস্তাব দেওয়ার জন্য +1। যেহেতু ইতিমধ্যে অনেকগুলি উত্তর রয়েছে, তাই আমি এক বা অন্য বিকল্পটি বাদ দেওয়ার জন্য অনুমিতটি সামঞ্জস্য করব না, যদিও আমি ব্যক্তিগতভাবে সম্মত হব যে এটির -3সঠিক উত্তর -10/3
গাফি

যারা পাইথনে মেঝে বিভাগ সম্পর্কে যত্নশীল তাদের জন্য: পাইথন- হিস্টোরি.ব্লগস্পট.com
ম্যাট

আপনার দ্বিতীয় সমাধানে গুণ এবং বিয়োগের কী আছে?
বুথবি

@ বুথবি দ্বিতীয় সমাধান ফ্লোর বিভাগ প্রয়োগ করে। আমি নেতিবাচক সংখ্যার জন্য ব্যাপ্তি (0, অ্যাবস (এক্স), 3) এবং ধনাত্মক সংখ্যার জন্য পরিসীমা (2, অ্যাবস (এক্স), 3) করতে চেয়েছি। যাতে আমি বিন্যাস (2 ছিল করতে হলে ... তারপর আমি 2 বিয়োগ যখন x নেতিবাচক এক্স <0 সত্য যখন x নেতিবাচক সত্য, () * 2 == 2।
ম্যাট

আমি মেঝে বিভাগ এবং কাটা দশমিকের মধ্যে পার্থক্য বুঝতে পারছি না। এর সাথে কি নেতিবাচক বিভাজন রয়েছে?
জোয়েল করনেট

6

জাভাস্ক্রিপ্ট, 55

alert(parseInt((~~prompt()).toString(3).slice(0,-1),3))

যদি কেউ ব্যবহার করতে না পারে -1তবে তার পরিবর্তে এখানে একটি সংস্করণ দেওয়া হচ্ছে ~0(ধন্যবাদ পিটার টেলর!)

alert(parseInt((~~prompt()).toString(3).slice(0,~0),3))

1
@ আর্টেমইস ওয়ান ~হ'ল বিটওয়াস অপারেটর যা অপারেন্ডের বিটগুলি উল্টে দেয় (প্রথমে এটি একটি সংখ্যায় রূপান্তর করে)। একটি সংখ্যায় স্ট্রিং রূপান্তর করার এটি সবচেয়ে সংক্ষিপ্ততম উপায় (যতদূর আমি জানি)।
ইনকব্যাগ

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

1
@ সাম এছাড়াও, এর ~~বিপরীতে, পূর্ণসংখ্যায় রূপান্তরিত করে +

1
@ ওয়াগ এটি কোডগল্ফ, সুতরাং কার্যটিতে নির্দিষ্ট না হওয়া পর্যন্ত এটি দক্ষতার বিষয়ে নয়।
ডিফ্ল্ট করুন

3
বিভিন্ন ঘাঁটির সুবিধা নেওয়ার জন্য +1। এটি আমার প্রিয় জাভাস্ক্রিপ্ট গল্ফ কৌশলগুলির মধ্যে একটি।
ডকম্যাক্স 26'12

6

সি 83 টি অক্ষর

বিভাজনের সংখ্যাটি main()স্টিডিনের মাধ্যমে পাস করা হয় এবং এটি এটিকে প্রস্থান কোড (সিএমডিতে% ERRORLEVEL%) থেকে ফেরত দেয় । এই কোডটি MinGW এর কয়েকটি সংস্করণকে অপব্যবহার করে যাতে যখন অপ্টিমাইজেশানগুলি চালু না থাকে, এটি শেষ কার্যবিধির মানটিকে রিটার্নের বিবৃতি হিসাবে গণ্য করে। এটি সম্ভবত কিছুটা কমানো যেতে পারে। একটিতে ফিট করতে পারে এমন সমস্ত সংখ্যা সমর্থন করেint

যদি অ্যানারি নেগেট (-) অনুমোদিত না হয়: (129)

I(unsigned a){a=a&1?I(a>>1)<<1:a|1;}main(a,b,c){scanf("%i",&b);a=b;a=a<0?a:I(~a);for(c=0;a<~1;a=I(I(I(a))))c=I(c);b=b<0?I(~c):c;}

যদি অ্যানারি অবহেলা করে তবেই অনুমতি দেওয়া হয়: (123)

I(unsigned a){a=a&1?I(a>>1)<<1:a|1;}main(a,b,c){scanf("%i",&b);a=b;a=a<0?a:-a;for(c=0;a<~1;a=I(I(I(a))))c=I(c);b=b<0?-c:c;}

সম্পাদনা: উগোরেন আমাকে দেখিয়েছিলেন যে - ~ একটি বর্ধন ...

অ্যানারি নেগেটিভ হলে 83 টি অক্ষর অনুমোদিত: ডি

main(a,b,c){scanf("%i",&b);a=b;a=a<0?a:-a;for(c=0;a<~1;a=-~-~-~a)c=-~c;b=b<0?-c:c;}

যদি অ্যানারি নেগেট অনুমোদিত হয়, x+3হয় -~-~-~x
ugoren

এটার জন্য ধন্যবাদ. আমি জানি না কেন আমার কাছে কেন এমন ঘটনা ঘটেনি। আমি অনুমান করি আপনি বুঝতে পারেন নি যে আপনি এতোটুকু কৃত্রিমভাবে ইউনারি স্ট্যাক করতে পারেন।
কসলাই

5

সি, ১৩৯ টি চর

t;A(a,b){return a?A((a&b)<<1,a^b):b;}main(int n,char**a){n=atoi(a[1]);for(n=A(n,n<0?2:1);n&~3;t=A(n>>2,t),n=A(n>>2,n&3));printf("%d\n",t);}

কমান্ড লাইন আর্গুমেন্ট হিসাবে সংখ্যা দিয়ে চালান

  • নেতিবাচক এবং ধনাত্মক উভয় সংখ্যা পরিচালনা করে

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

 ./a.out -6            -2
 ./a.out -5            -1
 ./a.out -4            -1
 ./a.out -3            -1
 ./a.out -2            0
 ./a.out -1            0
 ./a.out 0             0
 ./a.out 1             0
 ./a.out 2             0
 ./a.out 3             1
 ./a.out 4             1
 ./a.out 5             1
 ./a.out 6             2
 ./a.out 42            14
 ./a.out 2011          670

সম্পাদনা:

  • স্থানীয় ভেরিয়েবলগুলি অপসারণ করতে অতিরিক্ত (এ) পরিবর্তন করে 10 টি অক্ষর সংরক্ষণ করা হয়েছে।

1
সুন্দরভাবে সম্পন্ন. আমি বিট টুইডলিংয়ে সর্বাত্মক চেষ্টা করেছি এবং ২৩৯ এ পৌঁছেছি I আমি আপনার মাথাটি পেতে পারি না A, আমার ফাংশনটি কেবল n নাম্বার বিটটি পরীক্ষা করে। সি স্ট্যান্ডার্ড কি ধরণের ঘোষণাকে বাদ দিতে দেয় বা এটি কোনও সংকলক জিনিস?
shiona

1
সি অনির্ধারিত হলে int ধরে নেবে।
ওয়াগ

5

জেডএসএইচ - 31 20/21

echo {2..x..3}|wc -w

নেতিবাচক সংখ্যার জন্য:

echo {-2..x..3}|wc -w

নেতিবাচক সংখ্যা সহ (জেডএসএইচ + bc) -62 61

আমার উত্তর হিসাবে আমার দুটি প্রোগ্রাম দেওয়া উচিত নয়, সুতরাং এখানে একটি নম্বর যা কোনও সংখ্যার চিহ্নের জন্য কাজ করে:

echo 'obase=10;ibase=3;'`echo 'obase=3;x'|bc|sed 's/.$//'`|bc

এটি আর্টেম আইস এর উত্তর হিসাবে একই বেস রূপান্তর কৌশল ব্যবহার করে ।


5

সি, 81 73 অক্ষর

কেবল অ-নেতিবাচক সংখ্যা সমর্থন করে।

char*x,*i;
main(){
    for(scanf("%d",&x);x>2;x=&x[~2])i=&i[1];
    printf("%d",i);
}

পয়েন্টার অ্যারিথেমেটিক ব্যবহার করার ধারণাটি। নম্বরটি পয়েন্টারে পড়ে x, যা কোথাও নির্দেশ করে না। &x[~2]= &x[-3]= x-3বিয়োগ করতে ব্যবহৃত হয় This. iসংখ্যাটি 2 এর উপরে হওয়া পর্যন্ত এটি পুনরাবৃত্তি হয় this এটি কতবার করা হয়েছে তার সংখ্যা গণনা করে ( &i[1]= i+1)।


কোডটি বোঝার চেষ্টা করছেন, কেউ কেউ কিছু বাতি নিভিয়েছেন? ধন্যবাদ
কংগ্রে হুই

@ চুই, ব্যাখ্যা যুক্ত করেছেন।
ugoren

@ ইউগোরেন যতদূর আমি বুঝতে পেরেছি, প্রিন্টফ ("% d") হেক্সে থাকা মেমরি অ্যাড্রেস পয়েন্টারটি প্রিন্ট করা উচিত নয়? কেন এটি পূর্ণসংখ্যা মুদ্রণ করছে? বা চর * আমি ডিফল্টরূপে 0 মেমরি ঠিকানার দিকে নির্দেশ করতে শুরু হয়েছিল? ধন্যবাদ
কংগ্রে হুই

5

জাভা 86 79

ধরুন পূর্ণসংখ্যাটি y তে রয়েছে:

বেস 3 এ স্ট্রিংয়ে রূপান্তর করে, শেষ অক্ষরটি সরান (বেস 3 এর ডান শিফট ">>"), তারপরে আবার পূর্ণসংখ্যায় রূপান্তর করে।

নেতিবাচক সংখ্যার জন্য কাজ করে।

যদি y, সংখ্যাটি <3 বা> -3 হয় তবে এটি 0 দেয়।

System.out.print(~2<y&y<3?0:Long.valueOf(Long.toString(y,3).split(".$")[0],3));

কোড গল্ফে প্রথমবারের মতো পোস্ট করা। =) সুতরাং এখনও মন্তব্য করতে পারবেন না।

টিপস জন্য থেক্স কেভিন ক্রুইজসেন sen


আমি জানি এটি আরও দুই বছর আগে হয়েছে, তবে আপনি কয়েকটি অংশ গল্ফ করতে পারেন: &&থেকে &, এবং 2x Integerথেকে Long। (এছাড়াও, কেন আপনি ন্যায়বিচারের ~2পরিবর্তে ব্যবহার করেন -3? তারা একই বাইট-কাউন্ট।)
কেভিন ক্রুইজসেন

1
@ কেভিন ক্রুজসেন এত দিন পরে আমার প্রথম পোস্টটি সম্পাদনা করতে তাই নস্টালজিক। কেন আমি ভেবেছিলাম যে খুব বেশি নিশ্চিত ছিল না ~ 2 তখন ভাল ছিল।
ভেক্টরাইজড

2
কেভিন ক্রুইজসেন ভালভাবে, চ্যালেঞ্জটি বলেছে যে আপনাকে ব্যবহার করার অনুমতি নেই -, তবে আমি জানি না যে এটি অকার্যকর অবহেলার পক্ষে গণ্য হয় কিনা I
ফ্লিপট্যাক

@ ফ্লিপট্যাক আহ আপনি সম্পূর্ণ ঠিক আছেন। সেক্ষেত্রে ভুলে যাও আমি কখনই বলেছিলাম। :)
কেভিন ক্রুইজসেন

4

পাইথন 2.6 ( 29 ) ( 71 ) ( 57 ) ( 52 ) (43)

z=len(range(2,abs(x),3))
print (z,-z)[x<0]

print len(range(2,input(),3))

সম্পাদনা করুন - ঠিক বুঝতে পেরেছি যে আমাদেরও নেতিবাচক পূর্ণসংখ্যা পরিচালনা করতে হবে। এটি পরে ঠিক করবে

সম্পাদনা 2 - স্থির

সম্পাদনা 3 - জোল কর্নেটের পরামর্শ অনুসরণ করে 5 টি অক্ষর সংরক্ষণ করা হয়েছে

সম্পাদনা 4 - যেহেতু ইনপুটটি এসটিডিএন বা এআরজিভি হতে হবে না, স্টিডিনের কোনও ইনপুট না নিয়ে 9 টি অক্ষর সংরক্ষণ করা হয়েছে


সাথে এগিয়ে যানabs()
ডিফ্ল্ট

করার জন্য সংক্ষিপ্তprint z if x==abs(x) else -z
জোয়েল করনেট

আরও ভাল,print (z,-z)[x<0]
জোয়েল করনেট

@ আর্টেমআইস ধন্যবাদ, কেবলমাত্র বুঝতে পেরেছিলাম যে উপরের অন্য উত্তর পড়ার পরে আমি এটি ব্যবহার করতে পারি।
এলসার

@ জোয়েল কর্নেট হাম, সে সম্পর্কে জানতেন না, ধন্যবাদ
এলসার

4

জাভাস্ক্রিপ্ট, 47 29

evalগতিশীলভাবে একটি উত্পন্ন করতে ব্যবহার করে /+কেবল স্ট্রিং কনটেনটেশনের জন্য ব্যবহার করে , সংযোজন নয়।

alert(eval(prompt()+"\57"+3))

সম্পাদনা: "\57"পরিবর্তে ব্যবহৃত হয়String.fromCharCode(47)


-1 এর জন্য alert(eval(prompt()+"\573"))?
শিয়েরু আসাকোটো

4

রুবি ( 43 22 17)

শুধু গল্ফই নয়, কমনীয়তাও :)

p Rational gets,3

আউটপুট মত হবে (41/1)। যদি এটি অবশ্যই পূর্ণসংখ্যার হয় তবে অবশ্যই অবশ্যই .to_iফলাফলটি যুক্ত করতে হবে এবং যদি আমরা পরিবর্তিত to_iহয় to_fতবে আমরা ভাসমানগুলির জন্য আউটপুটও পেতে পারি।


1
rationalরুবি 1.9.3 এ প্রয়োজনীয় লাইন ছাড়াই কাজ করে Works বন্ধনী ছাড়তে আরও একটি চর সাশ্রয় হয় ।
স্টেনস্লাগ

4

টিআই-বেসিক, 8 বাইট

বিজয়ী? :)

int(mean({Ans,0,0

নেতিবাচক সংখ্যার জন্য পিএস রাউন্ডগুলি অনন্তের দিকে ( কেন তা এখানে দেখুন )। পরিবর্তে শূন্যে গোল করতে, কোনও বাইট পরিবর্তন না করে এর int(সাথে প্রতিস্থাপন করুন iPart(

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

-4:prgmDIVIDE
              -2
11:prgmDIVIDE
               3
109:prgmDIVIDE
              36

3

পাইথন 2.x, 54 53 51

print' -'[x<0],len(range(*(2,-2,x,x,3,-3)[x<0::2]))

_লভ্যাংশ কোথায় এবং যেমন প্রবেশ করা হয়।

>>> x=-19
>>> print' -'[x<0],len(range(*(2,-2,x,x,3,-3)[x<0::2]))
- 6

দ্রষ্টব্য: ইন্টারেক্টিভ দোভাষী ব্যবহার করার অনুমতি দেওয়া হয়েছে কিনা তা নিশ্চিত নন, তবে ওপি অনুসারে: "ইনপুট এসটিডিএন বা এআরজিভিতে থাকতে পারে বা অন্য কোনও উপায়ে প্রবেশ করতে পারে"

সম্পাদনা করুন: এখন অজগর 3 এর জন্য (2.x এ কাজ করে তবে একটি টিপল মুদ্রণ করে)। নেতিবাচক সঙ্গে কাজ করে।


অজগর 3 তেও কাজ করে?
যান্ত্রিক শামুক

সাবস্ক্রিপ্টযোগ্য হতে হবে না; থাকার __len__যথেষ্ট
যান্ত্রিক শামুক

len(range(100,1000))900লিনাক্সে 3.2.3 এ দেয় ।
যান্ত্রিক শামুক

এটি নেতিবাচক সংখ্যার জন্য কাজ করে না। এবং len(xrange(0,_,3))যাইহোক ছোট এবং ব্যাপকভাবে দ্রুত হয় faster
grc

@ মেকানিক্যালসনেল: পয়েন্ট নেওয়া হয়েছে। আমি স্বীকার করি এটি 3 এ কাজ করে
জোয়েল করনেট

3

সি ++, 191

মুখ্য এবং অন্তর্ভুক্ত সহ, এর 246 মূল ছাড়াই এবং অন্তর্ভুক্ত রয়েছে, এটি কেবল 178 New নিউলাইনগুলি 1 টি চরিত্র হিসাবে গণনা করে। সকল সংখ্যা স্বাক্ষরযুক্ত হিসাবে গণ্য করে। এটির ন্যায্য খেলায় মূল স্বাক্ষরযুক্ত স্বাক্ষর না করায় আমি সতর্কতা পাই না।

আমার প্রথম কোডগলফ জমা দেওয়া।

#include<iostream>
#define R return
typedef unsigned int U;U a(U x,U y){R y?a(x^y,(x|y^x^y)<<1):x;}U d(U i){if(i==3)R 1;U t=i&3,r=i>>=2;t=a(t,i&3);while(i>>=2)t=a(t,i&3),r=a(r,i);R r&&t?a(r,d(t)):0;}U main(){U i;std::cin>>i,std::cout<<d(i);R 0;}

সংখ্যাকে বারবার 4 দ্বারা বিভক্ত করতে শিফট ব্যবহার করে এবং যোগফল গণনা করে (যা 1/3 এ রূপান্তর করে)

সুডোকোড:

// typedefs and #defines for brevity

function a(x, y):
    magically add x and y using recursion and bitwise things
    return x+y.

function d(x):
    if x = 3:
        return 1.
    variable total, remainder
    until x is zero:
        remainder = x mod 4
        x = x / 4
        total = total + x
    if total and remainder both zero:
        return 0.
    else:
        return a(total, d(remainder)).

একদিকে যেমন, আমি ডি মেইড নামকরণ করে এবং এটির ** নিতে এবং প্রোগ্রামগুলি আউটপুট হিসাবে ফেরতের মান ব্যবহার করে মূল পদ্ধতিটি মুছে ফেলতে পারি। এটি তিনটি ভাগ করে কমান্ড লাইন আর্গুমেন্টের সংখ্যা ফিরে আসবে ed এটি বিজ্ঞাপনিত 191 এর দৈর্ঘ্য এনেছে:

#define R return
typedef unsigned int U;U a(U x,U y){R y?a(x^y,(x|y^x^y)<<1):x;}U main(U i,char**q){if(i==3)R 1;U t=i&3,r=i>>=2;t=a(t,i&3);while(i>>=2)t=a(t,i&3),r=a(r,i);R r&&t?a(r,d(t)):0;}

3

গল্ফস্ক্রিপ্ট - 13 টি অক্ষর

~3base);3base

নেতিবাচক ইনপুট হ্যান্ডেল বলে মনে হচ্ছে না
মাঝামাঝি

1
@ রেস s/seem to //:(। আমার এটি সম্পর্কে একটি ভাবনা থাকতে হবে
gnibbler

3

পাওয়ারশেল 57 বা 46

57 ক্যারেক্টারে %পাওয়ারশেল ফোরচ অপারেটর হিসাবে ব্যবহার করে , মডুলো নয়। এই সমাধানটি ইতিবাচক বা নেতিবাচক পূর্ণসংখ্যাকে গ্রহণ করতে পারে।

(-join(1..(Read-Host)|%{1})-replace111,0-replace1).Length

46 টি অক্ষরে যদি *স্ট্রিং পুনরাবৃত্তি অপারেটর হিসাবে অনুমোদিত হয় তবে গুণিত হবে না। এই বিকল্পটির ইনপুট মান হিসাবে ধনাত্মক পূর্ণসংখ্যার প্রয়োজন।

("1"*(Read-Host)-replace111,0-replace1).Length

আপনি যদি আবার ফিরে আসেন তবে আমি একটি বাগ ফিক্স পোস্ট করেছি। আপনি যদি আমার খনি মুছতে এবং পরিবর্তনটি আপনার মধ্যে অন্তর্ভুক্ত করতে চান তবে কেবল আমাকে জানান।
ভেস্কাহ

3

আর

এগুলি কেবল ইতিবাচক পূর্ণসংখ্যার সাথে কাজ করে:

max(sapply(split(1:x,1:3), length))
# Gives a warning that should be ignored

বা:

min(table(rep(1:3, x)[1:x]))

বা:

length((1:x)[seq(3,x,3)])

বা:

sum(rep(1,x)[seq(3,x,3)])

[[সম্পাদনা]] এবং একটি কুরুচিপূর্ণ:

trunc(sum(rep(0.3333333333, x)))

[[EDIT2]] প্লাস সম্ভবত সেরা এক - এলিয়ট জি দ্বারা উপরের মাতলাব কোড দ্বারা অনুপ্রাণিত:

length(seq(1,x,3))

আমি আপনার EDIT2 এর মত একই ধারণাটি বাস্তবায়িত করতে চেয়েছিলাম তবে এটি নেতিবাচক সংখ্যার জন্য কাজ করে না:wrong sign in 'by' argument
Andreï Kostyrka

3

স্মাইলব্যাসিক, 58 51 36 বাইট (কোনও গাণিতিক ক্রিয়া নেই!)

INPUT N
BGANIM.,4,-3,N
WAIT?BGROT(0)

ব্যাখ্যা:

INPUT N           'get input
BGANIM 0,"R",-3,N 'smoothly rotate background layer 0 by N degrees over 3 frames
WAIT              'wait 1 frame
PRINT BGROT(0)    'display angle of layer 0

প্রোগ্রামটি ব্যাকগ্রাউন্ড স্তরটি 3 ফ্রেমের উপরে সাবলীলভাবে সরায় এবং তারপরে তার দূরত্বের 1/3 ভ্রমণ করার পরে 1 ফ্রেমের পরে কোণটি পায়।

ফ্লোট বিভাগের সংস্করণ, 38 বাইট:

INPUT N
BGANIM.,7,-3,N
WAIT?BGVAR(0,7)

ব্যাখ্যা:

INPUT N           'input
BGANIM 0,"V",-3,N 'smoothly change layer 0's internal variable to N over 3 frames
WAIT              'wait 1 frame
PRINT BGVAR(0,7)  'display layer 0's internal variable

3

হাস্কেল 41 39 টি চর

ধনাত্মক এবং নেতিবাচক পূর্ণসংখ্যার সম্পূর্ণ সেট নিয়ে কাজ করে

f n=sum[sum$1:[-2|n<0]|i<-[3,6..abs n]]

প্রথমে প্রতি তৃতীয় পূর্ণসংখ্যার 0 থেকে ইনপুট পর্যন্ত 1 এর বা (-1) এর (ইনপুটটির চিহ্নের উপর নির্ভর করে) তৈরি করে nabs(n)অন্তর্ভুক্ত নেতিবাচক সংখ্যা জন্য।

যেমন n=8 -> [0,3,6]

এটি তখন এই তালিকার যোগফল প্রদান করে।


নেতিবাচক সংখ্যাগুলিতে কাজ করে না (-3/3 হ'ল -1 নয় 1)।
করম্যাক

আপনি এটিকে নেতিবাচক সংখ্যায় কাজ করেছেন তবে আপনি ব্যবহার করতে পারবেন না /, স্পেসিফিকেশনটি পড়তে পারবেন না।
করম্যাক

ওগো গোশ, তুমি আমাকে দু'বার পেয়েছ। সমস্ত স্থির;)
চার্ল ক্রুগার

নিস! বিটিডব্লু আপনি fn = যোগ [যোগফল 1: [- 2 | n <0] | i <- [3,6..abs n]] এর সাথে 39 টি অক্ষর পেতে পারেন
Cormac

2

ক্লোজার, 87; নেতিবাচক সঙ্গে কাজ করে; অলস উপর ভিত্তি করে

(defn d[n](def r(nth(apply interleave(repeat 3(range)))(Math/abs n)))(if(> n 0)r(- r)))

Ungolfed:

(defn d [n]
  (let [r (nth (->> (range) (repeat 3) (apply interleave))
               (Math/abs n))]
        (if (pos? n)
          r
          (- r))))

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.