ডাবল ঘূর্ণন


28

চ্যালেঞ্জের বর্ণনা

বর্ণমালার প্রথম অংশের সমস্ত অক্ষর একদিকে এবং অন্য বর্ণমালার দ্বিতীয়ার্ধ থেকে সমস্ত অক্ষর চক্র করুন। অন্যান্য চরিত্রগুলি স্থানে থাকে।

উদাহরণ

1: হ্যালো ওয়ার্ল্ড

Hello_world //Input
Hell     ld //Letters from first half of alphabet
    o wor   //Letters from second half of alphabet
     _      //Other characters
dHel     ll //Cycle first letters
    w oro   //Cycle second letters
     _      //Other characters stay
dHelw_oroll //Solution

2: কোডগল্ফ

codegolf
c deg lf
 o   o  

f cde gl
 o   o  

focdeogl

3 .: খালি স্ট্রিং

(empty string) //Input
(empty string) //Output

ইনপুট

স্ট্রিং আপনার ঘোরানো দরকার। খালি থাকতে পারে। নতুন লাইন থাকে না।

আউটপুট

আবর্তিত ইনপুট স্ট্রিং, নতুন লাইনের অনুমতি পেলে
পর্দায় লিখিত হতে পারে বা কোনও ফাংশন দিয়ে ফিরে আসতে পারে।

বিধি

  • কোন ফাঁকা অনুমতি দেওয়া হয়নি
  • এটি কোড-গল্ফ, তাই সমস্যা সমাধানের বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী
  • প্রোগ্রাম অবশ্যই সঠিক সমাধান ফিরে আসতে হবে

1
আমাকে মনে করিয়ে দিন, বর্ণমালার প্রথমার্ধে কোন বর্ণগুলি রয়েছে, দ্বিতীয়টি থেকে কোন বর্ণগুলি রয়েছে?
ব্যবহারকারী48538

কিন্তু এখনও, ভাল চ্যালেঞ্জ।
ব্যবহারকারী48538

4
প্রথমার্ধ: এবিসিডিইডিজিজিজেএলএল ম্যাবসিদেফঘিজক্লম দ্বিতীয়ার্ধ: NOPQRSTUVWXYZnopqrstuvwxyz
পল

মজার বিষয় হ'ল কোডগলফ নিজেই একটি ইনস্টাগ্রামে পরিণত হয়
গর্বিত হাসেলেলার

উত্তর:


0

এমএটিএল , 29 বাইট

FT"ttk2Y213:lM@*+)m)1_@^YS9M(

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

