ช่วงเวลาในฐานที่แตกต่างกัน


17

ท้าทาย:

คุณจะได้รับหมายเลขฐาน 10 สำหรับแต่ละฐานตั้งแต่ 10 นับถึงฐาน 2:

  1. ใช้หมายเลขอินพุตดั้งเดิมเป็นสตริงฐาน 10 และลบตัวเลขใด ๆ ของตัวเลขที่ไม่ถูกต้องสำหรับฐาน
  2. ตีความสตริงตัวเลขผลลัพธ์ในฐานนั้น หากสิ่งนี้ให้ 1 หรือ 0 ให้ยุติกระบวนการทั้งหมด
  3. เอาท์พุทหรือพิมพ์ตัวประกอบนายกที่ใหญ่ที่สุดเป็นเลขทศนิยม

การส่งออกสามารถอาร์เรย์ของปัจจัยสำคัญที่ใหญ่ที่สุด

กรณีตัวอย่าง:

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

987654321

เอาท์พุท:

379721
10593529
1091
179
1493
293
19
7

อีกวิธีหนึ่งคือ:

[379721,10593529,1091,179,1493,293,19,7]

สิ่งนี้พิมพ์ปัจจัยที่สำคัญที่สุดของ 987654321, 87654321 9 = 42374116 10 , 7654321 8 = 2054353 10และต่อไปเรื่อย ๆ จนกว่าจะถึง 1 2ซึ่งจะหยุด


2
ฉันไม่แน่ใจเกี่ยวกับกระบวนการนี้ ฉันอาจจะเข้าใจได้จากตัวอย่าง แต่คุณควรมีคำแนะนำที่ชัดเจนดังนั้นจึงไม่จำเป็น ดังนั้นเราจึงแปลงเป็นฐานที่ต่ำกว่าลบตัวเลขที่ไม่ถูกต้องจากนั้นพิมพ์ปัจจัยสำคัญที่สุด? เราจะพิมพ์ปัจจัยนี้ในฐานใด จากนั้นเราจะทำกระบวนการเดียวกันกับปัจจัยหลักที่ใหญ่ที่สุดและฐานที่ต่ำกว่าหรือไม่? หรือเราจะทำกับหมายเลขที่เราแยกตัวประกอบ? เราเริ่มต้นด้วย 10 หรือ 9 หรือไม่
xnor

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

2
ฉันลองเขียนการท้าทายใหม่เพื่อให้ชัดเจนยิ่งขึ้น ฉันหวังว่านี่คือสิ่งที่คุณตั้งใจไว้ ถ้าไม่คุณสามารถเปลี่ยนได้
xnor

4
ฉันพบว่าขั้นตอนที่สำคัญที่สุดที่สำคัญที่สุดที่ค่อนข้างยึดติดกับการดำเนินการหลักคือการแปลงฐาน หลายภาษาทำได้โดยตรงด้วยการแยกตัวประกอบเฉพาะและส่วนที่เหลือต้องทำในสิ่งที่ท้าทายที่สอง การแปลงฐานเป็นแบบในตัวหรือหน้าอก เมื่อการดำเนินการมาเป็นแบบในตัวคุณคาดหวังว่าสิ่งเหล่านี้จะเป็นพื้นที่ที่ดีสำหรับการเล่นกอล์ฟและแน่นอนว่าการแยกตัวประกอบและการแปลงฐาน ยังดีสำหรับความท้าทายแรก แต่สิ่งที่ต้องจำไว้ในครั้งต่อไป
xnor

3
มีโอกาสใดบ้างที่ได้รับแรงบันดาลใจจาก Google Code Jam
Mego

คำตอบ:


6

Pyth, 25 ไบต์

sfTm>1PiFdC,.u-N`tYKrT1zK
                       z   get input as a string
            .u      rT1    cumulative reduce over [10,9,...,2]
              -N`tY        remove one minus the number (10,9,...) from the input
          C,       K    K  pair each step along the chain with corresponding base
   m                       map over [["987654321", 10],...]:
       iFd                   apply the base-conversion (splat over i)
      P                      prime factorization, smallest to largest
    >1                       take [the last element], or [] if empty (1 or 0)
 fT                        remove the []s from 0s or 1s
s                          join the one-element arrays together

