นายกหรือปัจจัยสูงสุด


14

ท้าทาย:

กำหนดอาร์เรย์ของตัวเลขจำนวนเต็มจำนวนที่ไม่เป็นลบในช่วง0 to Infinityตรวจสอบว่าทั้งหมดเป็นเฉพาะหรือไม่ (คุณสามารถรับอินพุตเป็นสตริงได้เช่นกันหากคุณต้องการ)

การป้อนข้อมูล:

อินพุต: อาร์เรย์ของตัวเลข

เอาต์พุต: อาร์เรย์ที่มีทุกองค์ประกอบถูกแทนที่ด้วยหนึ่งในสิ่งเหล่านี้:

-1                 -----> If 0, 1
1                  -----> If it is a prime number greater than 1
the highest factor -----> If that number is not prime

ส่งคืน -1 (0, 1), 1 (สำหรับช่วงเวลา> = 2) หรือปัจจัยสูงสุดของจำนวนที่กำหนด (สำหรับผู้ที่ไม่ใช่ช่วงเวลา)

ตัวอย่าง:

[1, 2, 3, 4, 10, 11, 13]                        ---> [-1, 1, 1, 2, 5, 1, 1]
[100, 200, 231321, 12312, 0, 111381209, 123123] ---> [50, 100, 77107, 6156, -1, 1, 41041]

บันทึก:

การป้อนข้อมูลจะถูกต้องเสมอเช่นจะประกอบด้วยตัวเลขเท่านั้นและทศนิยมไม่ได้ทดสอบ อาเรย์สามารถเป็นค่าว่างถ้าใช่ให้ส่งคืนอาเรย์ที่ว่างเปล่า

ข้อ จำกัด :

นี่คือสั้นที่สุดในหน่วยไบต์สำหรับแต่ละภาษาที่ชนะ

กระดานผู้นำ:

นี่เป็นตัวอย่างข้อมูลเพื่อสร้างทั้งกระดานผู้นำปกติและภาพรวมของผู้ชนะตามภาษา

เพื่อให้แน่ใจว่าคำตอบของคุณปรากฏขึ้นโปรดเริ่มคำตอบด้วยหัวข้อโดยใช้เทมเพลต Markdown ต่อไปนี้:

# Language Name, N bytes

ที่Nมีขนาดของส่งของคุณ หากคุณปรับปรุงคะแนนของคุณคุณสามารถเก็บคะแนนเก่าไว้ในบรรทัดแรกโดยการตีพวกเขาผ่าน ตัวอย่างเช่น

# Ruby, <s>104</s> <s>101</s> 96 bytes

หากคุณต้องการรวมหลายตัวเลขไว้ในส่วนหัวของคุณ (เช่นเนื่องจากคะแนนของคุณคือผลรวมของสองไฟล์หรือคุณต้องการแสดงรายการการลงโทษการตั้งค่าสถานะของล่ามแยกต่างหาก) ตรวจสอบให้แน่ใจว่าคะแนนจริงเป็นตัวเลขสุดท้ายในส่วนหัว:

# Perl, 43 + 2 (-p flag) = 45 bytes

นอกจากนี้คุณยังสามารถตั้งชื่อภาษาให้เป็นลิงค์ซึ่งจะปรากฏในตัวอย่างกระดานแต้มนำ:

# [><>](http://esolangs.org/wiki/Fish), 121 bytes


2
ฉันขอแนะนำให้ใช้แซนด์บ็อกซ์สำหรับคำถามในอนาคตเพื่อให้ข้อเสนอแนะเกี่ยวกับคำถามก่อนโพสต์คำถามเหล่านั้น
Jo King

@ ล้อเล่น: สำหรับอินฟินิตี้คุณต้องส่งออกตัวเลขทั้งหมดไม่เกินอินฟินิตี้ นี่เป็นเพียงสำหรับคุณและคุณต้องให้แน่ใจว่าจะไม่หมดเวลาหรืออะไร JK: ข้อผิดพลาดการหมดเวลาเป็นสิ่งที่เป็นไปได้มากที่สุดที่คุณจะได้รับจากอินฟินิตี้

