অকেজো অক্ষর বাছাই করুন


21

এই চ্যালেঞ্জ দ্বারা অনুপ্রাণিত হয় এই TidB দ্বারা খুব সুন্দর উত্তর।


টিডিবির উত্তরে, প্রতি আটটি অক্ষর সঠিক ক্রমে: gnilwoB edoC( Code Bowlingপিছনের দিকে)। অন্যান্য স্ট্রিং তবে হয় একটি অদ্ভুত, র্যান্ডম ক্রম ছিল।

আপনার চ্যালেঞ্জ এটি ঠিক করা।

nইনপুট হিসাবে একটি (খালি নয়) স্ট্রিং এবং ধনাত্মক পূর্ণসংখ্যাটি নিন । স্ট্রিংটিতে ব্যাপ্তির ASCII টি অক্ষর থাকবে: 32-126 (স্থান থেকে টিল্ড)।

আপনার অবশ্যই স্ট্রিংটিকে আরোহী ক্রমে সাজিয়ে রাখতে হবে (ASCII- কোড মানের উপর ভিত্তি করে বাম দিক থেকে দেখা যাবে) তবে nস্ট্রিংয়ের শেষ থেকে শুরু করে প্রতিটি অক্ষর এড়িয়ে চলুন । উদাহরণ হিসাবে, আসুন স্ট্রিংটিকে abcdABC123ইনপুট হিসাবে নেওয়া যাক এবং n=4তারপরে আমরা পেয়ে যাব:

abcdABC123   <- Input string. (n=4)
_b___B___3   <- These will not be sorted (every 4th starting from the end)
1_2AC_acd_   <- The remaining characters, sorted
1b2ACBacd3   <- The final string (the output)

আরেকটি উদাহরণ:

9876543210   <- Input string (n=2)
_8_6_4_2_0   <- These will not be sorted
1_3_5_7_9_   <- The remaining characters, sorted
1836547290   <- The final string (the output)

ইনপুট স্ট্রিংটি একটি alচ্ছিক বিন্যাসে নেওয়া যেতে পারে (স্ট্রিং, অক্ষরের তালিকা, একক অক্ষরের স্ট্রিংগুলির তালিকা ...)। ইনপুট পূর্ণসংখ্যাটিও optionচ্ছিক বিন্যাসে নেওয়া যেতে পারে।

পরীক্ষার কেস:

ফর্ম্যাটটি হবে n=__, পরবর্তী লাইনে ইনপুট স্ট্রিংয়ের পরে। আউটপুট নীচের লাইনে আছে।

n=1   (All elements will stay in place)
nafgaksa1252#"%#
nafgaksa1252#"%#    

