डेटा को बेअसर करें


22

डेटा को बेअसर करने के लिए, ज़ीरो और सभी वर्णों (स्ट्रिंग नहीं!) के साथ रिक्त स्थान के साथ सभी नंबरों की पुनरावृत्ति करें।

आपको मिश्रित संख्यात्मक / चरित्र डेटा के किसी भी एक नंबर, वर्ण, या स्ट्रिंग या संभवतः पुनरावर्ती सरणी * को स्वीकार करना होगा जिसे आपकी भाषा संभाल सकती है। उदाहरण के लिए, आपको वास्तविक स्ट्रिंग्स को स्वीकार करना चाहिए (और अपने इनपुट को एकल वर्णों की सूचियों तक सीमित नहीं करना चाहिए) यदि आपकी भाषा ऐसे संभाल सकती है।

यदि आपकी भाषा में एक बिल्ट-इन है, जिसमें सभी या अधिकांश कार्य हैं, तो मैं इसके बिना एक अतिरिक्त वैकल्पिक संस्करण की सराहना करूंगा।

प्रत्येक भाषा में सबसे छोटा सबमिशन एक विजेता है, और मुझसे एक उत्थान प्राप्त करेगा।

नमूना मामलों

  1. """"

  2. 70

  3. 123.4560

  4. "X"" "

  5. " "" "

  6. "Yo!"" "

  7. [][]

  8. [-1.2E3][0]

  9. ["Hey"][" "]

  10. ["H","e","y"][" "," "," "]

  11. ["R",2,"D",2][" ",0," ",0]

  12. ["C","3","P",0][" "," "," ",0]

  13. ["THX",[1138]][" ",[0]]

  14. ["T","H","X",[1138]][" "," "," ",[0]]

  15. [[["H"],"e",1,1,0],[[-3],"arth"]][[[" "]," ",0,0,0],[[0]," "]]

* यदि आपकी भाषा में कई प्रकार हैं जो उपरोक्त उदाहरणों की तरह समान रूप से सरणियों का प्रतिनिधित्व कर सकते हैं, तो आप केवल एक का समर्थन करने के लिए चुन सकते हैं। दो प्रविष्टियां दोनों जीत सकती हैं, भले ही वे एक ही भाषा का उपयोग कर रहे हों, प्रत्येक एक अलग डेटा प्रकार के साथ जा रहा है।


क्या होगा अगर हमारी भाषा वर्णों और लंबाई -1 तार के बीच अंतर नहीं करती है?
xnor

@xnor AFAICT का प्रभाव समान होगा।
आदम

ओह, मैं देख रहा हूं कि अब परीक्षण मामलों से, लेकिन यह मेरे लिए स्पष्ट नहीं था कि प्रत्येक स्ट्रिंग तत्व को लेने और इसके प्रत्येक वर्ण को रिक्त स्थान के साथ बदलने के लिए। वास्तव में, मैंने यह नहीं समझा कि प्रतिस्थापन को पुनरावर्ती रूप से किया जाना है। किसी सरणी को बेअसर करने के बारे में कल्पना की बात की जाती है, लेकिन ऐसा लगता है कि आप चाहते हैं कि सरणी में एकल तत्व भी उस पर कार्रवाई न करें?
xnor

@xnor सही। इसे बेहतर ढंग से दर्शाने के लिए प्रश्न को संपादित करने के लिए स्वतंत्र महसूस करें।
आदम

जवाबों:


17

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

f=o=>o.big?o.replace(/./g,' '):o.map?o.map(f):0

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


अंत में, के लिए एक उपयोग big()! हालाँकि, आप शायद raw()इसके बजाय बेहतर भविष्य-प्रूफिंग प्रदान करेंगे ।
झबरा

@ शगमी हम्म। आप किस सिंटेक्स का उपयोग करेंगे raw()? मुझे नहीं लगता String.prototype.raw()कि परिभाषित किया गया है। केवल String.raw()है
अरनौलड़

ओह, हाँ, क्षमा करें।
झबरा

7

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

f=lambda x:1-(x<{})and map(f,x)if x<''else' '*len(x)

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

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

अजगर आपको विभिन्न प्रकारों की तुलना करने देता है। संख्यात्मक प्रकार हमेशा पुनरावृत्तियों की तुलना में छोटे होते हैं, और पुनरावृत्तियाँ उनके प्रकार नामों द्वारा क्रमबद्ध होती हैं, इसलिए

0 < {} < [] < '' < ()

इस तरह, एफ निम्नलिखित करता है।

  • यदि x संख्यात्मक x<{}रिटर्न सही है और 01-(x<{}) देता है । कोड के बाद निष्पादित नहीं होता है।and

  • यदि एक्स iterable, है 1-(x<{})रिटर्न 1 (truthy), तो कोड के बाद andमार डाला जाता है।

    • यदि x एक सूची है, x<''तो सत्य है और f इसकी वस्तुओं पर मैप हो जाता है।

    • यदि x एक स्ट्रिंग है, x<''तो झूठी है और x को समान लंबाई के रिक्त स्थान के स्ट्रिंग के साथ बदल दिया गया है।


7

रूबी, 54 53 49 बाइट्स

f=->a{a*0==0?0:a*0==[]?a.map{|x|f[x]}:" "*a.size}

शायद एक बेहतर तरीका है, लेकिन:

  • पूर्णांक के लिए x * 0 == 0
  • x * 0 == "" तार के लिए
  • x * 0 == [] सरणियों के लिए

चतुर! मुझे पायथन में भी प्रकार निर्धारित करने के लिए धन्यवाद!
TidB

यह एक सरणी के बाहर स्ट्रिंग और संख्या के उदाहरणों के लिए काम नहीं करता है, लेकिन यदि आप इसे बदल a.mapदेते हैं तो [*a].mapयह अपेक्षित है
एलेक्सिस एंडरसन

यह अब तय किया गया है, धन्यवाद।
जीबी

6

गणितज्ञ, 51 बाइट्स

मुझे वर्तमान में इस बाइट गणना में दो समाधान मिले हैं:

#/._?NumberQ->0/.x_String:>StringReplace[x,_->" "]&
StringReplace[#,_->" "]~Check~#&//@#/._?NumberQ->0&

दूसरा एक चेतावनी का एक गुच्छा फेंकता है जिसे अनदेखा किया जा सकता है।

व्याख्या

या तो मामले में, हम संख्याओं को शून्य में बदलकर शुरू करते हैं

#/._?NumberQ->0

फिर स्ट्रिंग को संसाधित करने के लिए, दो विकल्प हैं। या तो, हम एक और प्रतिस्थापन का उपयोग करते हैं जो केवल स्ट्रिंग्स पर लागू होता है:

.../.x_String:>StringReplace[x,_->" "]

या, हम उस MapAllऑपरेटर का उपयोग करते हैं, //@जो नेस्टेड सूची में हर एक तत्व पर एक फ़ंक्शन मैप करता है। यहाँ पकड़ यह है कि हम StringReplaceशून्य के साथ-साथ प्रतीक पर भी प्रयोग करने की कोशिश कर रहे हैं List(क्योंकि //@अभिव्यक्ति के प्रमुखों के माध्यम से भी जाता है), इसलिए हमें कहर बरपाने ​​से बचने के लिए Check( catchअन्य भाषाओं में कथन की तरह ) का उपयोग करने की आवश्यकता है वे मूल्य:

StringReplace[#,_->" "]~Check~#&//@...

5

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

nOa⁶

यह एक अद्वैत कड़ी है। जेली की अंतर्निहित छपाई बहुत अधिक बिखरती है; यह सत्यापित करने के लिए कि आउटपुट क्या होना चाहिए, आप आंतरिक प्रतिनिधित्व को देख सकते हैं ŒṘ। ध्यान दें कि यह तार को पात्रों की सूची के रूप में उजागर करता है, जो कि जेली दुभाषिया उन्हें कैसे लागू करता है।

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

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

nOa⁶  Monadic link. Argument: z

 O    Ordinal; replace all characters with the code points.
      This does not affect numbers.
n     Vectorizing not-equal; compare z with the result to the right, replacing
      characters with 1 and numbers with 0.
  a⁶  Logical AND space; replace all 1's with spaces.

मैं एपीएल के आने का इंतजार कर रहा था। अब 1-बाइट समाधान के लिए एक अलग से एक चुना!
आदम

सिर के लिए धन्यवाद, लेकिन मुझे यकीन नहीं है कि मुझे यह भी पता है कि [[["H"],"e",1,1,0],[[-3],"arth"]]एपीएल में कैसे प्रतिनिधित्व किया जाए ...
डेनिस

JSON2APLexpr←⎕SE.Dyalog.Utils.repObj 7159⌶ ⋄ JSON2APLexpr'[[["H"],"e",1,1,0],[[-3],"arth"]]'देता है ((,⊂,'H') (,'e') 1 1 0) ((,¯3) 'arth')। FYI करें, संस्करण 16.0 में 7159⌶होगा ⎕JSON
18

APL किसी भी JSON से निपट सकता है। हालाँकि, APL के बहुत से डेटा को JSON में स्पष्ट रूप से प्रस्तुत नहीं किया जा सकता है।
18

क्या आपको लगता है कि एक कोड-गोल्फ जिसमें पार्सिंग शामिल है या शायद एपीएल सरणियों में हेरफेर करना दिलचस्प होगा?
आदम

5

पर्ल 6, 34 48 बाइट्स

{.deepmap:{$_~~Str??" "x.comb!!0}}

{$_~~List??$_».&?BLOCK!!$_~~Str??" "x .comb!!0}

विस्तारित:

{                          # block-based lambda
    $_ ~~ List             # if argument is a list/array
        ?? $_».&?BLOCK     # then recurse for each element (&?BLOCK is a compile-time var)
        !! $_ ~~ Str       # else if argument is a string
            ?? " "x .comb  # then use space repeated by the string's length,
            !! 0           # else use the number 0
}

.deepmap सही ढंग से की तरह विलक्षण आदानों के लिए काम नहीं करता है "X"या 7, क्योंकि यह हमेशा एक सूची देता है।
ब्रैड गिल्बर्ट

डारन, मैंने इस बात की अनदेखी की होगी (या बाद में कार्य को स्पष्ट कर दिया गया था)। इससे यह काफी लंबा हो जाता है।
SMLS

3

जीएपी , 91 बाइट्स

GAP में एक विधि है Zeroजो एक additive संरचना के एक तत्व के अनुरूप तटस्थ एडिटिव तत्व को वापस करती है। यह संख्या और यहां तक ​​कि उन संख्याओं की सूचियों को भी संभालता है जिन्हें वैक्टर माना जाता है, लेकिन मनमानी सूचियां नहीं। तो चलिए इन और Chars को जोड़ते हैं और उपयोग करते हैं कि Strings, Chars की सूची हैं:

InstallOtherMethod(Zero,[IsChar],c->' ');
InstallOtherMethod(Zero,[IsList],l->List(l,Zero));

(मैं नई लाइन की गिनती नहीं कर रहा हूँ क्योंकि इसकी आवश्यकता नहीं है।) बेशक यह अभी तक उपयोग से दूर है Zero, और अगर मैं Installअन्य का उपयोग नहीं किया था तो जीएपी शिकायत करेगा Method। अब मैं कर सकता हूँ:

gap> Zero([[["H"],"e",1,1,0],[[-3],"arth"]]);
[ [ [ " " ], " ", 0, 0, 0 ], [ [ 0 ], "    " ] ]

मैं यह नहीं कहूंगा कि बिल्टिन सबसे अधिक काम करता है, किसी को संदेह हो सकता है कि सामान्य फ़ंक्शन लिखना कम होना चाहिए, लेकिन मेरा सबसे अच्छा प्रयास यह था कि 92 बाइट्स लंबा हो:

f:=function(x)if IsInt(x)then return 0;elif IsList(x)then return List(x,f);fi;return' ';end;

2

हास्केल, 115 बाइट्स

मेरी भाषा सूचियों में संख्याओं और तारों के किसी भी मिश्रण को संभाल नहीं सकती है (लेकिन निश्चित रूप से आप एक राशि प्रकार को परिभाषित कर सकते हैं और सूची में डाल सकते हैं), और इसकी मानक सूचियाँ अलग-अलग नेस्टेड सूचियों को संभाल नहीं सकती हैं। इसलिए मैं वही कर रहा हूं जो इसे संभाल सकता है। मुझे लगता है कि यह अनुचित नहीं है क्योंकि यह अभी भी लंबा है, और मैं मुख्य रूप से हैसेल की विशेषताओं को दिखाने के लिए करता हूं जो कि हेकेल गोल्फिंग समाधानों में शायद ही कभी देखा जाता है। ध्यान दें कि स्ट्रिंग्स चार्ट की सूची हैं।

class N a where n::a->a
instance N Double where n _=0
instance N Char where n _=' '
instance N a=>N[a]where n=map n

यह किसी भी संख्या को डबल के रूप में हैंडल करता है:

*Main> n 42
0.0
*Main> n 123.456
0.0
*Main> n "hi"
"  "
*Main> n [[1,2],[3,4,5]]
[[0.0,0.0],[0.0,0.0,0.0]]
*Main> n ["hello","world!"]
["     ","      "]

1
इसके साथ एक डेटा संरचना data N=S[Char]|I Int|L[N]और उस पर एक पुनरावर्ती कार्य को परिभाषित करने के लिए कम होना चाहिए ।
जर्गर्ब

आप शायद सही हैं मेरा अनुमान है, लेकिन यह कम दिलचस्प है और अभी भी ऐसा लगता है कि वास्तव में समस्या का समाधान नहीं हुआ है (मैं मानता हूं कि यह वास्तव में करीब है)। मैं किसी और के लिए छोड़ दूँगा।
क्रिश्चियन सेवर्स

पूर्णांक ? कैसे परीक्षण के मामले के बारे में 3.?
एडम

@ एडम ओह तुम सही हो, और दुर्भाग्य से मैं दावा नहीं कर सकता कि मेरी भाषा उन लोगों के पास नहीं है। क्या मैं केवल डबल्स को संभाल सकता हूं? मैं उन्हें दशमलव बिंदु के बिना इनपुट कर सकता हूं।
क्रिश्चियन सेवर्स

@ChristianSievers हाँ, यह ठीक है। मूल रूप से, आपको दिए गए JSON से कोई भी आयात (यदि संभव हो तो) आपको संभालने में सक्षम होना चाहिए।
Admm

2

PHP, 91 बाइट्स

function f($a){return!is_array($a)?is_string($a)?str_pad("",strlen($a)):0:array_map(f,$a);}

अगर पैरामीटर सरणी है: पुनरावृत्ति का उपयोग करके array_map
और अगर पैरामीटर स्ट्रिंग है: एक ही लंबाई के साथ रिक्त स्थान का एक स्ट्रिंग उत्पन्न करें।
और 0

is_stringएक बाइट बचाता है is_numeric; नकारात्मक is_array()रेंडरिंग कोष्ठक अप्रचलित है। कुल मिलाकर यह if()recursion-loop;else x?string:numberसंदर्भ से एक कॉल के मुकाबले 17 बाइट्स छोटा है ।


2

अजगर 2, 59 बाइट्स

g=lambda d:0if d*0==0else " "*len(d)if d*0==""else map(g,d)

प्रकार निर्धारित करने के लिए GB का उपयोग करता है


2

 आम लिस्प, 87

(defun c(e)(typecase e(list(mapcar'c e))(number 0)(string(map'string(lambda(u)#\ )e))))

Ungolfed

(defun c(e)
  (typecase e
    (list (mapcar #'c e))
    (number 0)
    (string (map 'string (lambda(u) #\space) e))))

उदाहरण

> (c '((("H") "e" 1 1 0) ((-3) "arth")))
(((" ") " " 0 0 0) ((0) "    "))

1

ग्रूवी, 53 बाइट्स

{[it].collectNested{it in String?" "*it.size():0}[0]}

यह एक अनाम क्लोजर है। यहाँ कोशिश करो!

स्पष्टीकरण :

ग्रूवी के पास यह तरीका है .collectNested जो एक सूची के माध्यम से पुनरावृति करने में मदद करता है जैसे कि यह चपटा हुआ था।

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


1

Pyke, 8 बाइट्स (पुराना संस्करण)

.FZ*0+d&

स्पष्टीकरण:

.FZ*0+d& - for i in deep_for(input):
  Z*     -    i*0
    0+   -   ^ + 0
      d& -  ^ and " "

यह अब अपडेट के रूप में काम नहीं करता है, इसलिए इसने अन्य प्रकारों के झूठे साबित कर दिए हैं, जहां सत्यता स्वचालित रूप से सत्य प्रकार के झूठ को बदल देती है।


यह निश्चित रूप से स्वीकार्य है।
Adám

1

सी #, 197 195 बाइट्स

a=>{if(a is string||a is char)return new string(' ',(a as string)?.Length??1);try{System.Convert.ToDecimal(a);return 0;}catch{}var b=(object[])a;for(int i=0;i<b.Length;)b[i]=n(b[i++]);return b;};

यह फ़ंक्शन हैंडल char, stringकिसी भी बिलिन नंबर प्रकार और पुनरावर्ती सरणियों को संभालता है ।

पूरा कार्यक्रम, सफेद उत्पादन सहायक ungolfed:

using System.Linq;    
class Class
{
    public static void Main()
    {
        System.Func<object, object> n = null;
        n = a => 
        {
            if (a is string || a is char)
                return new string(' ', (a as string)?.Length ?? 1);
            try
            {
                System.Convert.ToDecimal(a);
                return 0;
            }
            catch { }

            var b = (object[])a;
            for (int i = 0; i < b.Length;)
                b[i] = n(b[i++]);
            return b;
        };

        var result = n(new object[] { new object[] { new object[] { "H" }, 'e', 1.5, 1, 0 }, new object[] { new object[] { -3 }, "arth" } });
        System.Console.WriteLine(Output(result));
        System.Console.Read();
    }

    static string Output(object x)
    {
        var arr = x as object[];
        if (arr != null)
            return "[" + string.Join(",", arr.Select(Output)) + "]";
        else
            return x.ToString();
    }
};

usingबयान केवल उत्पादन सहायक के लिए आवश्यक है, वास्तविक कार्य के लिए नहीं।

ऑनलाइन प्रयास करें


1

APL (Dyalog) 13.2 और इससे पहले, 1 बाइट

13.2 तक और संस्करण सहित, मोनैडिक ने ठीक यही किया। पुराने व्यवहार को शून्य करने के लिए सेटिंग ⎕ML( M माइग्रेशन L evel ) द्वारा सक्रिय किया जा सकता है।

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

पुराने व्यवहार का उपयोग किए बिना यह 4 बाइट्स है:

0⍴⊂

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

 लगा देना

0⍴ संपूर्ण इनपुट की प्रतियों की लंबाई-शून्य सूची बनाएं (केवल संरचना और प्रकार की जानकारी को संरक्षित करता है)

 उस से एक तत्व को इकट्ठा करना (एक प्रोटोटाइप सरणी बनाता है)


0

जावास्क्रिप्ट ईएस 6, 81 वर्ण

f=(x,t)=>(t=g=>eval(`try{x.${g}}catch(e){}`))`replace(/./g,' ')`||t`map(f)`||x&&0

परीक्षा:

f=(x,t)=>(t=g=>eval(`try{x.${g}}catch(e){}`))`replace(/./g,' ')`||t`map(f)`||x&&0

console.log(
`""  ""
7  0
123.456  0
"X"  " "
"  "  "  "
"Yo!"  "   "
[]  []
[-1.2E3]  [0]
["Hey"]  ["   "]
["H","e","y"]  [" "," "," "]
["R",2,"D",2]  [" ",0," ",0]
["C","3","P",0]  [" "," "," ",0]
["THX",[1138]]  ["   ",[0]]
["T","H","X",[1138]]  [" "," "," ",[0]]
[[["H"],"e",1,1,0],[[-3],"arth"]]  [[[" "]," ",0,0,0],[[0],"    "]]`
.split`
`.map(s => s.split`  `.map(eval))
.every(([s,k]) => JSON.stringify(f(s))==JSON.stringify(k)))


0

जावा 7, 262 (268) बाइट्स

import java.util.*;Object c(Object o){if(o instanceof List){List r=new ArrayList();for(Object x:(List)o)r.add(c(x));return r;}if(o instanceof String){String r="\"";for(int i=((String)o).length();i-->0;r+=" ");return r+"\"";}return o instanceof Number?0:o instanceof Character?"' '":"";}

जोड़ा गया \"और 'स्ट्रिंग और पात्रों को सुंदर रूप से प्रिंट करने के लिए 282 + 6 ।

स्पष्टीकरण:

import java.util.*;            // Required import for List and ArrayList
Object c(Object o){            // Method with Object parameter and Object return-type
  if(o instanceof List){       //  If the input is a List
    List r=new ArrayList();    //   Create a result-list
    for(Object x:(List)o)      //   Loop over the items of the input-list
      r.add(c(x));             //    And add all items with a recursive-call to this method
                               //   End of loop (implicit / single-line body)
    return r;                  //   Return result-list
  }if(o instanceof String){    //  If the input is a String instead
    String r="\"";             //   Create a result-String (starting with `"`
    for(int i=((String)o).length();i-->0;r+=" ");
                               //   Replace all characters in the String with a space
    return r+"\"";             //   Return the result within double-quotes
  }
  return o instanceof Number?  //  If the input is an integer or decimal instead:
    0                          //   Return 0
   :o instanceof Character?    //  If the input is a character instead:
    "' '"                      //   Return ' '
   :                           //  Else:
    "";                        //   Return an empty String
}                              // End of method

टेस्ट कोड:

इसे यहाँ आज़माएँ।

import java.util.*;
class M{
  static Object c(Object o){if(o instanceof List){List r=new ArrayList();for(Object x:(List)o)r.add(c(x));return r;}if(o instanceof String){String r="\"";for(int i=((String)o).length();i-->0;r+=" ");return r+"\"";}return o instanceof Number?0:o instanceof Character?"' '":"";}

  public static void main(String[] a){
    System.out.println(c(""));
    System.out.println(c(7));
    System.out.println(c(123.456));
    System.out.println(c('X'));
    System.out.println(c("  "));
    System.out.println(c("Yo!"));
    System.out.println(c(new ArrayList()));
    System.out.println(c(new ArrayList(){{add(-1.2e3);}}));
    System.out.println(c(new ArrayList(){{add("Hey");}}));
    System.out.println(c(new ArrayList(){{add('H');add('e');add('y');}}));
    System.out.println(c(new ArrayList(){{add('R');add(2);add('D');add(2);}}));
    System.out.println(c(new ArrayList(){{add("THX");add(new ArrayList(){{add(1138);}});}}));
    System.out.println(c(new ArrayList(){{add('T');add('H');add('X');add(new ArrayList(){{add(1138);}});}}));
    System.out.println(c(new ArrayList(){{add(new ArrayList(){{add(new ArrayList(){{add('H');}});add('e');add(1);add(1);add(0);}});add(new ArrayList(){{add(new ArrayList(){{add(-3);}});add("arth");}});}}));
  }
}

आउटपुट:

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