เป็นหมายเลขของ Lynch-Bell หรือไม่


25

คุณจะได้รับจำนวนเต็มบวก (ซึ่งจะไม่มี 0) เป็นอินพุต งานของคุณคือตรวจสอบว่าเป็นหมายเลข Lynch-Bell หรือไม่

ตัวเลขคือหมายเลข Lynch-Bell หากตัวเลขทั้งหมดไม่ซ้ำกันและตัวเลขหารด้วยตัวเลขแต่ละตัว

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

126 คือหมายเลข Lynch-Bell เนื่องจากตัวเลขทั้งหมดไม่ซ้ำกันและ 126 หารด้วย 1, 2 และ 6

คุณสามารถส่งออกค่าความจริงและเท็จใด ๆ

ตัวอย่าง:

7 -> truthy
126 -> truthy
54 -> falsy
55 -> falsy
3915 -> truthy

นี่คือOEIS A115569


1
ที่เกี่ยวข้อง (ขอตัวเลขทั้งหมดแทนการวางปัญหาการตัดสินใจ)
Martin Ender

2
ฉันสามารถรับอินพุตเป็นสตริงได้หรือไม่?
TheLethalCoder

2
@TheLethalCoder แน่นอนคุณทำได้นั่นเป็นคำถามที่โง่
Okx

10
@Okx ผู้โพสต์ความท้าทายบางคนนั้นมีความยืดหยุ่นในอินพุตที่อนุญาตเนื่องจากคุณควรถาม
TheLethalCoder

คำตอบ:


27

Mathematica ขนาด 42 ไบต์

0!=##&@@d&&##&@@((d=IntegerDigits@#)∣#)&

ฉันคิดว่า0!=##&@@d&&##&@@มันต่ำมากในการอ่านสำหรับ Mathematica ...

คำอธิบาย

น้ำตาล syntactic พื้นฐานบางส่วนที่ใช้ที่นี่:

  • & มีลำดับความสำคัญต่ำมากและเปลี่ยนทุกสิ่งที่เหลืออยู่ให้เป็นฟังก์ชันที่ไม่มีชื่อ
  • &&เป็นเพียงAndผู้ประกอบการ
  • # เป็นอาร์กิวเมนต์ของฟังก์ชั่นที่ไม่มีชื่อล้อมรอบที่ใกล้ที่สุด
  • ##เป็นลำดับของอาร์กิวเมนต์ทั้งหมดของฟังก์ชัน
  • @f@x == f[x]เป็นคำนำหน้าสัญกรณ์สำหรับการโทรฟังก์ชั่นคือ
  • @@คือที่ผ่านองค์ประกอบของรายการเป็นข้อโต้แย้งของแต่ละบุคคลที่จะฟังก์ชั่นคือApplyf@@{a,b,c} == f[a,b,c]

เมื่อพ้นทาง ...