n=214  (The last character will stay in place. All other are sorted. 
&/lpfAVD
&/AVflpD  

n=8
g7L9T E^n I{><#ki XSj!uhl y= N+|wA}Y~Gm&o?'cZPD2Ba,RFJs% V5U.W;1e  0_zM/d$bH`@vKoQ 43Oq*C
g       n !#$%&'i*+,./01l234579;w<=>?@ADoEFGHIJKBLMNOPQR STUVWXYeZ^_`abcdhjkmqsuovyz{|}~C

উত্তর:


7

এমএটিএল , 15 14 বাইট

ttfiX\qgP)S5M(

ইনপুটগুলি একটি একক উদ্ধৃতি এবং একটি সংখ্যার সাথে সংযুক্ত একটি স্ট্রিং। স্ট্রিংয়ের একক-উদ্ধৃতি প্রতীকগুলি অনুলিপি করে পালাতে হবে (ম্যাটল্যাব এবং অক্টাভা হিসাবে)।

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা

ইনপুট 'abcdABC123'এবং বিবেচনা করুন 4

tt     % Implicitly input string. Duplicate twice
       % STACK: 'abcdABC123', 'abcdABC123', 'abcdABC123'
f      % Find: indices of nonzero elements: gives [1 2 ... n] where n is input length
       % STACK: 'abcdABC123', 'abcdABC123', [1 2 3 4 5 6 7 8 9 10]
i      % Input n
       % STACK: 'abcdABC123', 'abcdABC123', [1 2 3 4 5 6 7 8 9 10], 4
X\     % 1-based modulo
       % STACK: 'abcdABC123', 'abcdABC123', [1 2 3 4 1 2 3 4 1 2 3 4]
qg     % Subtract 1, convert to logical: gives true (1) for 1, false (0) otherwise
       % STACK: 'abcdABC123', 'abcdABC123', [0 1 1 1 0 1 1 1 0 1]
P      % Flip
       % STACK: 'abcdABC123', 'abcdABC123', [1 0 1 1 1 0 1 1 1 0]
)      % Use as logical index into the string
       % STACK: 'abcdABC123', 'acdAC12'
S      % Sort
       % STACK: 'abcdABC123', '12ACacd'
5M     % Push logical index again
       % STACK: 'abcdABC123', '12ACacd', [1 0 1 1 1 0 1 1 1 0]
(      % Write into original string as specified by the index. Implicitly display
       % STACK: 1b2ACBacd3

1-ভিত্তিক মডুলো মানে স্বাভাবিক (0-ভিত্তিক) এর পরিবর্তে mod([1 2 3 4 5], 3)দেয় । মামলাটি পর্যাপ্তভাবে পরিচালনা করার জন্য এটি এখানে প্রয়োজন।[1 2 3 1 2][1 2 0 1 2]n=1


1
আমি চাই 05AB1E এর শেষ আদেশটি ছিল ...
mbomb007

6

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

নেতিবাচক স্ট্রিং সূচকগুলি (পিএইচপি 7.1) 21 বাইট সংরক্ষণ করে - এবং সম্ভবত দিনটি:

for([,$s,$n]=$argv;a&$c=$s[$i-=1];)$i%$n+1?$a[]=$c:0;for(sort($a);++$i;)echo$i%$n+1?$a[+$k++]:$s[$i];

সাথে চালাও php -nr '<code>' '<string>' <N>

ভাঙ্গন

for([,$s,$n]=$argv;     # import command line arguments to $s and $n
    a&$c=$s[$i-=1];)    # loop backward through string
    $i%$n+1?$a[]=$c:0;      # if index is not n-th, copy character to array
for(sort($a);           # sort array
    ++$i;)              # loop forward through string:
    echo$i%$n+1             # if index is not n-th
        ?$a[+$k++]              # print character from array
        :$s[$i]                 # else print character from string
    ;

কেন $i-=1এবং না $i--?
জার্গ হালসারম্যান

1
@ JörgHülsermann কারণ $i--doesn't কাজ যদি $iহয় NULL
তিতাস

@ জার্গহালসারম্যান ... এবং --$i, যা আমার প্রয়োজন তাও তা করে না। ;)
তিতাস

আমি এর আগে কখনও চেষ্টা করে দেখিনি। আপনার উত্তরের জন্য আপনাকে ধন্যবাদ
জার্গ হালসারম্যান

6

অক্টাভা , 65 54 বাইট

function s=f(s,n)
l=~~s;l(end:-n:1)=0;s(l)=sort(s(l));

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

'নির্দিষ্ট' এবং 'সাজানো' অক্ষরের অ্যারে তৈরি করতে লজিকাল ইনডেক্সিং ব্যবহার করে। ব্যাখ্যা:

function s=f(s,n) % Create a function, taking a string `s` and the number `n`; the output is also named `s`.
l=~~s;             % Create logical array with the same size of the input string 
                  %    [equivalent to much more verbose true(size(s))].
l(end:-n:1)=0;    % Set the 'fixed' character positions. MATLAB/Octave automatically produces
                  %    the correct result even if n is larger than the string length.
s(l)=sort(s(l)) % Select the elements from `s` where `l` is true. Sort, and store in the corresponding positions in `s`.

আমি যেভাবে তৈরি করেছি তার lজন্য sননজারো দরকার , যা আমি মনে করি একটি যুক্তিসঙ্গত প্রয়োজন, কারণ অনেকগুলি ভাষা \0স্ট্রিং অফ স্ট্রিং ডিলিমিটার হিসাবে ব্যবহার করে ।


আপনি কিছুটা বাইট সংরক্ষণ করতে পারেন যদি আপনি বাইপাস করে lসরাসরি সূচক সংখ্যার ভেক্টর ব্যবহার করেন
লিও


@ লিও, আপনার পরামর্শ কি 8 টি বাইট বেশি নয়?
স্টিভি গ্রিফিন

@ স্টিভি গ্রিফিন ওফ, আমি আপডেট সমাধানটি দেখতে পেলাম না
লিও

5

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

হ্যাঁ, আমি নিশ্চিত এটি একটি ভয়াবহ সমাধান।

n,s=input()
s=s[::-1]
R=range(len(s)/n+1)
J=''.join
k=s[::n]
t=J(sorted(J(s[i*n+1:i*n+n]for i in R)))
n-=1
print J(j[::-1]for i in zip(k,[t[::-1][i*n:i*n+n][::-1]for i in R])for j in i)[::-1]

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

আমি এটি ব্যাখ্যা করতে বিরক্ত করতে যাচ্ছি না। এটি ঠিক আছে যতক্ষণ না আমি বুঝতে পারি যে এটি শেষ থেকে সূচীকরণ করা দরকার। এখন এটি একটি দৈত্য। এই মুহুর্তে, আমি এটি কাজ করে আনন্দিত।


1
"ব্যাখ্যা" কারণে upvated। : পি
স্টিভি গ্রিফিন

4

জাভাস্ক্রিপ্ট (ES6), 100 93 বাইট

বাক্য গঠন সিনট্যাক্সে ইনপুট নেয় (s)(n)

s=>n=>s.replace(/./g,(c,i)=>(F=_=>(s.length-++i)%n)()?[...s].filter(F,i=0).sort()[j++]:c,j=0)

বিন্যাসিত এবং মন্তব্য

s => n => s.replace(        // given a string s and an integer n
  /./g,                     // for each character c of s
  (c, i) => (               // at position i:
    F = _ =>                //   F = function that tests whether the
      (s.length - ++i) % n  //       character at position i is non-static
  )()                       //   call F() on the current position
  ?                         //   if the current character is non-static:
    [...s].filter(F, i = 0) //     get the list of non-static characters
      F, i = 0              //     by filtering all characters in s with F()
    )                       //
    .sort()[j++]            //     sort them and pick the next occurrence
  :                         //   else:
    c,                      //     let c unchanged
  j = 0                     //   initialize j = non-static character pointer
)                           //

