ค้นหาจำนวนเต็มบวกที่เล็กที่สุดซึ่งลงท้ายด้วย n หารด้วย n และมีตัวเลขรวมเป็น n


33

มันอยู่ในชื่อ ...

รับข้อมูลเป็นจำนวนเต็มบวกn>=12และ ... ทำในสิ่งที่ชื่อกล่าว

ใช่นี้อยู่ใน OEIS A187924

บางกรณีทดสอบ

12 -> 912  
13 -> 11713  
14 -> 6314  
15 -> 915  
16 -> 3616  
17 -> 15317  
18 -> 918  
19 -> 17119 
20 -> 9920  
40 -> 1999840   
100-> 99999999999100

นี่คือรหัสกอล์ฟรหัสที่สั้นที่สุดเป็นไบต์ชนะ!


ความคิดเห็นไม่ได้มีไว้สำหรับการอภิปรายเพิ่มเติม การสนทนานี้ได้รับการย้ายไปแชท
Martin Ender

หากต้องการปิดส่วนหนึ่งของสิ่งที่ถูกย้ายไปแชท: การแก้ไขของฉันไปยัง OEIS พิสูจน์ว่า 11 เป็นหมายเลขเดียวที่ไม่มีวิธีแก้ไขได้รับการอนุมัติ
Ørjan Johansen

คำตอบ:


19

Befunge, 81 ไบต์

&>00p0v<!%g0<
v%"d":_>1+:0^
>00g->#^_:0v
0g10g-#^_.@1>
>0p:55+/\:v>
^1+g01%+55_$^

ลองออนไลน์!

สามารถจัดการได้ถึงn = 70 อย่างน้อยหลังจากนั้นบางค่าจะเริ่มล้นขนาดสแต็คเซลล์ในการใช้งานส่วนใหญ่และในกรณีที่ไม่ใช้งานจะใช้เวลานานมากจนไม่คุ้มที่จะรอดู

ได้รับข้อ จำกัด เหล่านั้นเราไม่ได้รำคาญพยายามที่จะจับค่าของnมากกว่า 99 ซึ่งหมายความว่าเราสามารถทดสอบได้ง่ายขึ้นถ้าค่าในปลายnด้วยโดยเพียงแค่การเปรียบเทียบค่าโมดูโล 100 n

ด้านล่างคือรายละเอียดเพิ่มเติมของรหัส

ซอร์สโค้ดที่มีไฮไลต์พา ธ การเรียกใช้งาน

* * * *อ่านnจาก stdin และบันทึกในหน่วยความจำ
* * * *เริ่มต้นค่าทดสอบvเป็น 0 และเริ่มลูปหลักเพิ่มค่าvล่วงหน้า
* * * *ทดสอบว่าv%n == 0และถ้าไม่กลับไปที่จุดเริ่มต้นของลูปหลัก
* * * *ทดสอบว่าv%100 == nและถ้าไม่กลับไปที่จุดเริ่มต้นของลูปหลัก
* * * *รวมตัวเลขในvด้วยการเพิ่มv modulo 10 ซ้ำแล้วหารvด้วย 10
* * * *ทดสอบว่าผลรวมเท่ากับnและถ้าไม่กลับไปที่จุดเริ่มต้นของลูปหลัก
* * * *มิฉะนั้นเอาท์พุทvและออก


12

05AB1E , 14 ไบต์

