एक इनपुट को देखते हुए, इसे कीबोर्ड पर N वर्णों के साथ ले जाएं


19

चुनौती:

कीबोर्ड पर टाइप किए जा सकने वाले किसी भी इनपुट को देखते हुए, टेक्स्ट को N वर्णों के साथ स्थानांतरित करें।

यहाँ QWERTY कीबोर्ड का उपयोग किया जाना है। आप संशोधक कुंजियों (Shift, Caps, Enter, Delete और Tab) को अनदेखा कर सकते हैं। एक बार जब आप एक तरफ (उदाहरण के लिए तक पहुँचने के |पाश वापस दौर), इसलिए |करने के लिए चला जाता है Q, तो N = 1

यहाँ छवि विवरण दर्ज करें

रिक्त स्थान को साथ नहीं ले जाना होगा (वे संशोधक को छोड़ते हुए अंतरिक्ष में वापस जाते हैं)। अगर बदलाव (जैसे वर्ण लिखने के लिए इस्तेमाल किया गया था !और @) बदली हुई चरित्र भी पारी का उपयोग कर लिखे जाने चाहिए (यानी !को जाता है @नहीं 2करता है, तो N = 1)।

यूके कीबोर्ड इसके लिए अलग हैं, लेकिन कृपया इसका उपयोग करें ताकि हम तुलना कर सकें।

इनपुट:

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

आउटपुट:

एक ही वाक्य, एन द्वारा स्थानांतरित किया गया।

उदाहरण:

