प्रासंगिक अंक समूह खोजें


14

हाल ही में, मेरी प्रतिष्ठा थी 25,121। मैंने देखा कि प्रत्येक अंक समूहीकरण (यानी कॉमा द्वारा अलग किए गए अंक) एक पूर्ण वर्ग था।

आपकी चुनौती यह है कि एक गैर-नकारात्मक पूर्णांक N और एक अनियंत्रित बूलियन ब्लैक बॉक्स फ़ंक्शन f : Z *B दिया जाए , तो एक सत्य मान प्राप्त होता है यदि f का प्रत्येक मान N के अंक समूह में लागू होता है, सत्य है, और अन्यथा गलत है।

एक संख्या समूह को 3 के समूहों में विभाजित करके, दाईं ओर से शुरू करके अंक समूह प्राप्त कर सकते हैं। सबसे बाएं समूह में 1, 2 या 3 अंक हो सकते हैं। कुछ उदाहरण:

12398123  -> 12,398,123    (3 digit groupings)
10        -> 10            (1 digit grouping)
23045     -> 23,045        (2 digit groupings)
100000001 -> 100,000,001   (3 digit groupings)
1337      -> 1,337         (2 digit groupings)
0         -> 0             (1 digit grouping)

अतिरिक्त नियम

  • इस समारोह या तो बूलियन्स (जैसे मैप कर सकते trueऔर false), 1है और 0है, या किसी truthy / falsey मूल्य। कृपया निर्दिष्ट करें कि कौन सा प्रारूप आपके उत्तर द्वारा समर्थित है।
  • आप एक पूर्णांक इनपुट के रूप में ले सकते हैं, या एक पूर्णांक स्ट्रिंग (यानी एक अंक से बना स्ट्रिंग)।
  • आप एक कार्यक्रम या एक समारोह लिख सकते हैं।
  • जब कार्य करने के लिए डिजिटल समूहों गुजर , आप सभी अनावश्यक अग्रणी शून्य ट्रिम चाहिए। जैसे, एफ , जब एन = 123,000 पर लागू किया जाता है तो एफ (123) और एफ (0) के रूप में निष्पादित किया जाना चाहिए ।

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

फ़ंक्शन संकेतन है n -> f(n), उदाहरण के लिए , जैसे n -> n == 0। सभी ऑपरेटर पूर्णांक अंकगणित मान लेते हैं। (जैसे, sqrt(3) == 1)

function f
integer N
boolean result

n -> n == n
1230192
true

n -> n != n
42
false

n -> n > 400
420000
false

n -> n > 0
0
false

n -> n -> 0
1
true

n -> sqrt(n) ** 2 == n
25121
true

n -> sqrt(n) ** 2 == n 
4101
false

n -> mod(n, 2) == 0
2902414
true

n -> n % 10 > max(digits(n / 10))
10239120
false

n -> n % 10 > max(digits(n / 10))
123456789
true

यदि हम कार्यों को तर्क के रूप में लेने में असमर्थ हैं, तो क्या हमें यह मानने की अनुमति है कि फ़ंक्शन को एक चर के रूप में परिभाषित किया गया है और हम अपने कार्यक्रम में इसका संदर्भ देते हैं?
caird coinheringaahing

@cairdcoinheringaahing कृपया ब्लैक बॉक्स फ़ंक्शन के लिए संदर्भ पढ़ें , विशेष रूप से उस पोस्ट के अंत में संदर्भ। संक्षेप में, हां, आप कर सकते हैं, भले ही आपकी भाषा तर्क (कार्य) के रूप में कार्य करने में सक्षम हो
Conor O'Brien

क्या इनपुट नकारात्मक हो सकता है? शून्य? आप पूर्णांक के बारे में बात करते हैं, लेकिन सभी उदाहरण सकारात्मक हैं। मैं उन परीक्षण मामलों को भी शामिल करना चाहूंगा जिनमें 000 का समूहन करने की आवश्यकता है।
xnor

1
@ ConorO'Brien उस मामले में आपको परीक्षण मामलों में जोड़ना ( n -> n > 0लागू होना चाहिए 0) क्योंकि अधिकांश उत्तर उस पर विफल होते हैं।
असोन तुहिद

