স্ট্যাক এক্সচেঞ্জ ভোট সিমুলেটর


73

এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা কেবল একটি অক্ষরে স্ট্রিং নিয়ে থাকে ^এবং v(আপনি ধরে নিতে পারেন যে অন্য কোনও অক্ষর থাকবে না)। বাম থেকে ডানে পড়ুন এই স্ট্রিংটি প্রথমবারের জন্য স্ট্যাক এক্সচেঞ্জ প্রশ্ন বা উত্তর দেখার সময় কোনও একক ব্যবহারকারীর মাউস ক্লিকগুলির ক্রম প্রতিনিধিত্ব করে ।

প্রতিটি ^একটি ক্লিকের প্রতিনিধিত্ব করে ভোট দিন বোতাম এবং প্রতি vএকটি ক্লিকের প্রতিনিধিত্ব করে downvote বোতাম। (কাজের উদাহরণের জন্য সামান্য বাম দিকে তাকান))

ধরে নিন যে কোনও ভোটের সীমাবদ্ধতা কার্যকর নেই তাই সমস্ত ক্লিকগুলি সঠিকভাবে নিবন্ধিত হয়েছে।
মুদ্রণ বা ফিরে:

  • 1অথবা +1যদি পোস্টটি আপটিভেট করা শেষ হয়।
  • 0পোস্টটি শেষ না হলে ভোট দেওয়া হচ্ছে না। ( -0এবং +0বৈধ নয়)
  • -1 পোস্টটি ডাউনভোট হওয়া শেষ হলে।

ব্যবহারকারীর কাছ থেকে শূন্য নেট ভোট দিয়ে পোস্টগুলি শুরু হয় এবং বোতামগুলি নীচে নীচে ভোট পরিবর্তন করে:

Net Votes Before    Button Pressed    Net Votes After
1                   ^                 0
1                   v                 -1
0                   ^                 1
0                   v                 -1
-1                  ^                 1
-1                  v                 0

বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী।

পরীক্ষার কেস:

[empty string] -> 0
^^ -> 0
^v -> -1
^ -> 1
v -> -1
v^ -> 1
vv -> 0
^^^ -> 1
vvv -> -1
^^^^ -> 0
vvvv -> 0
^^^^^ -> 1
vvvvv -> -1
^^^^^^ -> 0
vvvvvv -> 0
^^v -> -1
^v^ -> 1
^vv -> 0
vv^ -> 1
v^v -> -1
v^^ -> 0
^vvv^^vv^vv^v^ -> 1
^vvv^^vv^vv^v^^ -> 0
^vvv^^vv^vv^v^^^ -> 1
^vvv^^vv^vv^v^^v -> -1
^vvv^^vv^vv^v^^vv -> 0
^vvv^^vv^vv^v^^vvv -> -1
^vvvvvvvvvvvv -> 0
^^vvvvvvvvvvvv -> 0
^^^vvvvvvvvvvvv -> 0
vvv^^^^^^^^^^^^ -> 0
vv^^^^^^^^^^^^ -> 0
v^^^^^^^^^^^^ -> 0

14
কি? কোন পক্ষের ভোট নেই? জিওবোর্টস এবং সিড্রস দু: খিত
অপটিমাইজার

25
প্রিয় সিক্রেট এসই বিকাশকারী: আপনার জন্য সাইটের উন্নতি করতে নিজের সম্প্রদায়কে সাফল্যের সাথে
চালিত করার

1
আমি এখন কিছুক্ষণের জন্য উদাহরণ টেবিলটিতে অভিনয় করছি এবং আমি এখনও পরীক্ষার কেসগুলি পাই না। 1 এর স্কোর সহ একটি পোস্ট আপ-ভোট পেয়ে যায় এবং তার পরে এটির স্কোর 0 থাকে And এবং 0 এর সাথে একটি পোস্ট 1-এর স্কোর পেয়ে ভোট দেয় gets ১. এর স্কোরকে ভোট দিয়েছেন? সুতরাং ^চরিত্রটি -1, +1 বা +২ স্কোর পরিবর্তন হতে পারে? আমি কোথায় ঘন? কি হচ্ছে?
ব্র্যাড

4
@ ব্র্যাড আমি আপনাকে কিছু প্রকৃত পোস্ট (যেমন এই প্রশ্নটি নিজেই) দিয়ে ক্রিয়াগুলি ব্যবহার করার পরামর্শ দিচ্ছি। আপনি ইতিমধ্যে আপগ্রেটেড একটি পোস্ট আপভোটিং আপভোটকে পূর্বাবস্থায় ফেরান। ডাউনভোটিংয়ের সাথে একই।
ক্যালভিনের