4
เพียงแค่ต้องการที่จะทราบว่าใน "ถ้ามันเป็นจำนวนเฉพาะมากกว่า 1" มากกว่า 1 ไม่จำเป็นจริงๆเพราะตัวเลขที่สำคัญมากกว่า 1 เสมอ
Ivo Beckers

5
กำหนดปัจจัยสูงสุด ฉันควรคืนเบอร์เองหรือไม่ นายกที่แบ่งแยกได้สูงที่สุด? ปัจจัยสูงสุดที่ไม่ได้เป็นของตัวเอง?
Nissa

2
ฉันจะเอามันโปรแกรมของเราเท่านั้นต้องมีการทำงานสำหรับจำนวนเต็มขึ้นอยู่กับขนาดจำนวนเต็มภาษาของเราได้รับการแต่งตั้งของ max (สำหรับผู้ที่ไม่ได้มีการสนับสนุนสำหรับจำนวนเต็มขนาดใหญ่โดยพล)
JDL

คำตอบ:


9

เยลลี่ ,  7 6 ไบต์

ÆḌṪ€o-

ลิงก์ monadic ยอมรับรายการของจำนวนเต็มที่ไม่เป็นลบและเก็บรายการของจำนวนเต็มมากกว่าหรือเท่ากับ -1

ลองออนไลน์!

อย่างไร?

โปรดทราบว่า:

  • ช่วงเวลาทั้งหมดมีตัวหารที่เหมาะสมหนึ่ง (หนึ่ง)
  • คอมโพสิตทั้งหมดมีตัวหารที่เหมาะสมหลายตัว (ตัวหนึ่งบวกตัวอื่น ๆ )
  • ไม่มีตัวเลขใดที่มีตัวหารที่เหมาะสม
  • อะตอมของตัวแบ่งที่เหมาะสมกับเยลลี่ของเยลลี่ÆḌให้ผลลัพธ์ของตัวหารที่เหมาะสมตามลำดับจากน้อยไปหามาก
  • ศูนย์และไม่มีตัวหารที่เหมาะสม (พวกมันไม่ได้เป็นนายกหรือคอมโพสิต)
  • การนำอะตอมหางของเยลลี่ไปใช้กับรายการที่ว่างเปล่าจะทำให้เกิดศูนย์
  • ไม่มีตัวเลขที่มีตัวหารที่เหมาะสมของศูนย์ (นับประสาเป็นตัวสูงสุด)
  • ตัวเลขที่ไม่ใช่ศูนย์ทั้งหมดนั้นเป็นความจริงในเยลลี่ในขณะที่เลขศูนย์นั้นเป็นเท็จ

ÆḌṪ€o- | Link: list of integers   e.g. [ 0, 1,  2,  5,     10,    5183]
ÆḌ     | proper divisors (vectorises)  [[],[],[1],[1],[1,2,5],[1,71,73]]
  Ṫ€   | tail €ach                     [ 0, 0,  1,  1,      5,      73]
     - | literal minus one
    o  | logical OR (vectorises)       [-1,-1,  1,  1,      5,      73]

8

เยลลี่ , 9 8 ไบต์

บันทึก 1 ไบต์ขอบคุณ @Dennis

:ÆfṂ€$~~

ลองออนไลน์! หรือเรียกใช้กรณีทดสอบทั้งหมด

แสดงความคิดเห็น

เราใช้ประโยชน์จากความจริงที่ว่าทั้งคู่nanและinfกลายเป็น0วุ้นเมื่อไม่มีการใช้ bitwise กับพวกเขา

:ÆfṂ€$~~ - main link, taking the input list
 ÆfṂ€$   - treat these two links as a monad:
 Æf      -   get the lists of prime factors (0 --> 0; 1 --> empty list; prime --> itself)
    €    -   for each list,
   Ṃ     -   isolate the minimum prime factor (turns empty lists into 0)
:        - divide each entry by its minimum prime factor (0/0 --> nan; 1/0 --> inf)
      ~~ - bitwise NOT x2 (nan or inf --> 0 --> -1; other entries are unchanged)

3
คุณไม่ได้ใช้ JavaScript ในครั้งนี้ใช่ไหม คำตอบที่ดี btw

3
~~ผมชอบ :ÆfṂ€$~~บันทึกไบต์โดยการกำจัดลิงค์ตัวช่วย
Dennis

