संख्या ज्ञात करें और आउटपुट की गणना करें


22

लक्ष्य

की एक इनपुट सूची को देखते हुए 6अलग अंक, 3 नंबर प्राप्त हों a, bऔर cऐसा है कि a × b = cसाथ, a2 अंक होने, b1 अंकों होने और c3 अंक रहा। अधिक दृश्य तरीके से, आपके प्रोग्राम को इस छवि के बक्से में उन 6 अंकों को व्यवस्थित करना होगा:

यहां छवि विवरण दर्ज करें

यदि एक से अधिक समाधान मौजूद हैं, तो आप उनमें से किसी का भी उत्पादन कर सकते हैं।

इनपुट

6 अलग अंक। आप उन्हें अपनी भाषा के लिए किसी भी उचित तरीके से ले सकते हैं।

उत्पादन

3 नंबर a, bऔर c। आउटपुट स्वरूप अपेक्षाकृत मुफ़्त है, जब तक कि 3 नंबर अलग हो जाते हैं और हमेशा एक ही क्रम में मुद्रित होते हैं (लेकिन आवश्यक नहीं कि क्रम में a, b, c)।

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

1, 2, 3, 4, 5, 6 -> 54,3,162  
2, 3, 4, 5, 6, 7 -> 57,6,342 or 52,7,364

स्कोरिंग

बाइट्स में सबसे छोटा कोड जीतता है।


1
यह पहली बात है जब मैंने सोचा था कि जब मैंने चुनौती भी देखी थी @ दादा ... मैं इसे पोस्ट करने से पहले कुछ प्रतिक्रिया प्राप्त करने के लिए सैंडबॉक्स में डालने का सुझाव देता हूं :-)
स्टीवी ग्रिफ़िन

1
क्या किसी समाधान के परिणामस्वरूप इनपुट की गारंटी है?
AdmBorkBork

1
मैंने आपकी चुनौती के शब्दों को काफी हद तक संपादित किया है ताकि यह स्पष्ट हो सके (मेरी राय में)। सुनिश्चित करें कि मैंने चुनौती का लक्ष्य नहीं बदला है।
घातक

1
मुझे भी लगता है कि चुनौती के लिए अधिक स्पष्ट शीर्षक की आवश्यकता है, लेकिन मैं अभी विचारों से बाहर हूं।
घातक

1
में 0,1,2,3,4,5परिणाम का एक इनपुट चाहिए 13,4,052; कोई हल नहीं; या कोई व्यवहार ठीक है?
जोनाथन एलन

जवाबों:


8

ब्रेकीलॉग (2), 10 बाइट्स

p~c₃o.k×~t

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

समय की उचित लंबाई में चलने के लिए बहुत धीमी गति से (ब्रैकीलॉग दुभाषिया एक लंबे समय को खाली तारों पर गुणा करने, 4-अंकीय संख्याओं, ऋणात्मक संख्याओं आदि को बहुत धीमी गति से गतिरोध का उपयोग करके खर्च करता है)। TIO लिंक केवल 3 अंकों के साथ एक इनपुट का उपयोग करता है (यह प्रोग्राम किसी भी अंक के इनपुट को संभाल सकता है)। यह एक ऐसा फंक्शन है जिसका इनपुट आवश्यक सभी अंकों वाला एक नंबर है (जैसे 234567) - इनपुट में डुप्लिकेट की कमी का मतलब है कि आप हमेशा किसी भी 0अग्रणी शून्य से बचने के लिए अंत में कोई भी डाल सकते हैं - और जिसका आउटपुट एक सूची है आदेश [b, a, c](जैसे [6, 57, 342])।

व्याख्या

p~c₃o.k×~t
p           Permute the digits of the input
 ~c₃        Split them into three groups
    o       Sort the three groups
     .      to produce the output, which must have the following property:
      k     all but the last group
       ×    when multiplied together
        ~t  produces the last group

