Ne unuttuk?


31

Göreviniz, bir dizi bayttan oluşan boş olmayan bir bilgisayar programı yazmaktır. Programda belirli bir bayt seçer ve programın tüm örneklerini programdan kaldırırsak, değiştirilen program kaldırılan baytı çıkarmalıdır.

Mesela programımız olsaydı

aabacba

Daha sonra bcbçıktı a, aaacaçıktı bve aababaçıktı olurdu c.

Değiştirilmemiş programın ne yaptığı önemli değil.

Yanıtlar bayt sayısını en aza indirgemek amacıyla bayt olarak puanlanacaktır.


4
Bu zorluklar quine olarak etiketlenmediğinden, kendi kaynak kodumuzu okuyabilir miyiz?
Dennis,

1
@Dennis Tabii. Benim
Buğday Sihirbazı

2
Programımızdaki tüm baytlar rakamları gösteriyorsa, çıkış kodu ile çıkış yapabilir miyiz?
Bay Xcoder

15
Bunun, kullanılan ayrı karakter sayısını en üst düzeye çıkarmak zorunda olduğunuz bir kod mücadelesi olarak daha iyi olacağını düşünüyorum.
Notts90

2
Boş değil, 1 bayttan daha fazla belirtilenler gerekirdi : P. Veya Notts90’ın söylediklerini.
Magic Octopus Urn

Yanıtlar:


70

zsh, 603 594 566 561 548 440 415 399 378 370 bayt

ec
ho \\n;ca t<<<$'\x20';exi t
d$c -e8BC6P
d0c -eKp
$'\172\163\150' $'\055\143' $'\146\157\162 v \151\156 \173\043\056\056\134\175\175\073\173 \146\147\162\145\160 \055\161 $\166 '$0$'\174\174\074\074\074$\166\073\175'
$'\145v\141\154' $':\073\072\046\046\145\170\151\164';#%&()*+,/9=>?@ADEFGHIJLMNOQRSTUVWXYZ[]^_`jklmsuwy
0# $#;for b in {$..z};{ fgrep -q $b $0||<<<$b;}

Coreutils + 'ya bağlıdır dc.

Çevrimiçi deneyin!

Bu ... bir yolculuktu.

Bu cevap üç bölümden oluşmaktadır. İlk 4 satır, takip eden kodu basitleştirmek için bazı özel durumları ele alır. Sonraki 2 satır ve son satır, esasen aynı şeyi gerçekleştirir, ancak tam olarak biri herhangi bir karakter kaldırmasıyla çalıştırılır. Çoğunlukla tamamlayıcı karakter kümeleriyle yazılmıştır, böylece herhangi bir karakterin en fazla kırılması, diğerinin çalışmaya devam etmesine izin verir.

İlk kısma baktığımızda, ilk önce biz başlarız

  • Newline kaldırma ec\nho \\n
  • ile boşluk kaldırma ca t<<<$'\x20'( exi tdaha sonra çıktının alınmasına neden olacak daha sonra kodun çalıştırılmasını önlemek için)
  • $kaldırılması ile d$c -e8BC6P( 8BC6= 9226olduğu 36*256 + 10ve 36 ve 10 bayt değerleri $sırasıyla ve satır karakterleri; line 6 büyük yorumda dahil etmek zorunda kalmamak için, ondalık altıgen basamak kullanın)
  • 0ile kaldırma d0c -eKp( varsayılan olarak Kolan ondalık hassasiyetini alır 0)

Bir sonraki bölümde kullanılan tek karakter (ikinci satırın sonundaki çöplerin yanı sıra) $'\01234567v;boşluk ve yeni satırdır . Bunlardan dördü hesaba katılmıştır, böylece kalan ( '\1234567v) son satırda olamaz. Sekizlik kaçışları genişleterek ( $'\123'123 8 değerine sahip ASCII karakterini gösterir ):

zsh -c 'for v in {#..\}};{ fgrep -q $v '$0'||<<<$v;}'
eval ':;:&&exit'

İlk satır, programda kullanılan tüm karakterler arasında dolaşır ve her birini kendi kaynak kodunda arar ( $0çalışmakta olan komut dosyasının dosya adıdır), bulunmayan herhangi bir karakteri yazdırır.

İkinci satır biraz garip görünüyor ve aynı exitgrupta olduğu gibi aynı şeyi yapıyor gibi görünüyor . Bununla birlikte, exitsekizlik olarak kodlama $'\145\170\151\164', içermediği 2veya içermediği ile sonuçlanır 3. Aslında bunu taşınmalara karşı daha az esnek yapmamız gerekiyor . Bunun nedeni, herhangi birinin '\014567vkaldırılması, ilk satırın kırılması, ikinci satırın da kırılması ve kodun geri kalanının çalıştırılmasına izin verilmesidir. Ancak, o da kırmak eğer ihtiyaç 2veya 33 ve 4 satır çalıştırmak böylece kaldırılır. Bu in shoehorning ile gerçekleştirilir :ve ;sırasıyla sekizlik gösteriminde 2 ve 3, bir sahip olan,.

Satır 2'nin sonundaki hurdalık, yazdırılabilir her ASCII karakterinin en az bir kez görünmesini sağlamak için vardır, zira kontrolün her birinden geçerek yapılması gerekir.

