Yeniden Düzenlenebilir Kod Bowlingi


14

Kod Bovling Yarışması

Kaynak kodunu nasıl yeniden düzenlerseniz ayarlayın, aynı çıktıyı üreten bir program veya işlev yazın. (Çıktı hata olamaz)


Pangram Puanlaması

  • Puanınız, kaynak kodunuzdaki benzersiz karakter miktarıdır.

    Kaynak kodlu bir programın AJBpuanı 3
    A AAJolur Kaynak kodlu 2
    bir programın puanı olur Kaynak kodlu bir programın 111puanı olur1

  • Bu bir varyantıdır. En yüksek puana sahip program kazanır!

(Size kolaylık sağlamak için otomatik bir puanlama aracı oluşturuldu burada )


Zorluk Kuralları

  1. Giriş
    Program / fonksiyon, tamamen isteğe bağlı bir giriş alabilir.

  2. Çıktı
    Bu çıktı istediğiniz herhangi bir şey olabilir , ancak boş olmayan, boş olmayan, boş olmayan ve hatasız olmalıdır. (Bu nedenle çıktı en az 1 bayt olmalıdır)

  3. Yeniden düzenleme
    Kaynak kodu nasıl düzenlenirse değiştirilsin, çıktı aynı olmalıdır.

    Örnek:
       Programı: ABJçıkışlar hello world, programlar yaptığı gibi: [ AJB, JAB, JBA, vb]

Bu bir varyantıdır. En çok karakter içeren program kazanır!


1
Gerçekleştirmek için herhangi bir özel görev olmadan, bu zorluk bence çok geniş.
Dennis

2
Nil olmayan ne anlama geliyor?
Dennis

2
Pangram puanlama, kod bowling çalışması yapmak için bir girişim olsa da, bu zorlukların gerçekten kod bowling etiketli olduğundan emin değilim . Puanlama mekanizması ne kod bowling olması gerekiyordu oldukça farklı, bu yüzden ya kod meydan okuma ya da yeni bir etiket oluşturmak söyleyebilirim .
Martin Ender

1
Martin ile hemfikirim. Örneğin, bu zorluk bir kod golfü değildir. Toplam karakter sayısı (veya bayt) dışında herhangi bir şeyle puan kazanırsanız, artık bir kod bowling zorluğu değil
Nathan Merrill

3
Program / fonksiyon sona ermeli mi? (örn. 0sonsuza kadar yazdırabilir miyim ?)
MildlyMilquetoast 18:17

Yanıtlar:


18

Lenguage, UTF-8 ise 1.112.064 puan

Programım olası her UTF-8 karakterinden oluşuyor. "Merhaba dünya" yı yazdırır ve 1.75 * 1076 yottabyte alan kullanır.

(Programı oluşturmak için, 17498005810995570277424757300680353162371620393379153004301136096632219477184361459647073663110750484 karakterlerle, her olası UTF-8 karakterinin dosyada olduğundan emin olmanız yeterlidir)


2
Siz, efendim, bir dahisiniz. Bekle, bilgisayarım neden bozuluyor? : 'P
HyperNeutrino

Unicode'un 1114112 karakteri olduğunu düşündüm.
MilkyWay90

14

Birçok dil, 2 puan

0.

Veya 0.0olarak üretilir . Eksik integral veya ondalık kısım için 0 olduğunu varsayarak, başlangıçta veya bitişte ondalık noktası olan Tamam olan liberal sayı ayrıştırma gerektirir. aynı puanı verirdi.0..00000000.

Bu, aşağıdaki dillerde de çalışır (bazı durumlarda belirtildiği gibi farklı bir çıktıya sahiptir):

  • Python REPL
  • Javascript REPL
  • MATLAB (üretir ans = 0)
  • Oktav (üretir ans = 0)
  • MATL (üretir 0)
  • CJam
  • Retina (üretir 0)
  • Yığılmış (üretir 0)