(d=IntegerDigits@#)

สิ่งนี้ควรอธิบายได้ด้วยตนเอง: สิ่งนี้ให้รายการตัวเลขทศนิยมของอินพุตและเก็บผลลัพธ์dไว้

(...∣#)

วิธีนี้ทดสอบอินพุตสำหรับการหารด้วยแต่ละหลัก (เนื่องจากตัวดำเนินการหารคือListable) นี่ทำให้เรามีรายชื่อTrues และFalses

...&@@...

เราใช้ฟังก์ชั่นทางด้านซ้ายมือกับรายการบูลีนเช่นนั้นบูลีนแต่ละตัวจะเป็นอาร์กิวเมนต์แยกต่างหาก

...&@@d

เราใช้ฟังก์ชันอื่นกับdเพื่อให้แต่ละหลักมีการกำหนดเป็นอาร์กิวเมนต์แยกต่างหาก ฟังก์ชั่นคือ0!=##& มันตรวจสอบว่าตัวเลขทั้งหมดนั้นแตกต่างกัน (และพวกมันแตกต่างจากแต่ถูกกำหนดโดยความท้าทายและหากไม่เป็นเช่นนั้นจะไม่เป็นตัวหารเลย) เป็นเพียงโปรแกรมรักษาขนาด 1 ไบต์ในการใช้งานตัวเองและใช้งานได้เนื่องจากมีองค์ประกอบขนาด 1 ไบต์ ( ) ที่เรารู้ว่าไม่มีอยู่ ดังนั้นสิ่งแรกตรวจสอบว่าตัวเลขไม่ซ้ำกัน เรียกผลลัพธ์นี้กันUnequal[0, d1, d2, ...]00!=##&Unequal0U

...&&##

And[U, ##]อีกครั้งนี้เป็นจริงเพียงชวเลข ด้วย##การเป็นซีเควนซ์บูลีนแต่ละตัวจากการตรวจสอบการหารเริ่มต้นจะถูกขยายเข้าไปในAndดังนั้นเราจึงได้รับการตรวจสอบว่าตัวเลขทั้งสองนั้นไม่ซ้ำกันและแต่ละหลักหารอินพุตAnd[U, d1∣n, d2∣n, ...]


6
##&@@d&&##&@@? สิ่งนั้นทำอะไรอยู่?
Okx

@Okx เพิ่มคำอธิบาย
Martin Ender

คุณอาจจะสามารถแทนที่0!=โดย 0<?
sergiol

@ sergiol ฉันต้องเรียงตัวเลขเพื่อทำ
Martin Ender

ใหม่ในระดับต่ำในการอ่านแน่นอนโดยปกติ Mathematica ดูเหมือนกลุ่มของไวยากรณ์น้ำตาลรอบชื่อฟังก์ชั่นไม่กี่ฉันเข้าใจฉันไม่ทราบคุณสามารถสร้างโปรแกรมทั้งหมดออกจากน้ำตาล: p (แน่นอนคำอธิบายที่ดีของคุณให้ฉันดู แน่นอนว่ามันไม่ได้เป็นน้ำตาลทั้งหมด แต่ก็ยังน่าประทับใจมาก!)
mbrig

11

Python 3 , 56 ไบต์

lambda n:any(int(n)%int(x)for x in n)or len(n)>len({*n})

ลองออนไลน์!

เอาท์พุทFalseถ้ามันเป็นหมายเลข Lynch-Bell Trueมิฉะนั้น


1
นี่คือการป้อนข้อมูลเป็นสตริงหรือไม่?
CalculatorFeline

2
ปัญหานี้มีสองปัญหา: 1) มันไม่ได้ให้คำตอบที่ถูกต้องตามความเป็นจริงตามที่ระบุ (เป็นเพียง 4 ไบต์!); 2) มีข้อผิดพลาดในอินพุต "10" มิฉะนั้นดีมากและรัดกุม!
CR Drost

@CalculatorFeline ใช่
CR Drost

@CRDrost 1) ouput ที่กำหนดไว้อย่างดีดังนั้นจึงไม่มีปัญหา (ปกติ) 2) จะไม่มี0ในอินพุต
Rod

1
1) ฉันหมายความว่ามีปัญหาซึ่งก็คือพวกเขาขอ X และคุณไม่ได้ให้ 2) อ้าคุณพูดถูกเลยฉันพลาดไปเลย
CR Drost


6

C #, 87 83 ไบต์

using System.Linq;s=>s.Distinct().Count()==s.Length&s.All(c=>int.Parse(s)%(c-48)<1)

ฉันเขียนสิ่งนี้ในแผ่นจดบันทึกก่อนทดสอบใน Visual Studio ซึ่งมันใช้งานได้ดีดังนั้นเพิ่งรู้ว่าตอนนี้ฉันเป็นคนที่ระดับ ...

เวอร์ชั่นเต็ม / ฟอร์แมต:

using System;
using System.Linq;

class P
{
    static void Main()
    {
        Func<string, bool> f = s => s.Distinct().Count() == s.Length
                                  & s.All(c => int.Parse(s) % (c - 48) < 1);

        Console.WriteLine(f("7"));
        Console.WriteLine(f("126"));
        Console.WriteLine(f("54"));
        Console.WriteLine(f("55"));
        Console.WriteLine(f("3915"));

        Console.ReadLine();
    }
}


6

JavaScript (ES6), 42 41 ไบต์

s=>![...s].some((e,i)=>s%e|s.search(e)<i)

