चुनाव हैक करो


46

आप एक पेशेवर हैकर हैं और आपके बॉस ने आपको केवल एक उम्मीदवार को आगामी चुनाव जीतने में मदद करने का आदेश दिया है। आपका काम उम्मीदवार के परिणामों को बढ़ावा देने के लिए वोटिंग मशीनों के डेटा को बदलना है।

मतदान मशीनें दो पूर्णांकों के रूप में मतदान परिणामों को संग्रहीत करती हैं: आपके उम्मीदवार के लिए वोटों की संख्या ( v1) और उनके प्रतिद्वंद्वी के लिए वोटों की संख्या ( v2)।

हफ्तों के अनुसंधान के बाद, आपको सिस्टम में एक सुरक्षा छेद मिला है और आप v1एक पूर्णांक द्वारा मान बढ़ा सकते हैं x, और v2उसी के मूल्य को घटा सकते हैं x। लेकिन एक अड़चन है, आपको सुरक्षा हैश कोड स्थिर रखना होगा:

  • सुरक्षा हैश कोड: (v1 + v2*2) modulo 7

इसके अलावा, मूल्य xकम से कम होना चाहिए ताकि आपके परिवर्तन किसी का ध्यान न जा सकें।

आपके कार्यक्रम को इनपुट के रूप में स्वीकार करना चाहिए v1और v2; इसके लिए उत्पादन इष्टतम मूल्य चाहिए xतो v1>v2

कुछ मामले हैं जिनके लिए आप परिणामों को हैक नहीं कर सकते हैं; आपको उन्हें संभालने की आवश्यकता नहीं है (यह आपके बॉस के साथ समस्याएं पैदा कर सकता है, लेकिन यह एक और कहानी है)।

परीक्षण के मामलों

100,123 --> 14
47,23 --> 0
40,80 --> 21
62,62 --> 7
1134,2145 --> 511

4
टिप्पणियाँ विस्तारित चर्चा के लिए नहीं हैं; इस वार्तालाप को बातचीत में स्थानांतरित कर दिया गया है ।
डेनिस

11
इसके अलावा, करीबी मतदाताओं के लिए: यह पूरी तरह से विषय है। यदि आपको यह पसंद नहीं है, तो आप इसे डाउनवोट कर सकते हैं।
17

10
एक सुरक्षित हैश फ़ंक्शन क्या है!
Cruncher

क्या आप मान सकते हैं कि इनपुट्स इसके बाद हैं .0(जैसे 100.0 123.0)?
फल

जवाबों:


21

पायथन 2, 30 बाइट्स

lambda u,t:max(0,(t-u)/14*7+7)

uहमारे वोट हैं, tउनके वोट हैं।


3
(t-u)/14*7बस नहीं हो सकता है (t-u)/2?
कॉनर ओ'ब्रायन

2
ओह, रुको, कभी नहीं, Py2 पूर्णांक विभाजन करता है
कॉनर ओ'ब्रायन

@ कोनोरो ब्रायन नोप। विचार करें t-u == 16। फिर
16/14

@orlp मुझे नहीं पता कि किससे पूछना है, इसलिए मैं आप दोनों से पूछूंगा, क्या आप मुझे समझा सकते हैं कि आपने यह कैसे सोचा? y<x?0:(y-x)/2-(y-x)/2%7+7;, मैंने सोचा कि मुझे अंतर को आधे हिस्से में विभाजित करना चाहिए, और फिर निकटतम बहुतायत में 7 मिलेंगे। आप इस तक कैसे पहुंचे?
वेड टायलर

1
यही समाधान ऊपर है
उपयोगकर्ता नाम

20

पायथन 2, 30 बाइट्स

lambda a,b:max((b-a)/14*7+7,0)

3
@orlp हाँ, मुझे लगता है कि यह अभिव्यक्ति लिखने का एक तरीका है। जब तक एक पुनरावर्ती समाधान कम नहीं होता है, जो मुझे संदेह है।
xnor

