रिवर्स- ish ए स्ट्रिंग!


11

आपका कार्य: एक प्रोग्राम / फ़ंक्शन लिखें जो केवल ASCII वर्णों वाले स्ट्रिंग को दिए जाने पर, स्ट्रिंग को रिवर्स-ईश में आउटपुट / रिटर्न करता है।

उदाहरण:

1) इनपुट

Hello, World!

2) इनपुट में नंबर अद्वितीय अक्षर। ( |पठनीयता के लिए पाइप द्वारा अलग किए गए इनपुट स्ट्रिंग )

H|e|l|l|o|,| |W|o|r|l|d|!
1 2 3   4 5 6 7   8   9 10

3) डुप्लिकेट कैरेक्टर्स के लिए, उस कैरेक्टर की पहली घटना का पता लगाएं और डुप्लीकेट कैरेक्टर को पहले वाले नंबर के साथ नंबर दें।

H|e|l|l|o|,| |W|o|r|l|d|!
1 2 3 3 4 5 6 7 4 8 3 9 10

4) स्ट्रिंग को उल्टा करें, लेकिन संख्याओं को नहीं।

!|d|l|r|o|W| |,|o|l|l|e|H
1 2 3 3 4 5 6 7 4 8 3 9 10

5) दोहराए गए नंबरों के ऊपर वर्ण हटाएं। (हटाए गए वर्णों को तारांकन चिह्न से दर्शाया गया है।)

!|d|l|*|o|W| |,|*|l|*|e|H
1 2 3 3 4 5 6 7 4 8 3 9 10

6) हटाए गए वर्णों को उस वर्ण के साथ बदलें, जो हटाए गए वर्ण के पहले नंबर पर दिखाई देता है।

!|d|l|l|o|W| |,|o|l|l|e|H
1 2 3 3 4 5 6 7 4 8 3 9 10

7) आउटपुट

!dlloW ,olleH

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

Input -> Output
"Hello, World!" -> "!dlloW ,olleH"
"18464399" -> "99343488"
"Code Golf" -> "floG eloC"
"abcdefgABCDEFG" -> "GFEDCBAgfedcba"
"Mmm, marshmallows" -> "swwllwmhsrwm  mms"
"15147" -> "74751"

जो लोग हटाए गए पोस्ट देख सकते हैं, उनके लिए सैंडबॉक्स यहां था ।
कॉमरेड स्पार्कलपनी

क्या स्ट्रिंग में केवल ASCII वर्ण होने की गारंटी है?
लीक नून

@LeakyNun हां, मैं संपादित करूंगा।
कॉमरेड स्पार्कलपनी

जवाबों:


19

पायथ , 1 बाइट

X

सभी परीक्षण मामलों की जाँच करें।

Pyth का अद्भुत अंतर्निहित इन्स :-) है


पायथ ,  8  7 बाइट्स

sm@_QxQ

सभी परीक्षण मामलों की जाँच करें।

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

यह अधिक दिलचस्प गैर-अंतर्निहित दृष्टिकोण है।

sm@_QxQ  - Full program.

 m       - Map over the input.
  @_Q    - Get the index in the reversed input.
     xQ  - Of the first index of each character in the String.
s        - Join the list.

4
एक अंतर्निहित के रूप में पायथ के पास यह क्यों है? यह इस प्रश्न के अलावा कैसे उपयोगी है?
जेरी जेरेमिया

@JerryJeremiah आप इस फ़ंक्शन के बारे में अधिक यहाँ पढ़ सकते हैं । यह पायथ में अनुवाद कार्य है, लेकिन यदि तीसरा तर्क गायब है, तो इसके बजाय दूसरे तर्क का उलटा उपयोग किया जाता है।
श्री Xcoder



5

सीजाम , 7 बाइट्स

q__W%er

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

व्याख्या

q   e# Read all input.
__  e# Make two copies.
W%  e# Reverse the third copy.
er  e# Transliterate the input, mapping the input to its own reverse. Due
    e# to the way transliteration works in CJam, if a character in the source
    e# of the mapping is repeated, all but the first occurrence of that
    e# character are ignored.

