* Tên ngôn ngữ * là tuyệt vời!


13

Viết chương trình bằng bất kỳ ngôn ngữ nào đọc đầu vào từ stdin và xuất ra một đầu ra được sửa đổi một chút thành thiết bị xuất chuẩn. Chương trình nên mượn một số ký tự từ đầu vào và đầu ra càng lớn tiền tố càng tốt *language-name* is awesome!theo sau là một dòng mới và sau đó là những gì còn lại của đầu vào.

  • Đầu vào không chứa bất kỳ ký tự viết hoa nào.
  • Nếu ký tự đầu tiên của tên ngôn ngữ không có trong chuỗi, chỉ nên mượn ký tự dòng mới.
  • Nếu không có ký tự dòng mới trong đầu vào, đầu ra đầu vào không được sửa đổi.
  • Việc bạn mượn những ký tự có sẵn nào không quan trọng.

Tôi đang sử dụng \nlàm ký tự dòng mới ( 0x0a) để tiết kiệm dung lượng khi viết. Chương trình thực chỉ nên quan tâm đến ký tự dòng mới thực sự, không phải \nchuỗi.

Ví dụ: trăn.
input: abcdefghijklmnopqrstuvwxyz\n0123456789
output: python\nabcdefgijklmqrsuvwxz0123456789
Vì đầu vào không có bất kỳ khoảng trắng nào, chúng tôi không thể tiếp tục mặc dù chúng tôi có đủ ký tự cho từ tiếp theo : is.

Ví dụ: C.
input: i don't see anything!
output: i don't see anything!
C không tìm thấy trong chuỗi, vì vậy không thể sửa đổi. Ngoài ra, không có nhân vật dòng mới có mặt.

Ví dụ: C ++.
input: i don't\nsee anything!
output: \ni don'tsee anything!
C không được tìm thấy trong chuỗi, vì vậy không thể sửa đổi.

Ví dụ: Obj-C.
input: objectively, clojure is amazing.\nq.e.d.
output: obj\nectively, clojure is amazing.q.e.d.
Đầu vào chứa đủ ký tự để viết objnhưng -thiếu.

Số byte của mã nguồn của bạn trừ đi số byte của tên ngôn ngữ của bạn, được mã hóa utf-8 (nếu có thể), là điểm số của bạn; chiến thắng thấp nhất!


3
Hãy hy vọng ai đó tìm thấy một ngôn ngữ có nhiều sự lặp lại trong tên cho điểm số âm :)
Filip Haglund

Bạn có thể bao gồm i don't\nsee anything!như là một trường hợp thử nghiệm?
Dennis

Trường hợp kiểm tra tốt! Thêm.
Filip Haglund

Làm thế nào các trường hợp với các ký tự lặp lại (trong tên hoặc trong đầu vào) được xử lý? Thứ tự của các ký tự còn lại trong đầu ra có vấn đề không?
Peter Taylor

Ái chà! Đã sửa nó. Cũng làm rõ rằng bất kỳ nhân vật có thể được mượn, không chỉ đầu tiên.
Filip Haglund

Câu trả lời:


4

Bình thường, 37 byte

.-Jjb.zpef!.-TJ+,kb+Rb._"pyth is awesome!

Mã nguồn dài 41 byte . Hãy thử trực tuyến.

Làm thế nào nó hoạt động

  Jjb.z                                      Save all user input in J.
                      ._"pyth is awesome!    Compute all prefixes that string:
                                               ["p", "py", ... ]
                   +Rb                       Append a linefeed to each prefix.
               +,kb                          Concatenate ["", "\n"] with the result.
         f                                   Filter the resulting array; for each T:
           .-TJ                                Perform bagwise difference between T
                                               and J (respects multiplicities).
         !                                     Take the logical NOT.
                                             Keep T if ! returned True, i.e., if J
                                             contains all of T's characters.
        e                                    Retrieve the last, longest match.
       p                                     Print it.
.-J                                          Remove its characters from J.
                                             (implicit) Print the result.

2

Con trăn, 186 - 6 = 180

import sys
a=sys.stdin.read()
s="python is awesome!"
r=''
if'\n'not in a:print a;exit()
a=a.replace('\n','',1)
for c in s:
 if c in a:a,r=a.replace(c,'',1),r+c
 else:break
print r+'\n'+a

Dùng thử trực tuyến


Nó chỉ nên mượn các ký tự, vì vậy nếu có nhiều dòng mới trong đầu vào, bạn chỉ mượn một trong số chúng. Tất cả các ký tự vẫn phải ở đó trong đầu ra, nhưng không nhất thiết phải theo cùng một thứ tự.
Filip Haglund

1

Python, 146 byte

import sys
r=sys.stdin.read();y='\npython is awesome!';a=''
for i in y:
    if i in r:a+=i
    else:break
print a[1:]+'\n'+''.join(b for b in r if not b in a)

@Dennis đã sửa nó -_-
TheDoctor

Vẫn còn một dòng mới quá nhiều nếu đầu vào không chứa dòng mới (ví dụ thứ hai).
Dennis