@Dennis Ah! $คือสิ่งที่ฉันกำลังมองหา :) ขอบคุณ!
Arnauld

7

R, 68 62 ไบต์

Map(function(n,v=rev(which(!n%%1:n)))"if"(n<2,-1,v[2]),scan())

วิธีการแก้ปัญหาโดยใช้ฐาน R เท่านั้นไม่มีห้องสมุด! ขอบคุณ Giuseppe สำหรับการเล่นกอล์ฟที่ห่างออกไป 6 ไบต์

ใช้scanเพื่ออ่านในรายการหมายเลขคั่นด้วยช่องว่าง%%เพื่อระบุว่าปัจจัยใด vจากนั้นมีเวกเตอร์ของปัจจัยทั้งหมดตามลำดับจากน้อยไปหามาก (รวมถึง 1 และ n) นี้มีคุณสมบัติที่ดีที่เมื่อเราrevErse vจำนวนที่เราต้องการที่จะอยู่ในสถานที่ที่สองหลีกเลี่ยงการโทรแพงlengthหรือtail(ถ้าnเป็นนายกvมีn 1อื่นมันมีn (factors in descending order) 1)

ตัวอย่างเอาต์พุต (ลิงค์ TIO ที่นี่ ):

> Map(function(n,v=rev(which(!n%%1:n)))"if"(n<2,-1,v[2]),scan())
1: 0 1 2 3 4 5 6 7 8 9
11: 
Read 10 items
[[1]]
[1] -1

[[2]]
[1] -1

[[3]]
[1] 1

[[4]]
[1] 1

[[5]]
[1] 2

[[6]]
[1] 1

[[7]]
[1] 3

[[8]]
[1] 1

[[9]]
[1] 4

[[10]]
[1] 3

หากคุณคิดว่ารายการไม่ได้เป็นประเภทกลับได้รับการยอมรับแล้วสลับออกMapสำหรับsapplyและเพิ่ม 3 ไบต์



ดี - ไม่คิดว่าจะเริ่มต้นด้วย !
JDL

6

05AB1E , 11 9 8 ไบต์

Ñε¨àDd<+

-3 ไบต์ขอบคุณที่@Emignaเปลี่ยน©d1-®+ไปDd<+และจะ€¨€àε¨à

เพียง แต่คำตอบของฉัน 05AB1E สองดังนั้นแน่นอนสามารถแข็งแรงเล่นกอล์ฟ

ลองออนไลน์

คำอธิบาย:

Ñ           # Divisors of each item in the input-list (including itself)
            #  [1,2,10,3] → [[1],[1,2],[1,2,5,10],[1,2,3]]
 ε          # For each:
  ¨         #  Remove last item (so it's now excluding itself)
            #   [[1],[1,2],[1,2,5,10],[1,2,3]] → [[],[1],[1,2,5],[1,2]]
   à        #  And get the max
            #   [[],[1],[1,2,5],[1,2]] → ['',1,5,2]
    D       # Duplicate the list
     d      # Is it a number (1 if it's a number, 0 otherwise)
            #  ['',1,5,2] → [0,1,1,1]
      <     # Subtract 1
            #  [0,1,1,1] → [-1,0,0,0]
       +    # Add both lists together
            #  ['',1,5,2] and [-1,0,0,0] → ['-1',1,5,2]

1
Dd<+©d1-®+ควรจะทำงานแทน คุณไม่จำเป็นต้องใช้ïเพราะมันยังคงเป็น ints คุณสามารถมีไว้ในส่วนท้ายเพื่อดูผลลัพธ์ที่ดีกว่า
Emigna

@Emigna Ah 1-แทนที่จะ<เป็นคนโง่สวย .. ขอบคุณสำหรับการDแทน©...®! และตอนนี้ฉันได้วางïส่วนท้ายไว้แล้ว
Kevin Cruijssen

1
หรือดียิ่งขึ้น:Ñε¨àDd<+
Emigna

ดีกว่า 12 byter ของฉันมาก
Magic Octopus Urn

5

J , 21 ไบต์