6
আমি অবাক হই যে এই প্রশ্নের আসল-সময় ভোট কী ছিল। আমি বাজি রাখতে আগ্রহী এই পরীক্ষার কেস হিসাবে অনেকে এই প্রশ্নটি ব্যবহার করেছেন।
মাইক দ্য লাইয়ার

উত্তর:


35

গোল> <> 0.3.11 , 13 12 11 বাইট

iEh`^=:@)+M

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

ব্যাখ্যা

i               Read char
 Eh             If EOF, halt and output top of stack as num
   `^=          Push 1 if char is ^, else 0
      :@        Dup and rotate, giving [is^ is^ votecount]
        )       Compare greater than, pushing 1 or 0 as appropriate
         +M     Add and subtract 1

নোট করুন যে প্রথম ব্যবহারের @জন্য প্রথম পুনরাবৃত্তির জন্য ভোট গণনা শুরু করতে স্ট্যাকের নীচে থেকে 0 টি টান

একটি পূর্ণ টেবিল দিয়ে উদাহরণস্বরূপ:

Votes before    Button    Is ^?    Compare <    Add     Subtract 1
     1            ^         1         0          1          0
     1            v         0         0          0         -1
     0            ^         1         1          2          1
     0            v         0         0          0         -1
    -1            ^         1         1          2          1
    -1            v         0         1          1          0


22

x86 মেশিন কোড, 24 বাইট

31 C0 8A 11 84 D2 75 07 C0 E0 02 C0 F8 06 C3 41 38 C2 74 EC 88 D0 EB EA

এটি ফাস্টকল কলিং কনভেনশন ব্যবহার করে একটি ফাংশন, যা একটি স্ট্রিং নেয় এবং একটি 8-বিট পূর্ণসংখ্যা ফেরত দেয়।

আমি এটি নিম্নলিখিত সি প্রোগ্রামের সাথে পরীক্ষা করেছি, যা অবশ্যই 32-বিট মোডের জন্য সংকলন করা উচিত।

#include <stdio.h>
#include <inttypes.h>

 __attribute__ ((aligned (16))) const unsigned char fun[] = {

    0x31,  //xor eax,eax
        0xC0,
    0x8A, //mov [ecx],dl
        1 | 2<<3,
    0x84, //test dl, dl
        0xC0 | 2<<3 | 2,
    0x75, // jnz
        7,
    0xC0, //shl al 2
        0xC0 | 4<<3,
        2,
    0xC0, //sar al 6
        0xC0 | 7<<3,
        6,
    0xC3, //ret
    0x41, //inc ecx
    0x38, //cmp al,dl
        0xC0 | 2,
    0x74, //je
        -20,
    0x88, //mov dl,al
        0xC0 | 2<<3,
    0xEB, //jmp
        -22,
};

int main()
{
    __fastcall int8_t (*votesimulator)(char*) = fun;
    char* s[] = {
        "",
        "^^",
        "^v",
        "^",
        "v",
        "v^",
        "vv",
        "^^^",
        "vvv",
        "^^^^",
        "vvvv",
        "^^^^^",
        "vvvvv",
        "^^^^^^",
        "vvvvvv",
        "^^v",
        "^v^",
        "^vv",
        "vv^",
        "v^v",
        "v^^",
        "^vvv^^vv^vv^v^",
        "^vvv^^vv^vv^v^^",
        "^vvv^^vv^vv^v^^^",
        "^vvv^^vv^vv^v^^v",
        "^vvv^^vv^vv^v^^vv",
        "^vvv^^vv^vv^v^^vvv",
        "^vvvvvvvvvvvv",
        "^^vvvvvvvvvvvv",
        "^^^vvvvvvvvvvvv",
        "vvv^^^^^^^^^^^^",
        "vv^^^^^^^^^^^^",
        "v^^^^^^^^^^^^",
    };

    for(int i = 0; i < sizeof(s)/sizeof(*s); i++)
        printf("%d\n", votesimulator(s[i]));

    printf("\n%d\n", sizeof(fun));
    for(int i = 0; i < sizeof(fun); i++)
        printf("%02X ", fun[i]);
    return 0;
}

এটি কি অনুমোদিত? আমি বলতে চাই যে আমি সিটিতে পুরো জিনিসটিও লিখতে পারি এবং কেবল বলতে পারি যে সি কোডের কাজটি সম্পাদনের জন্য একটি ফাঁকা ফাইলের প্রয়োজন আছে যখন আমার কোডটি আমার কোড 0 বাইটস হয়ে যাওয়ার কাঠামো। কেন আপনার সমাধান থেকে এই diferent হয়?
জায়েবিস