Eğer exit(o birinin çıkarılması tarafından bozulan edildi yani birinci bölümde çağrılmadı '\01234567v), biz bu karakterlerin herhangi kullanmadan aynı şeyi başarmak zorunda olduğu ikinci, geçin. Son satır, kod çözülen ilk satıra benzer, ancak birkaç bayttan tasarruf etmek için döngü aralığını daraltabiliriz, çünkü hariç tüm karakterlerin '\01234567vkaplandığını zaten biliyoruz . Aynı zamanda, daha 0# $#önce yorumladı ve çıkarıldıysa 0veya $çıkarıldıysa yabancı çıktı üretmesini önler .


5
Vay canına, dahil olan farklı karakterlerin miktarını dikkate alarak çok etkileyici! Kesinlikle bu açıklamayı görmek için sabırsızlanıyorum.
Kevin Cruijssen

3
@KevinCruijssen here you go :)
Doorknob

1
@Doorknob bu size 548 internets kazandırmazsa, ne yaptığını bilmiyorum. Dürüst olmak gerekirse, 603 bayt versiyonu da etkileyici hah!
Magic Octopus Urn

3
Şimdiye kadarki tek ilginç cevap.
htmlcoderexe

21

Retina , 1 bayt

1

Çevrimiçi deneyin!

Tek baytın ( 1) tüm örnekleri kaldırıldığında, çıktı 1. Yeterince basit.


6
Böyle bir şey bulmak için TIO'yu geziyordum - beni yendin. BTW bu bir polyglot, Salyangoz ile çalışır
JayCe

IMO, bu cevap ilk olarak bir çok dilli cevaba yükseltilmeli (muhtemelen sonsuza dek tamamlanmamış bir dil listesiyle) ve diğer ikisi unutulmayacak şekilde oylanmalı. Oh, ve bu da C’de çalışıyor .

@Rogem "Bu C’de işe yarıyor" derken ne demek istediğinizi anlamadım. 1boş program için çıktı veren bir C derleyiciniz var mı? Ne olursa olsun, söz konusu cevapların farklı yaklaşım ve davranışları kullandığını düşünüyorum. IMO çokgen bir cevap yalnızca yaklaşım aynı kalırsa garanti edilir. (Nesnel olarak, aşağıdaki kodlar için gerçek kod farklı olduğundan, bu bir çok dilli değildir.) İstediğiniz şekilde oy kullanmaktan çekinmeyin, ancak geçerli bir cevap geçerli bir cevaptır. Cevabımı olduğu gibi tutacağım, bir cevap koleksiyonu olmasını istemiyorum.
Conor O'Brien

11

Lenguage, 216173027061157310 bayt

216173027061157310 = (144115617572598740 + 144115241762960340 + 144115194786755540) / 2. Orada 216173027061157310 - 144115617572598740 $ler, 216173027061157310 - 144115241762960340 #lar ve 216173027061157310 - 144115194786755540alanlar.

144115617572598740 #s ve boşluklar aşağıdaki BF programını kodluyor :

++++++[>++++++<-]>.

Çevrimiçi deneyin!

144115241762960340 $s ve boşluklar aşağıdaki BF programını kodlar:

+++++++[>+++++<-]>.

Çevrimiçi deneyin!

144115194786755540 $s ve #s, aşağıdaki BF programını kodlar:

++++++++[>++++<-]>.

Çevrimiçi deneyin!

Düzenleme: @Nitrodon sayesinde 72057832274401770 bayt kaydedildi.


Neden U127 kullanmıyor ve bayt? Çevrimiçi deneyin! Ya da sadece boş bayt ve soh?
Jo King

@JoKing UÇıktı olabilecek en kısa yazdırılabilir ASCII baytı olduğunu bilmiyordum . Yazdırılamaz bayt kullanmak istemedim.
Neil

Hücreleri sarmalamadan veya yazdırılamayan karakterlerden faydalanmadan bile olsa, boşluk karakterini üçüncü bir bayt olarak ekleyerek bunu 216173027061157310 bayta indirebilirsiniz.
Nitrodon

7
"Düzenleme: Kaydedilmiş 72057832274401770 bayt ..." nedeniyle yardım edemiyorum, ancak oyu düzeltin
Bay Lister


9

Polyglot * , 1 byte ( onay bekliyor )

0

Çevrimiçi deneyin!(Üçgenliği kullanarak)

*: Bu (oldukça geniş) çeşitli dillerde çalışır (4,> <> ve benzerleri ve diğer bazı istisnalar hariç). Jelly kaynak kodundaki cevabına özdeştir , ancak G / Ç yöntemi farklıdır - Çıkış, çıkış kodudur. Biri 0kaynak kodundan çıkarıldığında, çoğu zaman hata yapmayan ve çoğu dilde çıkış kodu 0 veren boş bir programla kalırlar .



3

Tekli (rekabetçi olmayan), 96 bayt

00000000: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000010: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000020: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000030: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000040: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000050: 0000 0000 0101 0101 0101 0101 0101 0101  ................

İşte xxdçöplük.

Unary dilinin daha geniş bir tanımı kaynak kodundaki herhangi bir karaktere izin verir. Ancak bunun için işe yarar bir derleyici veya tercüman bulamadım. Bu yüzden bu cevabı rekabetçi olmayan olarak işaretledim. Bu soru sorulmadan önce gönderilenleri bulabilirseniz, ben ona bağlantı vereceğim.


4
Bu şimdiye kadar gördüğüm en küçük Unary programı.
Draco18
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.