क्या यह एक मनभावन संख्या है?


22

एक मनभावन संख्या (इस परिभाषा के अनुसार) एक संख्या है जिसे निम्नलिखित प्रक्रिया से गुजारा जा सकता है ( 41802000उदाहरण के रूप में उपयोग करें ):

  • अनुगामी समरूप संख्याओं को अलग करें ( 41802000 => [41802, 000])
  • अंकों की पहली छमाही को छाँटें और अधिकतम लें ( [41802, 000] => [8, 000])
  • अंतिम तत्व की लंबाई लें। परिणामी तत्वों को A और B कहें ( [8, 000] => A=8, B=3)
  • क्या N B = किसी पूर्णांक के लिए A है N? ( Trueइस उदाहरण में; २ = 2)

यदि इनपुट Trueनिम्न प्रक्रिया से परिणामित होता है, तो इसे प्रसन्न माना जाता है।

आपका कार्य एक पूर्णांक लेना है x, और आउटपुट चाहे xएक मनभावन संख्या हो। आप सत्य और असत्य के लिए किसी भी दो अलग-अलग मूल्यों का उत्पादन कर सकते हैं, लेकिन कृपया बताएं कि आप अपने उत्तर में क्या उपयोग कर रहे हैं। xकम से कम दो अलग-अलग अंक होने की गारंटी है (जैसे 111एक अमान्य इनपुट है)। अधिकांश चुनौतियों के साथ, आप xएक स्ट्रिंग या अंकों की सूची के रूप में ले सकते हैं ।

यह बाइट्स जीत में एक तो सबसे छोटा कोड है ।

परीक्षण के मामलों

          Input          Output
       41802000               1
            100               1
      123456788               0
      451111111               0
234543454545444               0
             12               1
       41902000               0
          92599               1

क्या संख्या को स्ट्रिंग के रूप में पारित किया जा सकता है? (विशेष रूप से '234543454545444' परीक्षण का मामला दी)
ऊरीएल

@ यूरेल आप एक स्ट्रिंग के रूप में इनपुट ले सकते हैं
caird coinheringaahing

3
स्पष्टीकरण के लिए एक सुझाव के रूप में: मैं "अंक" के बजाय "अंक" शब्द का उपयोग करूंगा, क्योंकि आप विशेष रूप से दशमलव वर्णों का उल्लेख कर रहे हैं, उनके संख्या मूल्यों से सार।
जोनाथन फ्रीच

list of digits- क्या यह ASCII अंक अक्षरों की सूची होगी, या 0-9 से पूर्णांक की सूची होगी
aturous

1
@ Coinurous अप टू
caird coinheringaahing

जवाबों:


9

एपीएल (डायलॉग) , 36 बाइट्स

{(⊢≡⌊)(⌈/⍎¨⍵/⍨~o)*÷≢⍵/⍨o←⌽⌊\1,2=/⌽⍵}

इसे ऑनलाइन आज़माएं!

कैसे?

लगभग एक कविता।

⌽⍵ - इनपुट को एक बार रिवर्स करें,

1,2=/ - अंतर सूची प्राप्त करें।

⌊\ - केवल लोगों का पहला समूह रखें,

- और इसे पूरा करने के लिए फ्लिप।


o←- को असाइन करें o,

~o - स्विच वाले और शून्य (एस),

⍵/⍨ - इसके साथ इनपुट को फ़िल्टर करें,

⍎¨ - परिणाम को प्रत्येक अंक की सूची में बदल दें,

  • ⌈/- और अधिकतम प्राप्त करें। (यह एक है)

⍵/⍨o- इनपुट को ounalt (ered) के साथ फ़िल्टर करें ,

- और लंबाई लें, जो कि बी होगी।

÷ - इस परिणाम से विभाजित करें,

* - और ए को उस शक्ति के पास ले जाओ।


⊢≡⌊ - पूर्णांक?


8

05AB1E , 11 बाइट्स

γRćgUZXzm.ï

इसे ऑनलाइन आज़माएं!

व्याख्या

γRćgUZXzm.γ ~ पूर्ण कार्यक्रम।