@ জাইবিস কারণ আমার সমাধানে এমন কোড রয়েছে যা চ্যালেঞ্জ সমাধান করে? Meta.codegolf.stackexchange.com/a/1071/30688 দেখুন ।
ফেয়ারসাম

21

জাভাস্ক্রিপ্ট (ES7), 47 46 44 43 37 36 বাইট

ক্রস আউট 44 এখনও নিয়মিত 44 :(

s=>[for(x of s)s=x<"v"?s!=1:!~s-1]|s

মোট চলমান রাখে sfor ofস্ট্রিং এবং প্রতিটি sঅক্ষর এবং পূর্ববর্তী মানের উপর ভিত্তি করে আপডেট প্রতিটি অক্ষর উপর পুনরাবৃত্তি করতে লুপ ব্যবহার করে ।

সম্পাদনা: গল্ফড ~s&&-1টু !~s-1sঅন্যথায় -1 এবং -1 সমান হলে এই এক্সপ্রেশনটি 0 এর সমান হবে। @ রাইডারকোর ধন্যবাদ 6 বাইট সংরক্ষণ করা।

এক্সপ্রেশনটি কীভাবে কাজ করে:

 ~s    // Bitwise inverse. ~s==0 only if s==-1
!      // Logical negate. Casts to boolean. Equivalent to s==-1
   -1  // Subtract. Casts to number so true-1 is 1-1 and false-1 is 0-1

3
আমি এটিকে 37 বাইটে v=>[for(x of v)v=x<"v"?~~v<1:!~v-1]|v
নামিয়েছি

আর্ডস্কোর আরে, দুর্দান্ত। আমি ভেবেছিলাম অতিরিক্ত পরিবর্তনশীল আনাড়ি, কিন্তু আমি ভাবতে পারি না যে আমি এটিকে নির্মূল করতে পারি।
ইন্ট্রিপিডকোডার

1
ক্রস করা হয়েছে 44 এখনও নিয়মিত 44 ...
Rɪᴋᴇʀ

অনুমান থেকে অ্যারে বোঝাপড়া মুছে ফেলা হয়নি?
মেয়রমন্টি

8

সিজেম, 18 14 বাইট

ডেনিস দ্বারা অবদানযুক্ত উল্লেখযোগ্য উন্নতির সাথে আপডেট সংস্করণ:

0'jqf{-g_@=!*}

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

ব্যাখ্যা:

0     Start value for running total.
'j    Push character between '^ and 'v for use in loop.
q     Get input.
f{    Apply block with argument to all input characters.
  -     Subtract character from 'j. This will give -12 for '^, 12 for 'v.
  g     Signum, to get 1 for '^, -1 for 'v, which is our increment value.
  _     Copy increment value.
  @     Bring running total to top.
  =     Compare. This will give 1 for the -1/-1 and 1/1 combinations where the new
        running total is 0. Otherwise, the new running total is the increment value.
  !     Negate to get 0 for the -1/-1 and 1/1 cases.
  *     Multiply result with increment value, to get new running total.
}     End block applied to input characters.

7

বেফঞ্জ 93 - 55 বাইট

vj#p01:>#<:1+|
>~:10g-|v:g25<
^p01"j"<1^   <
./*34-g0<@

52 টি অক্ষর এবং 3 টি নতুন লাইন।

এই দোভাষীর উপর পরীক্ষিত ।

jথেকে সমদূরবর্তী হয় ^এবং vতাই এটি বরং স্থান গ্রাসকারী কন্ডিশন চেয়ে শেষ গাণিতিক ধর্মান্তর করতে ব্যবহৃত হচ্ছে ASCII হবে।


7

ব্রেনফাক, 146 বাইট

,[[>->+<<-]>[[-]>[<+>-]]>[-]<<[<],]----[>-----<--]--[>>+<<++++++]+>[<-]<[->>++.<++++[<------>-]]>[<+<<]----[>+++++<--]>[,+<]>>[<<]-[>+<-----]>---.

এই প্রোগ্রামটি প্রতিটি বাইট ইনপুট নেয় এবং এটি শেষের সাথে তুলনা করে। যদি সেগুলি একই হয় তবে এটি ইনপুটটিকে ফেলে দেয় এবং "0 "টিকে" পূর্ববর্তী ইনপুট "হিসাবে সংরক্ষণ করে, অন্যথায় এটি এটিকে সাধারণত সংরক্ষণ করে।

চূড়ান্ত ফলাফল যদি হয় v, এটি মুদ্রণ -। যদি চূড়ান্ত ফলাফলটি শূন্য নয়, 1 খালি ঘরে যুক্ত করা হয়। অবশেষে, 48 টি সেলে যুক্ত হয় এবং এটি মুদ্রিত হয়।


7

জাভাস্ক্রিপ্ট ES6, 91 48 অক্ষর

s=>~~{'^':1,v:-1}[s.replace(/(.)\1/g).slice(-1)]

ব্যাখ্যা: undefinedদ্বারা শেষ হয় d

টেস্ট:

` -> 0
^^ -> 0
^v -> -1
^ -> 1
v -> -1
v^ -> 1
vv -> 0
^^^ -> 1
vvv -> -1
^^^^ -> 0
vvvv -> 0
^^^^^ -> 1
vvvvv -> -1
^^^^^^ -> 0
vvvvvv -> 0
^^v -> -1
^v^ -> 1
^vv -> 0
vv^ -> 1
v^v -> -1
v^^ -> 0
^vvv^^vv^vv^v^ -> 1
^vvv^^vv^vv^v^^ -> 0
^vvv^^vv^vv^v^^^ -> 1
^vvv^^vv^vv^v^^v -> -1
^vvv^^vv^vv^v^^vv -> 0
^vvv^^vv^vv^v^^vvv -> -1
^vvvvvvvvvvvv -> 0
^^vvvvvvvvvvvv -> 0
^^^vvvvvvvvvvvv -> 0
vvv^^^^^^^^^^^^ -> 0
vv^^^^^^^^^^^^ -> 0
v^^^^^^^^^^^^ -> 0`
.split("\n").map(s => s.split(" -> "))
.every(([s,key]) => (s=>~~{'^':1,v:-1}[s.replace(/(.)\1/g).slice(-1)])(s)==key)

উত্তরের ইতিহাস:

s=>({'':0,'^':1,v:-1}[s.replace(/^(.)\1(\1\1)*(?=.?$)|.*(.)(((?!\3).)\5)+/,"").substr(-1)])
s=>~~{'^':1,v:-1}[s.replace(/^(.)\1(\1\1)*(?=.?$)|.*(.)(((?!\3).)\5)+/,"").substr(-1)]
s=>~~{'^':1,v:-1}[s.replace(/^.*(.)(((?!\1).)\3)+|(.)\4(\4\4)*/,"").substr(-1)]
s=>~~{'^':1,v:-1}[s.replace(/^.*(.)(((?!\1).)\3)+|(.)\4(\4\4)*/,"").slice(-1)]
s=>~~{'^':1,v:-1}[s.replace(/.*(.)(((?!\1).)\3)+|(.)\4(\4\4)*/,"").slice(-1)]
s=>~~{'^':1,v:-1}[s.replace(/.*(.)(((?!\1).)\3)+|((.)\5)*/,"").slice(-1)]
s=>~~{'^':1,v:-1}[s.replace(/((.)\2)+/g,"!").slice(-1)]
s=>~~{'^':1,v:-1}[s.replace(/(.)\1/g,"!").slice(-1)]
s=>~~{'^':1,v:-1}[s.replace(/(.)\1/g,0).slice(-1)]
s=>~~{'^':1,v:-1}[s.replace(/(.)\1/g).slice(-1)]