मेरी इच्छा है कि जैली की yतरह काम किया जाए।
आउटगॉल्फ

@EriktheOutgolfer मैं चाहता हूं कि ऐलिस की y तरह काम किया जाए। : पी
मार्टिन एंडर



3

एलिस , 17 बाइट्स

/?.R?y.@
\i.!yDo/

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

व्याख्या

/...@
\.../

यह ऑर्डिनल मोड में रैखिक कोड के लिए सिर्फ सामान्य टेम्पलेट है। यदि हम इसे प्रकट करते हैं, तो वास्तविक कार्यक्रम बस बन जाता है:

i.!?D.?.Ryyo

यहां का विचार मेरे सीजेएम उत्तर के समान है । चूंकि एलिस के पास पूर्णांकों के साथ तार में अनुक्रमित करने का कोई आसान तरीका नहीं है, इसलिए इस व्यवहार को लिप्यंतरण ( yऐलिस में) के साथ दोहराना सबसे आसान है । हालांकि, ऐलिस के लिप्यंतरण शब्दार्थ सीजेएम की तुलना में बहुत अधिक सामान्य हैं, जिसका अर्थ है कि ऐलिस बार-बार होने वाली मैपिंग की उपेक्षा नहीं करता है। उदाहरण के लिए, यदि हम सिर्फ Mmm, marshmallowsइसके उलट अनुवाद करना चाहते हैं, तो यह मैपिंग की निम्नलिखित सूची का प्रतिनिधित्व करेगा:

M -> s
m -> w
m -> o
, -> l
  -> l
m -> a
a -> m
r -> h
s -> s
h -> r
m -> a
a -> m
l ->  
l -> ,
o -> m
w -> m
s -> M

ध्यान दें कि हम मिल गया है, उदाहरण के लिए, m -> w, m -> o, m -> aऔर m -> a। CJam पहली मैपिंग को छोड़कर सभी को छोड़ देगा, लेकिन ऐलिस इसके बजाय साइकिल चलाएगा। तो पहले mको मैप किया जाएगा w, दूसरे को o, फिर से पांचवें wऔर इतने पर। इस मामले कि उपयोगी नहीं है, क्योंकि सामान्य रूप में अगर हम प्रदर्शन में yपर AAB(कुछ स्ट्रिंग्स के लिए Aऔर B) के रूप में हम CJam में किया था, हम हमेशा सिर्फ मिलेगा Bऐलिस में।

तो हम एक मैपिंग की गणना कैसे करते हैं जो काम करता है y(यानी हम दोहराए गए मैपिंग को मैन्युअल रूप से कैसे छोड़ते हैं)? बेशक, एक और लिप्यंतरण का उपयोग करके। :)

हम चाहते हैं कि मानचित्रण का स्रोत इनपुट (यानी घटा हुआ इनपुट) का होना है। यदि हम उपरोक्त मैपिंग को nub पर लागू करते हैं, तो प्रत्येक वर्ण केवल एक बार दिखाई देता है, इसलिए हम केवल प्रत्येक दोहराए गए मैपिंग में से पहले का उपयोग कर रहे हैं। तो इनपुट और इसके रिवर्स के साथ नब का अनुवाद करके, हम प्रभावी रूप से केवल डुप्लिकेट किए गए मैपिंग को छोड़ रहे हैं। हम मूल इनपुट के लिए मैपिंग के रूप में nub और इस नए परिणाम का उपयोग कर सकते हैं। मुझे यकीन है कि किसी को समझ में आया ...

तो कोड:

i   Read input.                   ["Mmm, marshmallows"]
.!  Store a copy on the tape.
?D  Push the nub of the input.    ["Mmm, marshmallows" "Mm, arshlow"]
.   Duplicate.                    ["Mmm, marshmallows" "Mm, arshlow" "Mm, arshlow"]
?   Retrieve input.               ["Mmm, marshmallows" "Mm, arshlow" "Mm, arshlow" "Mmm, marshmallows"]
.R  Push its reverse.             ["Mmm, marshmallows" "Mm, arshlow" "Mm, arshlow" "Mmm, marshmallows" "swollamhsram ,mmM"]
y   Transliterate.                ["Mmm, marshmallows" "Mm, arshlow" "swllmhsr mm"]]
y   Transliterate.                ["swwllwmhsrwm  mms"]
o   Output.                       []