รับอินพุตเป็นสตริงและส่งคืนtrueหรือfalseตามความเหมาะสม แก้ไข: บันทึก 1 ไบต์ขอบคุณ @RickHitchcock รุ่นอื่น ๆ :

รับอินพุตเป็นสตริงและส่งคืน0หรือ1(เช่นตรรกะผกผัน) เป็นเวลา 40 ไบต์:

s=>/(.).*\1/.test(s)|[...s].some(e=>s%e)

รับอินพุตเป็นตัวเลขและส่งคืน0หรือ1เป็น 43 ไบต์:

n=>/(.).*\1/.test(n)|[...''+n].some(e=>n%e)

รับอินพุตเป็นตัวเลขและส่งคืน1หรือ0เป็น 45 ไบต์:

n=>!/(.).*\1/.test(n)&![...''+n].some(e=>n%e)

ฉันไม่คุ้นเคยกับตัวเลือก \ n สำหรับการอ้างอิงกลับ +1 คุณสามารถย้ายตรรกะการทดสอบไปยังวิธีการบางอย่างเพื่อบันทึกไบต์:s=>![...s].some((e,i)=>s%e|s.search(e)<i)
Rick Hitchcock

เมื่อฉันใช้[...new Array(9999999)].map((_,n)=>n+1+"").filter(s=>![...s].some((e,i)=>s%e|s.search(e)<i)).lengthฉันได้รับ5081มากกว่าที่คาดไว้548ดังนั้นสิ่งนี้จึงไม่ถูกต้องตามที่เขียนไว้ รหัสแน่นจริงๆแม้ว่า
CR Drost

ขออภัยฉันถอนความคิดเห็นเกี่ยวกับสิ่งนี้ไม่ถูกต้อง รหัสทดสอบของฉันไม่ถูกต้องเนื่องจากผู้ลงประกาศดั้งเดิมคาดว่าค่าศูนย์จะถูกกรองออกไปแล้ว ด้วยสิ่งพิเศษ.filter(x => x.indexOf('0')===-1)นี้จะส่งคืน 548 ตามที่สัญญาไว้
CR Drost

6

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

Dg⁼Q

ลองออนไลน์!

มันทำงานอย่างไร

Dg⁼Q  Main link. Argument: n

D     Decimal; convert n to base 10.
 g    Take the GCD of each decimal digit k and n.
      For each k, this yields k if and only if k divides n evenly.
   Q  Unique; yield n's decimal digits, deduplicated.
  ⁼   Test the results to both sides for equality.

3
นอกจากนี้gQV=หากคุณต้องการโซลูชัน ASCII เท่านั้น
Dennis

5

Python 3 , 54 ไบต์

ส่งคืนFalseเมื่อหมายเลขคือหมายเลข Lynch-Bell รับสายเป็นอินพุต มาด้วยตัวฉันเอง แต่คล้ายกับของ Rod ฉันจะแสดงความคิดเห็นภายใต้โพสต์ของเขา แต่ฉันยังไม่มีชื่อเสียง

lambda s:len({*s})<len(s)+any(int(s)%int(c)for c in s)

ลองออนไลน์!


2
ยินดีต้อนรับสู่ PPCG!
Stephen

ยินดีต้อนรับ! ฟังก์ชั่นของคุณจะมีข้อผิดพลาดในอินพุต "10"
CR Drost

1
@CRDrost "คุณจะได้รับจำนวนเต็มบวก (ซึ่งจะไม่มี 0) เป็นอินพุต"
C McAvoy

ใช่ฉันโพสต์ความคิดเห็นทุกที่ที่ฉันบ่นเกี่ยวกับเรื่องนี้ แต่เห็นได้ชัดว่าฉันพลาด ขออภัยหดกลับ!
CR Drost

@CRDrost ไม่ต้องกังวล!
C McAvoy


2

PHP, 62 48 ไบต์

while($i=$argn[$k++])$r|=$argn%$i|$$i++;echo!$r;

ทำงานเป็นท่อที่มี-nRหรือทดสอบออนไลน์ เอาท์พุทที่ว่างเปล่าสำหรับเท็จ1สำหรับความจริง

ทำให้พังถล่ม