My name is Tim 3
?o .f/y [g I[/
Hello World 7
Spgge Oe[g;
I Wi5h I h4d b3773r C@d3ing ski{{s 3
{ T[8l { l7h ,6006u N%h6[.k g'[QQg

यह कोड गोल्फ है, इसलिए सबसे छोटा कोड जीतता है।


क्या हम मान सकते हैं कि N<= 13मूल चरित्र पर लौटने के लिए आपको अधिकतम 13 पर शिफ्ट करने की आवश्यकता होगी?
15:30

1
@flawr nope, क्षमा करें। इसका कोई सकारात्मक मूल्य हो सकता है।
टिम

"हैलो वर्ल्ड 7" का उदाहरण "स्पैग्रे ओ [जी?" नहीं होना चाहिए?
जेम्स विलियम्स

Hello World 7उदाहरण नहीं होना चाहिए Spgge Oe[g;? दोनों oको एक ही चरित्र का नक्शा बनाना चाहिए
edc65

जवाबों:


2

सी, 217 बाइट्स

char*t=" @A$%^*a)_(~.=/z-234567890\"'>`?Z#SNVFRGHJOKL:<MP{WTDYIBECUX]q\\&=1snvfrghjokl;,mp[wtdyibecux}Q|!";l,d,k;f(char*s){for(l=strlen(s);s[--l]-32;);d=atoi(s+l);for(s[l]=0;d--;)for(k=l;k--;s[k]=t[s[k]-32]);puts(s);}

व्हॉट्सएप के साथ पठनीय संस्करण, शामिल हैं, आदि:

#include <string.h>
#include <stdlib.h>
#include <stdio.h>

char* t = " @A$%^*a)_(~.=/z-234567890\"'>`?Z#SNVFRGHJOKL:<MP{WTDYIBECUX]q\\&=1snvfrghjokl;,mp[wtdyibecux}Q|!";
int l, d, k;

void f(char* s) {
    l = strlen(s);
    for( ; s[--l] - 32; );
    d = atoi(s + l);
    s[l] = 0;
    for ( ; d--; ) {
        for (k = l; k--; s[k] = t[s[k] - 32]);
    }
    puts(s);
}

कोड बहुत ज्यादा खुद के लिए बोलता है। बस एक लुकअप टेबल जो प्रत्येक चरित्र से अगले चरित्र तक मैप करती है, जो कि दी गई संख्या को लागू किया जाता है। अधिकांश कोड वास्तव में इनपुट से बाहर संख्या को पार्स करने के लिए है।


@Ypnypn आप सी में अघोषित कार्यों का उपयोग कर सकते हैं। इसलिए निर्माण के लिए इसमें शामिल नहीं हैं। यह आम तौर पर संकलक चेतावनी देता है, लेकिन मुझे बताया गया है कि जब तक यह बनाता है और चलता है तब तक इसकी अनुमति है।
रेटो कोराड़ी


1

पायथ, 126 बाइट्स

XjdPczdsJc"~!@#$%^&*()_+ `1234567890-= qwertyuiop[]\ QWERTYUIOP{}| asdfghjkl;, ASDFGHJKL:\" zxcvbnm,./ ZXCVBNM<>?")sm.<dvecz)J

इसे ऑनलाइन आज़माएँ: प्रदर्शन या टेस्ट सूट

स्पष्टीकरण:

    czd                       split input by spaces
   P                          remove the last element
 jd                           join by spaces (=#1)

          "..."               string with the chars of each row
         c     )              split by spaces
        J                     assign to J
       sJ                     sum of J (=#2)

                       cz)    split input by spaces
                      e       take the last element
                     v        and evaluate it 
                 m        J   map each row d of J to:
                  .<d           rotate the row d by value
                s             sum (=#3)

X                             Take #1, and replace the chars in #2 by the chars in #3

1

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

*i,s=input().split()
r=["`1234567890-=","qwertyuiop[]\\","asdfghjkl;'","zxcvbnm,./","~!@#$%^&*()_+","QWERTYUIOP{}|",'ASDFGHJKL:"',"ZXCVBNM<>?"]
print("".join([[x[int(s):]+x[:int(s)]for x in r][r.index([x for x in r if c in x][0])][([x for x in r if c in x][0]).index(c)]if c!=" "else " " for c in " ".join(i)]))

अनावश्यक स्थानों को हटा दें" " for c in " "
mbomb007

0

पायथन 3, 271 255 बाइट्स

बेसलाइन, लगभग अपुष्ट, प्रश्न में स्थानांतरित शब्दों को बनाने के लिए उपयोग किया जाता है।

x=input().split()
n=int(x[-1])
x=' '.join(x[:-1])
l=['`1234567890-=','qwertyuiop[]\\',"asdfghjkl;'",'zxcvbnm,./', '~!@#$%^&*()_+','QWERTYUIOP{}|','ASDFGHJKL:"','ZXCVBNM<>?',' ']
y=''
for i in x:
 for q in l:
  if i in q:y+=q[(q.index(i)+n)%len(q)]
print(y)

स्पष्टीकरण:

x=input().split()    # Get input
n=int(x[-1])         # Get N from input
x=' '.join(x[:-1])   # Get the words from input
                     # Create list of letters

l=['`1234567890-=', 'qwertyuiop[]\\',
   "asdfghjkl;'",   'zxcvbnm,./',
   '~!@#$%^&*()_+', 'QWERTYUIOP{}|',
   'ASDFGHJKL:"',   'ZXCVBNM<>?',
   ' ']

y=''                 # Blank string
for i in x:          # Loop through letters in input
    for q in l:      # Loop through items in list
        if i in q:   # Is letter of input in item of list?
            y+=q[                          # Append letter to y
                 (q.index(i)+n)            # locate the letter in item, and add N
                               %len(q)]    # % is modulus, loop to beginning if big
print(y)             # Print out the offset word.

मुझे लगता है कि आपको इसे हटा देना चाहिए। अन्य लोगों को अपनी खुद की रणनीति बनाने दें ...
mbomb007

@ mbomb007 यह बहुत गॉल्फर्ड नहीं है, और मैंने इसे बनाने के लिए इसका इस्तेमाल किया ... मुझे लगता है कि इसे व्यक्तिगत रूप से पोस्ट करना काफी उचित है।
टिम

0

जावास्क्रिप्ट (ईएस 6), 200 216

टेम्प्लेट स्ट्रिंग्स का उपयोग करते हुए, नए अंक महत्वपूर्ण और गिने जाते हैं।

ध्यान दें replace: दो स्निपेट string.split('x').map(w=>...)और string.replace(/[^x]+/g,w=>...)एक विभाजक का उपयोग करके स्ट्रिंग में प्रत्येक भाग के लिए किसी फ़ंक्शन को निष्पादित करने के लिए समान रूप से मान्य तरीके हैं। एक विभाजक के रूप में एक नई रेखा का उपयोग करना आसान है /.+/gक्योंकि रिप्लेक्स रीप्क्स बन जाता है , क्योंकि डॉट किसी भी गैर-नई रेखा से मेल खाता है। और टेम्प्लेटेड स्ट्रिंग्स के उपयोग से न्यूलाइन्स की कोई अतिरिक्त लागत नहीं है।

f=(t,d)=>[for(c of t)`~!@#$%^&*()_+
1234567890-=
QWERTYUIOP{}|
qwertyuiop[]\\
ASDFGHJKL:"
asdfghjkl;'
ZXCVBNM<>?
zxcvbnm,./`.replace(/.+/g,r=>(p=r.indexOf(c))<0?0:q=r[(p+d)%r.length],q=c)&&q].join('')

// less golfed
x=(t,d)=>
  [for(c of t)
    '~!@#$%^&*()_+ 1234567890-= QWERTYUIOP{}| qwertyuiop[]\\ ASDFGHJKL:" asdfghjkl;\' ZXCVBNM<>? zxcvbnm,./'
    .split(' ')
    .map(r=>(p=r.indexOf(c))<0?0:q=r[(p+d)%r.length],q=c)&&q
  ].join('')
  
// TEST

out=x=>O.innerHTML+=x+'\n'

;[['Hello World',7,],['My name is Tim',3],['I Wi5h I h4d b3773r C@d3ing ski{{s', 3]]
.forEach(p=>out(p+' -> '+f(p[0],p[1])))
<pre id=O></pre>


0

सीजेएम, 107 बाइट्स

lS/)~\S*\",./ ;'  <>? :\"  _+~!@#$%^&*() -=`"A,s(++S/"zxcvbnm
asdfghjkl
[]\qwertyuiop"N/_32ff^+.+_@fm>s\ser

CJam दुभाषिया में इसे ऑनलाइन आज़माएं ।

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

lS/)   e# Read one line from STDIN, split at spaces and pop the last chunk.
~\S*\  e# Evaluate the popped chunk and join the remaining ones back together.
",./ ;'  <>? :\"  _+~!@#$%^&*() -=`"
       e# Push that string.
A,s(++ e# Concatenate it with "1234567890".
S/     e# Split at spaces.
"zxcvbnm asdfghjkl []\qwertyuiop"
       e# Push that string.
S/     e# Split at spaces. (`N/' would split at linefeeds.)
_32ff^ e# XOR each character of a copy with 32.
+      e# Concatenate the copies.
.+     e# Perform vectorized concatenation. This pushes the following array:
          [ ",./zxcvbnm" ";'asdfghjkl" "[]\qwertyuiop" "<>?ZXCVBNM"
           ":\"ASDFGHJKL" "{}|QWERTYUIOP" "_+~!@#$%^&*()" "-=`1234567890" ]
_@fm>  e# Rotate each chunk by the number of character specified in the input.
s\s    e# Flatten this array and the original.
er     e# Perform transliteration.

0

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

ØDṙ1ṭØQ;Øq;"“{}|“:"“<>?“-=`“[]\“;'“,./“~!@#$%^&*()_+“ ”
¢œiⱮ+2¦€œị¢

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

स्ट्रिंग को उसके बाएं तर्क के रूप में और उसके सही तर्क के रूप में शिफ्ट करने के लिए स्थानों की संख्या के लिए एक डियाडिक लिंक।


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