7

পাইথন 2, 49

lambda s:reduce(lambda x,c:cmp(cmp('u',c),x),s,0)

আপডেট ফাংশন দিয়ে Iterates

lambda x,c:cmp(cmp('u',c),x)

এটি বর্তমান ভোট গণনা xএবং নতুন চরিত্র গ্রহণ করে cএবং নতুন ভোট গণনার ফলাফলকে সরিয়ে দেয়।

ধারণা পাইথন 2 এর ব্যবহার করা cmpফাংশন, যা তার দুই args তুলনা এবং দেয় -1, 0, 1জন্য <, ==, >যথাক্রমে। ভেতরের এক cmp('u',c)দেয় -1জন্য vএবং 1জন্য ^; তাদের মধ্যে যে কোনও চরিত্রই যথেষ্ট 'u'। বাইরের এক তারপর যে তুলনা x, যা দেয় cmp(1,x)জন্য ^এবং cmp(-1,x)জন্য v, যা ডান মান আছে।

প্রত্যক্ষ পুনরাবৃত্তি 3 অক্ষর দীর্ঘ ছিল (52), যদিও একটি বর্গ সংক্ষিপ্ত হবে (48) যদি input()উদ্ধৃতি সহ একটি গ্রহণের অনুমতি দেওয়া হয়েছিল।

x=0
for c in raw_input():x=cmp(cmp('u',c),x)
print x

আমি খুঁজে পাওয়া সেরা পুনরাবৃত্তির কাজটি ছিল একটি চরের দীর্ঘতর (50)