तो समूहों पर 2, 1, और 3 अंक होने की आवश्यकता कहां गई? खैर, हम जानते हैं कि इनपुट में 6 अंक हैं, और समूह क्रमबद्ध क्रम में हैं। एकमात्र संभावित आकार जो उनके पास हो सकते हैं, इसलिए, वे हैं [1, 1, 4], [1, 2, 3], या [2, 2, 2]। पहला मामला असंभव है (आप 4-अंकीय संख्या का उत्पादन करने के लिए दो 1-अंकीय संख्याओं को गुणा नहीं कर सकते, क्योंकि 9 × 9 केवल 81 है), जैसा कि अंतिम मामला है (आप दो 2-अंकीय संख्याओं को गुणा नहीं कर सकते हैं) 2-अंकीय संख्या का उत्पादन करें, जैसा कि 10 × 10 भी 100 पैदा करता है)। इस प्रकार, रिटर्न मान [b, a, c]1, 2 और 3 अंक लंबे होने चाहिए , इस प्रकार, a2 अंक हैं, b1 cअंक है, और अनुरोध के अनुसार 3 अंक है।


2
खैर ... मैं आत्मसमर्पण करता हूँ
घातक

8

जावास्क्रिप्ट (ईएस 6), 90 88 बाइट्स

6 अंकों की एक सरणी के रूप में इनपुट लेता है। एक संभावित समाधान (जैसे कि '54*3==162') का वर्णन करते हुए एक स्ट्रिंग लौटाता है या यदि (और केवल यदि) कोई समाधान नहीं है, तो 'बहुत अधिक पुनरावृत्ति' त्रुटि के साथ बाहर निकलता है।

f=(a,k=1)=>eval(s='01*2==345'.replace(/\d/g,n=>a[n],a.sort(_=>(k=k*2%3779)&2)))?s:f(a,k)

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

यह एक नियतात्मक एल्गोरिथम है।

प्राइम्स P=2और Q=3779इस तरह से चुने गए थे कि (k = k * P % Q) & 2समय के साथ इनपुट सरणी के सभी 720 संभव क्रमांकन उत्पन्न करने के लिए सॉर्ट कॉलबैक की गारंटी दी जाती है। अधिक सटीक रूप से, सभी क्रमबद्धताएं 2798 प्रकारों के बाद कवर की जाती हैं - जो सभी ब्राउज़रों की पुनरावृत्ति सीमा के भीतर होनी चाहिए।

हम 01*2==345सरणी में संबंधित प्रविष्टियों के लिए अंकों की मैपिंग करके अभिव्यक्ति में प्रत्येक क्रमचय को इंजेक्ट करते हैं ।

हम इस अभिव्यक्ति का मूल्यांकन करते हैं और पुनरावर्ती कॉल करते हैं जब तक कि यह सच न हो।

परीक्षा


मान लें कि आउटपुट प्रारूप अभी भी मान्य है, बाइट को बचाने के लिए (और रिवर्स ) के -बजाय का उपयोग करें । ==?:
नील

1
@ नील वास्तव में, मैंने जेपेलिन को एक ही सुझाव दिया। मुझे संभवतः इसे कुछ और भी गोल्फ करना चाहिए, लेकिन मुझे यह स्वीकार करना चाहिए कि मुझे वर्तमान आउटपुट प्रारूप पसंद है।
अरनौलड

क्या आपने 3379 खोजने के लिए bruteforce किया, या आपने गणितीय तर्क का उपयोग किया? यदि ऐसा है, तो इसे खोजने का अपना तरीका प्रदान कर सकता है? :)
यति

@TuukkaX यहाँ वास्तव में कुछ भी नहीं फैंसी। मैंने इसे पूरी तरह से लागू किया, मेरे मानदंड 1) पी और क्यू के लिए संभव के रूप में कुछ अंक और 2) संभव के रूप में कुछ प्रकार के पुनरावृत्तियों के रूप में।
अरनौलद


3

05AB1E , 15 13 बाइट्स

