Kendini Puanlama Programı


15

Kendi puanınızı çıkarmak için bir meydan okuma var , ama orada tüm cevaplar sadece çıktı sabit kod ve bu sıkıcı 1 gibi görünüyor . Yani yeni bir meydan okuma yapalım. Programınızın bayt cinsinden kendi uzunluğunu ve ardından dize ile çıktı alması gerekir " bytes", ancak herhangi bir bayt kaldırarak boyutunu küçültürsek sabit kodlu çözümlerin önlenmesi için, yeni programın yine de yeni bayt sayısını çıkarması gerekir " bytes". Çıktının büyük / küçük harfe duyarlı olması gerekmez. Ayrıca bir satırsonu çıktısı almayı da seçebilirsiniz.

Yanıtlarınız daha az bayt daha iyi olacak şekilde bayt cinsinden puanlanacaktır.


1: Aslında bazı cevapları seviyorum.


Belki meydan okuma adını "kendi kendine puanlama değiştirilebilir program" veya benzer bir şey olarak değiştirebilirsiniz.
dylnan

Uygun diller kullanabilir mi yoksa yalnızca yorumlanabilir misiniz?
Logern

@Logern İkisini de kullanabilirsiniz.
Rock Garf Hunter Post

2
Ahh. Bir Hexagony çözümü yapmak için yarım saat harcadım , ancak test etmeye gittiğimde, baytın çıkarılması altıgenin küçülmesini sağladı ! :(
Jo King

1
@WW Demek istediğim " 1 bytesteknik olarak yanlış dilbilgisi, ancak dillerin <= 2 baytta " bayt "dizesini çıkarmak için yerleşik olmadığını varsayarsak, program 3 bayttan daha uzun olur, bu nedenle önemli değil "- zaten önemli değil.
user202729

Yanıtlar:


16

Backhand , 40 36 29 bayt

vv""sseettyybb  ""jjHHOO]

Çevrimiçi deneyin! Doğrulama!

Şüphe duyduğunuzda, her şeyi ikiye katlayın. Bu, Backhand'in yedekliliği uygulamak için her seferinde birden fazla adım taşıma yeteneğini kullanır. Yazdırılamazların hepsinin 28 bayt değeri vardır.

Açıklama:

Işınlanmamış program:

v       Reduce step count to 2
  "    Start string literal
    s e t y b        Push the " bytes" part of the output
                  " Push 28 twice and end the string literal
                       j    Jump to the 28th position (0 indexed) 
                             ]   Increment the 28 to 29
                           O     Print the 29
                         H       Halt and output the entire stack

Işınlanmış program:

Herhangi bir karakter silinirse, bundan sonraki her karakter aşağı kaydırılır.

vv"sseettyybb
v " s e t y b     The same instructions are still executed

Ancak, yerine atlamak ]yerine, programın sonunu yansıtır ve Obunun yerine iner .

                             v  28th character (0 indexed)
vv""sseettyybb       ""jjHHOO]
v""sseettyybb       ""jjHHOO]OOHHjj"".....
                             ^ 28th character, reflecting off the end of the code

3

Runik Efsunlar , 47 bayt

>>yyLL     @"setyb 64"/
"47 bytes"@"setyb 64"L\

Çevrimiçi deneyin!

Hangi Geiger Sayaç cevabımın bir limanı , ama farklı çıktı ile (ki kendisi, bir Klein cevabının bir limanı).

>>yyLLRunic'in (en az) bir IP üretmesi, iki IPS'yi birleştirmesi ve sola yansıtması gerekir, böylece tüm varyasyonlar tek bir sola hareket eden IP'ye neden olur. Tarafından değiştirilebilir, yy<<ancak herhangi bir bayt kaydetmez.

Sağdaki reflektörler IP'yi sol alt dizeye zorlar, böylece sağ üstteki birinin çıkarılması IP'nin sağ üst dizeye girmesine izin verir. Üst çizgi boyunca başka bir yerde bir baytın çıkarılması, üst reflektörü L'nin üzerine oturacak şekilde ayarlar (programın sağ alt kısma girmesine izin verir). Alttaki bir baytın kaldırılması, reflektörü ayarlar (veya kaldırır), böylece son karakter, IP'nin sağ üst reflektörün her iki tarafından ve sağ üst dizeye sıçramasına izin veren bir boşlukla örtülü olarak doldurulur.