3

जावास्क्रिप्ट ईएस 6 50 बाइट्स

3 बाइट्स ने जस्टिन मैरिनर को धन्यवाद दिया

s=>[...s].map(x=>s.slice(~s.indexOf(x))[0]).join``

झसे आज़माओ:

f=s=>s.split``.map(x=>s.slice(~s.indexOf(x))[0]).join``

let inp = document.getElementById("inp");
let out = document.getElementById("out");

function change() {
  out.innerText = f(inp.value);
}

change();
<input id="inp" type="text" oninput="change()" value="Hello, World!" /><br>
<p id="out"></p>


2

आर , 68 65 बाइट्स

function(s)chartr(paste(rev(el(strsplit(s,''))),collapse=''),s,s)

परीक्षण मामलों की पुष्टि करें!

3 बाइट्स के लिए पोर्ट्स एरिक की 05AB1E विधि। यह पहला नहीं था, लेकिन यह पहला ऐसा था जिसे मैंने देखा था।

पुराना संस्करण:

function(s)paste(rev(s<-el(strsplit(s,'')))[match(s,s)],collapse='')

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

एक बहुत अच्छा कार्यान्वयन, लेकिन मुझे नहीं लगता कि यह आर में कम हो जाता है (और मैं इसके बारे में गलत होने के लिए तत्पर हूं)। यह अनिवार्य रूप से रॉड के अजगर उत्तर का एक आर पोर्ट है लेकिन इसे स्वतंत्र रूप से विकसित किया गया था।

असंबद्ध स्पष्टीकरण:

function(s){
 s <- el(strsplit(s,''))      # string to characters
 r <- rev(s)                  # reverse s
 idx <- match(s,s)            # indices of first matches
 r <- r[idx]                  # do the replacement of duplicates
 paste(r, collapse = "")      # characters to string
}                             # implicit return of last evaluated statement

2

सी (जीसीसी) , 98 बाइट्स

i,n,a[256];char*f(char*c){n=strlen(c);for(i=n;i>0;i--)a[c[i-1]]=c[n-i];for(;i<n;i++)c[i]=a[c[i]];}

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

तर्क एक परिवर्तनीय स्ट्रिंग होना चाहिए; स्ट्रिंग को जगह में संशोधित किया गया है।



1

रोड़ा , 27 बाइट्स

f x{x|[x[-1-indexOf(_,x)]]}

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

यह वर्णों की सूची को इनपुट के रूप में लेता है और वर्णों की एक धारा लौटाता है।

स्ट्रिंग डेटाटाइप (40 बाइट्स) का उपयोग करना:

f x{x=x/""x|[x[-1-indexOf(_,x)]]|concat}

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


0

अजगर ,191 128 बाइट्स

w=input("")
c=[]
for x in range(0,len(word)):
  chars.append(word[x])
back = []
for x in chars:
  back.insert(0,x)
final = ""
for x in back:
  final = final + x
print(final)

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


4
नमस्ते, और PPCG में आपका स्वागत है! यह एक महान जवाब है, लेकिन यह गोल्फ नहीं है (इसकी ज़रूरत से ज़्यादा बाइट्स हैं)। कृपया कुछ बाइट्स निकालने की कोशिश करें (उदाहरण के लिए चर नामों को छोटा करके) और अपनी पोस्ट को संपादित करें।
NoOneIsHere

0

जावा 10, 100 99 97 बाइट्स

s->{var a=new char[256];int l=s.length,i=l;for(;i>0;a[s[--i]]=s[l+~i]);for(;i<l;s[i]=a[s[i++]]);}

पोर्ट ऑफ़ @ लीकी नॉन का सी उत्तर । मुझे संदेह है कि यह जावा में कुछ समान किए बिना कम किया जा सकता है।
-1 बाइट @ceilingcat की बदौलत

इनपुट char[](चरित्र-सरणी) के रूप में, और बाइट को बचाने के लिए एक नया वापस करने के बजाय इस इनपुट को संशोधित करता है।

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


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