Emigna के लिए धन्यवाद दो बाइट्स सहेजे गए !

œJvy3L£Â`*Qi,

CP-1252 एन्कोडिंग का उपयोग करता है । इसे ऑनलाइन आज़माएं!

स्पष्टीकरण:

œ                 # Get all permutations of the input
 J                # Join them to get the numbers
  vy              # For each element in the list..
    3L            #   Push the list [1, 2, 3]
      £           #   Pops a and pushes [a[0:1], a[1:3], a[3:6]]
       Â`         #   Bifurcate and flatten
         *        #   Multiply the top two elements in the stack
          Qi      #   If equal to the third element..
            ,     #     Print the array

आप बदल सकते हैं 213Sके साथ 3Lके रूप में आदेश होने के लिए नहीं था 2,1,3ऐनक के अनुसार।
Emigna

यह जानकर अच्छा लगा कि £संचयी रूप से सदिश ... यदि यह कहने का सही तरीका है।
मैजिक ऑक्टोपस Urn

3

बैश + कोरुटिल्स, 70

for((b=1;b;));{
a=`shuf -ze $@`
b=${a:0:2}*${a:2:1}-${a:3:3}
}
echo $b

सभी क्रमपरिवर्तन उत्पन्न करने के लिए कोई विशेष आसान तरीका नहीं है। इसके बजाय बेतरतीब ढंग से क्रमपरिवर्तन उत्पन्न करते हैं और गणना करते हैं जब तक कि हम एक अच्छा नहीं पाते।

आउटपुट फॉर्म में है A*B-C- अर्थात वह अभिव्यक्ति जो शून्य का मूल्यांकन करेगी जब हमारे पास सही क्रमपरिवर्तन होगा।

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



2

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

lambda s:[(x[0],x[1:3],x[3:])for x in permutations(s)if eval('%s*%s%s==%s%s%s'%x)]
from itertools import*

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

अधिक लचीले आउटपुट के साथ 88 बाइट्स समाधान

lambda s:[x for x in permutations(s)if eval('%s*%s%s==%s%s%s'%x)]
from itertools import*

