* Dil adı * harika!


13

Stdin'den girişi okuyan ve stdout'a biraz değiştirilmiş bir çıktı veren herhangi bir dilde bir program yazın. Program giriş ve çıkıştan bazı karakterleri olabildiğince büyük bir önek, *language-name* is awesome!ardından da bir satırsonu ve ardından girdiden geriye kalan kadar ödünç almalıdır .

  • Giriş, büyük harf içermiyor.
  • Dilde dil adının ilk karakteri yoksa, yalnızca yeni satır karakteri ödünç alınmalıdır.
  • Girişte yeni satır karakteri yoksa, girişi değiştirilmemiş olarak çıkarın.
  • Mevcut karakterlerden hangisini ödünç aldığınız önemli değildir.

Yazarken yerden tasarruf etmek \niçin yeni satır karakteri ( 0x0a) olarak kullanıyorum . Gerçek program \ndizgiyi değil, sadece gerçek yeni satır karakterini önemsemelidir .

Örnek: python.
girişi: abcdefghijklmnopqrstuvwxyz\n0123456789
çıkışı: python\nabcdefgijklmqrsuvwxz0123456789
giriş boşluk olmadığından, biz sonraki kelime için yeterli karakterler olsa bile devam edemez: is.

Örnek: C.
input: i don't see anything!
output: i don't see anything!
C dizede bulunamadı, bu nedenle değişiklik yapılamadı. Ayrıca, yeni satır karakteri yoktur.

Örnek: C ++.
input: i don't\nsee anything!
output: \ni don'tsee anything!
C dizede bulunamadı, bu yüzden hiçbir değişiklik mümkün değildi.

Örnek: Obj-C.
input: objectively, clojure is amazing.\nq.e.d.
output: obj\nectively, clojure is amazing.q.e.d.
Girdi yazmak için yeterli karakter içeriyor objancak -eksik.

Kaynak kodunuzun bayt sayısı eksi dillerinizin adının bayt sayısı, utf-8 kodlu (mümkünse) puanınızdır; en düşük kazanç!


3
Umarım birisi olumsuz bir puan için adında çok fazla tekrarlanan bir dil bulur :)
— Filip Haglund

i don't\nsee anything!Test örneği olarak dahil edebilir misiniz ?
— Dennis

İyi test örneği! Katma.
— Filip Haglund

Tekrarlanan karakterleri (adında veya girişinde) olan vakalar nasıl ele alınmalıdır? Çıktıdaki kalan karakterlerin sırası önemli mi?
— Peter Taylor

Woops! Onu düzeltti. Ayrıca, sadece birincinin değil, herhangi bir karakterin ödünç alınabileceği açıklandı.
— Filip Haglund

Yanıtlar:


4

Pyth, 37 bayt

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

Kaynak kodu 41 bayt uzunluğundadır. Çevrimiçi deneyin.

Nasıl çalışır

  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

Python, 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

Çevrimiçi deneyin


Yalnızca karakterleri ödünç almalıdır, bu nedenle girdide birden fazla yeni satır varsa, bunlardan yalnızca birini ödünç alırsınız. Tüm karakterler çıktıda bulunmalı, ancak aynı sırada olmamalıdır.
— Filip Haglund

1

Python, 146 bayt

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 -_- düzelttim
— TheDoctor

Giriş yeni satır içermiyorsa yine de bir satırsonu çok fazla (ikinci örnek).
— Dennis

1

Seylan, 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);}

İşte biçimlendirilmiş ve yorumlanmış bir sürüm:

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);
}

Bunun replaceLastyerine replaceFirstdaha kısa olduğu için kullanır .

Bazı örnek giriş ve çıkışlar, sorudakiyle aynı formatta:

  • abcdefghijklmnopqrstuvwxyz\n0123456789 → ceylon\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)

İstenen çıkışa dönen bir işlev olarak. STDIN'in olağan ikamesi olduğu gibi prompt(), giriş dizesinin içindeki bir yeni satırı kabul etmeyen G / Ç ile uygulanması zordur .

Gerçek çıktıya sahip bir işlev olarak (kullanarak alert) bayt sayısı 107'dir

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))

Aşağıdaki snippet'i EcmaScript 6 uyumlu bir tarayıcıda çalıştırmayı test edin (forma operatörü ve ok işlevi uygulama - FireFox kullanıyorum)

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 bayt

2 anahtar içerir.

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

Açıklama : Dizedeki her karakter için, bulunmayan bir karakter bulana kadar "\nperl is awesome"ilgili karakteri giriş dizesinden ( $_) kaldırın $_. Eşleşen karakterler, $piçine ön ek olarak kaydedilir ve $_daha sonra yazdırılır.

-0Geçiş tamamlandığında girdi ziyade çizgi-by-line okur ve -panahtar okuma giriş yapar ve çıkış örtük yazdırın.


0

JavaScript (ES7), 101 107-10 = 97

Daha önce kısaydı ve dört test vakasında bile çalıştı, ama görünüşe göre bir kuralı kaçırdım, bu yüzden ....

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)

Firefox 42'de düzgün çalışıyor. Bu başlangıçta 119 baytta başladı, ancak @ edc65'in cevabından bir püf noktası , onu büyük ölçüde kısaltmaya yardımcı oldu. Bence hala iyileştirilmesi gereken bir yer var. Her zaman olduğu gibi, öneriler hoş geldiniz!


Girişte yeni satır eksik olduğunda başarısız olur. Test obj-> job, değiştirilmemelidir (kural 3)
— edc65

@ edc65 Ah, evet, test senaryoları kenar vakaların sadece% 75'ini kapsıyor. Hatta çıkarabiliyordum is awesomeve dördünde de düzgün bir şekilde çalışıyordu. Bunu en kısa sürede çözeceğim.
— ETHproductions 26:15
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.