कोड गोल्फ: 6174 - कपरेकर का पौराणिक स्थिरांक


24

संख्या 6174 इतनी दिलचस्प क्यों है? जैसा कि विकिपीडिया द्वारा परिभाषित किया गया है

  1. कम से कम दो अलग-अलग अंकों का उपयोग करके, कोई भी चार-अंकीय संख्या लें। (अग्रणी शून्य की अनुमति है।)
  2. आरोही में अंकों को व्यवस्थित करें और फिर दो चार अंकों की संख्या प्राप्त करने के लिए अवरोही क्रम में, यदि आवश्यक हो तो अग्रणी शून्य जोड़ते हैं।
  3. छोटी संख्या को बड़ी संख्या से घटाएं।
  4. चरण 2 पर वापस जाएं।

कपरेकर की दिनचर्या के रूप में जानी जाने वाली उपरोक्त प्रक्रिया, हमेशा 7 पुनरावृत्तियों में 6174 तक पहुंच जाएगी। एक बार 6174 तक पहुंचने के बाद, यह प्रक्रिया जारी रहेगी।

एक कार्यक्रम लिखिए जो दिए गए चार-अंकीय संख्या (ऊपर की परिभाषा देखें) के खिलाफ कप्रेकर की दिनचर्या को चलाता है, दिनचर्या के प्रत्येक चरण को प्रिंट करता है।

नियम:

  • प्रस्तुतियाँ पूर्ण कार्यक्रम होनी चाहिए।
  • इनपुट को मानक इनपुट से पढ़ा जाना चाहिए। इको से पाइपिंग ठीक है।
  • इनपुट संख्यात्मक रूप में होना चाहिए।
  • अग्रणी शून्य को प्रिंट करना आवश्यक है। (नीचे दिए गए उदाहरण देखें।)
  • अंतिम पंक्ति को कहना चाहिए कि कितने पुनरावृत्तियों की आवश्यकता थी। विराम चिह्न की आवश्यकता है।

उदाहरण:

> 2607
7620 - 0267 = 7353
7533 - 3357 = 4176
7641 - 1467 = 6174
Iterations: 3.

> 1211
2111 - 1112 = 0999
9990 - 0999 = 8991
9981 - 1899 = 8082
8820 - 0288 = 8532
8532 - 2358 = 6174
Iterations: 5.

> 6174
7641 - 1467 = 6174
Iterations: 1.

किसी भी प्रोग्रामिंग भाषा का स्वागत है। गूढ़ लोगों के लिए अतिरिक्त अंक + एक छोटा सा इनाम।

अद्यतन 1 : पहले से ही एक समान प्रश्न है

अद्यतन 2 : इनपुट के रूप में 6174 के लिए उदाहरण जोड़ा गया। नोटिस के लिए पीटर टेलर को धन्यवाद।


यह मेरे लिए खबर है। किसी को एक मध्यस्थ कहते हैं ...

उह ... क्या कोई "माइग्रेट" बटन नहीं है?
डॉ। रेम्बू

मैं एक मध्यस्थ के लिए प्रवास करने के लिए इसे हरी झंडी दिखाई है। क्या मैं सुझाव दे सकता हूं कि पहले के 3-अंकीय संस्करण से सहमत होने के लिए इनपुट आउटपुट पर नियमों को बदल दिया जाए? और प्रश्न के शरीर में पहले वाले संस्करण से जोड़ना।
dmckee

@dmckee मैं इस साइट के बारे में नहीं जानता था और यह नहीं जान सकता था कि पहले से ही एक समान प्रश्न है (स्टैकओवरफ़्लो पर कोई नहीं था)। हालाँकि, मैं 3-अंकीय संस्करण से सहमत होने के लिए नियमों में फेरबदल करने में संकोच करूँगा और इस प्रकार दोनों प्रश्नों को और भी समान बना दूँगा। किसी मौजूदा प्रश्न का डुप्लिकेट या मामूली बदलाव पोस्ट करना व्यर्थ है। यहां तक ​​कि जब अनजाने में किया गया।
लूनोहोडोव

3
कृपया एक उदाहरण के रूप में 6174 जोड़ें ताकि हम देख सकें कि आउटपुट कैसे स्वरूपित किया जाना चाहिए।
पीटर टेलर

जवाबों:


9

पर्ल - 147 143 134 130 129 126 129 128 126 126

for($_=<>;$_-6174+!$c;$c++){$_=reverse$d=join'',sort split//,"$_"
|$|x4;printf"$_ - $d = %04d\n",$_-=$d}die"Iterations: $c.\n"

