Birleştirilmiş programı + çıktısı 95 yazdırılabilir ASCII karakterinin permütasyonu olan en kısa program


12

Mümkün olduğunca kısa (bayt-sayımla ölçüldüğü gibi), girdi almayan, yorum içermeyen ve birleştirilmiş bir program + çıktısının tam olarak 95 karakter uzunluğunda ve yazdırılabilir her ASCII karakterini içerecek şekilde bir karakter dizesi / sırası çıkaran bir program yazın tam olarak bir kez , yani program + çıktı, ASCII kodları 32-126 olan 95 karakterin bir permütasyonudur:

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 

Beraberlik durumunda kazanan, Levenshtein düzenleme mesafesi ile ölçülen (95 karakterlik) birleştirilmiş program + çıkışı yukarıdaki dizeye en yakın olan giriştir (yani tek karakterli silme, ekleme veya ASCII sırasına koymak için gerekli ikameler).


2
Bu, örneğin programda tekrarlanan karakterler varsa otomatik olarak diskalifiye edildiği anlamına mı geliyor? Bu kaba.
ekmek kutusu


1
Ayrıca eskisinin echo $0diskalifiye olup olmadığına da karar vermek isteyebilirsiniz .
Peter Taylor

3
Yazdırılabilir ascii karakter aralığının dışındaki karakterlere (ve muhtemelen bunların kopyalarına) izin veriliyor mu? Veya program + çıktısı yazdırılabilir her karakteri tam olarak bir kez içermeli ve daha fazlası değil mi?
primo

1
@primo İzin verildiğini varsayıyorum. Bence yinelenenleri kullanan bir "shift-ve-eval" çözümü yazma zamanı (dize değişmezleri elde etmek zor olacak olsa da)
John Dvorak

Yanıtlar:


12

GolfScript, 14 karakter