পরীক্ষার মামলা


2

পার্ল 5 , 94 বাইট

88 বাইট কোড + -F -plপতাকা।

$_=join"",(map{(--$i%$n?"":$F[$#F-$i--]),$_}sort grep$i++%$n,reverse@F),chop if($n=<>)>1

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

এটি আমার মতে বেশ দীর্ঘ, তবে ইতিমধ্যে যে কুরুচিপূর্ণ নয় ... আমি এখনও এটি আরও গল্ফ দেওয়ার চেষ্টা করছি।


2

জেলি , 14  13 বাইট

FṢṁ
ṚsṚµḢ€ż@Ç

সম্পূর্ণ প্রোগ্রাম যা এসটিডি আউট * এ স্ট্রিং প্রিন্ট করে।

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

কিভাবে?

ṚsṚµḢ€ż@Ç - Main link: string s, non-negative number n
Ṛ         - reverse s
 s        - split into chunks of size n
  Ṛ       - reverse the resulting list
   µ      - monadic chain separation (call that list x)
    Ḣ€    - head €ach - yield a list of the first entries of each of x and modify x
        Ç - call the last link (1) as a monad - get the sorted and re-split list
      ż@  - zip together (with reversed @rguments)

FṢṁ - link 1, sort and reshape like self: list of lists
F   - flatten into a single list
 Ṣ  - sort
  ṁ - mould the result like the input

আমি সাহায্য করতে পারি না তবে ভাবতে পারি যে সত্যটি এর ইনপুটটিকে সংশোধন করে

* কোনও ফাংশনের জন্য আউটপুটটি একটি একক তালিকায় সমতল করতে চাইবে F
উদাহরণস্বরূপ একটি ইনপুট "abcdABC123", 4ফলন:
[[['1'],['b']],[['2','A','C'],['B']],[['a','c',',d'],['3']]]
পরিবর্তে:
['1','b','2','A','C','B','a','c',',d','3']


1

পাইথন + নুমপি , 115 114 বাইট

from numpy import *
def f(x,n):l=len(x);x=array(x);m=[1<2]*l;m[-1::-n]=[1>2]*len(m[0::n]);x[m]=sort(x[m]);return x

ইনপুট হিসাবে একটি নিয়মিত পাইথন তালিকা নেয় (কোনও অ্যারে নেওয়া কোশার হিসাবে বিবেচিত হবে কিনা তা নিশ্চিত ছিল না); ফলাফল সহ একটি NumPy অ্যারে প্রদান করে।

প্রাসঙ্গিক সূচকগুলি মাস্ক করে এবং বাকীগুলিকে বাছাই করে কাজ করে।


1

পাইথন 2, 119 113 বাইট

n,l=input()
i=range(len(l))
print"".join(sorted(l[~a]for a in i if a%n)[-a+a/n]if a%n else l[~a]for a in i)[::-1]

বাছাই করার জন্য সমস্ত অক্ষরের একটি তালিকা তৈরি করে, এগুলি বাছাই করে এবং মুদ্রণের জন্য এগুলিকে একত্রী করে, কিছুকে নেতিবাচক সূচকের মাধ্যমে বিপরীত এড়াতে।


1
print"".join(sorted(l[~a]for a in i if a%n)[-a+a/n]if a%n else l[~a]for a in i)[::-1]5 বাইট সাশ্রয় করুন
টিডবি

@ টিডিবি ধন্যবাদ, প্রায় স্ক্রোলবারটি সরিয়ে! (স্পষ্টতই আমার আগের গণনার সাথে একটি পেছনের নতুন লাইন জড়িত ছিল, সুতরাং এটি এখন 114 এর পরিবর্তে 113 বলে মনে হচ্ছে))
মূইপি

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.