[NI«ÐIÖsSOIQ*#

ลองออนไลน์!

คำอธิบาย

โซลูชันที่ต้องใช้ส่วนนำหน้าขนาดใหญ่จะหมดเวลาใน TIO

[                # start a loop
 NI«             # append input to current iteration number
    Ð            # triplicate
     IÖ          # is the first copy evenly divisible by input?
       sSOIQ     # is the digit sum of the second copy equal to the input?
            *    # multiply
             #   # if true, break loop
                 # output the third copy

ถ้ารู้สึกราวกับว่า 05AB1E กำลังโกงอยู่เพราะดีมาก วิธีเดียวที่จะเอาชนะสิ่งนี้ได้ในหนึ่งไมล์ก็คือการสร้างภาษา 'การบีบอัด' โปรแกรมที่อ้างอิงภาษาที่ผ่านมา ฉันส่ง ans = dic [1] lol
ผู้เบิกทาง

@Pathfinder: มีสองภาษาออกมีที่สม่ำเสมอสามารถเอาชนะ 05AB1E เป็นดังนั้นเราจึงยังคงสามารถหวังที่จะเห็นบางสิ่งบางอย่างแม้สั้น :)
Emigna

12

JavaScript (ES6), 55 54 ไบต์

f=(s,p=0,a=p+s)=>a%s|eval([...a].join`+`)-s?f(s,p+1):a
<input type=number min=12 oninput=o.textContent=f(this.value)><pre id=o>

รับอินพุตเป็นสตริง ต้องการเบราว์เซอร์ที่รองรับการเรียกซ้ำแบบหางเพื่อให้ได้ผลลัพธ์ที่มากขึ้น แก้ไข: บันทึก 1 ไบต์ขอบคุณ @Arnauld


eval([s,...a].join`-`)?จะใช้งานได้แม้ว่าจะไม่สั้นกว่านี้ ...
ETHproductions

@Arnauld ||ไม่มีผมก็ลืมไปว่าผมสามารถทำเช่นนั้นด้วย
Neil

8

Brachylog v2, 12 10 ไบต์

a₁.;A×?≜ẹ+

ลองออนไลน์!

นี่คือการส่งฟังก์ชั่นที่รับอินพุตผ่าน.และสร้างเอาต์พุตผ่านทาง?(ตรงกันข้ามกับแบบแผนทั่วไปฟังก์ชั่น Brachylog ทั้งหมดมีสองอาร์กิวเมนต์ที่แน่นอนซึ่งอาจเป็นอาร์กิวเมนต์อินพุตหรือเอาต์พุต เราไม่ปกติพิจารณาการประชุมสำหรับการใช้งานข้อโต้แย้งที่จะมีความเกี่ยวข้องที่ PPCG

คำอธิบาย

รุ่นก่อนหน้าของการแก้ปัญหานี้มีกรณีพิเศษ ( Ḋ|เช่น "ส่งกลับตัวเลขอย่างแท้จริง") สำหรับตัวเลขหลักเดียว แต่คำถามชัดเจนว่าคุณไม่ต้องตรวจสอบว่า (ขอบคุณ @DLosc สำหรับจับนี้) ดังนั้นฉันจึงลบ มัน. (วิธีแก้ปัญหาที่เขียนไว้จะไม่ทำงานบนหลักเดียวเนื่องจาก Brachylog จะไม่พิจารณา 1 ว่าเป็นไปได้สำหรับการไม่รู้จักในการคูณเพื่อป้องกันการวนซ้ำไม่สิ้นสุดการคูณนั้นเป็นการสุ่มโดยพลการ)

ดังนั้นคำตอบนี้ไปสำหรับการแปลข้อกำหนดโดยตรง เริ่มต้นด้วย?(เอาท์พุท / หมายเลขที่เรากำลังค้นหา; Brachylog predicate เริ่มต้นโดยปริยายเสมอ?) เราใช้a₁.เพื่อยืนยันว่ามันมี.(อินพุต) เป็นคำต่อท้าย จากนั้น;A×?หมายความว่าเราสามารถคูณ ( ×) ผลลัพธ์ด้วยบางสิ่ง ( ;A) เพื่อสร้าง?(ผลลัพธ์) สุดท้ายẹ+ผลรวม ( +) ตัวเลข ( ) ของ?และมีค่าเริ่มต้นการยืนยันโดยปริยายในตอนท้ายของทุกโปรแกรม Brachylog .ว่าผลสุดท้ายผลิต ดังนั้นในคำอื่น ๆ โปรแกรมนี้คือ " .เป็นคำต่อท้ายของ?, .คูณด้วยบางสิ่งบางอย่าง?, .เป็นผลรวมของหลัก?"ซึ่งใกล้เคียงกับการแปลตามตัวอักษรของโปรแกรมดั้งเดิม

เป็นสิ่งจำเป็นสำหรับความต้องการหลักผลรวมที่จะบังคับใช้ ฉันถือว่าบางอย่างเกี่ยวกับไม่ชอบสิ่งแปลกปลอมดังนั้นบอกให้ Brachylog ใช้วิธีการอันโหดร้ายสำหรับส่วนนั้นของโปรแกรมมากกว่าพีชคณิต


6

Haskell , 72 ไบต์

f n=[x|x<-[n,n+lcm n(10^length(show n))..],sum[read[j]|j<-show x]==n]!!0

ลองออนไลน์!

โปรดทราบว่าจำนวนที่พบลบด้วย n จะต้องเป็นตัวคูณของทั้ง n และ 10 ^ ความยาว (n)

แรงบันดาลใจจาก Laikoni และมนุษย์โดยสิ้นเชิง


ยินดีต้อนรับสู่เว็บไซต์!
DJMcMayhem

3
เปลี่ยนlcm n(10^length(show n))เป็นlcm(10^length(show n))n1 byte
H.PWiz

6

อลิซ 35 ไบต์

/o
\i@/!w?+.?~\ & /-$K..?\ L z $ /K

ลองออนไลน์!

คำอธิบาย

โปรแกรมนี้มีการผสมผสานที่ดีและการโต้ตอบระหว่าง Cardinal (การประมวลผลจำนวนเต็ม) และโหมด Ordinal (การประมวลผลสตริง)

กรอบปกติสำหรับความท้าทายด้วย I / O ทศนิยมซึ่งทำงานส่วนใหญ่ในโหมด Cardinal:

/o 
\i@/...

และโปรแกรมจริง:

!     Store the input N on the tape.
      We'll use an implicit zero on top of the stack as our iterator variable X,
      which searches for the first valid result.
w     Store the current IP position on the return address stack. This marks
      the beginning of the main search loop. We can avoid the divisibility
      test by going up in increments of N. To check the other two 
      conditions, we'll use individual conditional loop ends that skip to 
      the next iteration. Only if both checks pass and all loop ends are 
      skipped will the search terminate.

  ?+    Increment the iterator X by N.
  .     Duplicate X.
  ?~    Put a copy of N underneath.
  \     Switch to Ordinal mode.
  &     Implicitly convert X to a string, then fold the next command over its
        characters, i.e. its digits. Here, "fold" means that each character
        is pushed to the stack in turn, followed by one execution of that
        next command.
  /     Switch back to Cardinal mode (this is not a command).
  -     Fold subtraction over the digits. This implicitly converts each 
        digit back to its numerical value and subtracts it from N. If the
        digit sum of X is equal to N, this will result in 0.
  $K    Jump back to the w if the digit sum of X isn't N.
  ..    Duplicate X twice.
  ?     Get a copy of N.
  \     Switch to Ordinal mode.
  L     Shortest common superstring. Implicitly converts X and N to strings
        and gives the shortest string that starts with X and ends with N. 
        This will be equal to X iff X already ends with N. Call this Y.
  z     Drop. If X contains Y, this deletes everything up to and including
        Y from X. This can only happen if they are equal, i.e. if X ended
        with N. Otherwise X remains unchanged.
  $     Skip the next command if the string is empty, i.e. if X ended with N.
  /     Switch back to Cardinal mode.
  K     Jump back to w if X didn't end with N.

5

Java (OpenJDK 8) , 136 110 103 92 ไบต์

-26 ขอบคุณ JollyJoker

-7 ขอบคุณ JollyJoker อีกครั้ง

-11 ขอบคุณ Oliver Grégoire

a->{for(int i=a;!(""+a).endsWith(""+i)|i!=(""+a).chars().map(x->x-48).sum();a+=i);return a;}

ลองออนไลน์!

ต้องรัก Java! มันอาจเป็นไปได้ว่าฉันใช้วิธีที่ไม่มีประสิทธิภาพ แต่ไม่มีฟังก์ชัน checksum ในตัวและการแปลง double เป็น String เพื่อตรวจสอบการสิ้นสุดของจำนวนไบต์ค่าใช้จ่าย ...

Ungolfed:

  a->{                                                       //input n (as integer)
      for (int i = a;                                        //initiate loop
           !("" + a).endsWith("" + i)                        //check if the calculated number ends with the input
           | i != ("" + a).chars().map(x -> x - 48).sum();   //check if the checksum is equal to the input
           a += i)                                           //for every iteration, increase i by the input to save checking for divisibility
        ;                                                    //empty loop body, as everything is calculated in the header
    return a;                                                //return number
}

1
(""+i).endsWith(""+a)ควรทำงาน.
JollyJoker

@ JollyJoker อำไพขอบคุณที่ทำให้ฉันรู้สึกโง่: P
Luca H

1
หึ n/=10แทนn=n/10เช่นกัน นอกจากนี้i+=aในการวนรอบเพื่อให้คุณสามารถข้ามการตรวจสอบการหาร
JollyJoker

@JollyJoker ว้าวฉันทำมันเพื่อผลรวม แต่ไม่ใช่สำหรับการหาร ... ขอบคุณฉันจะเพิ่มอีกไม่นาน
Luca H

1
92 ไบต์โดยใช้ API สั้นกว่าการคำนวณด้วยตัวเอง นอกจากนี้เครื่องหมายอัฒภาคไม่ได้เป็นส่วนหนึ่งของ bytecount เพราะแลมบ์ดาที่ถูกต้องสามารถกำหนดเป็นอาร์กิวเมนต์เมธอดได้ตัวอย่างเช่นคุณไม่จำเป็นต้องใช้เซมิโคลอนนั้น
Olivier Grégoire

4

Mathematica ขนาด 72 ไบต์

(t=#;While[Mod[t,10^IntegerLength@#]!=#||Tr@IntegerDigits@t!=#,t+=#];t)&  

-18 ไบต์จาก @MartinEnder

ลองออนไลน์!

นี่คือรุ่นอื่นจาก Martin Ender
วิธีนี้สามารถไปถึงn=40(41 เกินขีด จำกัด การทำซ้ำเริ่มต้น)

Mathematica, 65 ไบต์

#//.t_/;Mod[t,10^IntegerLength@#]!=#||Tr@IntegerDigits@t!=#:>t+#&

ลองออนไลน์!


3

Python 2 , 74 ไบต์

n <= sys.maxintวิธีการแก้ปัญหานี้อนุมานว่า

n=x=input()
while sum(map(int,str(x)))-n*str(x).endswith(`n`):x+=n
print x

ลองออนไลน์!


แทนที่str(x)ด้วยxในเครื่องหมายขีดหลังสองครั้งเพื่อบันทึก 6 ไบต์ (คุณจะหลีกเลี่ยงการย้อนกลับภายในเห็บย้อนหลังได้อย่างไร)
Chas Brown

@ChasBrown `เครื่องหมายแบ็กสแลชข้างใน backticks
wvxvw

@ChasBrown ไม่เป็นจำนวนเต็มยาวที่จะเพิ่มLซึ่งสามารถเลอะอัลกอริทึม
FlipTack

3

C (gcc) 71 69 ไบต์ล้มเหลวใน 100

ฉันลองด้วยความยาวและ% 1,000 แต่หมดเวลา

-2 ไบต์ด้วย steadybox

s,i,j;f(n){for(j=0;s^n|j%100!=n;)for(s=0,i=j+=n;i;i/=10)s+=i%10;j=j;}

ลองออนไลน์


เรียนรู้เคล็ดลับใหม่วันนี้ด้วย j * = 1 == return j trick รหัสที่ดี
Michael Dorgan

stackoverflow.com/questions/2598084/… (ส่งคืนคณิตศาสตร์ล่าสุด)
Michael Dorgan


@Steadybox ขอขอบคุณฉันจะทำอย่างนั้น
PrincePolka


2

C # (. NET Core) , 90 84 83 + 18 = 101 ไบต์

using System.Linq;
n=>{for(int i=n;!(""+n).EndsWith(""+i)|n%i>0|(""+n).Sum(c=>c-48)!=i;n++);return n;}

ลองออนไลน์!

  • บันทึกได้ขนาด 6 ไบต์ด้วย Emigna และความสามารถอันน่าทึ่งของฉันในการเขียน(""+n)ในบางแห่งและที่n.ToString()อื่น ๆ

n=>{for(int i=n;n%100!=i|n%i>0|(""+n).Sum(c=>c-'0')!=i;n++);return n;}บันทึก 20 ไบต์
Emigna

@Emigna ทำไมn%100? เกิดอะไรขึ้นถ้าn>100?
Charlie

โอ้ใช่ไม่สนใจส่วนนั้น นั่นคือจากการทดสอบด้วยอินพุต 2 หลัก ตัวดัดแปลงจะต้องเป็น 10 ^ len (อินพุต) อาจไม่คุ้มค่าแล้ว
Emigna




1

REPL JavaScript (ES5), 60 59 ไบต์

for(n=prompt(i=0);eval([].join.call(t=++i+n,'+'))-n|t%n;);t

@totallyhuman Fixed
l4m2

ในคอนโซลมันจะแสดงผลโดยไม่มีการเตือน () ดังนั้นฉันเดา
l4m2

0

Haskell , 75 ไบต์

f n=[x|x<-[0,n..],sum[read[d]|d<-show x]==n,mod x(10^length(show n))==n]!!0

ลองออนไลน์!

คำอธิบาย:

f n=[x|                                      ]!!0 -- Given input n, take the first x
       x<-[0,n..],                                -- which is a multiple of n,
                  sum[read[d]|d<-show x]==n,      -- has a digital sum of n
                  mod x(10^length(show n))==n     -- and ends in n.

ฉันสงสัยว่าส่วน "ลงท้ายด้วยn" สามารถย่อให้สั้นลงได้ไหม ฉันพยายามshow n`elem`scanr(:)""(show x)ด้วย แต่ก็นานกว่า





0

PowerShellขนาด 84 ไบต์

for($n=$i=$args[0];$i%$n-or$i-notmatch"$n$"-or([char[]]"$i"-join'+'|iex)-$n){$i++}$i

ลองออนไลน์!

คำสั่งการก่อสร้างที่เรียบง่าย แต่มีความยาว หมดเวลากับ TIO สำหรับn=100แต่ถ้าเราตั้งไว้iใกล้จะชัดเจนมันจะออกผลลัพธ์ได้อย่างถูกต้อง

นี่เป็นเพียงการforวนรอบแบบง่าย ๆที่จะดำเนินต่อไปตราบใดที่เงื่อนไขใด ๆ เป็นจริง เงื่อนไขสามข้อคือ 1) $i%$nคือเรามีส่วนที่เหลือ 2) $i-notmatch"$n$"คือมันไม่ได้ regex ตรงกับตัวเลขสองหลักสุดท้าย และ 3) ([char[]]"$i"-join'+'|iex)-$nคือตัวเลขที่รวมเข้าด้วยกันไม่เท่ากับ$n(นี่ตรวจสอบโดยการลบง่าย ๆ เพราะค่าที่ไม่ใช่ศูนย์เป็นจริง) $iภายในวงที่เรากำลังเพียงแค่การเพิ่ม

ดังนั้นหากเราไม่มีส่วนที่เหลือการจับคู่ regex และตัวเลขเท่ากันทั้งสามเงื่อนไขเป็น$falseและเราออกจากลูป เป็นผลให้เราสามารถออกจาก$iท่อและการส่งออกเป็นนัย


0

PHP, 73 + 1 ไบต์

while(array_sum(str_split($i+=$n=$argn))-$n|$i%10**strlen($n)-$n);echo$i;

เรียกใช้เป็นท่อด้วย -Rทำงานเป็นท่อด้วย

วน$iซ้ำหลาย ๆ<input>จนถึงsum_of_digits-<input>และtail_of_i-$nเป็นเท็จ iแล้วพิมพ์


0

m4, 210 ไบต์

define(d,define)d(i,ifelse)d(s,`i($1,,0,`eval(substr($1,0,1)+s(substr($1,1)))')')d(k,`r($1,eval($2+1))')d(r,`i(s($2),$1,i(regexp($2,$1$),-1,`k($1,$2)',i(eval($2%$1),0,$2,`k($1,$2)')),`k($1,$2)')')d(f,`r($1,1)')

กำหนดแมโครfที่คำนวณคำตอบ มันช้าไปหน่อย - ผิดปกติอย่างนั้น - แต่ฉันสัญญาว่ามันใช้ได้

ฉันคิดว่า m4 จะดีเพราะถือว่าเป็นจำนวนเต็มตามค่าเริ่มต้น แต่ถือว่าแย่มาก


0

สกาลา, 120 ไบต์

def a(n:Int)={val b=math.pow(10,math.ceil(math.log10(n))).##;var c=b+n;while(c%n!=0||(0/:c.toString)(_+_-'0')!=n)c+=b;c}

วิธีนี้ใช้งานได้จนกระทั่งn = 70หลังจากนั้นจำนวนเต็มจะล้น สำหรับอักขระพิเศษหนึ่งตัวIntสามารถเปลี่ยนเป็น a Longและอนุญาตให้คำนวณค่าn > 100ได้

นี่คือเวอร์ชั่นที่ไม่ได้รับการขึ้นอีกเล็กน้อย:

def golfSourceLong(n: Long): Long = {
  val delta = math.pow(10, math.ceil(math.log10(n))).toInt
  var current = delta + n
  while (current % n != 0 || current.toString.foldLeft(0)(_ + _ - '0') != n) {
    current += delta
  }
  current
}

0

R , 115 ไบต์

function(n,d=nchar(n):1){while(sum(D<-F%/%10^((k=nchar(F)):1-1)%%10)-n|any(D[k-d+1]-n%/%10^(d-1)%%10)|F%%n)F=F+n
F}

ลองออนไลน์!

ฟังก์ชั่น R แย่มาก เพิ่มขึ้นF(เริ่มต้นที่0) โดยnจนกว่าจะพบค่าที่ตรงกับคุณสมบัติที่ต้องการซึ่งจะส่งกลับ การใช้งานanyบนdoubleนิพจน์ส่งคำเตือนสำหรับการวนซ้ำแต่ละครั้งของลูป แต่จะไม่ส่งผลต่อความถูกต้อง

หมดเวลากับ TIO สำหรับอินพุตที่มีขนาดใหญ่พอ (n = 55 หรือสูงกว่า) แต่ควรคำนวณวิธีแก้ปัญหาที่ให้เวลา / พื้นที่เพียงพออย่างถูกต้อง



0

เยลลี่ , 22 21 ไบต์

DS=³a³ḍaDṫ³DLC¤Ḍ=³ø1#

ลองออนไลน์!

แก้ไข: บีบอัดเป็นบรรทัดเดียว

คำอธิบาย

DS=³a³ḍaDṫ³DLC¤Ḍ=³ø1#
                  ø1#  Evaluate the condition before this and increment a counter until it is met then output the counter                     
D                      Digits of incremented variable as a list
 S                     Sum
  =³                   Equals argument of program?
    a                  Logical and
     ³ḍ                Does arg divide incremented variable?
       a               Logical and
        Dṫ     Ḍ       Last n digits of inc. var. where n is number of digits in program input
          ³DLC         1 - (number of digits of program input)
              ¤        Book ends above nilad
                =³     Equals program input?

ฉันใช้เวลาหลายชั่วโมงในการเขียนเพราะฉันเรียนรู้เยลลี่ แต่ตอนนี้ฉันทำแล้วฉันพอใจมาก เป็นเวลานานฉันไม่ได้ตระหนักว่าฉันต้องการ¤และฉันก็ไม่สามารถทำงานได้ การดูที่ [นี่] [1] รหัสที่อธิบายอย่างดีช่วยให้ฉันปิดผนึกข้อตกลงได้ คำตอบของ Jelly อื่น ๆ จำนวนมากใน PPCG แนะนำฉันด้วย


0

Javascript, 224 bytes function getNumber(x){if(x<12){return!1};const sumDigits=(x)=>x.toString().split('').map(Number).reduce((a,b)=>a+b,0);for(let i=2;i<9999;i++){if((x*i-x)%(Math.pow(10,x.toString().length))==0&&sumDigits(x*i)==x){return x*i}}} Un-golf:

function getNumber(x){
	if (x<12) {return false};
	const sumDigits = (x) => x.toString().split('').map(Number).reduce((a,b)=>a+b, 0);
	for (let i=2; i<9999; i++){
		if((x*i-x)%(Math.pow(10, x.toString().length))==0 && sumDigits(x*i)==x){
			return x*i;
}
}
}

การใช้งาน: 1. getNumber (12) 2. getNumber (13) 3. ....


ผมไม่ทราบว่ามากเกี่ยวกับการเล่นกอล์ฟ Javascript แต่ผมค่อนข้างมั่นใจว่าคุณควรจะร่นชื่อหรือgetNumber sumDigits
Ørjan Johansen

ขอบคุณมากฉันจะไม่ชนะที่นี่เพียงต้องการที่จะได้รับความท้าทายนี้: ยิ้ม:
NTCG

0

J , 37 33 ไบต์

+^:(((=1#."."0)*:(e.".\.))":)^:_~

ลองออนไลน์!

                                ~    A = N
+^:                          ^:_     while(...)A+=N; return A
   (                      ":)        A to string
   (((    "."0)          )  )        digits of A
   ((( 1#.    )          )  )        sum
   (((=       )          )  )        equals N
   ((            (e.".\.))  )        N is one of the suffixes of A-string
   ((          *:        )  )        not AND

การเตรียมตัวนับซ้ำจะเร็วกว่า ~ 5 เท่า แต่นานกว่า 5 ไบต์:

(]+[((=1#.,.&.":)<:|),~&.":)^:_&1,&":]

ลองออนไลน์!

เพิ่มขึ้น 100, 27 ไบต์ :

(]+100*(=1#.,.&.":)<:|)^:_~

ลองออนไลน์!


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.