Python için, olasılıkların tükenebileceğinden, 1'in üzerinde bir puan almanın tek yolu olduğunu düşünüyorum.

  • Herhangi bir ikili veya tekli operatör son karakter olarak başarısız olur
  • Herhangi [](){}bir eşleşme gerektirir ve kapanış önce gelirse başarısız olur
  • Sekmeler veya boşluk bir satır başlatamaz. Yeni satırlar REPL'de kullanılamaz.
  • A , ilk karakter olamaz
  • İlk #sırada yer alan her şey yorumlanır ve çıktı üretilmez
  • Başlangıç \geçersiz bir satır devamıdır
  • Backticks (Python 2) eşleştirilmeli ve hiçbir şeyi çevrelemeyen bir hata
  • $, !, ?Ve @diğer kullanışsız karakterler olmadan kullanılamaz

Bu yapraklar harfler, rakamlar, _, ., ve tırnak.

  • Tırnak işaretleri ile, bunların dışındaki herhangi bir dize olmayan bir hata verir.
  • Olası rakamlara sahip harfler ve _değişken isimler yaratır, bunların bazı permütasyonları her zaman yoktur.

Yaprakları basamak ve .. Farklı rakamlara izin vermek, tüm rakamlar olmadığı sürece farklı bir sayı verir 0. Yani, sıfırları düşünüyorum ve .yukarıda bir puan almak için tek yol 1. Ancak, Python lexer'ı iyi bilmiyorum, bu yüzden bir şey eksik olabilirim.


11

CJam , skor 15

T U
V	LMOQR[]0q

Çevrimiçi deneyin!

Her zaman yazdırır 0000:

  • 0 sadece sıfıra iter.
  • T, U, VSıfıra önceden başlatılması değişkenlerdir.
  • L, M, O, Q, ROnlar çıktıda görünmüyor böylece, boş bir listeye önceden başlatıldı değişkenlerdir.
  • [bir ]şeyleri bir listeye koyabilir veya eklemeyebilir, ancak doğru şekilde eşleşmeleri gerekmez ve çıktı yine de yazdırılmak üzere düzleştirilir.
  • q boş olan girdiyi okur ve dolayısıyla çıktıda da görünmez.
  • satır besleme, boşluk ve sekme ayrıştırıcı tarafından yoksayılır.

Bu CJam gibi bir dil için harika bir cevap! Güzel
Albert Renshaw

Küçük harfe rbenzer bir şey yaparak küçük harf eklenebilir qmi?
Albert Renshaw

1
@AlbertRenshaw her ikisine birden sahip olamazsınız, çünkü biri EOF'da hata verecektir.
Martin Ender

9

MATL , 3 5 6 puan

Boşluk ekleme fikri Bijan'ın cevabından alınmıştır .

lv
 T1

Kod veya herhangi bir permütasyonu, satırsonu ile ayrılmış üç kod çıkarır.

Çevrimiçi deneyin!

açıklama

  • İşlev lvarsayılan olarak bir numarayı yığına iter.
  • Literal 1de aynısını yapar.
  • Bir numaralı olarak görüntülenen değişmez Titmeler true.
  • Uzay ve yeni satır ayırıcıdır ve burada hiçbir şey yapmaz.
  • vşu ana kadar tüm yığını bir sütun vektörüne birleştirir. Örneğin, vsonra Tilk iki sayıyı bir sütuna birleştirir (ve sonra bir sonraki sayı itilir). İlk vharf boş bir dizi oluşturur.

Kodun sonunda, yığın aşağıdaki kurallarla örtük olarak görüntülenir:

  • Yığındaki her öğe veya dizi farklı bir satırda görüntülenir.
  • Sütun vektörleri, her bir öğeyle farklı bir satırda görüntülenir.
  • Boş dizi çıktıya neden olmaz.

Böylece, giriş karakterlerinin herhangi bir permütasyonu 1farklı satırlarda üç kez üretilir.


Açıklama? Bunun nasıl çalıştığını merak ediyorum.
SparklePony Yoldaş

@Sparkle Bir açıklama eklendi
Luis Mendo