γ ~ अंकों के रन में विभाजित।
 आर ~ रिवर्स।
  ć ~ पुश [एक [1]], एक [0] स्टैक के लिए।
   जी ~ लंबाई (एक [को ०])।
    U ~ इसे पूर्णांक चर X पर असाइन करें।
     ZX ~ पॉपिंग के बिना अधिकतम प्राप्त करें, और X को धक्का दें।
       zm ~ ए 1 / बी ।
         । ~ क्या यह पूर्णांक है?

एमिगा ने 1 बाइट बचाई।

इस तथ्य पर निर्भर करता है कि यदि A , B की शक्ति के लिए उठाया गया एक धनात्मक पूर्णांक N है , तो N = A 1 / B , इसलिए यह पूर्णांक होना चाहिए।


UZXइसके बजाय काम करना चाहिएs{θs
Emigna

9-बाइट प्रोग्राम के लिए विफल 41902000होना चाहिए (झूठा होना चाहिए)।
ज़गारब

@Zgarb हाँ मैं लगभग यकीन है कि यह विफल हो जाएगा, तो मैं इसे हटा दिया था ... इसके अलावा lol हम ठीक उसी पूर्णांक मिल गया
श्री Xcoder

के लिए विफल418802000
ओक्सएक्स

8

हास्केल , 85 75 72 71 बाइट्स

संपादित करें : एक स्ट्रिंग के बजाय अंकों की एक सूची लेकर -10 बाइट्स। यह इंगित करने की अनुमति के लिए व्हाट्सडू के लिए धन्यवाद । -3 बाइट्स क्लीन में अवर के समाधान के लिए धन्यवाद । -128 उपयोगकर्ता के लिए बाइट धन्यवाद ।

f s|(b,a)<-span(==last s)$reverse s=or[n^length b==maximum a|n<-[1..9]]

इसे ऑनलाइन आज़माएं! अंकों की सूची के रूप में इनपुट लेता है। उदाहरण उपयोग: f [4,1,8,0,2,0,0,0]पैदावार True

स्पष्टीकरण:

एक इनपुट को देखते हुए s=[4,1,8,0,2,0,0,0], हम reverseसूची और साथ प्रमुख तत्वों को अलग span(==last s): ([0,0,0],[2,0,8,1,4])(b,a)पैदावार पर मिलान पैटर्न b=[0,0,0]और a=[2,0,8,1,4]

सूची समझने की or[n^length b==maximum a|n<-[1..a]]जाँच करती है कि nसीमा में कोई पूर्णांक से 1लेकर 9संतुष्टियाँ n^length b==maximum aतक है या नहीं n^3=8


आपने मेरा पोस्ट करने से पहले आपका पोस्ट किया, और हमारे समान हैं, इसलिए: इसे ऑनलाइन आज़माएं!
WhatToDo

@WhatToDo धन्यवाद, मैंने अंकों की उस सूची को नहीं देखा जहां इनपुट के रूप में अनुमति दी गई थी।
लकोनी 22

क्या आप अभी अधिकतम नहीं ले सकते। उन सभी की जांच करने की आवश्यकता नहीं है।
टिम

@ मुझे यकीन नहीं है कि मैं समझ सकता हूं कि आपका क्या मतलब है। प्राप्त करने के लिए पूरे इनपुट सूची का अधिकतम लेना aजैसे मामलों में विफल हो जाएगा 477
लैकोनी

@Tim मैं पाने के लिए अधिकतम लेते हैं b, लेकिन हर पूर्णांक जाँच nसे 0करने के लिए 9(से पूर्व 0करने के लिए a)। जैसा मैंने देखा, ठीक वैसा ही विनिर्देश है।
लकोनी 11

5

हास्केल , 104 89 बाइट्स

@ लैकोनी को एक छोटा समाधान मिला , लेकिन यह सबसे अच्छा है जो मैं कर सकता था। धन्यवाद @ लिकोनी मुझे यह बताने के लिए कि हम इनपुट के रूप में अंकों की सूची भी स्वीकार कर सकते हैं।

import Data.List
(g.length.last<*>maximum.concat.init).group
g b a=any(==a)$(^b)<$>[1..a]

स्पष्टीकरण:

इसे ऑनलाइन आज़माएं!


any(==a)जब आप उपयोग कर सकते हैं तो उपयोग क्यों करें elem a?
गेहूं जादूगर

@WheatWizard सुझाव के लिए धन्यवाद, अपनी दूसरी टिप्पणी के बारे में: 'उदाहरण के लिए असफल' होगा 2888?
15

हाँ, ऐसा लगता है कि मैंने प्रश्न को गलत बताया। मुझे एहसास नहीं था कि अनुगामी संख्या शून्य के अलावा कुछ भी हो सकती है।
गेहूं जादूगर

लेकिन head.maximumअभी भी maximum.concat2 बाइट्स से छोटा है , और कार्यक्षमता बनाए रखता है।
गेहूं जादूगर

4

आर , 80 बाइट्स

function(x)any((0:(m=max((d=rle(rev(utf8ToInt(c(x,''))-48)))$v[-1])))^d$l[1]==m)

इसे ऑनलाइन आज़माएं!

utf8ToInt - 48अंकों को अंकों में विभाजित करने के लिए उपयोग करता है। यह एक स्ट्रिंग में रूपांतरण से एक चेतावनी फेंकता है।

Rle के उपयोग से अनुगामी अंकों की गिनती और पहले अंकों का अधिकतम मान मिलता है। सच मानें यदि अनुगामी गिनती की शक्ति के लिए 0 से अधिकतम मान की सीमा अधिकतम मान के बराबर है।

मुझे लगता है कि आगे गोल्फ के अवसर हैं, लेकिन यह कल तक इंतजार कर सकता है।


2
मैंने अपना उत्तर हटा दिया क्योंकि मैंने नहीं देखा कि मेरी पोस्ट सिर्फ आपके उत्तर और @ NofP's: function(x,R=rle(rev(utf8ToInt(x)-48)))!max(R$v[-1])^(1/R$l[‌​1])%%1(66 बाइट्स, xएक स्ट्रिंग के रूप में) का संयोजन कर रही थी
प्लेनैपस

@plannapus व्यक्तिगत रूप से मैं इसे हटाना रद्द कर दूंगा। यह हम दोनों की तुलना में बेहतर गिनती है और वास्तव में दोनों की नकल नहीं है
मिकटी

@plannapus मैं मिक्की से सहमत हूँ!
एनओएफपी

@ नोफ और मिकी: ठीक है, फिर यहाँ है
प्लैनैपस

4

जेली , 11 बाइट्स

ŒgµṪL9*€fṀL

अंकों की सूची के रूप में इनपुट लेता है।

इसे ऑनलाइन आज़माएं!

यह काम किस प्रकार करता है

ŒgµṪL9*€fṀL  Main link. Argument: D (digit array)

Œg           Group runs of digits, yielding a run array R.
  µ          Begin a new chain with argument D.
   Ṫ         Tail; remove and yield the last element of D.
    L        Take the length. Let's call it b.
     9*€     Compute [1**b, ..., 9**b].
         Ṁ   Take the maximum run in R, yileding [a, ..., a].
        f    Filter, yielding either [a] (if a = n**b for some n) or [].
          L  Take the length. 

उत्तरों को देखने से पहले, और जेली को जाने बिना, मैंने अनुमान लगाया कि जेली का उत्तर 12 बाइट्स होगा। ;)
डीएलोस्क