ลองที่นี่


4

Pyth - 16 ไบต์

V_S9#ePi~-z`NhNB

ลองมันออนไลน์ได้ที่นี่

บางครั้งมีบรรทัดว่างสองสามบรรทัดบนอินพุตที่ไม่มีตัวเลขทั้งหมด lemme รู้ว่าเป็นปัญหาหรือไม่


4

MATL , 17 15 ไบต์

9:PQ"G@ZAYfXzX>

ใช้จำนวนเป็นสตริงที่มีเครื่องหมายคำพูดซึ่งได้รับอนุญาตโดยค่าเริ่มต้น

ลองออนไลน์!

คำอธิบาย

9:PQ     % Push array [10, 9, ..., 2]
"        % For each number in that array. These are the bases to be considered
  G      %   Push input. Forces for input to be taken implicitly first time
  @      %   Push current base
  ZA     %   Convert from that base to base 10, discarding non-valid digits
  Yf     %   Prime factors. Gives empty for input 1, and 0 for input 0
  Xz     %   Non-zero values. Gives empty if previous result was 0, or else
         %   leaves it as it was
  X>     %   Maximum of array. For empty input gives empty
         % Implicitly end for each
         % Implicitly display. Empty arrays are not displayed

อันนี้เอาท์พุท 0 ที่ส่วนท้ายสำหรับอินพุตที่ไม่สิ้นสุดใน 1
poi830

สำหรับอินพุต '98765432' และ '98765' (ตัวอย่างแบบสุ่ม) จะส่งออกตัวเลขที่ถูกต้องแล้ว 0 ก่อนที่จะยุติ
poi830

1
@ poi830 แก้ไขแล้ว
Luis Mendo

1

จูเลีย 101 ไบต์

f(s,x=[],b=10)=(t=filter(c->c<=47+b,s))>"1"&&b>1?f(s,[x;maximum(keys(factor(parse(Int,t,b))))],b-1):x

นี่คือฟังก์ชั่นวนซ้ำที่รับอินพุตเป็นสตริงและส่งกลับอาร์เรย์

Ungolfed:

function f(s, x=[], b=10)
    # Filter the string down to only the digits valid for base b
    t = filter(c -> c <= 47 + b, s)

    # If the filtered string isn't "1" or "0" and b is a valid base
    if t > "1" && b > 1
        # Call the function again, appending the maximum prime factor
        # of t in base b to the argument x and decrementing the base
        f(s, [x; maximum(keys(factor(parse(Int, t, b))))], b-1)
    else
        # Otherwise return the array
        x
    end
end

1

Mathematica, 83 ไบต์

FactorInteger[Select[IntegerDigits@#,#<a&]~FromDigits~a][[-1,1]]~Table~{a,10,2,-1}&

ฟังก์ชั่นไม่ระบุชื่อส่งคืนรายการ ไม่ซับซ้อนที่จะซื่อสัตย์


0

ทับทิม 120 ไบต์

ฟังก์ชั่นวนซ้ำใช้อินพุตเป็นสตริง

f=->n,b=2{require'prime';i=n.tr([*b.to_s..?9].join,"").to_i(b)
b>10?[]:f[n,b+1]+[*i>1?Prime.prime_division(i).max[0]:p]}

1
คุณสามารถบันทึกไบต์บางอย่างโดยใช้ธงบรรทัดคำสั่งแทน-rprime require
Doorknob

-rprimeใช้งานไม่ได้สำหรับฉันด้วยเหตุผลบางอย่าง ...
หมึกมูลค่า

0

Pyke, 19 ไบต์, ไม่ใช่การแข่งขัน

(เพิ่ม splat_node functon)
DTAbPe
;1TtD=T`"":r

ลองที่นี่!

ใช้อินพุตในเครื่องหมายคำพูดออกโดยมีข้อผิดพลาด

คำอธิบาย (ขึ้นบรรทัดใหม่แทนที่ด้วย \ n):

D                    - Duplicate the first item on the stack (And get it from input first time)
 TAb                 - Convert input to base (whatever's in T, 10 default)
    Pe               - get the highest prime factor of the number
      \n;1           - print it out and get rid of it
          TtD=T      - T -= 1
               `"":  - input = input.replace(str(t), "")
                   r - GOTO start
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.