इसे ऑनलाइन आज़माएं!
जहां आउटपुट ['6', '5', '7', '3', '4', '2' होगा बजाय '6', '57', '342'


2
आपने अपने importशीर्ष पर नहीं रखा ... हिलाता सिर
mbomb007

@ mbomb007 गोटी का काम TIO ツ \ _ (_) _ / ¯ पर
रॉड

आपने पहला व्यक्ति देखा है जिसने वास्तव f=में हेडर में रखा है । यह एक बड़ा सौदा नहीं है।
mbomb007

2

PHP, 110 बाइट्स

यह वहाँ मिलेगा ... अंततः ...

<?$v=$argv;unset($v[0]);do shuffle($v)&[$a,$b,$c,$d,$e,$f]=$v;while("$a$b"*$c!="$d$e$f");echo"$a$b $c $d$e$f";

Ungolfed:

<?
$v=$argv;
unset($v[0]);
do
  shuffle($v);
  [$a,$b,$c,$d,$e,$f]=$v;
while("$a$b"*$c!="$d$e$f");
echo"$a$b $c $d$e$f";

2

PHP, 77 बाइट्स

for(;;)eval(strtr('0.*1-"428"||die("0.,1,428");',1/7,str_shuffle($argv[1])));

एक स्ट्रिंग के रूप में इनपुट लेता है।


1

ईएस 6 (जावास्क्रिप्ट), 85, 82, 79 बाइट्स

अंकों (स्ट्रिंग) के एक सरणी को स्वीकार करता है, एक 3-तत्व सरणी [A,B,C]=> लौटाता हैC=A*B

golfed

R=(w,[a,b,c,d,e,f]=w)=>f*(d+=e)^(a+=b+c)?R(w.sort(_=>Math.random()-.5)):[a,d,f]

संपादन:

  • सहेजी गयी 3 और पुन: उपयोग से बाइट्स dऔर a, और से छुटकारा मिल रहा है ==(धन्यवाद @Arnauld!)
  • विनाशकारी असाइनमेंट का उपयोग करके 3 बाइट्स सहेजे गए

कोशिश करो !

R=(w,[a,b,c,d,e,f]=w)=>f*(d+=e)^(a+=b+c)?R(w.sort(_=>Math.random()-.5)):[a,d,f];

function generate(A) {
   console.log(R([...A]));
}
<input type="text" id="A" value="123456"/><button onclick="generate(A.value)">GENERATE</button>


क्या आप गारंटी दे सकते हैं कि आपका यादृच्छिक क्रम वास्तव में सभी क्रमपरिवर्तन को कवर करेगा?
नील

@ नील, यदि आप सख्त औपचारिक प्रमाण की तलाश में हैं, तो मुझे नहीं लगता कि मैं आपको एक प्रदान कर सकता हूं, लेकिन आनुभविक रूप से यह क्रमपरिवर्तन के एक समान वितरण में परिणत होता है।
ज़ेपेलिन

1

पिप , 18 बाइट्स

-Sध्वज के लिए कोड के 17 बाइट्स, +1 ।

$/_=1FI_^@3,5MPMa

कमांड-लाइन तर्क के माध्यम से अंकों की एक स्ट्रिंग के रूप में इनपुट लेता है। आउटपुट सी, बी, ए के क्रम में है। इसे ऑनलाइन आज़माएं!

यदि कई मौजूद हैं तो यह कोड सभी समाधानों को आउटपुट करता है। यदि केवल एक समाधान का उत्पादन करना आवश्यक है , तो तीन बाइट्स जोड़ें और प्रोग्राम को अंदर लपेटें (...0)

व्याख्या

                   a is 1st cmdline arg (implicit)
              PMa  Compute all permutations of a
             M     To each, map this function:
          3,5       Range(3,5)--contains values 3 and 4
       _^@          Split the function argument at those indices
                    This transforms a string like 342657 into a list [342; 6; 57]
     FI            Now filter the list of split permutations on this function:
$/_                 Fold on division: takes 1st element and divides it by the rest
   =1               Compare the quotient with 1
                    This keeps only the permutations where the first number is the product
                    of the other two
                   Autoprint the list (implicit), with each sublist on a separate line
                   and space-separated (-S flag)

1

रूबी, 60 बाइट्स

->x{x.permutation{|a|(eval a="%d%d*%d==%d%d%d"%a)&&puts(a)}}

सभी समाधानों को "a * b == c" के रूप में प्रिंट करता है

उदाहरण:

->x{x.permutation{|a|(eval a="%d%d*%d==%d%d%d"%a)&&puts(a)}}[[1,2,3,4,5,6]]
54*3==162

->x{x.permutation{|a|(eval a="%d%d*%d==%d%d%d"%a)&&puts(a)}}[[2,3,4,5,6,7]]
52*7==364
57*6==342

1

बैच, 305 बाइट्स

@echo off
set/pd=
for /l %%i in (0,1,719)do set n=%%i&call:c
exit/b
:c
set t=%d%
set s=
for /l %%j in (6,-1,1)do set/ap=n%%%%j,n/=%%j&call:l
set s=%s:~0,2%*%s:~2,1%-%s:~3%
set/an=%s%
if %n%==0 echo %s%
exit/b
:l
call set u=%%t:~%p%%%
call set s=%%s%%%%u:~,1%%
call set t=%%t:~,%p%%%%%u:~1%%

एक स्ट्रिंग के रूप में एसटीडीआईएन पर इनपुट लेता है [1-9]{6}और dd*d-dddप्रारूप में सभी समाधानों को आउटपुट करता है। बैच स्ट्रिंग हेरफेर में बहुत अच्छा नहीं है, इसलिए 720 क्रमचय उत्पन्न करना थोड़ा अजीब है।

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