संपादित करें: अब 6174 मामले का अनुपालन करता है, कुछ चरों की कीमत पर ... के साथ चलता है echo -n <number> | perl kaprekar.pl

संपादित करें: अंत में जहां मैं पहले था वापस: डी


10

रूबी 1.9, 122 वर्ण

puts"Iterations: #{(1..7).find{s=$_.chars.sort*"";puts [r=s.reverse,?-,s,?=,$_="%04d"%(r.to_i-s.to_i)]*" ";~/6174/}}."

उदाहरण आह्वान:

$ echo 1211 | ruby -ln kaprekar.rb

मैंने -lnध्वज को 4 वर्णों (सामान्य आह्वान ruby kaprekar.rbऔर अंतर के बीच का अंतर ruby -ln kaprekar.rb) के रूप में गिना है ।


मैंने इस स्क्रिप्ट को kaprekar.rb के रूप में सहेजा और फिर इसे लागू किया ruby -lp kaprekar.rb। एक नंबर दर्ज किया और <Enter> दबाया, लेकिन आउटपुट केवल दर्ज संख्या है। स्पष्ट रूप से मुझे कुछ याद आ रहा है ... कृपया सलाह दें कि स्क्रिप्ट का उपयोग कैसे करें।
लूनाहोड़ोव

@lunohodov: मैंने एक उदाहरण मंगलाचरण जोड़ा है। अब यह 6174इनपुट के रूप में सही आउटपुट भी उत्पन्न करता है , जो दुर्भाग्यवश इस समाधान को 128 अक्षरों तक लाता है।
वेंचरो

echo 1234 | ruby kaprekar.rbएक चेतावनी का उपयोग करके एक त्रुटि के साथ समाप्त होता है undefined method 'chars' for nil:NilClass (NoMethodError)। निष्पादन echo 1234 | ruby -lp kaprekar.rbकेवल एक चेतावनी जारी करता है और अपेक्षा के अनुसार व्यवहार करता है। आउटपुट अपेक्षा के अनुरूप नहीं है, क्योंकि इसमें चेतावनी संदेश शामिल हैkaprekar.rb:3: warning: regex literal in condition
lunohodov

@lunohodov: चेतावनी और उदाहरण के आह्वान को तय किया।
वेंचरो

7

अजगर, 141 चरस

n=input()
i=0
while n-6174:a=''.join(sorted("%04d"%n));b=a[::-1];n=int(b)-int(a);print"%s - %s = %04d"%(b,a,n);i+=1
print"Iterations: %d."%i

% 04d के साथ स्लिक पैडिंग के लिए +1। मैंने आज कुछ सीखा!
गिरफ्तारी

3
कुछ सुझाव: ;एस का उपयोग करके पूरे लूप को एक पंक्ति में रखें । while n-6174printऔर बोली के बीच कोई स्थान नहीं ।
कीथ रान्डेल

@ कीथ-रैंडल: धन्यवाद, अब यह 141 पर आ गया।
मार्टिन उडिंग

6