4

आर, 66 बाइट्स

यह जवाब कमोबेश मिकी और NofP के जवाबों का एक मिश्रण है, और उनके अनुरोध पर, यह है:

function(x,R=rle(rev(utf8ToInt(x)-48)))!max(R$v[-1])^(1/R$l[1])%%1

यह एक स्ट्रिंग के रूप में x लेता है।

> f=function(x,R=rle(rev(utf8ToInt(x)-48)))!max(R$v[-1])^(1/R$l[1])%%1
> f("41802000")
[1] TRUE
> f("100")
[1] TRUE
> f("123456788")
[1] FALSE
> f("451111111")
[1] FALSE
> f("234543454545444")
[1] FALSE
> f("12")
[1] TRUE
> f("41902000")
[1] FALSE

3

जावास्क्रिप्ट (ईएस 7), 66 बाइट्स

या तो एक स्ट्रिंग या वर्णों के एक इनपुट के रूप में लेता है। एक बूलियन देता है।

f=([c,...s],m)=>s.some(n=>n-c)?f(s,c<m?m:c):!(m**(1/-~s.length)%1)

परीक्षण के मामलों



3

पायथन 2 , 95 78 बाइट्स

  • रॉड के लिए सत्रह बाइट्स सहेजे गए ।
def f(s,i=~0):
	while s[i]==s[~0]:i-=1
	return int(max(s[:-~i]))**(1./~i)%1==0

