संख्याओं को अक्षरों में बदलें, और इसके विपरीत एक स्ट्रिंग में


12

संख्याओं और उनके समतुल्य अक्षरों की सूची के आधार पर, एक स्ट्रिंग इनपुट लें, उस स्ट्रिंग के वर्णों को समतुल्य संख्या / अक्षर से बदलें और परिणाम को आउटपुट करें।

सूची

  • 1 = ए
  • 2 = बी
  • 3 = सी
  • 4 = डी
  • 5 = ई
  • 6 = एफ
  • 7 = जी
  • 8 = एच
  • 9 = आई
  • 0 = जे

इनपुट

thisisastring1124

उत्पादन

t89s9s1str9n7aabd

नियम

  • संख्याएँ केवल लोअरकेस अक्षरों के बराबर हैं।
  • सूची के बाहर किसी भी पात्र को वैसे ही छोड़ दिया जाएगा।
  • इनपुट स्ट्रिंग में रिक्त स्थान नहीं होना चाहिए।
  • या तो पूर्ण कार्यक्रम या फ़ंक्शन की अनुमति है।
  • चूंकि यह कोड-गोल्फ है, कम से कम बाइट्स जीतता है।

2
PPCG में आपका स्वागत है। अच्छी चुनौती!
एडम जूल 4'18

2
क्या हम इसके बजाय अपरकेस अक्षर स्वैप कर सकते हैं?
एडम जूल 4'18

केवल निचले अक्षर, अपरकेस अक्षर सूची के दायरे से बाहर होंगे।
Noir Antares

क्या इनपुट में केवल अक्षर और संख्याएँ होंगी या अन्य गैर-अंतरिक्ष वर्ण (जैसे। विराम चिह्न) इसमें हो सकते हैं?
सूंदर -

इनपुट स्ट्रिंग में रिक्त स्थान को छोड़कर कोई अन्य वर्ण हो सकता है, लेकिन सूची के बाहर कुछ भी आउटपुट स्ट्रिंग में अछूता नहीं रहेगा।
Noir Antares

जवाबों:






6

पर्ल 6 , 45 23 बाइट्स

tr/1..90a..j/a..j1..90/

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

बस एक सादा लिप्यंतरण रेगेक्स।


1
टीआर का उपयोग करना यहां कम होगा, आपको अनुक्रम के उन सभी हिस्सों को अलग करने की आवश्यकता नहीं है: TR/1..90a..j/a..j1..90/ tio.run/##K0gtyjH7n1upoJamYKvwvzokSN9QT8/SPLPL0sfRIB5@rX/…
फिल एच

@PHH हा, मैं सचमुच उस ऑपरेटर को खोज रहा था! धन्यवाद!
जो किंग





3

आर , 40 बाइट्स

function(s)chartr("0-9ja-i","ja-i0-9",s)

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

हैरानी की बात है, आर इस तरह की चुनौती पर सभ्य है , क्योंकि इसमें बैश जवाब के समान एक trफ़ंक्शन है । पता नहीं क्यों यह मौजूद है, लेकिन मैं इसके लिए आभारी हूं!


गजब का! पता नहीं चार्ट () रेगेक्स को समझा।
स्नोरम

@ सनोराम काफी रेगेक्स नहीं; यह प्रलेखन में निर्दिष्ट करता है कि "सीमाओं में सीमाओं का समर्थन किया जाता है, लेकिन चरित्र वर्ग और दोहराया वर्ण नहीं हैं।"
Giuseppe

3

MS-SQL, 71 बाइट्स

SELECT TRANSLATE(v,'1234567890abcdefghij','abcdefghij1234567890')FROM t

नया SQL 2017 फ़ंक्शन TRANSLATEव्यक्तिगत चरित्र प्रतिस्थापन करता है, इसलिए इस उद्देश्य के लिए आदर्श रूप से अनुकूल है। एक पूर्व चुनौती में मेरे समान जवाब देखें ।

इनपुट एक पूर्व मौजूदा तालिका के माध्यम से है टी varchar स्तंभ के साथ वी , हमारे आईओ नियमों के अनुसार । केवल निचले अक्षरों को बदलने के लिए, केस-सेंसिटिव कॉलेशन का उपयोग करके तालिका बनाई जानी चाहिए :

CREATE TABLE t(v varchar(max) COLLATE Latin1_General_CS_AS)





1

सी (जीसीसी) , 81 72 बाइट्स

सुझाव के लिए जियाको गारबेलो को धन्यवाद।

f(char*s){for(;*s++=*s-97U<11?(*s-6)%10+48:*s-48U<11?(*s-9)%10+97:*s;);}

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


