Döngüsel Levenquine


45

Arka fon

En PPCG düzenli bilecek gibi, bir çalıştırdığınızda kendi kaynak kodunu çıktılar bir programdır; ve iki dizi arasındaki Levenshtein mesafesi , bir dize diğerine değiştirmek için gereken minimum ekleme, silme ve düzenleme sayısıdır. Bu zorlukla iki kavramı bir "levenquine" olarak birleştiriyoruz: kendi kaynak kodunu çıkaran, ancak bir karakterin bir örneğini eklenmiş, silinmiş veya farklı bir karakterle değiştirilmiş bir programla. (Başka bir deyişle, program ve çıktısı arasındaki Levenshtein mesafesi 1'dir.)

Görev

Çıktısının bir levenkine olduğu bir levenquine yazın, bu programın çıktısı da aynı zamanda bir levenkine vb. Ek olarak, bir noktada, programı tekrar tekrar çalıştırma, çıktısını çalıştırma, çıktısının çıktısını çalıştırma vb. Sırası sonunda orijinal programa geri dönmelidir.

İşleri zorlaştıran ek bir kısıtlama var: Bu döngü içinde bir yerde ortak karakterleri olmayan iki başka program olmalı (başka bir deyişle, bir programda var olan ve diğer programda da var olan bir karakter yok). Bu nedenle programınız yavaş yavaş kendini farklı bir karakter setine dönüştürmek zorunda kalacak ve tekrar geri dönecek.

Çıktı üreten herhangi bir programda gerekli olan kaçınılmaz bir kazan plakasına sahip olan bir programlama dili kullanıyorsanız (örneğin, bir printifade yazmanın ve başka yararlı çıktı biçimlerinin bulunmamasının tek bir yolu vardır ), o kazan plakasını amaç için var olmayan olarak kabul edebilirsiniz. iki programın ortak hangi karakterleri içerdiğini belirlemek. Bununla birlikte, kodun Levenquine özelliğini belirlemek amacıyla o kazanı hala saymalısınız.

Açıklamalar

  • Döngündeki "programların" her biri tam bir program veya işlev olabilir. Hepsinin aynı olması gerekmez, örneğin bazıları tam programlar olabilir ve bazıları işlevler olabilir.
  • Döngüdeki tüm programların aynı çıktı biçimini kullanması gerekmez. Örneğin, bazıları standart çıktıyla, bazıları ise standart hatayla çıktı verebilir.
  • Programlarınız girişsiz olarak (ya da herhangi bir şeyi yapmak için giriş gerektiren dillerde mümkün olan en basit giriş) çalıştırılır.
  • Uygun quine kuralları geçerlidir; Her ne kadar bir Levenquine gerçek bir yüzgeç olmasa da, uygun bir yüzgeç yazarken yasa dışı olacak hiçbir şey yapamazsınız. Özellikle, boş program hiçbir zaman uygun bir Levenquine'den geçerli bir çıktı değildir (ve bu nedenle de döngünüzün bir parçası olamaz).
  • Levenquine kısıtlaması bayt yerine karakter cinsinden ölçülür (örneğin ê, kaynak UTF-8'de kodlandığında bile bir karakterdir). Ortak olmayan karakter kısıtlaması da karakter cinsinden ölçülür. Ancak, zafer koşulu bayt sayılır.

Zafer durumu

Lütfen döngüden en az aşağıdaki üç programı gönderin: en kısa program (bayt cinsinden ölçülür); ve döngüden ortak hiçbir karakter içermeyen iki program. Bunlardan ikisinin aynı olması ve üçünün de ayrı olması mümkündür. Skor, en kısa programın bayt cinsinden uzunluğuna dayanmaktadır, daha kısa olması daha iyi olmaktadır, bu da bir tür yarışması haline gelmiştir.


Silinen yayınları görebilen kişiler için: Sandbox yayını buradaydı .

Bence döngünün uzunluğunu da içeren cevaplar için de iyi olurdu.
mbomb007

Diyelim ki dilin çıkış yapmak için çeşitli işlevleri varsa, ancak hepsi çift karakter paylaşıyorsa?
Ørjan Johansen

2
@ ØrjanJohansen: Sanırım bunlardan sadece birini seçip buna bağlı kalmaya karşı çıkmam. Ancak, tartışmasız rekabet edilemez; Kuralın objektif olmasını istedim, çünkü aksi halde insanlar içinde boşluklar açmaya çalışırlar ve kuralı çok karmaşık hale getirmeye çalışırsanız, bunun ne anlama geldiğine dair tartışmalar olur.

Biraz bilgili bir levenquine olabilir mi? Orijinal kaynak koduyla olan mesafe 1 bayt kapalı mı?
Magic Octopus Urn

Yanıtlar:


34

Gol> <> , 252 167 bayt

1>'r&ff9++r}}r&f*bc++1z.r}r6=z?Hzznr6rHr}r:ee+6+=z9*5c*+1z . }&z+5c*&H}rebe*b+ke++rHS6PWSb`S6P$$1W5/11b6W6EE/W6EE`S6P$$W61`S6P5W6$5_61P1WW_b_

Çevrimiçi deneyin!

Ve karşılıklı olarak farklı ( Doğrulama ) programı:

0<CŽB‚‚UGGŽ™™ŽB‚F~GGM–JŽ™ŽRY–[d––ŠŽRŽdŽ™ŽVGRGY–UFQFGM–<J<™B–GQFBd™Ž~F~G‡GGŽd;oRl-7-7so~|;oRl@@-Ms7QKMM3-3-3~R-4sRaaK-3sRaa|;oRl@@sR43M|;oRlQ-sR43@Q{RMlMss3{~{"

Çevrimiçi deneyin!

Bu, Karşılıklı Ayrıcalıklı Quines yarışmasına verdiğim cevabımdan esinlendi , kudos da Bubbler's Gol> <> cevabına gitti .

İşte çalıştırabileceğiniz bir doğrulama programı . Ne yazık ki, zaman aşımına uğradı, ancak kodun bir bölümünün diğer bölümü nasıl oluşturduğunu izleyebilir ve daha sonra yazdırılan son sürümü kopyalayıp devam etmek için girişin içine yapıştırabilirsiniz. Sonunda koyduğunuz ilk programa ulaşacaksınız.

açıklama

Kodun her iki bölümü de gerçek bölüm olan ve kodun diğer bölümünü içeren veriler olmak üzere iki bölümden oluşur. Her ikisi de pratik olarak aynı şekilde çalışır:

Bir bayrağa (ya 1da kodun ilk karakteri 0) bağlıdırlar. Bayrak ayarlanmışsa, 252. karakteri aşağı indirerek, ekleyerek / çıkartarak 28ve koda ekleyerek kodun diğer bölümünü oluşturmaya başlarlar .

Örneğin, yukarıdaki ilk programdan sonra kodun ilk iki yinelemesi:

1>'r&ff9++r}}r&f*bc++1z.r}r6=z?Hzznr6rHr}r:ee+6+=z9*5c*+1z . }&z+5c*&H}rebe*b+ke++rHS6PWSb`S6P$$1W5/11b6W6EE/W6EE`S6P$$W61`S6P5W6$5_61P1WW_b_C

1>'r&ff9++r}}r&f*bc++1z.r}r6=z?Hzznr6rHr}r:ee+6+=z9*5c*+1z . }&z+5c*&H}rebe*b+ke++rHS6PWSb`S6P$$1W5/11b6W6EE/W6EE`S6P$$W61`S6P5W6$5_61P1WW_b_CŽ

Mevcut bölümün sonuna ulaştığında Sonunda, bu (ikinci kod karakteri döndürür <için >diğer bölümüne noktasına ve tekrar).

Her iki bölüm de bir arada, birinci bölümün yürütülmesinden ikincinin yürütülmesine geçmek üzere.

1>'r&ff9++r}}r&f*bc++1z.r}r6=z?Hzznr6rHr}r:ee+6+=z9*5c*+1z . }&z+5c*&H}rebe*b+ke++rHS6PWSb`S6P$$1W5/11b6W6EE/W6EE`S6P$$W61`S6P5W6$5_61P1WW_b_CŽB‚‚UGGŽ™™ŽB‚F~GGM–JŽ™ŽRY–[d––ŠŽRŽdŽ™ŽVGRGY–UFQFGM–<J<™B–GQFBd™Ž~F~G‡GGŽd;oRl-7-7so~|;oRl@@-Ms7QKMM3-3-3~R-4sRaaK-3sRaa|;oRl@@sR43M|;oRlQ-sR43@Q{RMlMss3{~{"

Çevrimiçi deneyin!

Bayraklar her bölüm için tam tersidir, bu nedenle yeni çalışan bölüm kendi koduna ulaşana kadar diğer kod bölümünü silmeye başlar. Bu noktada, bayrak çevirir ve döngü tekrarlanır.

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.