سؤال

الرجاء الإجابة مع أقصر وقت ممكن مصدر رمز البرنامج الذي يحول التعسفي عادي المقابلة لها المشفر عقب نموذج المدخلات والمخرجات يجب إعطاء أدناه.نقاط المكافأة* لأقل وقت وحدة المعالجة المركزية أو أقل مقدار الذاكرة المستخدمة.

مثال 1:

عادي: الثعلب البني السريع يقفز فوق الكلب الكسول.Supercalifragilisticexpialidocious!

المشفر: eTh kiquc nobrw xfo smjup rvoe eth yalz .مكتب المدير العام !uioiapeislgriarpSueclfaiitcxildcos

مثال 2:

عادي: 123 1234 12345 123456 1234567 12345678 123456789

المشفر: 312 4213 53124 642135 7531246 86421357 975312468

القواعد:

  1. علامات الترقيم هي محددة ليتم تضمينها مع كلمة هو الأقرب.
  2. مركز الكلمة ويعرف أن يكون السقف((strlen(word)+1)/2).
  3. بيضاء يتم تجاهل (أو انهار).
  4. الغريب الكلمات تحرك إلى اليمين الأولى.حتى الكلمات تحرك إلى اليسار أولا.

يمكنك التفكير في الأمر على النحو قراءة كل حرف إلى الوراء (بدءا من نهاية الكلمة) ، تليها الأحرف المتبقية إلى الأمام.شركة => XoXpXrXtXoX => niaorCoprto.

شكرا لأولئك الذين أشار إلى التناقض في الوصف.وهذا قد يؤدي العديد من لك الطريق الخطأ الذي اعتذر عن.القاعدة رقم 4 يجب أن الأمور واضحة.

*نقاط المكافأة سيتم تقديمها إذا جيف أتوود تقرر أن تفعل ذلك.منذ أنا لم دققت معه ، وهناك احتمالات ضئيلة.آسف.

هل كانت مفيدة؟

المحلول

بيثون ، 50 حرفا

الإدخال في i:

' '.join(x[::-2]+x[len(x)%2::2]for x in i.split())

الإصدار البديل الذي يعالج الخاصة IO:

print ' '.join(x[::-2]+x[len(x)%2::2]for x in raw_input().split())

ما مجموعه 66 حرفا إذا بما بيضاء.(من الناحية الفنية ، print يمكن إغفالها إذا كان يعمل من سطر الأوامر ، حيث تقييم قيمة من التعليمات البرمجية يتم عرض الإخراج بشكل افتراضي.)


نسخة بديلة باستخدام reduce:

' '.join(reduce(lambda x,y:y+x[::-1],x) for x in i.split())

59 الشخصيات.

النسخة الأصلية (سواء الفردية والزوجية الحق في الذهاب أولا) إدخال في i:

' '.join(x[::2][::-1]+x[1::2]for x in i.split())

48 حرفا بما في ذلك بيضاء.

آخر نسخة بديلة والتي (في حين أن أطول قليلا) هو أكثر قليلا فعالة:

' '.join(x[len(x)%2-2::-2]+x[1::2]for x in i.split())

(53 الشخصيات)

نصائح أخرى

ي, 58 الشخصيات

