หมายเลข Lynch-Bell มีกี่หมายเลข


19

ท้าทาย

ได้รับจำนวนเต็มnเป็น input ที่การส่งออกจำนวนตัวเลขที่ลินช์เบลล์ที่มีอยู่ในฐาน36 >= n >= 2n

เอาต์พุตจะต้องอยู่ในฐาน 10

หมายเลข Lynch-Bell

ตัวเลขคือหมายเลข Lynch-Bell หาก:

  • ตัวเลขทั้งหมดไม่ซ้ำกัน (ไม่มีการซ้ำซ้อนของตัวเลข)
  • ตัวเลขหารด้วยตัวเลขแต่ละหลัก
  • มันไม่ได้มีศูนย์เป็นหนึ่งในหลัก

เนื่องจากตัวเลขทั้งหมดจะต้องไม่ซ้ำกันและคุณมีชุดของตัวเลขหลักเดียวในแต่ละฐานมีจำนวน จำกัด ของหมายเลข Lynch-Bell

ตัวอย่างเช่นในฐาน 2 มีหมายเลข Lynch-Bell เพียงหมายเลขเดียวเท่านั้น1เนื่องจากตัวเลขอื่น ๆ ทั้งหมดเป็นตัวเลขซ้ำหรือมี 0

ตัวอย่าง

Input > Output
2 > 1
3 > 2
4 > 6
5 > 10
6 > 10
7 > 75
8 > 144
9 > 487
10 > 548

Mathematica Online มีหน่วยความจำไม่เกินฐาน 10 คุณสามารถใช้รหัสต่อไปนี้เพื่อสร้างของคุณเอง:

Do[Print[i," > ",Count[Join@@Permutations/@Rest@Subsets@Range[#-1],x_/;And@@(x\[Divides]FromDigits[x,#])]&[i]],{i,10,36,1}]

การชนะ

รหัสที่สั้นที่สุดในหน่วยไบต์ชนะ


1
@MagicOctopusUrn ทำไมเราต้องใช้พจนานุกรม? เราไม่จำเป็นต้องเอาท์พุทในฐานนั้น
user202729

2
คุณสามารถเพิ่มตัวอย่างได้>10หรือไม่
Rod

1
@Janathan ฉันเห็นว่าฉันลบล้างแล้วตอนนี้
Beta Decay

3
หากต้องการเพียง [2-36] เท่านั้นเราอาจจะแสดงรายการทั้งหมด
Jonathan Allan

3
ปรากฎว่าไม่มีใครจัดการคำนวณf(36)ได้ สร้างรหัสท้าทายที่เร็วที่สุดซึ่งอาจเป็นเรื่องที่น่าสนใจ
user202729

คำตอบ:


8

เยลลี่ขนาด 13 ไบต์

Q⁼g
*`Ṗ©bç"®S

ลองออนไลน์!

อีกO (n n )การแก้ปัญหา

คำอธิบาย

Q⁼g  Helper link. Input: digits (LHS), integer (RHS)
Q    Unique (digits)
 ⁼   Match
  g  GCD between each digit and the integer

*`Ṗ©bç"®S  Main link. Input: integer n
*`         Compute n^n
  Ṗ        Pop, forms the range [1, n^n-1]
   ©       Store previous result in register
    b      Convert each integer to base n
     ç"    Call the helper link, vectorized, with
       ®   The register's value
        S  Sum

16 ไบต์ṖŒPḊŒ!€Ẏ⁼g¥"ḅ¥³Sและเร็วกว่า
ไมล์

5

เยลลี่ 15 ไบต์

*ḃ€’Q€Qḍḅ¥€⁸Ạ€S

ลองออนไลน์!

ความซับซ้อนO(nn)


5
เฉพาะในรหัสกอล์ฟเป็นO(N^N)วิธีการแก้ปัญหาที่ไม่เพียง แต่ยอมรับได้ แต่ดี
DJMcMayhem

5
@DJMcMayhem Meh ฉันคิดว่าเราสามารถปั๊มตัวเลขเหล่านั้นได้และได้รับO(N↑↑N)
Beta Decay

มันควรจะเป็นO(N^(N+1))เพราะการตรวจสอบความถูกต้องของแต่ละหมายเลขที่สร้างขึ้นใช้เวลาO(N)? (แม้ว่าฉันจะไม่เข้าใจ Jelly)
user202729

@ user202729 N + 1 เป็นเพียง N ในเครื่องหมายใหญ่ -O
mbrig

1
@ mbrig แน่นอนฉันเข้าใจสัญกรณ์ -O ใหญ่ว่า ( N+1ในO(N)) ไม่ได้หมายความว่าN^(N+1)มีสิ่งO(N^N)ต่อไปนี้
user202729

3

Java, 222 212 190 ไบต์

-10 ไบต์ขอบคุณเฮอร์แมน

-22 ไบต์ขอบคุณเควิน

import java.util.*;a->{int c=0,i=1;A:for(;i<Math.pow(a,a);i++){Set g=new HashSet();for(char b:a.toString(i).toCharArray())if(!g.add(b)|b<49||i%a.parseInt(b+"",a)>0)continue A;c++;}return c;}

Ungolfed:

a -> {
    int count = 0;
    OUTER:
    for (int i = 1; i < Math.pow(a, a); i++) {
        Set<Character> found = new HashSet<>();
        for (char b : Integer.toString(i, a).toCharArray()) {
            if (!found.add(b) || b == 48 || i % Integer.parseInt(b + "", a) != 0) {
                continue OUTER;
            }
        }
        count++;
    }
    return count;
}

ลองออนไลน์!

รับช้ามากสำหรับจำนวนมาก


-10 ไบต์:a->{int c=0,i=1;A:for(;i<Math.pow(a,a);i++){java.util.Set<Character>g=new java.util.HashSet<>();for(char b:Long.toString(i,a).toCharArray())if(!g.add(b)|b<49||i%Long.parseLong(b+"",a)>0)continue A;c++;}return c;}
เฮอร์แมน L

หนึ่งในครั้งแรกที่ผมได้เห็นป้ายชื่อที่ใช้ในการคำตอบ codegolf
จัสติน

A:และcontinue A;มีขนาด 13 ไบต์ในขณะที่{--c;break;}อายุ 12 ปีนั่นจะสร้างข้อผิดพลาดบางอย่างที่ฉันไม่เห็นหรือไม่?
JollyJoker

นี่อาจจะคุ้มค่ากับคำตอบที่แยกจากกัน แต่คุณสามารถวนรอบตัวเลขในฐาน n โดยแต่ละหลักอยู่i%aและi/=aที่แต่ละวง คุณสามารถหลีกเลี่ยงการตั้งค่าโดยใช้int[]และตรวจสอบว่าx[b]++<2
JollyJoker

java.util.Set<Character>‌​g=new java.util.HashSet<>();สามารถimport java.util.*;+ Set g=new HashSet();; Long.toStringสามารถa.toString; และสามารถLong.parseLong a.parseInt
Kevin Cruijssen


2

ที่จริงแล้ว 24 ไบต์

;╗DR⌠╜DR╨i⌡M⌠;╜@¿♀%ΣY⌡MΣ

ลองออนไลน์!

คำอธิบาย

โปรแกรมนี้ประกอบด้วยสองส่วนหลักคือการสร้างการเปลี่ยนรูปและการทดสอบ Lynch-Bell ดังนั้นคำอธิบายนี้จะพิจารณาแต่ละส่วนแยกกันเพื่อความชัดเจนที่มากขึ้น

การสร้างพีชคณิต

อินพุต: n(จำนวนเต็มใน[2, 36])

เอาท์พุท: การเรียงสับเปลี่ยนทั้งหมดและบางส่วนของ[1, n-1](ลำดับที่มีค่าจาก[1, n-1]โดยไม่มีการทำซ้ำที่มีความยาวอยู่ใน[1, n-1])

;╗DR⌠╜DR╨i⌡M
;╗            store a copy of n in register 0
  DR          range(1, n)
    ⌠╜DR╨i⌡M  do the following for each element k in range:
     ╜DR        range(1, n)
        ╨       k-permutations of [1, n-1]
         i      flatten

การทดสอบ Lynch-Bell

อินพุต: รายการของฐานnจำนวนเต็มแสดงเป็นรายการของฐานnหลัก

เอาท์พุท: จำนวนหมายเลข Lynch-Bell ในฐาน n

⌠;╜@¿♀%ΣY⌡MΣ
⌠;╜@¿♀%ΣY⌡M   for each base-n digit list a:
 ;╜             duplicate a, push n
   @¿           convert a from base-n to decimal
     ♀%         modulo a with each of its base-n digits
       Σ        sum
        Y       boolean negation (1 if all modulo results are 0, else 0)
           Σ  sum (count the 1s in the resultant list)

2

Mathematica, 82 79 76 ไบต์

Count[Join@@Permutations/@Subsets@Range[#-1],x_/;x==x~FromDigits~#~GCD~x]-1&

คุณจะส่งผ่านหมายเลขนี้ได้อย่างไร (ขออภัย Mathematica นั้นยังใหม่สำหรับฉัน)
Beta Decay

วางฟังก์ชั่น (เช่นเพื่อ Wolfram sandbox) แล้วใส่[<parameter>]หลังจากนั้น ด้วยparameterการเป็นตัวเลข
user202729

คุณสามารถเพิ่ม TIO หรือเทียบเท่าได้หรือไม่
Shaggy


1
f (5) และ f (6) ทั้ง 10 เป็นจริงหรือไม่ มันแปลกมาก ...
Magic Octopus Urn

1

05AB1E , 22 ไบต์

mLIBε0KÙ}ÙvyIöySIö%O_O

ลองออนไลน์!

O_O ยังเป็นหน้าของฉันเมื่อในที่สุดก็ใช้งานได้

<ÝIBJ0Kæ¦Ù€œ˜ เร็วกว่าวิธีที่ฉันใช้เพื่อสร้างตัวเลขในคำตอบจริง แต่หยุดสุ่มเพื่ออะไรที่ใหญ่กว่า 7 (โดยไม่มีเหตุผลชัดเจน?)

คำอธิบาย

mLIBε0KÙ}ÙvyIöySIö%O_O # (input = i)
m                      # Push i^i
 L                     # ...and get a range from one to this value
  IB                   # Map every element to their base i representation
    ε   }              # Map every element to ...
     0K                 # Itself without 0s
       Ù                # ...and only unique digits
         Ù             # Uniquify the resulting list
          v            # For each element...
           yIö          # Push it converted to base 10
              ySIö      # Push every digit of it converted to base 10 in a list
                  %     # Calculate the modulo for each digit
                   O    # Sum all results together
                    _   # Negate: Returns 0 for every positive number and 1 for 0
                     O  # Sum with the rest of the stack (Basically counting all Lynch-Bell-Numbers)
                       # Implicit print

ฉันค่อนข้างมั่นใจว่าวิธีการที่แตกต่างกันสามารถประหยัดไบต์ได้มากขึ้น แต่ในโซลูชันปัจจุบันของคุณε0KÙ}สามารถ0м€Ùบันทึกไบต์ได้
Kevin Cruijssen

1

Perl 5, 80 76 ไบต์ (75 + -p)

$\+=!grep$_?$;%$_|$|{0,$_}++:1,@@until($@[$}++]+=1)%=$_ and++$;,$}=$}==$_}{

การเหยียดหยาม$;เพื่อความสนุกและผลกำไร หมดเวลากับอินพุต> 8

แก้ไข: -4 ไบต์โดยการรวมสองลูป


1

Ruby , 80 65 ไบต์

->n{(1..n**n).count{|i|(d=i.digits n)-[0]==d|d&&d.sum{|j|i%j}<1}}

ลองออนไลน์!

ขอบคุณ GB สำหรับ -15 ไบต์


สิ่งนี้จะไม่ทำงานสำหรับ n> 10 (เพราะ "j.to_i")
GB

จับได้ดีแย่ไปกว่านั้นก็ดีก่อนหน้านั้น :)
Kirill L.

ต่อไป: คุณสามารถเรียก "หลัก" ผ่านฐานเป็นอาร์กิวเมนต์และบันทึกจำนวนมาก: `-> n {(1..n ** n) .count {| i | (d = i.digits n) - [0] == d | d && d.sum? {| j | i% j} <0}} `
GB

แน่นอนฉันพลาดจริง ๆ ว่าตัวเลขนั้นมีพารามิเตอร์นี้ แต่ฉันเห็นว่าคุณโพสต์คำตอบนี้เป็นคำตอบแยกต่างหากจากนั้นลบออก ฉันจะบอกว่าไปข้างหน้าคุณเอาชนะฉันมัน :)
คิริลล์ลิตร

ฉันคิดว่าคำตอบของฉันคล้ายกันเกินไปมันเป็นวิธีการเดียวกันกับทางลัดสองสามรหัสส่วนใหญ่ที่ถูกขโมย
GB

1

Japt -x , 25 19 ไบต์

-6 ไบต์ขอบคุณ Shaggy

pU õìU ËeDâ f myDìU

ลองออนไลน์!



หรือ19 ไบต์พร้อมกับ-xตั้งค่าสถานะ
ขนด

ว้าว O_o ฉันน่ากลัวอย่างมากที่สนามกอล์ฟ japt
ASCII เท่านั้น

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

@Shaggy แต่เมื่อคุณใช้ภาษาใหม่บ่อยเท่าที่ฉันควรจะคาดหวังว่าฉันจะใกล้เคียงกับความเหมาะสมมากกว่า 25% XD
ASCII- เท่านั้น

0

Python 3 , 204 174 ไบต์

lambda x,r=range,i=chain:sum(0**any(int(''.join(map(str,y)),x)%z for z in y)for y in i(*map(permutations,i(*[combinations(r(1,x),e)for e in r(x)]))))-1
from itertools import*

ลองออนไลน์!

สำหรับการเรียงสับเปลี่ยนของแต่ละองค์ประกอบของ powerset ของช่วง (1, n) (ไม่มีเลขศูนย์, ไม่ซ้ำกัน), แปลงเป็นสตริงตัวเลขเป็นฐาน n รวมทั้งหมดที่หารด้วยแต่ละหลักลบ 1 เนื่องจาก powerset สร้างชุดว่าง

-30 ไบต์ขอบคุณ @ovs!





0

Perl 5 , 108 + 1 ( -p) = 109 ไบต์

while(@a<$_){$r=%k=@a=();for($t=++$i;$t;$t=int$t/$_){push@a,$t%$_}$r||=!$_||$i%$_||$k{$_}++for@a;$r||$\++}}{

ลองออนไลน์!

มันเป็นหมู ไม่แน่ใจว่ามันจะทำมากกว่า 8 ฐานใน TIO โดยไม่ต้องหมดเวลาหรือไม่


0

C # (Visual C # Interactive Compiler) , 144 ไบต์

n=>{int j,i,p;for(j=i=0;i++<~0UL;){p=i;var a=new List<int>();for(;p>0;p/=n)a.Add(p%n);j+=a.All(c=>c>0&&i%c<1&a.Count(x=>x==c)<2)?1:0;}return j;}

ผ่านตัวเลขทั้งหมดตั้งแต่ 0 ถึงulong.MaxValueและเลือกหมายเลขที่เป็นหมายเลข Lynch-Bell ในฐานที่ระบุ ใช้เวลาตลอดไปในการรันแม้เป็น 2 แม้ว่าคุณจะตั้งค่าไว้ก็ตาม~0ULส่วนในลูปเป็นบางสิ่งก็ตามคุณสามารถรับเอาต์พุตสำหรับอินพุตสูงสุด 7 ภายในหนึ่งนาทีบน TIO

ลองออนไลน์!

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