1
@EriktheOutgolfer वे हैं [0]
कॉनर ओ'ब्रायन

जवाबों:


4

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

bȷÇ€Ạ

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

कमांड-लाइन तर्क संख्या है। यह फ़ंक्शन जिस लाइन पर रहता है, उसके ऊपर की लाइन प्रोग्राम के बाकी हिस्सों की मुख्य लाइन है, अर्थात, वह कोड जिसे प्रत्येक समूह के लिए कॉल किया जाता है। सावधान रहो लाइन bȷÇ€Ạका उल्लेख नहीं है ! यहां इस्तेमाल किया गया उदाहरण 5 वां परीक्षण मामला है।



@AsoneTuhid यह नहीं है; संख्या है 0, और इसकी अंक समूह सूची है [0], इसलिए तब प्रत्येक तत्व ( 0यहां एकल ) के लिए मैप किया जाता है , सूची में बदल जाता है [1]और, क्योंकि इस सूची के सभी तत्व सत्य हैं, 1वापस आ गए हैं। ध्यान दें कि अगर मेरे पास अंक समूह की सूची होती []तो परिणाम बदले नहीं जाते, क्योंकि सभी तत्व []सत्य (रिक्त सत्य) हैं। हालाँकि, परिणाम विभिन्न कार्यक्रमों के लिए भिन्न हो सकते हैं, और नियम इस पर बिल्कुल स्पष्ट नहीं हैं ( ओपी से पूछा गया है )।
आउटगोल्फर

क्षमा करें, मैं जेली को मुश्किल से समझता हूं। अच्छा समाधान।
असोन तुहिद

7

ब्रेकीलॉग , 8 बाइट्स

ḃ₁₀₀₀↰₁ᵐ

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

ब्लैकबॉक्स फ़ंक्शन दूसरी पंक्ति (या TIO पर "पाद") पर जाता है और पूर्णांक STDIN से पढ़ा जाता है। प्रिंट true.या false.तदनुसार।

ḃ₁₀₀₀      Compute the base-1000 digits of the input.
     ↰₁ᵐ   Map the blackbox predicate over each digit. We don't care about the
           result of the map, but the predicate must succeed for each digit,
           otherwise the entire map fails.

5

APL (Dyalog) , 16 13 बाइट्स

3 बाइट्स @ Adám की बदौलत बच गए

∧/⎕¨1e3⊥⍣¯1⊢⎕

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

कैसे?

1e3⊥⍣¯1⊢⎕ - नंबर इनपुट करें और आधार 1000 में एनकोड करें

⎕¨ - फ़ंक्शन को इनपुट करें और प्रत्येक पर लागू करें

∧/ - तार्किक और के साथ कम करें


स्पष्ट होकर 3 बाइट्स बचाएं: इसे ऑनलाइन आज़माएं!
प्रवेश

@ Adám धन्यवाद! मुझे अल्फ़ा-अल्फ़ा पसंद आया ...
उरियल

मुझे सही करें अगर मैं गलत हूं, लेकिन मुझे लगता है कि यह एक विफलता है
Asone Tuhid


4

हास्केल, 42 40 38 बाइट्स

f#n=f(mod n 1000)&&(n<1||f#div n 1000)

ब्लैकबॉक्स फ़ंक्शन को वापस लौटना चाहिए Trueया False

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

संपादित करें: -2 -4 बाइट्स @ नोव्स के लिए धन्यवाद।



4

सी (जीसीसी) , 66 58 48 बाइट्स

-10 बाइट्स @ धन्यवाद का शुक्रिया!

t=1000;g(f,i)int f();{i=f(i%t)&(i<t||g(f,i/t));}

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


45 बाइट्स? g(f,i)int f();{i=!i||f(i%1000)&&g(f,i/1000);}
नील


सबसे अच्छा फिक्स मैं 3 बाइट्स कर सकता था: इसे ऑनलाइन आज़माएं!
नील


3

जावास्क्रिप्ट (ईएस 6), 40 36 बाइट्स