_1:`(%{.@q:)@.(>&1)"0

ลองออนไลน์!

คำอธิบาย:

(>&1)"0 แต่ละหมายเลขมีค่ามากกว่า 1 หรือไม่

@. ถ้าไม่กลับ _1:

(%{.@q:)ถ้าเป็น 2 หรือมากกว่าให้หาร%จำนวนด้วย{.ปัจจัยหลักตัวแรกq:


4

Japt , 6 ไบต์

หลังจากเล่นกอล์ฟจบลงด้วยการเกือบจะเหมือนกันและสั้นที่สุดเท่าที่โจนาธานแก้ปัญหา

®â¬ÌªJ

ลองมัน


คำอธิบาย

®          :Map
 ⬠       :  Proper divisors
   Ì       :  Get last element (returns null if the array is empty)
    ª      :  Logical OR
     J     :  -1

บันทึกไบต์ด้วย-m
Oliver

3

Python 3 , 62 ไบต์

lambda l:[max([k for k in range(1,n)if n%k<1]+[-1])for n in l]

ลองออนไลน์!

สำหรับ0และว่างเปล่าดังนั้นจึงประเมินรหัส1 range(1,n) max([]+[-1]) = -1สำหรับตัวเลขเฉพาะตัวหารเดียวใน [1, n) คือ1ซึ่งเป็นเอาต์พุตที่ต้องการ


มะพร้าวขนาด 50 ไบต์

map$(n->max([k for k in range(1,n)if n%k<1]+[-1]))

ลองออนไลน์!


3

Java 8, 105 103 87 ไบต์

a->{for(int i=a.length,n,x;i-->0;a[i]=n<2?-1:n/x)for(n=a[i],x=1;++x<n;)if(n%x<1)break;}

ปรับเปลี่ยนอินพุตอาร์เรย์แทนที่จะส่งคืนใหม่เพื่อบันทึกไบต์

ลองออนไลน์

คำอธิบาย:

a->{                  // Method with integer-array parameter and no return-type
  for(int i=a.length,n,x;i-->0;
                      //  Loop backward over the array
      a[i]=           //    After every iteration: change the current item to:
           n<2?       //     If the current item is 0 or 1:
            -1        //      Change it to -1
           :          //     Else:
            n/x)      //      Change it to `n` divided by `x`
     for(n=a[i],      //   Set `n` to the current item
         x=1;++x<n;)  //   Inner loop `x` in range [2,`n`)
       if(n%x<1)      //    If `n` is divisible by `x`:
         break;}      //     Stop the inner loop (`x` is now the smallest prime-factor)
                      //   (if the loop finishes without hitting the `break`,
                      //    it means `n` is a prime, and `x` and `n` will be the same)

3

Haskell, 52 49 ไบต์

map(\x->last$[d|d<-[1..x-1],mod x d<1]++[-1|x<2])

ลองออนไลน์!

map                     -- for each element in the input array
  \x->                  -- apply the lambda function
    last                -- pick the last element of the following list
     [d|d<-[1..x-1]     --  all d from 1 to x-1 
           ,mod x d<1]  --    where d divides x 
     ++[-1|x<2]         --  followed by -1 if x<2


3

ทูตขนาด 23 ไบต์

@{Max&-1!Divisors@_@-2}

ลองออนไลน์!

29 ไบต์, pointfree: @(Max&-1@Last@ProperDivisors)

24 ไบต์และ pointfree: @(Max&-1@`@&-2@Divisors)

เพียงแค่นี้ได้รับหารสองที่สุดท้ายของแล้วจะใช้เวลาสูงสุดของมันและn -1ครั้งที่สองไปสุดท้ายองค์ประกอบในอาร์เรย์ที่มีน้อยกว่าสององค์ประกอบที่เป็นnilและเป็นMax[-1, nil] เพียงแค่ vectorizes ฟังก์ชั่นนี้ทำให้มันนำไปใช้กับแต่ละอะตอม-1@



2

R + numbers, 88 79 ไบต์

ขอขอบคุณที่แสดงความคิดเห็นสำหรับคำแนะนำส่วนใหญ่เกี่ยวกับวิธีการส่ง

function(y)sapply(y,function(x)"if"(x<2,-1,prod(numbers::primeFactors(x)[-1])))

1ใช้ผลิตภัณฑ์ของปัจจัยสำคัญทั้งหมดยกเว้นหนึ่งที่เล็กที่สุดและความจริงที่ว่าผลิตภัณฑ์ขององค์ประกอบของเวกเตอร์ที่ว่างเปล่าถูกกำหนดให้เป็น