आप 6 वर्ण इनपुट स्ट्रिंग बदलकर बजाय हटा सकते हैं इसे प्रिंट putchar(...)> - *s=...बदल कर अन्य 4 और *s-48U<11साथ *s<59 यह ऑनलाइन कोशिश करो!
जियाको गारबेलो

@GiacomoGarabello *s<59जैसे अक्षर $इनपुट में होते हैं तो टूट जाता है , यही वजह है कि मैंने किया *s-48U([0..47] बन जाता है [-48 ..- 1], जो एक बड़ा अहस्ताक्षरित मान बन जाता है।) जैसा कि प्रश्न यह निर्दिष्ट नहीं करता है कि क्या गैर -लम्न मान्य थे, मैं अधिक रूढ़िवादी व्याख्या के साथ गया था।
एरिकएफ

काफी उचित। ओपी ने हाल ही में टिप्पणी की कि हर दूसरा चरित्र वैध है लेकिन स्थान नहीं। लेकिन आप अभी भी मेरे पहले सुझाव का उपयोग कर सकते हैं
जियाको गारबेलो

1

पॉवरशेल, 94 बाइट्स

-join($args|% t*y|%{if(1+($p=($s='1a2b3c4d5e6f7g8h9i0j').IndexOf($_))){$s[$p-bxor1]}else{$_}})

टेस्ट स्क्रिप्ट:

$f = {
-join($args|% t*y|%{if(1+($p=($s='1a2b3c4d5e6f7g8h9i0j').IndexOf($_))){$s[$p-bxor1]}else{$_}})
}

&$f "thisisastring1124"

व्याख्या

  • $args - तर्क तार
  • $args|% t*y- के |ForEach-Object -Method ToCharArrayबराबर फैलता है"$args".ToCharArray()
  • ($s='1a2b3c4d5e6f7g8h9i0j').IndexOf($_)- स्ट्रिंग में एक चार्ट ढूंढें, यदि नहीं मिला तो स्थिति या -1 लौटाता है। आइए $ s स्ट्रिंग को संग्रहीत करते हैं जिसमें पड़ोसी पदों पर एक युग्मित चार होता है जो अंतिम बिट द्वारा भिन्न होता है: 0 + 1, 2 + 3, 4 + 5 ....
  • if(1+($p=...)) - यदि स्थिति मिली
  • $p-bxor1 - स्थिति बिट xor १

के साथ अच्छी चाल -bxor1
AdmBorkBork

0

आर , 107 बाइट्स

function(s){a=utf8ToInt(s);l=a>96&a<107;n=a>47&a<58;a[n]=(a[n]-9)%%10+97;a[l]=(a[l]+4)%%10+48;intToUtf8(a)}

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

पहला प्रयास, निश्चित रूप से कामचलाऊ ...


chartrमैं तुम्हारा दोस्त हूं।
Giuseppe


1
@ गुइसेप: कमाल! मुझे चार्टर फ़ंक्शन का पता नहीं था। कृपया इसे अपने उत्तर के रूप में पोस्ट करें, दृष्टिकोण पूरी तरह से अलग है;)
digEmAll


0

K4 , 38 बाइट्स

उपाय:

{(,/|x,a)(,/a:0 1_'10 11#'.Q`a`n)?x}@'

स्पष्टीकरण:

सूची में प्रत्येक वर्ण को देखें "abcdefghij1234567890"और फिर सूची में अनुक्रमित करें कि मूल चरित्र "1234567890abcdefghijX"कहाँ Xहै।

तार बनाने के लिए एक छोटा रास्ता खोजने की आवश्यकता है ...

{(,/|x,a)(,/a:0 1_'10 11#'.Q`a`n)?x}@'
{                                  }@' / apply (@) lambda {} to each (')
                                 ?x    / lookup x in
         (                      )      / do this together
                          .Q`a`n       / index into .Q with a (gives a-z) and n (gives 0-9)
                   10 11#'             / take 10 from first list and 11 from second list
              0 1_'                    / drop 0 from first list and 1 from second list
            a:                         / save as a
          ,/                           / flatten
 (      )                              / do this together
     x,a                               / prepend x to a
    |                                  / reverse it
  ,/                                   / flatten

बक्शीश:

38 बाइट्स के लिए एक और समाधान :

{(a,b,x)?[(b:1_11#.Q.n),a:10#.Q.a]x}@'



0

sed, 44 बाइट्स

y/1234567890abcdefghij/abcdefghij1234567890/

थोड़ा उबाऊ, मैं मानता हूं।

परिक्षण:

$ echo 'thisisastring1124' | sed 'y/1234567890abcdefghij/abcdefghij1234567890/'
t89s9s1str9n7aabd
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.