1
@xnor मुझे नहीं पता कि किससे पूछना है, इसलिए मैं आप दोनों से पूछूंगा, क्या आप मुझे समझा सकते हैं कि आपने यह कैसे सोचा? y<x?0:(y-x)/2-(y-x)/2%7+7;, मैंने सोचा कि मुझे अंतर को आधे हिस्से में विभाजित करना चाहिए, और फिर निकटतम बहुतायत में 7 मिलेंगे। आप इस तक कैसे पहुंचे?
वेड टायलर

2
@WadeTyler हम 7 की सबसे छोटी बहु को देख रहे हैं जो कड़ाई से आधे से ज्यादा अंतर है। यह पता लगाने के लिए (b-a)/2, हम /7*77 के निकटतम गुणक में राउंड डाउन करते हैं, और फिर +7अगले अप में जाते हैं। यही है, जब तक कि हम एक नकारात्मक संख्या प्राप्त नहीं करेंगे, जिस स्थिति में हम वैसे भी जीत रहे हैं, सिर्फ 0. कर सकते हैं। max0 को प्राप्त करने के साथ। इसमें से कुछ सिर्फ अभिव्यक्ति को तोड़ मरोड़ कर पेश कर रहे थे और परीक्षण के मामलों पर यह देखने के लिए कि क्या काम करता है।
xnor

2
@AdeTyler /7*7एक प्रकार की अभिव्यक्ति है जो गोल्फिंग में अक्सर दिखाई देती है जो मुझे एक मुहावरा लगता है। विचार यह है कि n/7किस मंजिल को लिया जाए n/7, यानी यह पाया जाता है कि कितने सारे गुणक 7फिट हैं n। फिर, गुणा करके 7इसे उस संख्या कई पर लाया जाता है 7
xnor

1
@JackAmmo यह उदाहरण देता है -2/7*7, और चूंकि पायथन फ्लोर-डिवीजन के चक्कर में नकारात्मक अनंत की ओर है, 2/7-1 है, इसलिए 7*-7+10. है , इसलिए दोनों पक्ष 0 देते हैं, जो ठीक काम करता है।
xnor

13

गणितज्ञ, 22 बाइट्स

0//.x_/;2x<=#2-#:>x+7&

तर्कों के साथ शुद्ध कार्य #और #2। अगर विसंगति से अधिक है, तो अधिकतम पुनरावृत्ति की गहराई तक पहुँचता है 7*2^16 = 458752

व्याख्या

0                       Starting with 0,
 //.                    repeatedly apply the following rule until there is no change:
    x_                    if you see an expression x
      /;                    such that
        2x<=#2-#            2x <= #2-# (equivalently, #+x <= #2-x)
                :>        then replace it with
                  x+7       x+7 (hash is preserved only by multiples of 7)
                     &  End the function definition

4
क्या आप इस सब के लिए स्पष्टीकरण जोड़ सकते हैं?
पावेल

@Pavel शायद आपकी टिप्पणी लगातार जारी रही क्योंकि मेरी व्याख्या अस्पष्ट थी?
जन्मजात

मुझे लगा कि यह ठीक है, लेकिन फिर मैं भी गणितज्ञ को जानता हूं।
पावेल

@ वेल यह अब बेहतर है :)
21


6

दरअसल , 13 बाइट्स