ลองออนไลน์!


1
บันทึกไบต์เพื่อตัดการlibraryโทรและใช้numbers::primeFactorsโดยตรง
JDL

1
นี่คือลิงก์ TIOเพื่อดูว่ามีอะไรแนะนำ JDL รวมถึงการสลับไปยังฟังก์ชันที่ไม่ระบุชื่อ
Giuseppe

2

Brachylogขนาด 10 ไบต์

{fkt|∧_1}ˢ

ลองออนไลน์!

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

{          Start of inline predicate.
           Implicit input to the predicate.
 f         Create a list of all of the input's factors (including itself).
  k        Remove the last item of this list so that it no longer contains the original number.
   t       Take the last item of the list with the last item removed.
           Implicitly unify the output with the aforementioned last item.
    |      If that failed, because one of the lists was empty...
     ∧     discarding the input, (there's probably some obvious reason ∨ won't work here but I don't know what it is)
      _1   unify the output with -1 instead.
        }  End of the inline predicate.
         ˢ For every item of the input, unify it with the predicate's input and get a list of the corresponding outputs.

ฉันตัดสินใจว่าฉันเรียน Brachylog เพื่อที่ฉันจะได้สนุกกับโค้ดกอล์ฟในขณะที่หวังที่จะเรียนรู้พฤติกรรมบางอย่างของ Prolog จริง ๆ ผ่าน Osmosis และฉันก็สนุกกับมันมากแม้ว่าฉันจะไม่แน่ใจเลยว่า อักขระควบคุมการทำงาน


2
"อาจมีเหตุผลบางอย่างที่ชัดเจน∨ไม่สามารถใช้งานได้ที่นี่ แต่ฉันไม่รู้ว่ามันคืออะไร" -> คุณสามารถใช้.∨แทน|∧(ฉันเดาว่าคุณลืม.) แต่มันนับเป็นจำนวนไบต์เดียวกัน ยินดีต้อนรับสู่ PPCG (และ Brachylog ที่สำคัญกว่า: p) โดยวิธี!
ลดขนาด

แน่นอน! ขอบคุณ
สตริงที่ไม่เกี่ยวข้อง

คุณสามารถถามคำถามประเภทนี้ได้ที่ Brachylog ในห้องแชทของ
Brachylog

1

Stax , 14 13 ไบต์

ü±p╞Ö*«òτ♀╣â▀

เรียกใช้และแก้ไขข้อบกพร่อง

คำอธิบาย (แยกออก):

m|fc%c{vsH1?}U? Full program, implicit input-parsing
m               Map
 |fc%c            Get factorisation and length of it (0 and 1 yield [])
      {     } ?   If length != 0:
       v            Decrement
           ?        If still != 0:
        sH            Last element of factorisation
           ?        Else:
          1           Push 1
              ?   Else:
             U      Push -1

Pseudocode ภายในแผนที่:

f = factorisation(i)
l = length(f)
if l:
    if --l:
        return f[-1]
    else:
        return 1
else:
    return -1

1

Pyth, 12 ไบต์

me+_1f!%dTSt

ลองที่นี่

คำอธิบาย

me+_1f!%dTSt
m            Q    For each number d in the (implicit) input...
          Std     ... get the range [1, ..., d - 1]...
     f!%dT        ... take the ones that are factors of d...
  +_1             ... prepend -1...
 e                ... and take the last.

1

J , 14 ไบต์

1(%0{q:,-)@>.]

ลองออนไลน์!

สำหรับทุกหมายเลข n ให้ใช้จำนวนสูงสุด (n, 1) แทน
ผนวกหมายเลขที่ไม่ได้ใช้ลงในรายการปัจจัยหลัก (รายการว่างสำหรับ 1) และหารจำนวนด้วยรายการแรกในรายการ

นอกจากนี้ 14 ไบต์

(%0{q:) ::_1"0

ลองออนไลน์!

หารทุกจำนวนด้วยปัจจัยหลักตัวแรก 0 ทำให้เกิดข้อผิดพลาดกับโดเมนq:และเรามองหารายการที่ 0 ในรายการที่ว่างเปล่าสำหรับ 1 - นั่นเป็นข้อผิดพลาดเช่นกัน สำหรับข้อผิดพลาดใด ๆ ที่ส่งคืน −1


ทางออกที่ดีมาก!
Galen Ivanov

1

Japt , 14 11 8 ไบต์

®/k v)ªÉ
®        // For each input number,
 /k v    // return the number divided by it's first prime factor,
     )ªÉ // or -1 if such a number doesn't exist (the previous result is NaN).