गोल्फस्क्रिप्ट, 74 वर्ण

);:|;{0):0;|$:§-1%" - "§" = ""0"4$~§~-+-4>:|n|6174`=!}do"Iterations: "0"."

5

हास्केल, 197 192 182 181 वर्ण

import List
p=putStrLn.unwords
"6174"%k|k>0=p["Iterations:",shows k"."]
n%k=p[b,"-",a,"=",c]>>c%(k+1)where a=sort n;b=reverse a;c=take 4$shows(read b-read a)"0"
main=getLine>>=(%0)

2 अक्षरों को सम्मिलित rऔर sसहेजता है। इसके अलावा, "000" बेमानी है। "0" पर्याप्त है। यह हमें 188 वर्णों तक लाता है। मुझे आश्चर्य interactहै कि यहां कोई मदद नहीं मिली। यह आमतौर पर करता है।
4

लाभ 2 अधिक बाइट्स के show x++sसाथ प्रतिस्थापित करना shows x s। 186 अब।
रटसोर

पैटर्न गार्ड ( |k>0) का उपयोग करके किसी से छुटकारा पा सकते हैं f। इसके अलावा नाम gकरने के लिए %182 वर्ण के लिए हमें हो जाता है।
रॉटस्टर

4

> <> - 268 308

</&4pff1
v>i86*-:n&1-:&?!
>ao&        v
<v&0pff+1gff
 >&1+:4=   ?v&:a%:}-a,
 v&8[4r::0}~<
 >&1-:?!v&:@@:@(?$}&:&3%1=?}
 v      >~:}}:}@:}$:}
 \:n}:n}:n}:n}' - 'ooo:n}:n}:n}:n}' = 'ooo
 \a*+a*+a*+}a*+a*+a*+-:0&\
 v?       =4&:+1&,a-}:%a:<
/\&~~rnnnnao:29777****=   ?v
voooooooooooo"Iterations: "/
\ffgna'.'oo;

गोल्फ के लिए ज्यादा दावेदार नहीं, लेकिन लिखने में मजा आया। :)

./fish.py kaprekar.fish -v <number>
EDIT के साथ चलाएं : अब STDIN से इनपुट लेता है।


4

जावास्क्रिप्ट, 189 182 165 चार

DocMax को क्रेडिट:

for(n=prompt(i=o=e='');!i--|n-6174;o+=n+' - '+a+' = '+(n=(p=n-a+e)[3]?p:0+p)+'\n')
  b=n.split(e).sort(),n=b.reverse(a=b.join(e)).join(e);
alert(o+"Iterations: "+~i+'.')

मूल:

for(n=prompt(i=o=e='');n-6174;o+=(i++?n+"\n":e)+(n=(a=n.split(e).sort().join(e)).split(e).reverse().join(e))+' - '+a+' = ',n=n-a+e)while(!n[3])n=0+n
alert(o+n+"\nIterations: "+i+'.')

Ungolfed:

var i = 0;
var n = prompt();
var out = '';
while (n != 6174) {
    while ((n=''+n).length<4) n='0'+n // pad number
    if(i)out+=n+"\n"

    a = n.split('').sort().join('');
    n = a.split('').reverse().join('');

    out += n + ' - ' + a + ' = '
    n-=a
    i++;
}
console.log(out + "6174\nIterations: " + i + '.');

1
मुझे लगता है कि आप बदल सकते हैं n != 6174करने के लिए n-6174के बाद से यह शून्य वापस आ जाएगी, जो गलत है (कम से कम सी और पायथन में)।
मार्टिन उडिंग

इसका श्रेय कीथ-रैंडल को जाना चाहिए जिन्होंने इसे मेरे पायथन समाधान के लिए सुझाया था।
मार्टिन उडिंग

आप की जगह 5 अधिक वर्ण बचा सकता है while(n.length<4)के साथ while(!n[3])
डॉकमैक्स

1
मैं इस एक को घूरना नहीं रोक सकता! निम्नलिखित a) आउटपुट को ठीक करता है जब n = 6174, बी) n+'\n'को सशर्त और एक अतिरिक्त \nसी से बचने के लिए जोड़ा जाता है , सी) एक टेंप-स्प्लिट-ज्वाइन अनुक्रम से बचने के लिए एक अस्थायी का उपयोग करता है, d) इस तथ्य का लाभ उठाता है कि हम केवल कभी-कभी गद्दी के लिए एक '0' जोड़ना होगा: for(n=prompt(i=0,o=e='');n-6174;i++,o+=(n=(b=n.split(e).sort(),a=b.join(e),b).reverse().join(e))+' - '+a+' = '+(n=('0'+(n-a)).slice(-4))+'\n');alert(o+"Iterations: "+i+'.')जो 172 वर्णों का होना चाहिए।
डॉकमैक्स

1
प्रभावशाली! हालांकि उपरोक्त कल्पना के अनुसार, जब n = 6174, इसे कम से कम एक पुनरावृत्ति से गुजरना पड़ता है, इसलिए मैंने एक चेक जोड़ा अगर i0 (+4) है, लेकिन इसके साथ संयुक्त i++। दुर्भाग्य से, यह एक त्रुटि से छूट देता है, इसलिए मैंने वेतन वृद्धि को एक गिरावट पर स्विच किया और फिर अंत (-1) पर थोड़ा सा बिटकॉइन चालबाजी का उपयोग किया। फिर मैं (-2) में बदल i=0,o=e=''गया i=o=e='', forअतिरिक्त कोष्ठक (-1), विस्तारित (b=...,a=...,b)बिट (-2) से बचने के लिए लूप में सुधार किया , और कॉल (-1) के a=b.joinअंदर घुस गया reverse()। तो 169, बुरा नहीं है!
केसी चू

3

पॉवरशेल, 125 128 130 131

for($a,$OFS=$input+'';$b-6174;++$i){$a=$b=+($c=''+($x="$a 000"[0..4]|sort)[4..0])-"$x"
"$c-$x = {0:d4}"-f$a}"Iterations: $i."

प्रश्न से सभी परीक्षण मामलों को पास करता है।


2

जावास्क्रिप्ट, 260 बाइट्स

function z(c){for(u=c+y;u.length<4;)u=0+u;return u}for(p=prompt(i=0,r=y="");;)
if(s=(p+y).split(y).sort(),t=s.concat().reverse(),a=s.join(y),b=t.join(y),q=a<b?b:a,
w=a<b?a:b,p=z(q-w),i++,r+=z(q)+" - "+z(w)+" = "+p+"\n",p==6174)break;alert(r+
"Iterations: "+i+".")

2

क्लोजर, 256 वर्ण

(let[i #(Integer/parseInt%)f #(format"%04d"%)a #(->>% f sort(apply str)i)d #(->>% f sort reverse(apply str)i)k #(let[u(d %)l(a %)n(- u l)](println(f u)"-"(f l)"="(f n))n)](while true(println"Iterations:"(count(take-while #(not=% 6174)(iterate k(read)))))))

2

स्काला 2.9, 194 वर्ण

object K extends App{var(c,s)=(0,args(0));do{var d=s.sorted;var e=d.reverse.toInt-d.toInt;s="%04d".format(e);println(d.reverse+" - "+d+" = "+s);c+=1}while(s!="6174");print("Iterations: "+c+".")}

स्काला 2.9 से ऐप विशेषता का उपयोग करता है।

संपादित करें: 6174 के प्रारंभिक इनपुट के लिए सही आउटपुट देता है।


2

PHP, 215 259 276 वर्ण

<?php echo">";$n=str_split(str_pad(trim(fgets(STDIN)),4,0,0));for($k=0,$z=0;$k-6174;$z++){sort($n);$a=implode($n);$b=strrev($a);$k=str_pad($b-$a,4,0,0);echo"$b - $a = $k\n";$n=str_split($k);}echo"Iterations: $z\n";

Ungolfed:

<?php
echo ">";
$n = str_split(str_pad(trim(fgets(STDIN)),4,0,0));
for($k=0, $z=0; $k-6174; $z++) {
    sort($n);
    $a = implode($n);
    $b = strrev($a);
    $k = str_pad($b-$a,4,0,0);
    echo "$b - $a = $k\n";
    $n = str_split($k);
}
echo "Iterations: $z\n";

मुझे नहीं लगता कि आपको जरूरत है abs, maxऔर minकार्य, चूंकि सॉर्ट का हमेशा मतलब होगा कि $bइससे अधिक है $a। जो आपको 20ish अक्षर बचा सकता है। इसके अलावा, मुझे लगता है कि लूप के अंदर छंटनी करने का मतलब यह होगा कि आपको केवल एक बार अपने कोड में इसकी आवश्यकता होगी जो आपको एक और 9 को बचाएगा।
गैरेथ

वाह, मुझे लगता है कि मैं "बड़ी संख्या से छोटी संख्या को घटाना" निर्देश से विचलित हो गया। धन्यवाद।
रिनतुन

<?function k($c){echo"> $c\n";$n=str_split(str_pad($c,4,0,0));for(;$k-6174;$z++){sort($n);$a=join($n);$b=strrev($a);$k=str_pad($b-$a,4,0,0);echo"$b - $a = $k\n";$n=str_split($k);}echo"Iterations: $z\n";} आप अपने forकथन को बदलकर , फ़ंक्शन के रूप में कॉल करके और joinइसके बजाय का उपयोग करके 12 वर्णों को सहेज सकते हैं implode
TwoScoopsofPig

इसके अलावा, मुझे मिनी-मार्कडाउन से नफरत है।
TwoScoopsofPig

2

कॉफीस्क्रिप्ट, 233 225 वर्ण

o=e='';i=0;n=prompt()
while n!=6174
  n=e+n;q=(n='0'+n if !n[3]) for x in [0..2];n?=q;o+=n+"\n" if i;a=n.split(e).sort().join(e);n=a.split(e).reverse().join(e);o+=n+' - '+a+' = ';n-=a;i++
alert(o+"6174\nIterations: "+i+'.')

यह प्रयास करें यहाँ या निर्देश के साथ यहाँ


मेरे ब्राउज़र को जमा देता है - स्क्रिप्ट के निष्पादन को रद्द करना पड़ा।
लूनोहोडोव

आपने कौन सी संख्या दर्ज की? मैंने इसे फ़ायरफ़ॉक्स और क्रोम में 4711 और 1 और अन्य लोगों के लिए आज़माया।
जोनास एलफ्रॉस्टम

उपयोग 0(संकेत के अनुसार सुझाव दिया गया है) या रद्द बटन पर क्लिक करने से सफारी स्थिर हो जाती है।
लूनोहोडोव

मुझे नहीं पता कि इसने ऐसा क्यों सुझाया। आपको 1 और 9998 के बीच एक संख्या दर्ज करनी होगी, जिसके अंक सभी समान नहीं हैं। 0 0000 के समान है और एक अनंत लूप का कारण होगा। ऐसा लगता है कि यहां अधिकांश समाधान वर्णों की संख्या को कम रखने के लिए मान्य इनपुट को छोड़ दिया गया है।
जोनास एल्फॉस्ट्रम

देखें i56.tinypic.com/bhhoqe.png आपका उत्पादन भी समाप्त हो गया " कपरेकर के निरंतर तक पहुंचने के लिए 5 पुनरावृत्तियों को लिया।" जो आवश्यकताओं के अनुरूप नहीं है।
लूनोहोडोव

2

स्काला 276

object o{var i=0;def a(v:String){val c=v.toList.sortWith(_>_).mkString;val b=c.reverse;val d=c.toInt-b.toInt;val e="0"*(4-(d+"").length)+d;val p=c+" - "+b+" = "+e;if(d!=6174){println(p);i=i+1;a(e)}else{println(p+"\nIterations: "+(i+1)+".")}};def main(s:Array[String])=a(s(0))}

स्केला 283

object o{var i=0;def a(v:String){val c=v.toList.sortWith(_>_).mkString;val b=c.reverse;val d=c.toInt-b.toInt;val e="0"*(4-(d+"").length)+d;val p=c+" - "+b+" = "+e;if(d!=6174){println(p);i=i+1;a(e)}else{println(p);println("Iterations: "+(i+1)+".")}};def main(s:Array[String])=a(s(0))}

diff:

else{println(p);println("Iterations: "+(i+1)+".")}};
// to
else{println(p+"\nIterations: "+(i+1)+".")}};

2

GAWK - 152 चार्ट

यह एक GNU awk वर्जन है। यह अन्य गैर-गनु संस्करणों के साथ काम नहीं कर सकता है।

{for(z=$1;z-6174+!c;++k){split(z,a,"");asort(a);for(b=c=i=0;i<4;z=c-b){c+=a[i+1]*10^i;b=b*10+a[++i]}printf c" - %.4d = "z"\n",b}print"Iterations: "k"."}

$ awk -f k.awk <<< 9992
2999 - 9992 = 6993
3699 - 9963 = 6264
2466 - 6642 = 4176
1467 - 7641 = 6174
Iterations: 4

मुझे प्राप्त है awk: calling undefined function asort। Awk वर्जन 20070501 OSX 10.6.7 पर चल रहा है। .पुनरावृत्तियों की संख्या के बाद मत भूलना ।
लूनाहोवोव

lunohodov @: लापता बिंदु जोड़ा गया। इसके अलावा, मैंने गन्न अवेक (गॉक) का उपयोग किया है, और जो लापता फ़ंक्शन को समझा सकता है।
डैन एंड्रीटा

घटाव संख्या गलत तरीके से गोल हैं: जैसे होना चाहिए9992 - 2999 = 6993
क्रिस डेग्नन



1

के, 104

{b::();{b,:,k," = ",r:"0"^(-:4)$$. k:(x@>x)," - ",x@<x;r}\[$x];-1'c,,"Iterations: ",$#c:$[1=#b;b;-1_b];}

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

k){b::();{b,:,k," = ",r:"0"^(-:4)$$. k:(x@>x)," - ",x@<x;r}\[$x];-1'c,,"Iterations: ",$#c:$[1=#b;b;-1_b];}'2607 1211 6174;
7620 - 0267 = 7353
7533 - 3357 = 4176
7641 - 1467 = 6174
Iterations: 3
2111 - 1112 = 0999
9990 - 0999 = 8991
9981 - 1899 = 8082
8820 - 0288 = 8532
8532 - 2358 = 6174
Iterations: 5
7641 - 1467 = 6174
Iterations: 1

1

मेथेमेटिका, 314 291 वर्ण

यह कार्यक्रम है, kaprekar.m: -

SetOptions[$Output,FormatType->OutputForm];
x=$ScriptCommandLine[[2]];
f[x_]:=(a=Characters@x;
b=Sort@ToExpression@a;
c=Sort[FromDigits/@{#,Reverse@#}&@b];
{c,{b,a}}=IntegerString[{#2-#&@@c,c},10,4];
Print[a," - ",b," = ",c];c)
x=f@x;
e=NestWhileList[f,x,#!="6174"&];
Print["Iterations: ",N@Length@e]

चलने से पहले पथ सेट करना: -

$ PATH=${PATH}:/Applications/Mathematica.app/Contents/MacOS ; export PATH

कार्यक्रम चलाना: -

$ MathematicaScript -script kaprekar.m 2607
7620 - 0267 = 7353
7533 - 3357 = 4176
7641 - 1467 = 6174
Iterations: 3.
$ MathematicaScript -script kaprekar.m 1211
2111 - 1112 = 0999
9990 - 0999 = 8991
9981 - 1899 = 8082
8820 - 0288 = 8532
8532 - 2358 = 6174
Iterations: 5.
$ MathematicaScript -script kaprekar.m 6174
7641 - 1467 = 6174
Iterations: 1.

0

PHP , 160 बाइट्स

function k($n,$d=1){$o=str_split($n);sort($o);echo$q=strrev($r=join($o))," - $r = ",$n=str_pad($q-$r,4,0,0),"
",$n==6174?"Iterations: $d.":k($n,++$d);}k($argn);

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

पूरा कार्यक्रम, इनपुट है STDIN, साथ चलाएं php -nF

उत्पादन

> echo 2607|php -nF kap.php
7620 - 0267 = 7353
7533 - 3357 = 4176
7641 - 1467 = 6174
Iterations: 3.

> echo 1211|php -nF kap.php
2111 - 1112 = 0999
9990 - 0999 = 8991
9981 - 1899 = 8082
8820 - 0288 = 8532
8532 - 2358 = 6174
Iterations: 5.

> echo 6174|php -nF kap.php
7641 - 1467 = 6174
Iterations: 1.

0

जंग - 375 बाइट्स

use std::io::{self,BufRead};fn main() {let mut x=io::stdin().lock().lines().next().unwrap().unwrap().parse::<i16>().unwrap();let mut n=0;println!("Iterations: {}.",loop {let mut v=[x/1000%10,x/100%10,x/10%10,x%10];v.sort();let j=v.iter().fold(0,|a,i|a*10+i);let k=v.iter().rev().fold(0,|a,i|a*10+i);x=k-j;n+=1;println!("{:04} - {:04} = {:04}",k,j,x);if x==6174{break n};});}

मैं इसे एक संभावित "ऊपरी बाध्य" के रूप में प्रस्तुत करता हूं, मैं किसी को भी एक ऐसी भाषा खोजने के लिए चुनौती देता हूं जहां इस का एक उचित कार्यान्वयन लंबा हो - जैसा कि इसमें कुछ भी नहीं है, लेकिन यह भी स्पष्ट रूप से स्पष्ट रूप से कुछ भी नहीं है जो इसे काफी छोटा कर देगा। रस्ट के बारे में बात यह है कि स्टडेन और पार्स से पूर्णांक में पढ़ने के लिए लगभग 120 अक्षर लगते हैं। "ओह, लेकिन फिर स्ट्रिंग प्रतिनिधित्व का उपयोग करें" ... लेकिन 99% विश्वास है कि और भी लंबा होगा


0

पर्ल 6 एन फ्लैग, 105 बाइट्स

say "Iterations: "~+.&{{{say $!=.flip~" - $_"," = ",($/=$!.EVAL.fmt("%04d"));$/}([~] .comb.sort)}...6174}

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

मुझे अंततः अपनी {}...*चाल का उपयोग करने के लिए मिला , क्योंकि हमें 6174 के लिए कम से कम एक पुनरावृत्ति की आवश्यकता है। मुझे यकीन नहीं है कि मुझे .&{ }अनुक्रम के चारों ओर अतिरिक्त रैपिंग की आवश्यकता क्यों है , जो थोड़े बेकार है।

स्पष्टीकरण:

    .&{                         } # Call a function on the input
       {                }...6174  # Create a sequence that goes until 6174
        {           }([~] .comb.sort) # Get the sorted digits of the number
         say $!=.flip~" - $_"," = "~($/=$!.EVAL.fmt("%04d"))  # Print the iteration
                        ;$/  # Return the result
say "Iterations: "~+.&{      }     # Print the number of iterations
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.