इसे ऑनलाइन आज़माएं!


आपको ओ सॉर्ट की आवश्यकता नहीं है, आप बस अधिकतम प्राप्त कर सकते हैं, और जब से आप पहले से ही मिल रहे iहैं, तब len तक
रॉड

@Rod बहुत बहुत धन्यवाद।
जोनाथन फ्रेच

2

आर , 93 बाइट्स

function(x){n=nchar(x)
d=x%/%10^(n:1-1)%%10
i=max(which(d!=d[n]))
max(d[1:i])^(1/(n-i))%%1>0}

इसे ऑनलाइन आज़माएं!

कोड इनपुट के रूप में एक पूर्णांक लेता है और यदि संख्या भाता है, तो FALSE लौटाता है, और अन्यथा सत्य है।


2

पायथन 3 , 88 85 बाइट्स

def f(n):p=n.rstrip(n[-1]);a=int(max(p));b=len(n)-len(p);return round(a**(1/b))**b==a

Ungolfed:

def is_pleasing_number( n ):
    prefix = n.rstrip(n[-1])
    a = int(max(prefix))
    b = len(n) - len(prefix)
    return round(a ** (1 / b)) ** b == a
  • इनपुट तर्क एक अंक स्ट्रिंग होने की उम्मीद है
  • आउटपुट Trueया तो हैFalse
  • हालवर्ड के उत्तर के स्वतंत्र रूप से विकसित होने के समान है, लेकिन फ्लोटिंग पॉइंट अंकगणित का उपयोग इस तरह से करता है कि राउंडिंग त्रुटियों से ग्रस्त नहीं होता है, जब तक a ** (1 / b)कि b whicha से कम से कम 0.5 तक बंद नहीं हो जाता है जिसके लिए 2 53 (या जो भी फ़्लोटिंग पॉइंट मूलांक और मंटिसा के ऊपर एक मान आवश्यक है) लंबाई पायथन का उपयोग करने के लिए होती है, देखेंsys.float_info )।
  • 2 और 36 के बीच मनमानी संख्या आधारों के साथ काम करने के लिए तुच्छ रूप से संशोधित किया जा सकता है।

@ नोव्स: एक मामूली संशोधन के साथ, हाँ। समारोह एक अतिरिक्त तर्क के रूप में आधार लेने के लिए और इसके बारे में आमंत्रण को पारित करने के लिए होता है intऔर range। (कुछ बिंदु पर यह a^(1/b)बड़ी मात्रा में शक्तियों की गणना करने की तुलना में खोज सीमा के आधार पर अनुमान लगाने के लिए अधिक संभव होगा ।)
डेविड फ़ॉर्स्टर


1

रूबी , 64 बाइट्स