{`),32>46-^}.~

Çıktı :

 !"#$%&'(*+/015789:;<=?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]_abcdefghijklmnopqrstuvwxyz|

Zorluk (en azından anladığım kadarıyla), programı ve çıktısı 95 yazdırılabilir ASCII grafiğinin permütasyonu olan bir program yazmaktı , 95 yazdırılabilir ASCII grafiğini çıkaran mümkün olan en kısa programı yazmak değil.
Frank Schmitt

Üzgünüm, benim hatam. Başlıkta "program + çıktı" okurken, sorunun ilerleyen bölümlerinde sıralı program + çıktı okur .
Frank Schmitt

),- vay. Bunu sevdim.
John Dvorak

1
@JanDvorak codegolf.SE: İnsanların yakın ebeveyn ve virgül hakkında heyecanlandıkları tek yer. : P
Kapı Tokmağı

@ Golfscript içinde "Doocnob" anlamına gelir "doğru uncons (rparen) ve bu boyutta bir dizi yapmak (virgül)". Aslında, bir karakter (sağ kıvırcık) ile kısaltılmış bir dize ve bu karakterin ASCII konumunun hemen altında biten bir dizi (| |) ile kalırsınız. Yazdırılamayan karakterleri, nokta ve xor (burada simetrik set farkı) ile kaynak kodu (çıkarma alınır) sans sağ sans kesilir ve bitirdiniz. Ve evet, dize xor dizisi dizedir.
John Dvorak

6

Perl, 89 karakter

Bu şimdiye kadar yapabildiğim en iyisi:

q< !"#%&'()+/8:?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\^_`abcdefghjklmosuvwxz|>;
print~-$=.73*2,y[]{}

Perl minutae bilen olmayanlar için, iki argüman printifadesi olarak render olabilir ~(-($=)) . (73 * 2)ve tr///.

Program 6 karakter çıkarır:

591460

Perl'de düsünebilirz Maalesef her yineleme yapısı ( for, while, until, map, grep) ile hisse en az bir karakter print. Çıktıda yeni satırların görünmesine izin verildiyse, 87 karakterlik bir çözüm eklemek için Perl 5.010'u kullanabilirim:

q{ !"#%&'*,-./0:;>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^`bcdfgjkmnoprtuvxz|~}while($_+=say)<9

Bakalım daha büyük bir sayı yazdırabilir miyim :-)
John Dvorak

ah ... ikinci satırı benim için çevirebilir misin?
John Dvorak

1
@ JanDvorak $=, geçerli çıkış aygıtındaki yatay çizgi sayısıdır. Varsayılan olarak 60. ~-$=, ikisinin tamamlayıcı negatifi olan 60'ın bitsel olarak ters çevrilmesidir 59. 73*2146. .ve ,onlardan beklediğinizi yapın. y[]{}başka bir yoludur tr///, transliterat operatörüdür. Bu sürer $_bunu değiştirmek için herhangi bir karakter vermediğinden ve hiçbir şey yapmaz. Değiştirilen karakter sayısını döndürür, yani 0. Yani ~-$= . 73*2 , y[]{}= 59 . 146 , 0= '591460` var.
Dan

6

PHP 67 bayt

<?=U4eB1gkFdA6J9snZD2IE8y5PhwQV^xHGmqYMfNjKpbR3vcLalCWi0_TtrOSXouz;

Çıktı:

-|"/@>& *+}:[!],'~(){.\`7#%$

Görünüşe göre, sadece 28 yerine 30 karakter çıkaran 65 baytlık bir çözüm olmalı, ancak sıraya giremedim. Kullanılmayan 6 karakter OSXouz, bunun yerine dize değişmezlerinden birine yapıştırılmıştır.

Düzenleme: Daha fazla yansıma üzerine, bu şekilde 28'den fazla karakter oluşturmak mümkün değildir. UPPER ^ lowerher zaman 32 ile 63 arasında bir karakterle sonuçlanır, bu nedenle 10 hanenin tümü için gereklidir @[\]_`{|}~. Kalan 22 koddan dördü senaryoda kullanılmaktadır ve sadece 18 harfle elde edilebilmektedir. Bununla birlikte, tiebreaker önemli ölçüde geliştirilebilir.


Ah, elbette, barewords. Nasıl unutmuş olabilirim?
John Dvorak

3

Ruby, 91 karakter

%{ !"#$&\',-/450:<=>ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcefghijklmnqvwxyz|~};puts(?@‌​.ord*98+1)

Çıktılar 6273.

%{...} Jan Dvorak'dan çalınan numara


Yorumsuz. Açıkça belirtildiği gibi.
Johannes Kuhn

@JohannesKuhn Ah, bunu fark etmedi. düzenlendi.
Kapı tokmağı

%{ !"#$&\',-/450:<=>ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcefghijklmnqvwxyz|~};puts(?@.ord*98+1)noktalı virgülle yazdırılabilir bir ayırıcı olarak (satırsonu yerine) kullanılmak üzere (91 karakter için) ve kıvrımlı parantezlerin içinden 'ord' harflerinin kaldırılmasını istediğinizi düşünüyorum.
res

@res Yep, tüm bu harfleri yönetmek zor: P
Doorknob

Şimdi \ üç kez eklenir.
Howard

3

Perl, 61 karakter

print$:x8^CJIBQTOWAEULHVGFNMKRPZY,q<#"/;*g~?|={.>&+u15m97ws26

Çıktı:

c@db[yo]le_ah\jfD`kX}zS-! %)('v304

$:varsayılan olarak " \n-". x8sekiz kez tekrarlar; 24 karakterli sonuç daha sonra 23 karakterlik bir barestring ile bitsel olarak xored (sonuncusu -olduğu gibi bırakılır). İkinci bölüm 12 karakterlik bir q-string bitsel ve 10 karakterlik bir barestring (son 2 karakter atılır).


1
Program uzunluğunun 61 karakter olduğunu düşünüyorum.
res

Teşekkürler. Metin düzenleyicim EOF nedeniyle 62 karakter bildirdi.
Grimmy

1

Ruby, 95 karakter, 6 düzenleme

%{ !"#$&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz|~}

Evet. Bu kadar. Hiçbir zaman basılmayan serbest kayan bir dize hazır bilgisi. Ruby yüzde-tipi-sınırlayıcı biçiminde dize değişmezlerini (Perl'den ödünç alır) destekler - sınırlayıcı herhangi bir alfasayısal olmayan karakterdir ve açılış sınırlayıcısı bir açılış ayracıysa (herhangi biri [({<), kapanış sınırlayıcısı karşılık gelir kapatma braketi (yuvalanmış braketlere izin verilir).

Bunun daha temel bir gönderim olduğunu anlıyorum, ancak birisi gerçekten bir şey yazdırmayı başaramadıkça veya farklı bir açılış ve kapanış sınırlayıcıya sahip iki karakterli serbest biçimli bir dizgi değişmezine sahip bir dil yoksa , bu en iyisidir.


0

Tcl 96, düzenleme mesafesi 12

if 0    {!"#$%&'()*+,-./123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdeghjklmnopqrstuvwxyz|~}

Boşluklardan biri bir sekme olmalı, korkarım
John Dvorak

sekme veya boşluk yazdırılabilir mi?
Johannes Kuhn

sekmesi yazdırılamaz (ASCII 9), ancak boşluk yazdırılabilir (ASCII 32).
John Dvorak

1
[Sadece OP'nin bunu cevapladıktan sonra açıkladığını gördüm :)]
flornquake

1
join {!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghklmpqrstuvwxyz|~} 95 karakter kullanarak çalışıyor gibi görünüyor ? (Girişiniz için teşekkür ederiz. Bukalemun için üzgünüm - ne yazık ki aceleyle düzenledim ve farklı şeyler yapmalıydım.)
res
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.