ลองออนไลน์!

โกนทั้งสามที่น่ารำคาญไบต์ขอบคุณที่มีขนดก


คุณไม่จำเป็นต้องกรองจำนวนเฉพาะ - kส่งคืนปัจจัยสำคัญของN- ดังนั้นนี่จึงกลายเป็น 8 ไบต์:®/k v)ªÉ
Shaggy

@Shaggy ขอบคุณไม่ทราบว่ามันคืนค่าตัวประกอบสำคัญเท่านั้นเนื่องจากวิธีการที่ docs ไม่ได้บอกอย่างนั้น
นิตย์

1
โอ้ใช่ลืมไปเลย เคยมีความหมายที่จะส่งการประชาสัมพันธ์ในช่วงเวลาหนึ่ง; จะทำเช่นนั้นในไม่ช้า
Shaggy

1

JavaScript (Node.js) , 61 55 ไบต์

-6 ไบต์ขอบคุณ @shaggy

_=>_.map(_=>eval('for(v=_/(d=_>>1);v!=~~v;v=_/--d);d'))

ลองออนไลน์!


คำอธิบาย:

_ =>                                     // input i.e : the original array
    _.map(                               // map over all elements of the array
        eval('                           // eval a string
            for(v=_/(d=_>>1);            // set v = _ / _ >> 1 and set that to d
                v!=~~v;                  // and keep going until v !== floor(v)
                        v=_/d--);        // to _ / d again (d was changed)
                    d'                   // return d
            ))                           // end eval and map and function

ยังคงเป็นรหัสเดิมที่ยังไม่ได้อัปเดต

ES5 เป็นมิตรเช่นกัน:

 const primeOrNot = function(input) { // the function with argument input
      return input.map(function(value) { // returns the array after mapping over them
           d = Math.floor(value * 0.5); // multiply each element by 0.5 and floor it 
           for(let v = value / d; v != Math.floor(v);) { // for loop goes until v!=~~v
                d --; // subtract one from d
                v = value / d; // set v again to value / d
           }
           return d; // return d
      })
 };


@Shaggy: ขอบคุณ
Muhammad Salman

1

ทุบตียูทิลิตี + GNU, 49

  • บันทึกแล้ว 9 ไบต์ด้วย @Cowsquack
factor|sed '/:$/c-1
/: \w+$/c1
s%: %/%
y/ /#/'|bc

คำอธิบาย

  • factor อ่านหมายเลขอินพุตจาก STDIN หนึ่งรายการต่อบรรทัดและเอาต์พุตในรูปแบบ <input number>: <space-separated list of prime factors (ascending)>
  • sed กระบวนการนี้เป็นดังนี้:
    • /:$/c-1 หมายเลขอินพุต 0 และ 1 ไม่มีปัจจัยหลักและถูกแทนที่ด้วย -1
    • /: \w+$/c1ตัวเลขที่มีตัวประกอบตัวเดียว (ตัวเอง) เป็นตัวที่สำคัญ แทนที่สิ่งเหล่านี้ด้วย1
    • s%: %/%แทนที่:ด้วย/ด้วยสิ่งนี้สร้างนิพจน์ทางคณิตศาสตร์เพื่อแบ่งจำนวนอินพุต (ไม่ใช่นายก) ด้วยตัวประกอบที่เล็กที่สุดเพื่อให้ตัวประกอบที่ใหญ่ที่สุด
    • y/ /#/ ลบรายการปัจจัยอื่น ๆ (ไม่จำเป็น) (โดยใส่ความคิดเห็น)
  • bc ประเมินและแสดงผลทางคณิตศาสตร์

ลองออนไลน์!