->a{!([a[/(\d)\1*$/].size,$`.chars.max]*?x!~/x1$|^2x[49]|^3x8/)}

एक स्ट्रिंग के रूप में इनपुट, सच लौटाता है अगर:

  • B == 1 (ए की जाँच करने की आवश्यकता नहीं है)
  • ए == 4 और बी == २
  • ए == 9 और बी == २
  • ए == 8 और बी == 3

इसे ऑनलाइन आज़माएं!


1

पर्ल 6 , 55 बाइट्स

{m/(\d+?)((\d)$0*)$/;so any(^10)**$1.comb==$0.comb.max}

इसे ऑनलाइन आज़माएं!

प्रारंभिक regex के मूल्यांकन के बाद - जो केवल तभी सफल हो सकता है जब इनपुट एक धनात्मक पूर्णांक $0होता है - जिसमें संख्या का प्रारंभिक भाग $1होता है , और अनुगामी दोहराया अंकों को समाहित करता है।

combबहस के बिना विधि, एक स्ट्रिंग के लिए आवेदन किया,, वर्णों की एक सूची देता है जो सूची की लंबाई के संख्यात्मक संदर्भ मूल्यांकन करता है। तो $0.comb.maxउपसर्ग में अंकों का सबसे बड़ा है, और$1.comb प्रत्यय की लंबाई है।

हम तब जांचते हैं कि क्या any(^10)(यानी, 0-9 से संख्याओं का जंक्शन), जब प्रत्यय की लंबाई की शक्ति के लिए उठाया जाता है, उपसर्ग में सबसे बड़े अंक के बराबर है। soबलों जिसके परिणामस्वरूप जंक्शन, जो अन्यथा सिर्फ एक truthy मूल्य के रूप में अपने आप ही ठीक होगा की बूलियन मूल्यांकन, लेकिन सिर्फ दो अलग-अलग मूल्यों के लिए चुनौती कॉल लौटा दी है।


यह देर हो चुकी है, लेकिन जब से इनपुट एक पूर्णांक होने की गारंटी है, regex का उपयोग कर सकते हैं .के बजाय \d
डीएलओएस



1

सी # (.NET कोर) , 132 बाइट्स

n=>{int A=0,B=1,s=1,i=n.Length-1;for(;i-->0;)if(n[i]==n[i+1]&s>0)B++;else{A=n[i]>A?n[i]:A;s=0;}return System.Math.Pow(A,1d/B)%1==0;}

इसे ऑनलाइन आज़माएं!

स्वीकृतियाँ

-12 बाइट्स @KevinCruijssen को धन्यवाद

DeGolfed

n=>{
    int A=0, // maximum digit
        B=1, // count of trailing identical numbers
        s=1, // 1 if dealing with trailing numbers, 0 otherwise
        i=n.Length-1;

    for(; i-- > 0;)
        if(n[i] == n[i+1] & s > 0)
            B++;
        else
        {
            A = n[i] > A? n[i] : A;
            s = 0;
        }

    return Math.Pow(A, 1d/B) % 1 == 0;
}

मुझे पता है कि यह एक समय हो गया है, लेकिन i=n.Length-2;for(;i>=0;i--)इसको गोल्फ किया जा सकता है i=n.Length-1;for(;i-->0;)और &&इसे गोल्फ से जोड़ा जा सकता है &
केविन क्रूज़सेन

ओह, और आप सीधे हटाने using System;और उपयोग करके 6 और बाइट्स गोल्फ कर सकते System.Math.Powहैं।
केविन क्रूज़सेन

एक अंतिम बात। आप वर्तमान में वर्णों की एक सूची लेते हैं, लेकिन इसे अंकों की सूची लेने की भी अनुमति है। जिस स्थिति में -48-3 बाइट्स के लिए गोल्फ किया जा सकता है।
केविन क्रूज़सेन

1

जाप , 26 18 बाइट्स

ó¶
o l
ñ o n qV v1

इसे ऑनलाइन आज़माएं!


एक स्ट्रिंग के रूप में इनपुट लेता है, 1मनभावन संख्याओं के लिए रिटर्न ,0 अन्यथा।

संक्षिप्त विवरण:

ó¶

पहला इनपुट लें और इसे उन मूल्यों से विभाजित करें जहां (x,y) => x===yसत्य है। उदाहरण के '41802000'लिए ['4','1','8','0','2','000']

o l

पहले चरण से सरणी लें, अंतिम तत्व निकालें और इसकी लंबाई प्राप्त करें, बी उपज ।

ñ o n qV v1

शेष सरणी में सबसे बड़ा तत्व खोजें, ए की उपज , इसे सत्ता में ले जाएं 1/Bऔर फिर परिणाम एक से विभाज्य होने पर वापस आ जाएं।


पहली बार जाप के साथ काम करना, किसी भी सिफारिश के लिए बहुत खुला। ETHproductions की बदौलत
8 बाइट्स बंद किए


हे, जाप में आपका स्वागत है! क्षमा करें, मुझे आपके उत्तर पहले याद आ गए। कुछ सुझाव: 1) आप पहली पंक्ति को बस चालू करने के लिए एक ऑटो-फंक्शन का उपयोग कर सकते हैं ó¶। 2) सुनिश्चित नहीं हैं कि क्यों आप vदूसरी पंक्ति में, के रूप में यह सिर्फ स्ट्रिंग लोअरकेस में बदलता है और लंबाई ;-) 3) आप बच सकते हैं पर कोई प्रभाव नहीं !(Uबदलकर अंतिम पंक्ति पर %1करने के लिए v1है, जो रिटर्न 1विषय अगर 1 या 0अन्यथा से विभाज्य है ।
ETHproductions

@ETHproductions आपकी प्रतिक्रिया के लिए बहुत बहुत धन्यवाद, वास्तव में इसकी सराहना करते हैं। मैंने पहले ऑटो-फ़ंक्शंस के बारे में पढ़ा, लेकिन मैंने अभी भी इसके बारे में बहुत कुछ नहीं जाना है, उदाहरण के लिए धन्यवाद। मैंने आपके बाकी परिवर्तनों को भी शामिल कर लिया है, कुल मिलाकर 8 बाइट्स खो गए हैं।
लीख


0

चारकोल , 33 बाइट्स

≔ESιθ⊞υ⊟θW⁼§υ⁰§θ±¹⊞υ⊟θ¬﹪XI⌈θ∕¹Lυ¹

इसे ऑनलाइन आज़माएं! लिंक कोड के वर्बोज़ संस्करण के लिए है। -मनभावन संख्याओं के लिए आउटपुट । स्पष्टीकरण:

≔ESιθ

इनपुट qको वर्णों में विभाजित करें ।

⊞υ⊟θ

अंतिम वर्ण को इसमें से निकालें qऔर इसे u(एक रिक्त सूची में पूर्वनिर्धारित) पर धकेलें ।

W⁼§υ⁰§θ±¹⊞υ⊟θ

बार-बार पॉप और पुश जबकि अंतिम चरित्र का qपहला चरित्र है u

¬﹪XI⌈θ∕¹Lυ¹

की अधिकतम अंक लें qऔर इसे लंबाई की पारस्परिक की शक्ति तक बढ़ाएं u, फिर जांचें कि क्या परिणाम पूर्णांक है।




0

जावा 8, 125 बाइट्स

a->{int A=0,B=1,f=1,i=a.length-1;for(;i-->0;)if(a[i]==a[i+1]&f>0)B++;else{A=a[i]>A?a[i]:A;f=0;}return Math.pow(A,1d/B)%1==0;}

@ Ayb4btu के C # .NET उत्तर का पोर्ट ।

इसे ऑनलाइन आज़माएं।

स्पष्टीकरण:

a->{                       // Method with digit-array parameter and boolean return-type
  int A=0,                 //  Maximum digit `A` as specified in the challenge description
      B=1,                 //  `B` as specified in the challenge description
      f=1,                 //  Flag-integer, starting at 1
      i=a.length-1;        //  Index integer `i`
  for(;i-->0;)             //  Loop `i` backwards over the digits (excluding the last)
    if(a[i]==a[i+1]        //   If the current and next digits are the same,
       &f>0)               //   and the flag is still 1
      B++;                 //    Increase `B` by 1
    else{                  //   Else:
      A=a[i]>A?            //    If the current digit is larger than `A` 
         a[i]              //     Replace `A` with the current digit
        :                  //    Else:
         A;                //     Leave `A` the same
      f=0;}                //    Set the flag-integer to 0
  return Math.pow(A,1d/B)  //  Return if `A` ^ (1/`B`)
    %1==0;}                //  is an exact integer


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.