Güzel! Ayrıca sadece bu metni, Removing any part of the source code however should cause that specific output to not be produced.yayınladığınız sırada meydan okuduğumda belirtmek istedim, eklemeyi demek istemedim ve kaldırıldı. Belki bu muhtemelen skoru biraz artırmanıza yardımcı olacaktır
Albert Renshaw

1
@AlbertRenshaw Uyarı için teşekkürler! İki puan daha
Luis Mendo

Seni fikrimi çalmakla suçluyorum. Yine de sorun değil.
Bijan

6

Jöle , skor 53 101

¶ ¤$¥&+ABDFHNPQSUVX^_aborv|®²×ȧȯḄḅḌḞḢḤḷṀṂṚṛṠṢṪẠạị«»()kquƁƇƊƑƘⱮƝƤƬƲȤɓɗƒɦƙɱɲƥʠɼʂƭʋȥẸẈẒẎŻẹḥḳṇọụṿẉỵẓḋėġṅẏ

Yalnızca Jelly'in kod sayfasının parçası olan karakterleri kullanma .

Jelly, örtülü girdiye sahiptir 0ve ạị«»yukarıdaki kod dizesinin ilk yarısı (en fazla ve dahil ) çoğunlukla sıfır veya yalnızca sıfır içeren bir liste (yalnızca büyük harf) ve ikili (küçük harf ve semboller) atomlardan oluşur. veya dyads durumunda bu tür iki giriş) bir sıfır veya yalnızca bir sıfır içeren bir liste döndürür.

İstisnalar:

  • Boşluk: yok sayılır (kod sayfasında olmasına rağmen).

  • Pilcrow, bağlantıları ayırır (bir satır beslemesi gibi - ancak bu gerçekten aynı bayttır), ancak başka hiçbir bayt koddan önce referansta bulunmayacaktır.

  • bokböceği, ¤ayrıştırıcıya bir nilad (veya sabit) ile başlayarak kalan her şeyi bir sabit olarak tedavi etmesini söyler (ve ilk atom olarak çalışır).

  • Dolar, $ayrıştırıcıya iki bağlantıyı bir monad olarak bırakmasını söyler (ve şaşırtıcı bir şekilde ilk atom gibi çalışır)

  • Yen, ¥benzer şekilde ayrıştırıcıya bıraktığı iki bağlantıya bir ikili muamelesi yapmasını söyler.

  • Önerilen, ®başlangıçta kayıt defterinin değerini hatırlar 0(bu, karşı tarafın telif ©hakkıdır, ilk atom olarak kullanıldığında kırılır, çünkü henüz ayarlanmamış olan sol bağlantının kaynağından bulunur).

Parantez kod, (ve )ve üzerinde şu anda kullanılmayan kod noktalarıdır, bunların hepsi olsun çözümlü ve her (yeni bir zincir neden çok bir yeni satır gibi olur, onlar bir yeni satır gibi çağrılabilir bağlantılar oluşturarak etkisine sahip olmadığı halde, ancak burada sorun yok çünkü hiçbir şey yapmaya çalışmaz).


1
Yorumlayıcı, kodu işlemeden önce bıraktığı için kod sayfasının dışındaki tüm karakterleri ücretsiz olarak ekleyebilirsiniz. Yine de nil olmayanın ne anlama geldiğini bilmiyorum.
Dennis

1
Bence mücadelenin ruhu muhtemelen karakterlerin sayfada olması gerektiğidir. Nil olmayan hakkında sordum ve yanıt minimum 1 baytlık çıkış belirtmek oldu.
Jonathan Allan

@Ders parantez içinde ayrıştırma ile ne için doğru terminoloji hakkında herhangi bir fikir?
Jonathan Allan

Kullanılmayan tüm karakterler, yeni satır gibi yeni bir bağlantı başlatır.
Dennis

1
Onlara tanımsız davranış diyelim. : P
Dennis

4