while($i=$argn[$k++])   # loop through digits
    $r|=                    # set $r to true if
        $argn%$i            # 1. number is not divisible by $i
        |$$i++;             # 2. or digit has been used before
echo!$r;                # print negated $r

2

Haskell , 61 ไบต์

(#)=<<show
(d:r)#n=notElem d r&&mod n(read[d])<1&&r#n
_#_=0<3

ลองออนไลน์!

กำหนดฟังก์ชั่นที่ไม่ระบุชื่อ(#)=<<showซึ่งได้รับตัวเลขผลตอบแทนหรือTrueFalse


ฟังก์ชันนี้ล้มเหลวในอินพุต 10
CR Drost

ขออภัยฉันผิดเกี่ยวกับเรื่องนี้ - ฉันพลาดที่คุณไม่จำเป็นต้องให้คำตอบใด ๆ สำหรับอินพุตที่มี 0s ในนั้น
CR Drost



1

Mathematica, 57 ไบต์

Tr@Boole[IntegerQ/@Union[s=#/IntegerDigits@#]]==Length@s&

1
คุณสามารถบันทึกไบต์จำนวนมากถ้าคุณใช้ builtinIsLynchBellNumber
Okx

1
ทำไมคุณไม่ทำข้อเสนอแบบเดียวกันกับมาร์ตินล่ะ?
J42161217

@Okx แต่มันก็สนุกน้อยลง
QBrute

@QBrute คุณตลกไหม?
Okx

1
@Okx มันน่าจะเชื่อได้มากกว่าLynchBellNumberQนี้ ;)
Martin Ender

1

Python 2 , 66 ไบต์

นี่คือวิธีการแก้ปัญหาใน Python 2 ซึ่งมีวัตถุประสงค์ทั้งหมดเพื่อส่งออกTrueเพื่อความจริงและFalseเพื่อความเท็จ:

lambda n:len(set(n))==len(n)and not any((int(n)%int(x)for x in n))

ลองออนไลน์!


1

Haskell, 260 241 201 162 ไบต์

f([x])=1<2
f(x:xs)=not(x`elem`xs)&&(f xs)
r n i= n`mod`(read[(show n!!i)]::Int)==0
q n 0=r n 0 
q n i=r n i&&q n(i-1)
p n=length(show n)-1
s n=q n(p n)&&f(show n)

คำอธิบาย

f ([x]) = True                                           f function checks for                                                       
f (x:xs) = not(x `elem` xs) && (f xs)                    repeated digits              
r n i = n `mod` (read [(show n !! i)] :: Int) == 0       checks whether num is 
                                                         divisible by i digit
q n 0 = r n 0                                            checks wether n divisible
q n i = r n i && q n (i-1)                               by all of its digits                             
p n = length (show n) -                                  gets length of number                             
s n = (q n (p n)) && (f (show n))                        sums it all up!!!

ได้สั้นลงอย่างมากขอบคุณLaikoni


1
ยินดีต้อนรับสู่การเล่น PPCG และ Haskell โดยเฉพาะ! คำตอบนี้สามารถทำให้สั้นลงได้อย่างมากโดยการลบช่องว่างที่ไม่จำเป็นออกเช่นคำที่อยู่รอบ ๆ เครื่องหมายที่เท่ากันหรือถัดจากวงเล็บ
Laikoni

1
นอกจากนี้คุณยังอาจจะสนใจในเคล็ดลับสำหรับการเล่นกอล์ฟใน Haskellและคู่มือกฎกอล์ฟใน Haskell
Laikoni

@Laikoni Thanx สำหรับคำแนะนำของคุณ! ฉันกำลังดูอยู่
Sergii Martynenko Jr


0

Neim , 9 ไบต์

𝐮ℚ₁𝐅₁𝕌₁ℚ𝕒

ลองออนไลน์!

-2 ขอบคุณที่Okx

อืมมันมีสมมาตรที่ดี ... oO.O.O.Oo


คุณสามารถเล่นกอล์ฟ𝐂D𝐮𝔼ไปที่𝐮ℚ(ไม่ซ้ำกันตรวจสอบประเภทที่ไม่สนใจความเท่าเทียมกัน)
Okx

ยังมีห้องสำหรับเล่นกอล์ฟอยู่ที่นั่น)
Okx

@Okx อืม ... ฉันไม่เห็นสิ่งใดที่น่าสนใจเป็นพิเศษ
Erik the Outgolfer

0

Perl 6 , 27 ไบต์

{$_%%.comb.all&&[!=] .comb}

ลองออนไลน์!

  • .combเป็นวิธีการที่เมื่อไม่มีข้อโต้แย้งให้แบ่งสตริงออกเป็นอักขระแต่ละตัว จำนวนจะถูกแปลงเป็นสตริงโดยปริยายและ.combส่งกลับตัวเลข
  • .comb.all เป็นและแยกของตัวเลขทั้งหมด
  • $_ %% .comb.allเป็นและแยกของการหารของอาร์กิวเมนต์ที่ป้อน$_โดยตัวเลขทั้งหมดของมัน ตัวอย่างเช่นถ้า$_เป็น123ทางแยกคือall(True, False, True)ซึ่งยุบไปFalseในบริบทความจริง
  • [!=] .combลดตัวเลขของอาร์กิวเมนต์อินพุตด้วย!=โอเปอเรเตอร์ซึ่งประเมินTrueว่าตัวเลขนั้นแตกต่างกันหรือไม่

0

เรติน่า 37 ไบต์

(.).*\1
0
.
<$&$*1>$_$*
<(1+)>\1+

^$

ลองออนไลน์! ลิงค์มีกรณีทดสอบ คำอธิบาย: ระยะแรกแทนที่ตัวเลขที่ซ้ำกันใด ๆ ด้วยศูนย์ ขั้นตอนที่สองแทนที่แต่ละหลักด้วยการเป็นตัวแทน unary ตามด้วยการเป็นตัวแทน unary ของหมายเลขเดิม ขั้นตอนที่สามจะคำนวณส่วนที่เหลือของการหารหมายเลขเดิมด้วยตัวเลขที่ไม่ใช่ศูนย์ หากหมายเลขนั้นเป็นหมายเลข Lynch-Bell การดำเนินการนี้จะลบทุกอย่างและจะทำการทดสอบในขั้นตอนสุดท้าย



0

CJam, 17 ไบต์

CJam เป็นภาษาจาวาของการเล่นกอล์ฟ มันตีความได้ใน Java!

{_Ab__L|=@@f%:+>}

คำอธิบาย:

{   e# Stack:              3915
_   e# Duplicate:          3915 3915
Ab  e# Digits in base 10:  3915 [3 9 1 5]
__  e# Duplicate twice:    3915 [3 9 1 5] [3 9 1 5] [3 9 1 5]
L|  e# Remove duplicates:  3915 [3 9 1 5] [3 9 1 5] [3 9 1 5]
=   e# Test equality:      3915 [3 9 1 5] 1
@@  e# Rotate twice:       1 3915 [3 9 1 5]
f%  e# Modulo each:        1 [0 0 0 0]
:+  e# Sum:                1 0
>   e# Greater than:       1
}   e# Output:             1 (truthy)

0

VBScript, 177 ไบต์

นี่คือการโพสต์ CG ครั้งแรกของฉันและความพยายามครั้งแรกดังนั้นหวังว่าฉันจะปฏิบัติตามกฎทั้งหมด ...

Function L(s)
dim i,j,k,m,n
j = Len(s)
redim a(j)
n = 0
for i = 0 to j-1
   A(i) = Mid(s,i+1,1)   
   m = m + s Mod A(i)   
   if j = 1 then         
   else                             
        for k = 0 to i - 1        
            if A(i)  = A(k) then n = n + 1   
        next
   end if
next
if m + n = 0 then L = "y" else L = "n"
End Function

สิ่งนี้สามารถเรียกใช้จาก Notepad ได้โดยการเพิ่มบรรทัดที่ท้าย

Msgbox L(InputBox(""))

แล้วบันทึกเป็น. vbs จากนั้นดับเบิลคลิก

คำอธิบาย:

Function L(s)                  'creates the function "L" taking test number as input
dim i,j,k,t,m,n                'variables
j = Len(s)                     '"j" gets length of test number
redim a(j)                     'creates array "a", size is length of test number 
n = 0                          'sets repeat character counter "n" to zero
for i = 0 to j-1               'for length of string
   A(i) = Mid(s,i+1,1)         'each array slot gets one test number character
   m = m + s Mod A(i)          '"m" accumulates moduli as we test divisibility of each digit
   if j = 1 then               'if test number is of length 1, it passes (do nothing)
   else                        'otherwise, gotta test for repeats     
        for k = 0 to i - 1     'for each digit already in array, test against current digit   
            if A(i)  = A(k) then n = n + 1  
                               'repeat char counter "n" stores no of repeats  
        next                   'proceed through array looking for repeat  
   end if
next                           'test next digit for divisibility and repeats
if m + n = 0 then L = "y" else L = "n"      
                               'check for any repeats and moduli,
                               'then return yes or no for LynchBelledness
End Function

VBScript เป็นเครื่องดนตรีทื่อสำหรับเล่นกอล์ฟ แต่เดี๋ยวก่อนฉันยังไม่ได้เรียนรูบี้ ...


คุณไม่สามารถลบช่องว่างบางส่วนเช่น 'L = "y"'
Okx

ใช่แล้ว! ฉันควรทำอย่างนั้น ... btw ฉันกำลังดูภาษา codegolf ที่อาจจะเจ๋งที่จะเรียนรู้ แต่สำหรับเอกสารส่วนใหญ่มีน้อยถึงไม่มีอยู่ ... ใครสามารถแนะนำภาษาที่ดีที่ได้รับการบันทึกไว้อย่างดี? กำลังลอง "จริง / จริงจัง" แต่เจออุปสรรคบางอย่างเนื่องจากการขาดเอกสาร ....
aAaa aAaa

0

PHP , 51 ไบต์

พิมพ์ศูนย์สำหรับจริงและหนึ่งสำหรับเท็จ

for(;$c=$argn[$i++];$$c=1)$t|=$$c||$argn%$c;echo$t;

ลองออนไลน์!

PHP , 62 ไบต์

พิมพ์ศูนย์สำหรับจริงและหนึ่งสำหรับเท็จ

for($a=$argn;$c=$a[$i];)$t|=strpos($a,$c)<+$i++||$a%$c;echo$t;

ลองออนไลน์!


0

Pyth , 10 ไบต์

qiRQKjQT{K

ตรวจสอบกรณีทดสอบทั้งหมด

อย่างไร?

qiRQKjQT {K ~ โปรแกรมเต็มรูปแบบ

     jQT ~ รายการเลขทศนิยมของอินพุต
    K ~ กำหนดให้กับตัวแปร K
 iRQ ~ สำหรับแต่ละหลักทศนิยม ...
 ฉันถาม ~ ... รับตัวหารร่วมมากที่สุดด้วยอินพุตของมันเอง
        {K ~ K ที่ลบองค์ประกอบที่ซ้ำกันออก
q ~ เท่ากับ ผลผลิตโดยปริยาย

Pyth , 11 ไบต์

&!f%sQsTQ{I

ตรวจสอบกรณีทดสอบทั้งหมด

อย่างไร?

&! f% sQsTQ {I ~ โปรแกรมแบบเต็มพร้อมอินพุตโดยนัย

  f Q ~ กรองผ่านสายป้อน
   % sQsT ~ อินพุตถูกแปลงเป็นจำนวนเต็มโมดูโลตัวเลขปัจจุบัน
             ~ เก็บถ้ามันสูงกว่า 0 และทิ้งมันเป็นอย่างอื่น
 ! ~ การปฏิเสธ หากรายการว่างเปล่าผลตอบแทนจริงอื่นเท็จ
& {I ~ และค่าคงที่สำหรับการป้อนข้อมูลจะไม่ซ้ำซ้อนหรือไม่ ผลผลิตโดยปริยาย

0

Perl 5 , 34 ไบต์

33 ไบต์ของรหัส + 1 สำหรับการ-pตั้งค่าสถานะ

$n=$_;$\|=$n%$_|$k{$_}++for/./g}{

ลองออนไลน์!

เอาท์พุท0สำหรับความจริงจำนวนอื่น ๆ ที่เป็นเท็จ


0

Kotlin 1.1, 98 66 59 ไบต์

{i->i.none{i.toInt()%(it-'0')>0}&&i.length==i.toSet().size}

เชิดชู

{i ->
    // None of the digits are not factors
    i.none { i.toInt() % (it-'0') > 0 }
    // AND
    &&
    // None of the digits are repeated
    i.length == i.toSet().size
}

ทดสอบ

var L:(String)-> Boolean =
{i->i.none{i.toInt()%(it-'0')>0}&&i.length==i.toSet().size}
data class TestData(val input: String, val output: Boolean)

fun main(args: Array<String>) {
    var inputs = listOf(
        TestData("7", true),
        TestData("126", true),
        TestData("54", false),
        TestData("55", false),
        TestData("3915", true)
    )

    for (test in inputs) {
        if (L(test.input) != test.output) {
            throw AssertionError(test.toString())
        }
    }
    println("Test Passed")
}

0

APL (Dyalog Unicode)ขนาด 24 ไบต์

{((,⍵)≡∪⍵)×∧/0=(⍎¨⍵)|⍎⍵}

ลองออนไลน์!

Simple Dfn, สามารถเล่นกอล์ฟได้อีกเล็กน้อย ให้ผลลัพธ์ APL มาตรฐานบูลีน 1 สำหรับความจริง, 0 สำหรับความเท็จ

เป็นมูลค่าที่จะกล่าวถึงว่าฟังก์ชั่นใช้อาร์กิวเมนต์เป็นสตริงแทนที่จะเป็น int

วิธี:

{((,⍵)≡∪⍵)×∧/0=(⍎¨⍵)|⍎⍵}  Dfn, argument ⍵.
                      ⍎⍵   Convert  to integer
                     |     Modulus
                (⍎¨⍵)      Each digit in 
              0=           Equals 0? Returns a vector of booleans
            ∧/             Logical AND reduction
           ×               multiplied by (the result of)
  (     ∪⍵)                unique elements of 
                          Match
   (,⍵)                     as a vector; the Match function then returns 1 iff all digits in  are unique

0

Julia 1.0 , 39 ไบต์

f(x,d=digits(x))=rem.(x,d)==0*unique(d)

rem.(x,d)เป็นเวกเตอร์ที่มีส่วนที่เหลือหลังจากการหาร x xโดยแต่ละหลักใน 0*unique(d)เป็นเวกเตอร์ที่มีความยาวเท่ากับจำนวนหลักที่ไม่ซ้ำกันโดยมีค่าศูนย์ทั้งหมด ตรวจสอบว่าพวกเขาเท่าเทียมกัน

ลองออนไลน์!


0

ruby -n , 40 ไบต์

p gsub(/./){$'[$&]||$_.to_i%$&.hex}<?0*8

ลองออนไลน์!

อ่านจำนวนเป็นสตริง แทนที่อักขระแต่ละตัว (หลัก) ด้วยการเกิดขึ้นของตัวละครนั้นถ้ามีหรือจำนวนทั้งหมดโมดูโลตัวเลขนั้น สิ่งนี้จะส่งผลให้มีสตริง0เป็น s เท่านั้นหากว่านี่คือหมายเลข Lynch-Bell ทำไม? หากมีตัวเลขที่ซ้ำกันทุกอินสแตนซ์สุดท้ายจะยังคงเหมือนเดิมและเนื่องจากอินพุตไม่ประกอบด้วยศูนย์ซึ่งหมายความว่าตัวเลขที่ไม่ใช่ศูนย์ มิฉะนั้นเราแค่ตรวจสอบว่าตัวเลขทุกตัวหารจำนวนอย่างเท่าเทียมกันหรือไม่

เนื่องจากไม่มีหมายเลข Lynch-Bell 8 หลักขึ้นไป (การพิสูจน์อย่างเป็นทางการ: OEIS กล่าวอย่างนั้น) การตรวจสอบว่าสตริงผลลัพธ์เป็น lexicographically เร็วกว่าสตริง'00000000'นั้นเทียบเท่ากับการตรวจสอบว่าเป็นศูนย์ทั้งหมดหรือไม่


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