FT        % Push arrray [0 1]
"         % For each
  t       %   Duplicate. Takes input string implicitly in the first iteration
  tk      %   Duplicate and convert to lower case
  2Y2     %   Predefined string: 'ab...yz'
  13:     %   Generate vector [1 2 ... 13]
  lM      %   Push 13 again
  @*      %   Multiply by 0 (first iteration) or 1 (second): gives 0 or 13
  +       %   Add: this leaves [1 2 ... 13] as is in the first iteration and
          %   transforms it into [14 15 ... 26] in the second
  )       %   Index: get those letters from the string 'ab...yz'
  m       %   Ismember: logical index of elements of the input that are in 
          %   that half of the alphabet
  )       %   Apply index to obtain those elements from the input
  1_@^    %   -1 raised to 0 (first iteration) or 1 (second), i.e. 1 or -1
  YS      %   Circular shift by 1 or -1 respectively
  9M      %   Push the logical index of affected input elements again
  (       %   Assign: put the shifted chars in their original positions
          % End for each. Implicitly display


4

05AB1E , 44 43 42 বাইট

Оn2äø€J2ä©`ŠÃÁUÃÀVv®`yåiY¬?¦VëyåiX¬?¦Uëy?

ব্যাখ্যা

উভয় ক্ষেত্রে বর্ণমালার বর্ণগুলির একটি তালিকা তৈরি করুন। ['Aa','Bb', ..., 'Zz']

Оn2äø€J

2 ভাগে বিভক্ত করুন এবং একটি অনুলিপি রেজিস্টারে সংরক্ষণ করুন।

2ä©

বর্ণমালার প্রথম অর্ধের একটি অংশ যে ইনপুট থেকে অক্ষরগুলি বের করুন, এটিকে ঘোরান এবং X এ সঞ্চয় করুন ।

`ŠÃÁU

বর্ণমালার ২ য় অর্ধের অংশ যে ইনপুট থেকে অক্ষরগুলি বের করুন, এটিকে ঘোরান এবং Y তে সঞ্চয় করুন ।

ÃÀV

প্রধান লুপ

v                         # for each char in input
 ®`                       # push the lists of first and second half of the alphabet
   yåi                    # if current char is part of the 2nd half of the alphabet
      Y¬?                 # push the first char of the rotated letters in Y
         ¦V               # and remove that char from Y
           ëyåi           # else if current char is part of the 1st half of the alphabet
               X¬?        # push the first char of the rotated letters in X
                  ¦U      # and remove that char from X
                    ëy?   # else print the current char

এটি অনলাইন চেষ্টা করুন!

দ্রষ্টব্য: 41 বাইট সমাধানের জন্য নেতৃস্থানীয় 2sable এÐ বাদ দেওয়া যেতে পারে ।


4
<s>44</s>এখনও 44
টির

অবশ্যই meta.codegolf.stackexchange.com/a/7427/21348 @ কার্লকাস্টোর
edc65

3

জাভাস্ক্রিপ্ট (ES6), 155 142 138 বাইট

s=>(a=[],b=[],S=s,R=m=>s=s.replace(/[a-z]/gi,c=>(c<'N'|c<'n'&c>'Z'?a:b)[m](c)),R`push`,a.unshift(a.pop(b.push(b.shift()))),s=S,R`shift`,s)

সম্পাদনা করুন: ব্যবহার করে 3 4 বাইট সংরক্ষণ করা হয়েছে unshift()(এডক 65 এর উত্তর দ্বারা অনুপ্রাণিত)

কিভাবে এটা কাজ করে

Rফাংশন তার প্যারামিটার হিসাবে একটি অ্যারের পদ্ধতি লাগে m:

R = m => s = s.replace(/[a-z]/gi, c => (c < 'N' | c < 'n' & c > 'Z' ? a : b)[m](c))

এটি প্রথমে (বর্ণমালার প্রথম অর্ধেক) এবং (বর্ণমালার দ্বিতীয়ার্ধে ) pushনিষ্কাশিত অক্ষরগুলি সংরক্ষণ করার পদ্ধতির সাহায্যে ব্যবহৃত হয় । এই অ্যারেগুলি একবার ঘোরানো হয়ে গেলে, দ্বিতীয় অক্ষরটিকে চূড়ান্ত স্ট্রিংয়ে নতুন অক্ষরগুলি ইনজেক্ট করার পদ্ধতির সাহায্যে বলা হয় ।a[]b[]R()shift

সুতরাং সামান্য অস্বাভাবিক বাক্য গঠন: R`push`এবংR`shift`

ডেমো

let f =
s=>(a=[],b=[],S=s,R=m=>s=s.replace(/[a-z]/gi,c=>(c<'N'|c<'n'&c>'Z'?a:b)[m](c)),R`push`,a.unshift(a.pop(b.push(b.shift()))),s=S,R`shift`,s)

console.log("Hello_world", "=>", f("Hello_world"));
console.log("codegolf", "=>", f("codegolf"));
console.log("HELLO_WORLD", "=>", f("HELLO_WORLD"));


কমা এড়ানোর জন্য আরও 1 টি বাইট সংরক্ষণ করুনa.unshift(a.pop(b.push(b.shift())))
edc65


2

পাইথন, 211 বাইট

x=input()
y=lambda i:'`'<i.lower()<'n'
z=lambda i:'m'<i.lower()<'{'
u=filter(y,x)
d=filter(z,x)
r=l=""
for i in x:
 if y(i):r+=u[-1];u=[i]
 else:r+=i
for i in r[::-1]:
 if z(i):l=d[0]+l;d=[i]
 else:l=i+l
print l

সেরা আমি করতে পারে। STDIN থেকে স্ট্রিং নেয় এবং ফলাফলটি STDOUT এ মুদ্রণ করে।

204 বাইট সহ বিকল্প, তবে দুর্ভাগ্যক্রমে প্রতিটি চরের পরে একটি নতুন লাইন প্রিন্ট করে:

x=input()
y=lambda i:'`'<i.lower()<'n'
z=lambda i:'m'<i.lower()<'{'
f=filter
u=f(y,x)
d=f(z,x)
r=l=""
for i in x[::-1]:
 if z(i):l=d[0]+l;d=[i]
 else:l=i+l
for i in l:
 a=i
 if y(i):a=u[-1];u=[i]
 print a

1

পাইথন 2, 149 বাইট

s=input();g=lambda(a,b):lambda c:a<c.lower()<b
for f in g('`n'),g('m{'):
 t='';u=filter(f,s)[-1:]
 for c in s:
  if f(c):c,u=u,c
  t=c+t
 s=t
print s

2
কে আপনাকে কমেছে তা নিশ্চিত নয়, তবে আমি আবারো এটি তৈরি করে 0 করেছি। পিপিসিজিতে আপনাকে স্বাগতম! সম্ভবত আপনি নিজের কোডটির ব্যাখ্যা বা আদর্শ যুক্ত করতে পারেন ? আমি এখানে ধরে নিচ্ছি যে এই উত্তরটি @ ডেনিসের মন্তব্যের উপর ভিত্তি করে কমিউনিটি ব্যবহারকারী দ্বারা বিটা ডেকে সম্পাদনার পরে ডাউনভোটটি স্বয়ংক্রিয়ভাবে সম্পন্ন হয়েছিল ।
কেভিন ক্রুইজসেন

1

জাভাস্ক্রিপ্ট (ES6), 144

parseIntবেস 36 টি প্রথমার্ধ, দ্বিতীয়ার্ধ এবং অন্যান্য পৃথক করতে ব্যবহার করুন । যে কোনও চরিত্রের জন্য c, আমি y=parseInt(c,36)তাই মূল্যায়ন করি

  • c '0'..'9' -> y 0..9
  • c 'a'..'m' or 'A'..'M' -> y 10..22
  • c 'n'..'z' or 'N'..'Z' -> y 23..35
  • c any other -> y NaN

তাই y=parseInt(c,36), x=(y>22)+(y>9)দেয়x==1 প্রথমার্ধের x==2জন্য, দ্বিতীয়ার্ধের x==0জন্য এবং অন্য জন্য (যেমন NaNকোনও সংখ্যা মিথ্যা)

প্রথম পদক্ষেপ: ইনপুট স্ট্রিং 0,1 বা 2 এর অ্যারে ম্যাপ করা হয় এরই মধ্যে সমস্ত স্ট্রিং অক্ষর 3 টি অ্যারে যুক্ত হয়। এই প্রথম পদক্ষেপের শেষে অ্যারে 1 এবং 2 বিপরীত দিকে ঘোরানো হয়।

দ্বিতীয় পদক্ষেপ: ম্যাপযুক্ত অ্যারেগুলি স্ক্যান করা হয় এবং 3 টি অস্থায়ী অ্যারে থেকে প্রতিটি অক্ষরকে নিয়ে একটি আউটপুট স্ট্রিং পুনর্নির্মাণ করে।

s=>[...s].map(c=>a[y=parseInt(c,36),x=(y>22)+(y>9)].push(c)&&x,a=[[],p=[],q=[]]).map(x=>a[x].shift(),p.unshift(p.pop(q.push(q.shift())))).join``

কম গল্ফড

s=>[...s].map(
  c => a[ y = parseInt(c, 36), x=(y > 22) + (y > 9)].push(c) 
       && x,
  a = [ [], p=[], q=[] ]
).map(
  x => a[x].shift(),  // get the output char from the right temp array
  p.unshift(p.pop()), // rotate p
  q.push(q.shift())   // rotate q opposite direction
).join``

পরীক্ষা

f=
s=>[...s].map(c=>a[y=parseInt(c,36),x=(y>22)+(y>9)].push(c)&&x,a=[[],p=[],q=[]]).map(x=>a[x].shift(),p.unshift(p.pop()),q.push(q.shift())).join``

function update() {
  O.textContent=f(I.value);
}

update()
<input id=I oninput='update()' value='Hello, world'>
<pre id=O></pre>


0

পার্ল। 53 বাইট

এর জন্য +1 অন্তর্ভুক্ত -p

এসটিডিআইএন ইনপুট দিয়ে চালান:

drotate.pl <<< "Hello_world"

drotate.pl:

#!/usr/bin/perl -p
s%[n-z]%(//g,//g)[1]%ieg;@F=/[a-m]/gi;s//$F[-$.--]/g

0

পাইথন, 142 133 বাইট

থিমের আরও ভাল পার্থক্য:

import re
def u(s,p):x=re.split('(?i)([%s])'%p,s);x[1::2]=x[3::2]+x[1:2];return ''.join(x)
v=lambda s:u(u(s[::-1],'A-M')[::-1],'N-Z')

ungolfed:

import re
def u(s,p):
    x = re.split('(?i)([%s])'%p,s)  # split returns a list with matches at the odd indices
    x[1::2] = x[3::2]+x[1:2]
    return ''.join(x)

def v(s):
  w = u(s[::-1],'A-M')
  return u(w[::-1],'N-Z')

পূর্ব সমাধান:

import re
def h(s,p):t=re.findall(p,s);t=t[1:]+t[:1];return re.sub(p,lambda _:t.pop(0),s)
f=lambda s:h(h(s[::-1],'[A-Ma-m]')[::-1],'[N-Zn-z]')

ungolfed:

import re
def h(s,p):                              # moves matched letters toward front
    t=re.findall(p,s)                    # find all letters in s that match p
    t=t[1:]+t[:1]                        # shift the matched letters
    return re.sub(p,lambda _:t.pop(0),s) # replace with shifted letter

def f(s):
    t = h(s[::-1],'[A-Ma-m]')            # move first half letters toward end
    u = h(t[::-1],'[N-Zn-z]')            # move 2nd half letters toward front
    return u

0

রুবি, 89 বাইট

f=->n,q,s{b=s.scan(q).rotate n;s.gsub(q){b.shift}}
puts f[1,/[n-z]/i,f[-1,/[a-m]/i,gets]]

0

পিএইচপি, 189 বাইট

গল্ফ করা বেশ কঠিন ... আমার প্রস্তাবটি এখানে:

for($p=preg_replace,$b=$p('#[^a-m]#i','',$a=$argv[1]),$i=strlen($b)-1,$b.=$b,$c=$p('#[^n-z]#i','',$a),$c.=$c;($d=$a[$k++])!=='';)echo strpos(z.$b,$d)?$b[$i++]:(strpos(a.$c,$d)?$c[++$j]:$d);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.