Ancak fazla boşluklar hayal kırıklığı yaratıyor. Ancak bunları azaltmaya yönelik tüm girişimler, daha büyük programlara, aynı boyutta programlara veya% 100 radyasyon geçirmez olmayan programlarla sonuçlanmıştır. Hem Klein hem de> <> cevapları Runik'te bulunmayan özellikleri kullanır.


2

> <> , 43 39 bayt

||vn-{"' bytes"-10/
 o>o<"38 bytes"[0/0

Çevrimiçi deneyin! Doğrulama!

Un-ışınlanmış programda, biz eklemek 0için '(39) ve ışınlanmış programda biz 0 atlayıp eklemek -1yerine ona. Bir şey üst satırdan kaldırılırsa, bunun yerine alt satıra geçer ve çıktı alırız 38 bytes.


2

Altıgen , 71 bayt

//.........||.>e;s;@..\;t;y;b<>}F"+!P0;/|/F!P0$@;<...t;ye;bs/.........)

Çevrimiçi deneyin! Doğrulama!

5 boyutlu bir altıgen içine almak için çok uzun zaman geçirdim, ama onun yerine bir subpar boyutu 6 yerleşmek zorunda kaldı :(.

Expanded:

      / / . . . .
     . . . . . | |
    . > e ; s ; @ .
   . \ ; t ; y ; b <
  > } F " + ! P 0 ; /
 | / F ! P 0 $ @ ; < .
  . . t ; y e ; b s /
   . . . . . . . . .
    ) . . . . . . .
     . . . . . . .
      . . . . . .

Başlangıçta bunu )bir satır daha düşük olarak yaptım , ancak tam olarak 5 ve 6 numaralı altıgenler arasındaki ayrımın tam olarak nerede olduğu ortaya çıkıyor. Bu, bir bayt çıkarıldığında, boyutun tümü aşağı doğru kayar ve yolları bozar. Kesinlikle bir boyut 5 mümkün olduğundan eminim.


Bunu doğru anlıyorsam, )bir satırı aşağıya koyamaz ve sonra 6 numara altıgen olacak şekilde bir op-op koyamazsınız?
EdgyNerd

@EdgyNerd Programı etkilemeden kaldırılabilecek bir işlem yapmazsanız
Jo King

2

Klein 000, 41 bayt

<<@"setyb "$"4"+"0"/
..@"setyb 04"(....<1

Çevrimiçi deneyin! JoKing'in Doğrulayıcısı

Bu cevabın JoKing'in> <> cevabına benzediğini düşünüyorum , ama okumuyorum> <> bu yüzden emin olamıyorum.

Burada 4 farklı bayt temizleme türü vardır

  1. Bir bayt önceki ilk satırdan kaldırılır /. Bu durumda, eğik çizgi, bir satır sola etkin bir şekilde hareket ettirilir, alt satıra saptırılır ve kodun değiştirilmiş kısmının yürütülmesini önlenir. Bu kod çalıştırmasına bizi neden ("40 bytes"@olan çıkışlar, 40 bytes.

  2. Önce /ilk satır çıkartılır. Bu durumda "0"+"4"$" bytes"@, kıvrımlı bir yol veya baskı olan kodu çalıştırıyoruz 40 bytes.

  3. Yeni satır kaldırıldı. Bu, ikinci satırın sonundan başlamamızı sağlar ve sonuçta elde edilen kod (noops kaldırılmış olarak), 1("40 bytes"@sadece yazdırır 40 bytes.

  4. Son satırdaki bir bayt kaldırılır. Bu 1, ilk satırın sonundaki sola hareket ettirilmesine neden olur ve sivri saptırıldığında yığına eklenmesini önler /. Kod "0"+bu nedenle iter 0yerine 1kodun kalan döner 0INTO 40 bytes.

Klein 001,41 bayt

\("40 bytes"@......1
..@"setyb "$"4"+"0"/

Çevrimiçi deneyin! JoKing'in Doğrulayıcısı

İşte farklı bir topoloji kullanan bir cevap. Aynı boyutta ama iyileştirme için yer olduğunu düşünüyorum.


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.