f=>g=i=>f(i%1e3)&(i<1e3||g(i/1e3|0))

फ़ंक्शन और मान को करीने से लेता है और 0 या 1 लौटाता है। संपादित करें: @ बिखरने के लिए 4 बाइट्स सहेजे गए।


1000-> 1e3बाइट्स के एक जोड़े को बचाने के लिए। और क्या आप किसी अन्य बाइट के &&साथ बदल सकते हैं &?
शैगी

@ शैगी हाँ, मुझे लगता है कि यह काफी सुरक्षित है। वही विश्वासघात के जवाब के लिए जाता है?
नील

के लिए विफल रहता है function_name(n=>n>0)(0)(रिटर्न true)
Asone Tuhid

@AsoneTuhid धन्यवाद, निश्चित।
नील

2

अजगर , 9 बाइट्स

.AyMjQ^T3

इसे ऑनलाइन आज़माएं! (तीसरे परीक्षण मामले का उपयोग करता है)

ब्लैक-बॉक्स फ़ंक्शन का नाम दिया गया है y। आप इस तरह के एक फ़ंक्शन L(तर्क b:) का उपयोग करके घोषित कर सकते हैं , जैसा कि टीआईओ पर दिखाया गया है। मैं सभी परीक्षण मामलों को बाद में लागू करूंगा, अगर मेरे पास समय है।


2

स्टैक्स , 8 बाइट्स

Vk|Eym|A

स्टैक्स प्रोग्राम में फ़ंक्शन कॉल या तर्क नहीं होते हैं, इसलिए हम Yरजिस्टर में एक ब्लॉक को स्टोर करते हैं जो एकल मूल्य का उपभोग और उत्पादन करता है। यह प्रोग्राम कोड से पहले किया जा सकता है।

{...}Yd     store a block in the Y register that executes ...
Vk|E        get "digits" of input using base 1000
    ym      map "digits" to array using y as mapping function
      |A    all elements are truthy?

यहाँ एक उदाहरण है चौकोर वर्ग फंक्शन का उपयोग करना।


2

साफ , 54 बाइट्स

import StdEnv
$n=if(n<1)True($(n/1000))&&f(n rem 1000)

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

फ़ंक्शन को परिभाषित करता है $ :: Int -> Bool, एक फ़ंक्शन f :: Int -> Boolको कहीं और परिभाषित करने की अपेक्षा करता है।



@AsoneTuhid फिक्स्ड।
Οurous

2

जावा (ओपनजेडके 9) , 94 बाइट्स

f->n->{int r=0,l=n.length();for(;l>0;l-=3)r+=f.test(n.substring(l<4?0:l-3,l))?0:1;return r<1;}

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



@AsoneTuhid बाइट्स की बड़ी लागत पर तय किया गया।
ओलिवियर ग्राएगोइरे


1

05AB1E , 8 बाइट्स

₄вεI.V}P

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

व्याख्या

₄в         # convert first input to base-1000
  ε   }    # apply to each element
   I.V     # execute second input as code
       P   # product of the resulting list

इनपुट की पहली पंक्ति के रूप में संख्या लेता है और दूसरे के रूप में फ़ंक्शन। सत्य के लिए
आउटपुट और मिथ्या के लिए


यह प्रत्येक तत्व पर कोड को निष्पादित नहीं करता है, लेकिन पूरी सूची पर।
आउटगॉल्फ

@EriktheOutgolfer: 05AB1E के स्वचालित वैश्वीकरण के साथ यह ज्यादातर मामलों में होगा। मुझे बस एहसास हुआ कि यह काम नहीं करेगा Qऔर Êयद्यपि। मैं 8-बाइट संस्करण पर वापस लौटूंगा।
एमिग्ना

फिर भी, यह ऐसा नहीं है .Vकि यह सदिश करता है, यह सूची को एक तर्क के रूप में भी शुरू नहीं करता है।
आउटगोल्फर

@EriktheOutgolfer: मैंने कभी नहीं कहा है कि वेक्टरकृत होता है .V। मेरे लिंक में उदाहरण में È
एमिग्ना