>,&.>/({~(,~(>:@+:@i.@-@<.,+:@i.@>.)@-:)@<:@#)&.><;.2,&' '

هاسكل, 64 حرفا

unwords.map(map snd.sort.zip(zipWith(*)[0..]$cycle[-1,1])).words

حسنا, 76 إذا قمت بإضافة المطلوبة "import List".

بيثون - 69 حرف

(بما في ذلك فاصل و linebreaks)

هذا يعالج كل I/O.

for w in raw_input().split():
 o=""
 for c in w:o=c+o[::-1]
 print o,

بيرل ، 78 حرفا

الإدخال في $_.إذا كان هذا غير مقبول ، إضافة ستة أحرف إما $_=<>; أو $_=$s; في بداية.السطر الجديد هو من أجل القراءة فقط.

for(split){$i=length;print substr$_,$i--,1,''while$i-->0;
print"$_ ";}print $/

ج ، 140 حرفا

تنسيق جيد:

main(c, v)
  char **v;
{
  for( ; *++v; )
  {
    char *e = *v + strlen(*v), *x;
    for(x = e-1; x >= *v; x -= 2)
      putchar(*x);
    for(x = *v + (x < *v-1); x < e; x += 2)
      putchar(*x);
    putchar(' ');
  }
}

المضغوطة:

main(c,v)char**v;{for(;*++v;){char*e=*v+strlen(*v),*x;for(x=e-1;x>=*v;x-=2)putchar(*x);for(x=*v+(x<*v-1);x<e;x+=2)putchar(*x);putchar(32);}}

لوا

130 شار وظيفة ، 147 شار عمل البرنامج

لوا لا تحصل على ما يكفي من الحب في رمز جولف-ربما لأنه من الصعب كتابة برنامج قصير عندما يكون لديك طويلة كلمات مثل function/end, if/then/end, ، وما إلى ذلك.

أولا أنا أكتب وظيفة في مطول الطريقة مع تفسيرات ، ثم إعادة كتابتها كما مضغوط مستقل وظيفة ، ثم أدعو بتلك الوظيفة على واحد حجة المحدد في سطر الأوامر.

كان على تنسيق مع رمز <pre></pre> العلامات بسبب تخفيض السعر يقوم بعمل فظيع من التنسيق لوا.

من الناحية الفنية يمكن الحصول على أصغر تشغيل البرنامج عن طريق تضمين وظيفة, لكنه أكثر وحدات هذه الطريقة :)

t = "The quick brown fox jumps over the lazy dog. Supercalifragilisticexpialidocious!"
T = t:gsub("%S+", -- for each word in t...
                  function(w) -- argument: current word in t
                    W = "" -- initialize new Word
                    for i = 1,#w do -- iterate over each character in word
                        c = w:sub(i,i) -- extract current character
                        -- determine whether letter goes on right or left end
                        W = (#w % 2 ~= i % 2) and W .. c or c .. W
                    end
                    return W -- swap word in t with inverted Word
                  end)


-- code-golf unit test
assert(T == "eTh kiquc nobrw xfo smjup rvoe eth yalz .odg !uioiapeislgriarpSueclfaiitcxildcos")

-- need to assign to a variable and return it,
-- because gsub returns a pair and we only want the first element
f=function(s)c=s:gsub("%S+",function(w)W=""for i=1,#w do c=w:sub(i,i)W=(#w%2~=i%2)and W ..c or c ..W end return W end)return c end
--       1         2         3         4         5         6         7         8         9        10        11        12        13
--34567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
-- 130 chars, compressed and written as a proper function

print(f(arg[1]))
--34567890123456
-- 16 (+1 whitespace needed) chars to make it a functioning Lua program, 
-- operating on command line argument

الإخراج:

$ lua insideout.lua 'The quick brown fox jumps over the lazy dog. Supercalifragilisticexpialidocious!'
eTh kiquc nobrw xfo smjup rvoe eth yalz .odg !uioiapeislgriarpSueclfaiitcxildcos

أنا لا تزال جديدة جدا في لوا لذا أود أن أرى أقصر الحل إذا كان هناك واحد.


من أجل الحد الأدنى الشفرات على جميع وسائط إلى stdin ، يمكننا أن نفعل 111 حرف:

for _,w in ipairs(arg)do W=""for i=1,#w do c=w:sub(i,i)W=(#w%2~=i%2)and W ..c or c ..W end io.write(W ..' ')end

ولكن هذا النهج لا إخراج زائدة الفضاء مثل بعض الحلول الأخرى.

إدخال في s:

f=lambda t,r="":t and f(t[1:],len(t)&1and t[0]+r or r+t[0])or r
" ".join(map(f,s.split()))

بيثون ، 90 الشخصيات بما فيها بيضاء.

TCL

125 الشخصيات

set s set f foreach l {}
$f w [gets stdin] {$s r {}
$f c [split $w {}] {$s r $c[string reverse $r]}
$s l "$l $r"}
puts $l

باش - 133 ، على افتراض مساهمة في $w متغير

جميلة

for x in $w; do 
    z="";
    for l in `echo $x|sed 's/\(.\)/ \1/g'`; do
        if ((${#z}%2)); then
            z=$z$l;
        else
            z=$l$z;
        fi;
    done;
    echo -n "$z ";
done;
echo

مضغوط

for x in $w;do z="";for l in `echo $x|sed 's/\(.\)/ \1/g'`;do if ((${#z}%2));then z=$z$l;else z=$l$z;fi;done;echo -n "$z ";done;echo

حسنا, لذلك النواتج زائدة الفضاء.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top