7;;τ((-\*+0kM

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

उसी max((b-a)/14*7+7,0)सूत्र का उपयोग करता है जो xnor और orlp उपयोग करता है।

स्पष्टीकरण:

7;;τ((-\*+0kM
7;;            3 copies of 7
   τ           double one of them
    ((-        bring the inputs back to the top, take their difference
       \*+     integer divide by 14, multiply by 7, add 7
          0kM  maximum of that and 0

5
वास्तव में , यह एक महान जवाब है
ट्रोजनबीक एक्सिडेंट

मुझे लगता है कि इस भाषा का नाम जानबूझकर शीर्षक शीर्षक को पंचलाइन की तरह बनाने के लिए जानबूझकर था: "दोस्तों, वास्तव में , यह 13 बाइट्स हैं! चलो!"
पैट्रिक रॉबर्ट्स

@PatrickRoberts वास्तव में, यह सही है।
Mego

6

ग्रूवी, 41 37 बाइट्स

{x,y->[Math.floor((y-x)/14)*7+7,0].max()}

यह एक अनाम क्लोजर है। के लिए धन्यवाद xnorऔर orlpसूत्र के लिए और James holdernessएक बग ओर इशारा करते हुए के लिए।

intdiv()पूर्णांक विभाजन के लिए उपयोग किया जाने वाला पिछला समाधान, लेकिन यह //अजगर में प्रयुक्त से अलग तरीके से व्यवहार करता है ।

यहाँ कोशिश करो!


5

हास्केल, 30 24 बाइट्स

a#b=max 0$div(b-a)14*7+7

एक infix ऑपरेटर पहले अपने पसंदीदा उम्मीदवार के वोटों की संख्या लेता है। के साथ गोलाई के अन्य उत्तरों के समान तर्क का उपयोग करता है /14*7+7


2
किसी शर्त को पूरा करने वाला पहला मूल्य खोजना until: a#b=until(\c->a+c>b-c)(+7)0या बेहतर है a%b=until(>(b-a)/2)(+7)0। हालांकि एक अंकगणितीय सूत्र अभी भी कम होने की संभावना है।
xnor

1
ध्यान दें कि एक्सनोर के छोटे विकल्पों के अलावा head[...]लगभग हमेशा छोटा किया जा सकता है[...]!!0
लैकोनी

@ xnor: जब तक समाधान वापस Fractional aनहीं आता है , मुझे यकीन नहीं है कि अगर यह स्वीकार किया जाता है। साथ divयह हालांकि कम है, तो धन्यवाद है! अंततः गणितीय दृष्टिकोण का उपयोग किया - और वास्तव में, यह तब तक की तुलना में कम दो बाइट्स था। @ लायोनी: अच्छी गोल्फिंग, उस एक के बारे में नहीं जानता था, उसे याद रखेगा।
रेनजी

4

जे, 15 बाइट्स

0>.7+7*14<.@%~-

दिलचस्प है, मैं एक समस्या पर काम कर रहा था और मुझे लगा कि मेरे पास एक समाधान है लेकिन जैसा कि यह पता चला है कि मैं गलत था। ओह अच्छा। इसे ऑनलाइन आज़माएं! यहाँ परिणाम है:

   f =: 0>.7+7*14<.@%~-
   tests =: 123 100 ; 23 47 ; 80 40 ; 62 62 ; 2145 1134
   (,. f/ each) tests
┌─────────┬───┐
│123 100  │14 │
├─────────┼───┤
│23 47    │0  │
├─────────┼───┤
│80 40    │21 │
├─────────┼───┤
│62 62    │7  │
├─────────┼───┤
│2145 1134│511│
└─────────┴───┘

भविष्य में, TIO.run/nexus
Pavel

@Pavel नहीं, tio.run v2 है, नेक्सस केवल v1 संगतता के लिए है
ASCII-only

@ ASCII-only tio.run में नीचे की ओर एक डिस्क्लेमर है कि भविष्य में सभी जेनरेट किए गए पर्मलिंक टूट सकते हैं। मुझे लगता है कि मुझे इसे और अधिक महत्वपूर्ण बनाना चाहिए। परीक्षण के उद्देश्यों को छोड़कर, किसी को भी अपने समय पर v2 का उपयोग नहीं करना चाहिए।
डेनिस

@ डेनिस ओह, मुझे नहीं पता था! Asap संपादित करेंगे।
कॉनर ओ'ब्रायन

4

CJam, 13 12 15 बाइट्स

  • मार्टिन एंडर को एक बाइट धन्यवाद दिया।
  • मार्टिन एंडर के लिए 3 बाइट्स धन्यवाद जोड़ा गया।
  • ETHproductions के ]लिए [धन्यवाद बदला गया ।

q~\-Ed/m[)7*0e>

Blatantly orlp और xnor के तरीके चुराते हैं।

इनपुट एक स्थान से दो संख्याओं को अलग करता है: 100 123

स्पष्टीकरण:

q~\-Ed/m])7*0e>
q~\-            e# Input two numbers, swap and subtract them.
    E           e# Push 0xE (15)
     d/m]       e# Float divide and take the floor.
         )7*    e# Increment and multiply by 7.
            0e> e# Max of this and 0.

Dकेवल है 13। और आप 7 बाद में जोड़ने के बजाय गुणा से पहले मूल्य बढ़ाकर एक बाइट बचा सकते हैं।
मार्टिन एंडर

@JamesHolderness मुद्दा यह है कि पायथन का पूर्णांक विभाजन राउंड -inf की ओर काम करता है जबकि CJam का राउंड शून्य की ओर।
मार्टिन एंडर

मुझे गलतफहमी हो सकती है, लेकिन मुझे लगा m]कि छत है; m[मंजिल है।
ETHproductions

@ETHproductions आप सही हैं, संपादित किए गए हैं।
बजे फल

4

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

Immediates खिड़की समारोह है कि कोशिकाओं से इनपुट लेता है A1और B1VBE immediates खिड़की करने के लिए और आउटपुट।

?Int([A1-B1]/14)*7+7

सबरूटीन संस्करण, 43 बाइट्स

b, cVBE तुरंत खिड़की के रूप में variant \ integer और प्रिंट के रूप में इनपुट लेता है

Sub a(b,c):Debug.?Int((c-b)/14)*7+7:End Sub


3

PHP, 41 39 बाइट्स

    <?=7*max(0,1+($argv[2]-$argv[1])/14|0);

कमांड लाइन तर्कों से इनपुट लेता है; साथ चलाना -r

7 5 अतिरिक्त बाइट्स को संभालने के लिए $ a> $ b: - /


3

Japt , 14 बाइट्स

V-U /2+7 f7 w0

इसे यहाँ चलाओ!

3 बाइट्स बंद करने के लिए धन्यवाद ETHproductions!


1
बहुत अच्छा। fएक तर्क और उस संख्या के एक से अधिक मंजिलों को स्वीकार करता है, इसलिए मुझे लगता है कि आप V-U /2+7 f7 w0तीन बाइट्स बचा सकते हैं ।
ETHproductions

3

05AB1E , 9 बाइट्स

-14÷>7*0M

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

व्याख्या

-          # push difference of inputs
 14÷       # integer divide by 14
    >      # increment
     7*    # times 7
       0   # push 0
        M  # take max

या संख्या-युग्म पर समान बाइट-गिनती ऑपरेटिंग के साथ एक संबंधित फ़ंक्शन

Î¥14÷>7*M

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


2

दिल्लोग एपीएल , 14 बाइट्स

v1सही तर्क के v2रूप में और बाएं तर्क के रूप में लेता है।

07×1+(⌊14÷⍨-)

0 ⌈ अधिकतम शून्य और

7 × सात बार

1 + (... ) एक प्लस ...

 की मंजिल

14 ÷⍨ चौदहवें का

- अंतर (तर्कों के बीच)

TryAPL ऑनलाइन!


2

Befunge, 19 बाइट्स

777+:&&\-+\/*:0`*.@

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

यह थोडा भिन्न सूत्र पर निर्भर करता है जिसका उपयोग orlp और xnor द्वारा किया जाता है, क्योंकि Befunge reference दुभाषिया में Python के लिए अलग-अलग राउंडिंग नियम होते हैं। Befunge में किसी maxऑपरेशन की विलासिता भी नहीं होती है ।

मूल गणना इस तरह दिखती है:

x = (v2 - v1 + 14)/14*7
x = x * (x > 0)

अधिक विस्तार से कोड की जांच करना:

7                     Push 7                                      [7]
 77+:                 Push 14 twice.                              [7,14,14]
     &&               Read v1 and v2 from stdin.                  [7,14,14,v1,v2]
       \-             Swap the values and subtract.               [7,14,14,v2-v1]
         +            Add the 14 that was pushed earlier.         [7,14,14+v2-v1]
          \/          Swap the second 14 to the top and divide.   [7,(14+v2-v1)/14]
            *         Multiply by the 7 that was pushed earlier.  [7*(14+v2-v1)/14 => x]
             :        Make a copy of the result                   [x,x]
              0`      Test if it's greater than 0.                [x,x>0]
                *     Multiply this with the original result.     [x*(x>0)]
                 .@   Output and exit.



2

जावा 8, 31 बाइट्स

(a,b)->b<a?0:(a=(b-a)/2)+7-a%7;

यह एक लैम्ब्डा अभिव्यक्ति के लिए असाइन किया गया है IntBinaryOperator

ए आपके उम्मीदवार के वोट हैं, बी आपके प्रतिद्वंद्वी के हैं।

पॉजिटिव पूर्णांकों के साथ विभाजन के लिए जावा राउंड डाउन होता है, इसलिए +7-a%7वैल्यू को 7 के अगले मल्टीपल पर टक्कर देने के लिए उपयोग किया जाता है।


a->b->(b=(b-a)/14*7+7)>0?b:03 बाइट्स छोटा है, लेकिन मैं आपके दृष्टिकोण को अधिक पसंद करता हूं, इसलिए मुझसे +1। पहले से दिए गए लगभग हर उत्तर का उपयोग करता है max((b-a)/14*7+7,0)..
केविन क्रूज़सेन

मैं लंबोदा का उपयोग करना पसंद करता हूं जो सीधे परिणाम लौटाता है। और हाँ, सभी ने फार्मूला थोड़ा छोटा किया, लेकिन इस तरह से मैंने हर किसी की जाँच करने से पहले जवाब के बारे में तर्क दिया
जैक अम्मो

a->b->(b=(b-a)/14*7+7)>0?b:0सीधे परिणाम के रूप में अच्छी तरह से वापस करता है: यह यहाँ की कोशिश करो। या आप का मतलब है कि आप लैम्बदास को करीने से ऊपर सिंगल-मेथड लैम्बडा पसंद करते हैं; (a,b)->अधिक होने पर a->b->भी वरीयता ?
केविन क्रूज़सेन

करीने से अधिक एकल विधि, लेकिन सिर्फ एक व्यक्तिगत वरीयता
जैक अम्मो

1

रूबी, 26 27 बाइट्स

->a,b{[(b-a)/14*7+7,0].max}

मूल रूप से xnor और orlp के Python समाधान के समान है, एक मोड़ के साथ (7 जोड़ने की आवश्यकता नहीं है, क्योंकि नकारात्मक modulo के कारण, रूबी में 1 बाइट बचाता है, अजगर के बारे में नहीं जानते)

कोई मोड़ नहीं, मोड़ सिर्फ संज्ञानात्मक असंगति का एक बुरा मामला था। रहने भी दो। वास्तव में। :-)


1

स्काला, 31 बाइट्स

(a,b)=>Math.max((b-a)/14*7+7,0)

टर्नरी संस्करण 2 बाइट्स लंबा है


1

नूडल , 16 बाइट्स

⁻÷14ɲL×7⁺7ḋɲl⁺÷2

से समीकरण खींच लिया XOR और orlp जवाब, लेकिन जब से Noodel नहीं है एक अधिकतम क्षमता है कि आस-पास काम करने के लिए किया था।

कोशिश करो:)

यह काम किस प्रकार करता है

⁻÷14ɲL×7⁺7       # The equation...
⁻                # v2 - v1
 ÷14             # Pops off the difference, then pushes on the (v2 - v1)/14
    ɲL           # Applies lowercase which for numbers is the floor function.
      ×7         # Multiplies that by seven.
        ⁺7       # Then increments it by seven.

          ḋɲl⁺÷2 # To relate with the other answers, this takes the max between the value and zero.
          ḋ      # Duplicates what is on the top of the stack (which is the value just calculated).
           ɲl    # Pops off the number and pushes on the magnitude (abs value).
             ⁺   # Add the abs to itself producing zero if the number came out negative (which means we are already winning).
              ÷2 # Divides the result by two, which will either be zero or the correct offset.

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