f=lambda s:len(s)and cmp(cmp('u',s[-1]),f(s[:-1]))

5

প্রোলোগ, 159 152 বাইট

কোড:

v(1,^,0).
v(1,v,-1).
v(0,^,1).
v(0,v,-1).
v(-1,^,1).
v(-1,v,0).
r(X,[H|T]):-T=[],v(X,H,Z),write(Z);v(X,H,Z),r(Z,T).
p(S):-atom_chars(S,L),r(0,L).

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

উদাহরণ

>p("^vvv^^vv^vv^v^^vvv").
-1

>p("^vvv^^vv^vv^v^")
1

সম্পাদনা করুন: ওআর এর সাথে আর-ক্লজগুলি একীকরণ করে 7 বাইট সংরক্ষণ করা হয়েছে।


হুম। দেখে মনে হচ্ছে আপনি ফাংশনগুলি সংজ্ঞায়িত করার পরিবর্তে অপারেটরগুলি পুনরায় সংজ্ঞায়িত করে বেশ কয়েকটি বাইট সংরক্ষণ করতে পারবেন (যদি এটি পিপিসিজির নিয়ম অনুসারে একটি ফাংশন হিসাবে গণনা করা হয়?)
এএসসিআইআই

@ এএসসিআইআই কেবল: হ্যাঁ আমি যখন এটি লিখেছিলাম তখন সেই কৌশলটি
শিখিনি

4

সিজেম, 16 বাইট