TI-Basic (83 serisi), 93 puan (99 TI-84 Plus'ta)

0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZθnπeiAnsrandgetKeyZXsclZYsclXsclYsclXminXmaxYminYmaxTminTmaxθminθmaxZXminZXmaxZYminZYmaxZθminZθmaxZTminZTmaxTblStartPlotStartZPlotStartnMaxZnMaxnMinZnMinΔTblTstepθstepZTstepZθstepΔXΔYXFactYFactTblInputNI%PVPMTFVP/YC/YPlotStepZPlotStepXresZXresTraceStep

Tüm rakam, (θ dahil olmak üzere tüm bir baytlık değişkenler n polar ve sıralı grafik için, bağımsız değişkenler), sabitler, tt e ve i , bir değil oldukça değişken ( Ans, randve getKey) ve 59 farklı pencere değişkenleri (tanımlanması garanti edilenlerin tümü).

Zımni çarpma, bunu herhangi bir sırada aldığımızda sonucun 0 olacağını garanti eder. Bu yeni bir hesap makinesinde çalışıyorsa, tüm değişkenler 0 olur; olmasa bile, getKey0 olur, çünkü program bir değer döndürmeden önce bir tuşa basmak için zaman yoktur.

Bir TI-84 Plus, ya da daha yüksek, biz belirteçleri ekleyerek 6 daha fazla puan alabilirsiniz getDate, getTime, startTmr, getDtFmt, getTmFmt, isClockOn. Sonuç artık hep olacak {0 0 0}çünkü getDateve getTimegeri dönüş uzunluğu 3 listeleri ve unsurları üzerinde zımni çarpma dağıtır.

Bunları kullanmak için tüm olası belirteçler olduğunu düşünüyorum: herhangi bir gerçek komut önek, infix veya postfix (yani programın başında veya sonunda çalışmayacak anlamına gelir) ve diğer değişkenler tanımsız olabilir (ve ne zaman hataya neden olabilir Kullanılmış).


Bu akıllıca. Özellikle etkileyici değil haha, ama gerçekten akıllı! +1
Albert Renshaw

3

(rakip olmayan) Brainf-ck, 63 bayt

Bunun hile olup olmadığını bilmiyorum, ama ...

.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789

Nokta geçerli karakteri (0x00) yazdırır ve kalan karakterler hiçbir şey yapmaz. Bu teknik olarak sonsuza kadar genişletilebilir, bu yüzden bunun hile olarak kabul edilip edilmediğini lütfen bize bildirin.


Nil çıktı olduğunu düşünürdüm
Albert Renshaw

Ah, o zaman cevabımı silmeli mıyım yoksa rakip değil mi?
brianush1

1
97 yazılabilir karakter vardır, bunlardan 7 tanesi kullanılamaz (8-1), bu yüzden 90 diyorum.
Bijan

@ brianush1 başkalarının görebilmesi için rakipsiz olarak bırakabilirsiniz. Çıktıyı en az 1 bayt olması gerektiğini açıklamak için soruyu biraz daha düzenleyeceğim
Albert Renshaw

15
@AlbertRenshaw (tüm bu yorumlar için özür dileriz) Çıktı 1 bayt olması gerekiyorsa, NULL karakteri bir bayt olduğu için
sayılmalıdır

3

Haskell, 3 puan

+ 1

Bu kod ne kadar yeniden düzenlenmiş olursa olsun, her zaman girişi artıran işlevi döndürür. Repl kullanım örnekleri:

>(+ 1) 1
2
>(1+ ) 1  
2
>( +1) 1
2

2

® å ı ¥ ® Ï Ø ¿ , 128,234 (?) Puan

@ DestructibleLemon yardımı ile 128.234'e vardım. Bu program o, Ove hariç tüm Unicode karakterlerini (128,237) kullanır ł. İşin tuhafı, bunlardan ikisi çıktı komutları.

Elbette, hiçbir dil tüm bu karakterleri kullanamaz, değil mi? Bu dil, tanımadığı komutları görmezden geliyor. Sorun çözüldü.

Bu dil varsayılan olarak aşağıdakileri verir:

===== OUTPUT =====



==================

sıfır olmayan, boş olmayan, boş olmayan ve hatasız olan.

Not: Bu, yazılı olmayan bir kuralı ihlal ederse, yorumlarda bana haber verin, bunu değiştireceğim. Puanımı biliyorsanız (buna izin verildiğini varsayarak), yorumlarda da yayınlayın.


Hangi karakter kümesini kullanıyor? utf 8? utf-16? Tüm unicode kullanıyor mu?
Yıkılabilir Limon

@DestructibleLemon Github sayfasına baktığımızda, kodlama için "CP-1252" kullanılıyor gibi görünüyor.
brianush1

@DestructibleLemon Komutların tümü CP-1252'de (Windows-1252) bulunur, ancak herhangi bir Unicode karakterini geçerli sözdizimi olarak kabul eder
caird coinheringaahing

Görünüşe göre 128,237 unicode karakter var, bu yüzden 128,234 olur musunuz? en.wikipedia.org/wiki/Unicode#cite_note-24
Yıkıcı Limon

Görünüşe göre diğer cevaplara göre 1.112.064 unicode var, bu yüzden artık gerçekten emin değilim
Yıkıcı Limon

1

J, 3 bayt

 1

Karakter 1, boşluk ve satırsonu her zaman 1 yazdırır.



1

Noktalar , 1.114.111 karakter (unicode kullanılıyorsa).

<87 dots here> Every Unicode character except NUL and . here

Açıklama:

1                                           leading binary number
1010                                        010 increments the value under the pointer
1010111                                     111 prints out chr(1)

Sonuç olarak 1010111, ondalık sayıya dönüştürülen ikili dize 87'dir, bu yüzden 87 noktaya ihtiyacımız var.

Diğer her karakter bir yorumdur, bu nedenle NUL dışındaki her karakteri kullanırız, çünkü Python3 dosyayı okumayı durdurur ve bir nokta, çünkü noktalar yorum değildir.


0

Prelude , 1,112,051 skor

(Yalnızca yazdırılabilir ASCII dikkate alındığında, [\t\n -~]puan 84'tür . Tüm Unicode kod noktalarını ele alırsak , puan 1.112.051'dir .)

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

(sonra tüm karakterleri arkasına ekleyin [\u{7f}-\u{10ffff}].)

Her zaman yazdırın 0.


Prelude, yığının sonsuz sayıda 0s ile önceden doldurulduğu paralel yığın tabanlı bir dildir.

  • +: İki değeri (her zaman 0) açın, ekleyin (0) ve yığmak için itin.
  • -: İki değeri (her zaman 0) açın, çıkarın (0) ve istiflemek için itin.
  • #: Bir değer açın ve atın.
  • !: Bir değeri açıp sayı olarak verir (her zaman 0) (spec "karakter" der, yorumlayıcı "sayı" der; her iki durumda da bir bayt yazdırılır)
  • 0: 0 iter.
  • ^, v, V: Onlar her zaman 0 itmek böylece iter önceki / sonraki paralel programları ( "sesleri"), ancak tüm "sesler" yığınlarının üst değeri, 0 ile doldurulur.
  • diğer karakterler: no-op.

Bu yüzden kaçınmamız gereken sadece 13 karakter var:

  • (, ): Eşleştirilmemiş parantez hataya neden olacak
  • 1- 9: Yalnızca 0 çıktısını almak istiyoruz.
  • ?: Hiçbir şey girmek istemiyoruz.
  • *: Yalnız oluşan bir satırdan önce ve sonra kod için çok karmaşık bir tutarlılık kontrolüne neden olur *. Bu yüzden yeni satırı kaldırmamız veya *. Referans uygulaması, .readline()"yeni bir satırın" \rveya "anlamına gelebileceği Python 2'leri kullanır \n. Yani sadece kaldırmak daha iyidir *.

0

Deadfish , skor 86

o.ABCDEFGHIJKLMNOPQRSTUVWXYZabcefghjklmnpqrtuvwxyz?!|[]_-();'"*&^$#@!1234567890+=<>,/\:

Eğer bu yasa dışı ise,

o

(puan 1)

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.