असल में Qऔर Êvectorization साथ काम करेंगे के विपरीत मैं पहले कहा है, लेकिन स्वत: vectorization का उपयोग कर इन आदेशों पूरी सूची है जो बाहर की चुनौती की भावना महसूस करता है तो हम की जरूरत पर नक्शा बनाना होगा ε
एमिग्ना

1

एक्सेल VBA, 79 बाइट्स

एक अनाम VBE तत्काल विंडो फ़ंक्शन जो इनपुट लेता है, nरेंज से पूर्णांक के रूप में [A1], और रेंज से एक पबली परिभाषित VBA फ़ंक्शन का नाम [B1]

t=1:n=[A1]:While n:t=t*-Application.Run(""&[B1],n Mod 1E3):n=Int(n/1E3):Wend:?t

उदाहरण का उपयोग करें

एक सार्वजनिक मॉड्यूल में, इनपुट फ़ंक्शन, इस मामले f()में परिभाषित किया गया है।

Public Function f(ByVal n As Integer) As Boolean
    Let f = (n Mod 2 = 0)
End Function

इनपुट चर सेट हैं।

[A1]=2902414    ''  Input Integer
[B1]="f"        ''  input function

तत्काल विंडो फ़ंक्शन तब कहा जाता है।

t=1:n=[A1]:While n:t=t*-Application.Run(""&[B1],n Mod 1E3):n=Int(n/1E3):Wend:?t
 1              ''  Function output (truthy)

1

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

g=->f,n{f[n%x=1000]&&(n<x||g[f,n/x])}

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

एक पुनरावर्ती लंबोदर, फ़ंक्शन और पूर्णांक ले रहा है और बूलियन लौट रहा है।

36 बाइट्स (केवल सकारात्मक n)

g=->f,n{n>0?f[n%k=1000]&&g[f,n/k]:1}

यह संस्करण सच्चाई के लिए 1, falseफ़ासी के लिए लौटता है। दुर्भाग्य से यह कब विफल हो सकता हैn = 0

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


मुझे लगता है कि आपको g=पुनरावर्ती
होना आवश्यक है

@AsoneTuhid ओह, यह समझ में आता है। मैं इसे जोड़
दूंगा

इसके अलावा, यह (-1 बाइट) आज़माएं , यह 1
सत्य

इसने मेरे दिमाग को थोड़ा झुर्रियों में डाल दिया ... मुझे खुद को समझाने के लिए थोड़ा इधर-उधर टिंकर करना पड़ा कि यह सभी मामलों में काम करता है। धन्यवाद!
बेंजं .40

मैं गलत था, यह संस्करण g[->n{n>0},0](रिटर्न true) के लिए काम नहीं करता है । यह केवल तभी विफल होता है जब इनपुट होता है, 0लेकिन सवाल "गैर-नकारात्मक" कहता है, इसलिए आपको 37 पर वापस जाना चाहिए। क्षमा करें
असोन तुहिद

1

तालियाँ , 51 बाइट्स

(lambda(n f)(all(map f(or(to-base 1000 n)(q(0))))))

अनाम लंबो फ़ंक्शन जो एक नंबर और एक फ़ंक्शन लेता है और एक बूलियन मान देता है।

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

(lambda (n f)         ; Function with parameters n and f
 (all                 ; Return true if all elements of this list are truthy:
  (map f              ; Map the function f to each element of
   (or                ; This list if it is nonempty:
    (to-base 1000 n)  ; Convert n to a list of "digits" in base 1000
    (q (0))           ; Or if that list is empty (when n=0), then use the list (0) instead
   ))))

1

++ , 15 बाइट्स जोड़ें

L,1000$bbbUª{f}

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

fTIO हेडर में घोषित किए जाने वाले फ़ंक्शन की आवश्यकता होती है ।

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

D,f,@,0.5^i2^A=	; Declares a function 'f' to check if a perfect square
		; E.g. 25 -> 1; 26 -> 0

L,		; Declare the main lambda function
		; Example argument: 		[25121]
	1000$bb	; Convert to base 1000	STACK = [[25 121]]
	bUª{f}	; Is 'f' true for all?	STACK = [1]
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.