0re`W=(2%*c'a--g

প্রযোজ্য ক্ষেত্রে 0 টি মুদ্রণের পরে এটি ক্রাশ হবে । ত্রুটিটি জাভা দোভাষী দ্বারা দমন করা যায়। আপনি যদি অনলাইনে এটি ব্যবহার করে থাকেন তবে আউটপুটের শেষ লাইন ব্যতীত সমস্ত কিছু উপেক্ষা করুন।

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

0                e# Push a 0 on the stack.
 r               e# Read a whitespace-separated token from STDIN.
  e`             e# Perform run-length encoding.
    W=           e# Select the last [repetitions character] pair.
                 e# This will fail for the empty string, so the
                 e# interpreter will print the stack's only element (0).
      (          e# Shift out the number of repetitions.
       2%        e# Compute its parity.
         *       e# Create a string, repeating the character 1 or 0 times.
          c      e# Cast to character.
                 e# This will fail for a zero-length string, so the
                 e# interpreter will print the stack's only element (0).
           'a-   e# Subtract the character 'a' from '^' or 'v'.
              -  e# Subtract the difference (integer) from 0.
               g e# Apply the sign function.

4

পাইথন 2, 177 159 72 বাইট

এখনও এই কোড গল্ফ জিনিস নতুন।

def v(s): 
 c=0 
 for i in s:c=((0,1)[c<1],(0,-1)[c>-1])[i=="^"] 
 return c

সম্পাদনা: ভুল আচরণ স্থির করে।
সম্পাদনা 2: প্রচুর বাইট কামিয়ে দেওয়ার জন্য @ মরগানথ্র্যাপকে ধন্যবাদ Thanks


স্ট্রেঞ্জ। আমি এটার দিকে নজর রাখব.
DJgamer98

দেখা যাচ্ছে আমি ভুলে গেছি সঠিক v তারপরে v আচরণ (এবং তদ্বিপরীত)।
DJgamer98

পোস্টটি স্থির না হওয়া পর্যন্ত মোছা হচ্ছে।
DJgamer98

এটা এখন কাজ করা উচিত।
DJgamer98

1
এই ইন্ডেন্টেশনটি ঠিক সঠিক নয়, আমি ঠিক ডান ইন্ডেন্টেশন সহ একটি সম্পাদনার পরামর্শ দিয়েছি। আপনি মন্তব্যে কোড ফর্ম্যাট করতে পারবেন না, তাই এটি আমার পক্ষে ভুল ছিল।
মরগান থ্রাপ

4

জাভাস্ক্রিপ্ট (ES6), 64 59 58 52 বাইট

f=v=>(t=/\^*$|v*$/.exec(v)[0]).length*(t<'v'?1:-1)%2

এটি পর্যবেক্ষণের ভিত্তিতে তৈরি হয়েছে যে পুনরাবৃত্তির কেবলমাত্র শেষ প্রসার (উভয় ^বা এর v) ফলাফলকে প্রভাবিত করে।

6 বাইট বন্ধ করে গল্ফ করার জন্য নীলকে ধন্যবাদ জানাই।


1
আপনার ক্যাপচারগুলি কেন দরকার? আমার মনে হয় f=v=>(t=/\^*$|v*$/.exec(v)[0]).length*(t<'v'?1:-1)%2যথেষ্ট।
নিল

@ নীল: অ্যারে প্রথম উপাদান >বা <অপারেটরে জোর করা সম্পর্কে আমি অবগত নই । টিপসের জন্য ধন্যবাদ
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

কোনও ধরণের জবরদস্তি জড়িত নয়, আমি কেবল এটি সরিয়েছি [0]যা আপনাকে বিভ্রান্ত করেছে।
নিল

@ নীল: ওহ, আমি সত্যিই বিভ্রান্ত আমি বুঝতে পারি নি যে আপনি এটি ভিতরে নিয়ে এসেছেন, আমি ভেবেছিলাম এটি ছিল f=v=>(t=/\^*$|v*$/.exec(v))[0].length*(t<'v'?1:-1)%2যা অ্যারের সাথে জোর করে টাইপ করার কারণে কাজ করে।
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

4

হাস্কেল, 40 বাইট

1%'^'=0
_%'^'=1
1%_=-1
_%_=0
v=foldl(%)0

fইনফিক্স ফাংশন হিসাবে সংজ্ঞা দিয়ে আপনি সমস্ত স্পেস কাটতে পারেন %। এছাড়াও, আমি মনে করি একটি vহতে পারে _
xnor

আসলে, এই দেয় না -1জন্য vvপরিবর্তে 0?
xnor

ওহ, আমি সবসময় ইনফিক্সগুলি সম্পর্কে ভুলে যাই। স্পটের জন্য ধন্যবাদ, অভ্যন্তরীণ বিপরীতটি মিস করল।
লিফ উইলার্টস

তৃতীয় লাইন (15 অক্ষর) এর সাথে 1%_=-1 _%_=012 টি অক্ষর প্রতিস্থাপন করে 3 টি অক্ষর সংরক্ষণ করুন ।
কেভিন রেড

ঠিক আছে, এখন এটি খাটো হয়ে গেছে।
লিফ উইলার্টস

4

স্কালা, 75 বাইট

def d(s:String)=s./:(0){case(1,94)|(-1,'v')=>0;case(_,94)=> 1;case _=> -1}

বাস্তবায়িত ফাংশনের জন্য পরীক্ষা।

  object Util {
        def d(s: String) = s./:(0) { 
    case (1, '^') | (-1, 'v') => 0
    case (_, '^') => 1
    case (_, _) => -1
  }      
      def main(s: Array[String]): Unit = {
        println("1 == " + d("^vvv^^vv^vv^v^^^"))
        println("1 == " + d("^vvv^^vv^vv^v^"))
        println("-1 == " + d("^vvv^^vv^vv^v^^vvv"))
        println("0 == " + d("^^^vvvvvvvvvvvv"))
        println("0 == " + d("vvv^^^^^^^^^^^^"))
      }
    }

1
পিপিসিজিতে আপনাকে স্বাগতম! আপনি কি দয়া করে একটি ব্যাখ্যা এবং / অথবা একটি বর্ণহীন সংস্করণ যুক্ত করতে পারেন?
অ্যাডিসন ক্রম্প

3

এপিএল, 17

(⊣×≠)/⌽0,2-'^ '⍳⍞

কাঁটাচিহ্ন ছাড়াই দোভাষীদের (জিএনইউ এপিএলের মতো), এটি হবে {⍺×⍺≠⍵}/⌽0,2-'^ '⍳⍞(19)। এটি সম্ভবত সম্ভাব্য সমাধানগুলির মধ্যে সবচেয়ে বিরক্তিকর কারণ এটি সমস্যার সংজ্ঞা থেকে সরাসরি কাজ করে।


3

রুবি, 41 35 বাইট

Regex। চাপানো কেবলমাত্র শেষ বোতামটি আকর্ষণীয়, সুতরাং এটির রান-দৈর্ঘ্য পরীক্ষা করুন। তারপর এটি তুলনা "a"(অথবা মধ্যে কোনো চিঠি ^এবং v) পেতে 1বা -1

->s{s[/(.?)\1*$/].size%2*(?a<=>$1)}

3

সি # 6, 18 + 80 = 98 বাইট

প্রয়োজন:

using System.Linq;

আসল ফাংশন:

int S(string v)=>v.Split(new[]{"^^","vv"},0).Last().Length<1?0:v.Last()<95?1:-1;

এটি কীভাবে কাজ করে: কোডটি সর্বশেষ ^^বা শেষের আগে সমস্ত কিছু সরিয়ে দেয় vv। সেই সামগ্রীটি প্রাসঙ্গিক নয় কারণ একই বোতামটি দু'বার ক্লিক করা সর্বদা আপনার ভোট বাতিল করে দেবে। এটি বিভক্ত হয়ে ^^এবং vvশেষ আইটেমটি গ্রহণ করে এটি করে। যদি এই আইটেমটি খালি স্ট্রিং ( .Length<1) হয়, তবে ফাংশনটি ফিরে আসে 0কারণ সমস্ত ভোটদান বাতিল করা হয়েছে। যদি স্ট্রিংটি খালি না হয়, তবে এটি কেবল মূল স্ট্রিংয়ের শেষ চরকে দেখায়: এটি পূর্ববর্তী সমস্ত ভোটগুলিকে ওভাররাইড করবে। চর কোডটি যদি 95 এর চেয়ে কম হয় তবে এটি 94 হবে ^, সুতরাং এটি 1অন্যথায় ফিরে আসে -1


3

পাইথন 2.7, 79 75 88

s=input()
print (0,(1,-1)[s[-1]=='v'])[len(s[s.rfind(('v^','^v')[s[-1]=='v'])+1:])%2!=0]

এটি আসলে কিছু মুদ্রণ করে না।
মরগান থ্রাপ


কারণ আপনি এটি আরপিএলে চালাচ্ছেন। আপনাকে একটি সম্পূর্ণ প্রোগ্রাম সরবরাহ করতে হবে যা REPL এর বাইরে কাজ করবে।
মরগান থ্রাপ

এছাড়াও, আপনি (-1,(1,0)[n==0])[n>0]10 টি বাইট সংরক্ষণ করতে এই তিনটি ছোট করতে পারেন । এছাড়াও, ব্যবহার করবেন না a=str.count। এটির জন্য আসলে আপনার 4 বাইট খরচ হয়।
মরগান থ্রাপ

এটি এন = 0 এর জন্য -1 উত্পাদন করে তবে শীতল বাক্য গঠন
wnnmaw

2

মিনকোলাং 0.11 , 28 22 বাইট

0$I2&N."j"o-34*:dr=,*!

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

ব্যাখ্যা

0                         Push a 0 (running total)
 $I                       Push length of input
   2&N.                   Output as integer and stop if this is 0
       "j"                Push 106
          o               Take character from input (94 for ^, 118 for v)
                          <<so ^ becomes +12 and v becomes -12>>
           -              Subtract
            34*:          Divide by 12
                d         Duplicate top of stack
                 r        Reverse stack
                  =,      Push 0 if equal, 1 otherwise
                    *     Multiply
                          <<this handles two of the same vote in a row>>
                     !    Unconditional trampoline (jumps the 0 at the beginning)

মনে রাখবেন যে N.শেষ নেই। এর কারণ আমি এটিকে প্রথম দিকে মোড় করতে দিয়েছি। যখন ইনপুট খালি থাকে, চূড়ান্ত ট্যালিটি পূর্ণসংখ্যা হিসাবে আউটপুট হয় এবং প্রোগ্রামটি বন্ধ হয়ে যায়।




2

শেপ স্ক্রিপ্ট , 26 বাইট

"^"$"0>1@-"~"v"$"0<1-"~0@!

এটি কীভাবে জেগে উঠেছে:

"^"$     split input on '^'
"
  0>         Check if the number is more than 0 (1 if true, 0 if false).
  1@-        subtract the answer from one.
"~       Join it back together, with this string in place of '^'
"v"$     Split on 'v'
"        
  0<         Check if 0 is more than the number (1 if true, 0 if false).
  1-         subtract one from the results
"~       Join it back together, with this string in place of 'v'
0@       add a zero to the stack and place it under the string just built. 
!        run the string as code

2

সি # 6, 18 + 97 95 = 115 113 বাইট, কোনও স্ট্রিং পদ্ধতি নেই, অতিরিক্ত লিংক

int v(string s)=>(int)s.Reverse().TakeWhile((c,i)=>i<1||c==s[s.Length-i])?.Sum(x=>x<95?1:-1)%2;

সত্যই এর পূর্ববর্তী হতে প্রাপ্য

using System.Linq;

ব্যবহার করার ব্যাপারে পেয়েছেন x<95?1:-1পরিবর্তে x=='^'?1:-1থেকে ProgramFOX এর উত্তর

coincidences:

  • আমি যে টুইটটি চুরি করেছি তা 95 এর সাথে তুলনা করে ব্যবহার করেছে - বাইট গণনাটি ব্যবহারের বিবৃতিটি বাদ দিয়ে বলেছে
  • মোট বাইট গণনার অঙ্কের যোগফল রোমান অঙ্ক হিসাবে লেখা মোট বাইট গণনার অঙ্কের সমান

2

সি: 67 66 বাইট

golfed:

void f(char *v){int i=0,c,s=0;for(;v[i]!=0;i++){v[i]>94?s--:s++;}}

ungolfed:

void f (char *v)
{
    int i = 0, c, s = 0;

    for (;v[i]!=0;i++)
    {
        v[i] > 94 ? s-- : s++;
    }
}

এটি কোনও ফল দেয় না। এটি সব পরীক্ষায় পাস করে না।
রবার্ট আন্দ্রেজুক

2

যান, 179 বাইট

একটি অত্যন্ত নিষ্পাপ সমাধান।

package main
import(."fmt"."strings")
func main(){a:=""
i:=0
Scanln(&a)
b:=Split(a,"")
for _,e:=range b{switch i{case 1:i--
case 0:if e=="^"{i++}else{i--}
case-1:i++}}
Println(i)}

Ungolfed:

package main

import (
    ."fmt"
    ."strings"
)

func main() {
    a := ""
    i := 0
    Scanln(&a)
    b := Split(a, "")
    for _, e := range b {
        switch i {
        case 1:
            i--
        case 0:
            if e == "^" {
                i++
            } else {
                i--
            }
        case -1:
            i++
        }
    }
    Println(i)
}

2

পার্ল 5, 41 বাইট

40 বাইট, আরও 1 -p

/(.)\1*$/;$_=((length$&)%2)*($1=~v?-1:1)

/(.)\1*$/;ইনপুট স্ট্রিংটিকে /(.)\1*$/রেজেক্সের সাথে তুলনা করে , অর্থাত্ এটি কোনও একক অক্ষর দিয়ে শেষ হয় কিনা তা দেখুন some1 বারের সংখ্যাটি পুনরাবৃত্তি করে।

যদি তাই $&হয় তবে পুরো পুনরাবৃত্তি স্ট্রিং এবং $1চরিত্রটি হ'ল; অন্যথায় (যেমন ইনপুট স্ট্রিং খালি), এই দুটি ভেরিয়েবল হ'ল খালি স্ট্রিং।

$1=~v?-1:1$1রেজেক্সের সাথে তুলনা করে এবং matches1 এর সাথে vমেলে যদি এটি মেলে এবং অন্যথায় 1 করে।

এবং যে মডেলো 2 (length$&)%2দৈর্ঘ্য 2 ± 1 দ্বারা গুন $&


2

05 এ বি 1 ই , 14 12 11 বাইট

Îvy'^QDŠ‹+<

@ স্প3000 এর গোল> <> উত্তরটির বন্দর ।

দ্রষ্টব্য: @ গ্রিমি ইতিমধ্যে 05AB1E এর জন্য একটি ছোট 8 বাইট বিকল্প পোস্ট করেছে , তাই নিশ্চিত করুন যে তাকে আপভোট করুন !

এটি অনলাইনে চেষ্টা করুন বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা:

Î            # Push 0 (later mentioned as `r`) and the input-string
 v           # Loop over the characters of the input:
  y'^Q      '#  Does the current character equal "^"?
             #  (results in 1 for truthy; 0 for falsey - later mentioned as `b`)
      D      #  Duplicate this result `b`
       Š     #  Triple swap (`r`,`b`,`b`) to (`b`,`r`,`b`)
            #  Check if the boolean `b` is smaller than the result-integer `r`
             #  (again results in 1 for truthy; 0 for falsey)
         +   #  Add them together
          <  #  Decrease this by 1
             # (Implicitly output the result-integer `r` after the loop)

2

05 এ বি 1 ই , 8 বাইট

㤮öÓÆ.±

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

একই দৈর্ঘ্য সহ বিকল্প সমাধান: u㤮öÓÆ(, 㤮ögÓÆ(


1
এটি কাজ করে না। আপনার পোস্টকৃত কোড বা টিআইও লিঙ্কের কোড (যা ভিন্ন) ^^ -> 0
কোনওটিই

এটি প্রকাশের জন্য ইমেনাকে ধন্যবাদ! আমি কোডটি ঠিক করেছি, এটি এখনও 8 বাইট 8
গ্রিমি


1

রুবি, 43

->s{a=0
s.bytes{|i|b=9-i/11;a=a!=b ?b:0}
a}

9-i/11^(94) বা v(118) এর এসকি কোড দেওয়া হলে 1 বা -1 এ মূল্যায়ন করে

পরীক্ষার প্রোগ্রামে:

f=->s{a=0
s.bytes{|i|b=9-i/11;a=a!=b ?b:0}
a}

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