1
คุณอาจจะดรอป-rและสำหรับสองคนแรกsคุณสามารถใช้/regex/cvalueไบต์กอล์ฟการทำให้ regex นี้ง่ายขึ้นสามารถประหยัดได้มากขึ้นและคุณสามารถบันทึกไบต์ในสอง regex ล่าสุดโดยแทนที่:ด้วย/และ จากนั้นแสดงความคิดเห็นในส่วนที่ไม่ต้องการเช่นนั้นtio.run/##JYlBCoMwFET3c4qABhdSfuZ/…
user41805

@ Cowquack ดีมาก - ขอบคุณ!
Digital Trauma





1

Befunge-98 (FBBI) , 39 ไบต์

j&:!+f0p1-1:::' -:!j;3k$.nbj;-\%!!j:1+a

ลองออนไลน์!

จบลงด้วยการ &เมื่อไม่มีตัวเลขอีกต่อไป สิ่งนี้ทำให้โปรแกรมหยุดทำงานเป็นเวลา 60 วินาทีจนกระทั่ง TIO สิ้นสุดโปรแกรม สิ่งนี้ไม่สามารถหลีกเลี่ยงได้สำหรับ Befunge-98 อย่างน้อยใน TIO เนื่องจากล่ามทั้งคู่ทำเช่นนี้ หลังจากกดปุ่มเล่นคุณสามารถหยุดโปรแกรมหลังจากผ่านไปสักครู่เพื่อดูว่าจะส่งออกอะไรถ้าคุณรอสักครู่


โดยพื้นฐานแล้วสำหรับทุก ๆ หมายเลขใหม่ถ้าเป็น 0 มันจะเปลี่ยนเป็น 1 จากนั้นมันจะใส่ -1 ลงในสแต็กตามด้วยหมายเลขที่เริ่มต้นจาก 1 และนับจนถึงจำนวนอินพุตซึ่งในกรณีนี้ พิมพ์หมายเลขที่สองบนสแต็ก (-1 สำหรับอินพุต 0 หรือ 1 และปัจจัยสูงสุดสำหรับผู้อื่น) ทุกครั้งที่ผ่านลูปเราจะเพิ่มค่าของตัววนซ้ำไปยังสแต็กหลังถ้า ( input % iterator == 0) ซึ่งหมายความว่าเมื่อเราไปถึงอินพุตเราก็ต้องทิ้งตัววนซ้ำและพิมพ์ จากนั้นเราจะล้างสแต็กด้วยnและกลับไปที่ฟังก์ชั่นอินพุตอ่าน

ฉันอาจขยายคำอธิบายเพิ่มเติมในภายหลังเราจะเห็น ...


0

เรติน่า 0.8.2 , 33 ไบต์

%(`^0|^1$
-1
\d+
$*
^(1+)\1+$
$.1

ลองออนไลน์! ลิงก์มีกรณีทดสอบที่ไม่ช้าเกินไป คำอธิบาย:

%(`

วนซ้ำแต่ละหมายเลขอินพุต

^0|^1$
-1

กรณีพิเศษ 0 และ 1

\d+
$*

แปลงเป็น unary (ไม่มีผลกับ -1)

^(1+)\1+$
$.1

แทนที่แต่ละตัวเลขด้วยปัจจัยที่เหมาะสมที่สุดในรูปทศนิยม


0

tinylisp , 75 ไบต์

(load library
(q((L)(map(q((N)(i(l N 2)(- 1)(/ N(min(prime-factors N))))))L

ลองออนไลน์! (มี 4 ไบต์พิเศษเพื่อให้ชื่อฟังก์ชั่นที่ไม่ระบุชื่อเพื่อให้เราสามารถเรียกมันในส่วนท้าย)

Ungolfed / คำอธิบาย

สังเกตว่าคืนค่า 1 สำหรับไพร์ม n และปัจจัยที่ใหญ่ที่สุดน้อยกว่า n สำหรับคอมโพสิต n สามารถนำมารวมกันเป็นผลตอบแทน n/พี ที่ไหน พี เป็นปัจจัยสำคัญที่สุดของ n.

(load library)               Library gives us map, -, /, min, and prime-factors functions

(lambda (L)                  Anonymous function, takes a list of numbers L
 (map                         Map
  (lambda (N)                  Anonymous function, takes a number N
   (if (less? N 2)              If N < 2
    (- 1)                        -1; else
    (/ N                         N divided by
     (min                        the minimum
      (prime-factors N)))))      of the prime factors of N
  L)))                        ... to L
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.