1

Ceylon, 235 - 6 = 229

void a(){variable value i="";variable value r="\nceylon is awesome!";while(exists l=process.readLine()){i=i+"\n"+l;}i=i.rest;for(j->c in r.indexed){if(c in i){i=i.replaceLast(c.string,"");}else{r=r[0:j];break;}}print(r.rest+r[0:1]+i);}

Đây là một phiên bản được định dạng và nhận xét:

void a() {
    // our target string, with the \n shuffled to the start.
    variable value r = "\nceylon is awesome!";

    // read the whole input line by line
    // (there doesn't seem a way to do this shorter :-/)
    variable value i = "";
    while (exists l = process.readLine()) {
        i = i + "\n" + l;
    }
    // remove first \n:
    i = i.rest;
    for (j->c in r.indexed) {
        if (c in i) {
            // remove some occurence of c
            i = i.replaceLast(c.string, "");
        } else {
            // stop the loop, and take the part of `r` processed so far.
            r = r[0:j];
            break;
        }
    }
    // reshuffle first \n in r to its end.
    // This will result in the empty string if r is empty, i.e. no \n was found.
    print(r.rest + r[0:1] + i);
}

Nó sử dụng replaceLastthay replaceFirstvì bởi vì nó ngắn hơn.

Một số ví dụ đầu vào và đầu ra có cùng định dạng như trong câu hỏi:

  • abcdefghijklmnopqrstuvwxyz\n0123456789ceylon\nabdfghijkmpqrstuvwxz0123456789
  • i don't see anything!i don't see anything!
  • i don't\nsee anything!\ni don't see anything!
  • objectively, closure is amazing.\nq.e.d.ceylon is a\nobjectivel, sureiamzng.\q..d.

0

JavaScript (ES6) 90 (100-10)

Là một hàm trả về ouput được yêu cầu. Thật khó để thực hiện với I / O, vì thay thế thông thường cho STDIN là prompt(), không chấp nhận một dòng mới bên trong chuỗi đầu vào.

Là một hàm có đầu ra thực (sử dụng alert), số byte là 107

f=s=>alert(([...`
javascript is awesome`].every(c=>(z=s.replace(c,''))!=s&&(s=z,q?o+=c:q=c),q=o=''),o+q+z))

Kiểm tra chạy đoạn mã dưới đây trong trình duyệt tuân thủ EcmaScript 6 (triển khai hàm toán tử và hàm mũi tên - Tôi sử dụng FireFox)

f=s=>([...`
javascript is awesome`].every(c=>(z=s.replace(c,''))!=s&&(s=z,q?o+=c:q=c),q=o=''),o+q+z)

function test()
{
  O.innerHTML=f(I.value)
}

test()
#I {width: 80%}
<textarea id=I>
objectively, clojure is amazing.
q.e.d.</textarea><button onclick="test()">-></button>
<pre id=O></pre>


0

Perl, 72 - 4 = 68 byte

Bao gồm 2 công tắc.

perl -0pe 'for$c("\nperl is awesome!"=~/./gs){s/$c//?$p.=$c:last}s/^/$p\n/;s/\n//'

Giải thích : Đối với mỗi ký tự trong chuỗi "\nperl is awesome", hãy xóa ký tự tương ứng khỏi chuỗi đầu vào ( $_) cho đến khi chúng tôi tìm thấy một ký tự không có trong đó $_. Các ký tự phù hợp được lưu trữ trong $pđó có tiền tố$_ được in sau đó được in.

Công -0tắc đọc trong đầu vào hoàn chỉnh thay vì theo từng dòng và công -ptắc giúp đọc đầu vào và in đầu ra ẩn.


0

JavaScript (ES7), 101 107 - 10 = 97

Nó ngắn hơn trước đây và thậm chí còn hoạt động trên cả bốn trường hợp thử nghiệm, nhưng rõ ràng tôi đã bỏ lỡ một quy tắc, vì vậy ....

x=>(i=r=q='',[for(c of`
javascript is awesome`)(y=x.replace(c,''),i||y==x?i=1:(c<' '?q=c:r+=c,x=y))],r+q+x)

Hoạt động chính xác trong Firefox 42. Điều này ban đầu bắt đầu ở mức 119 byte, nhưng một mẹo từ câu trả lời của @ edc65 đã giúp rút ngắn nó rất nhiều. Tôi nghĩ vẫn còn một số chỗ cần cải thiện. Như mọi khi, đề nghị chào đón!


Thất bại khi thiếu dòng mới trong đầu vào. Kiểm tra obj-> job, không nên sửa đổi (quy tắc 3)
edc65

@ edc65 À, vâng, các trường hợp kiểm tra chỉ bao gồm 75% các trường hợp cạnh. Tôi thậm chí có thể loại bỏ is awesomevà nó vẫn hoạt động bình thường trên cả bốn người họ. Tôi sẽ sửa cái này càng sớm càng tốt.
Sản phẩm ETH
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.