Quining, ancak Windows dosyalarıyla!


9

Çalıştırıldığında kendisini geçerli dizinde, kendisi adında bir kaynak dosyada oluşturan bir sorgu yazın. Bu konuda Windows'u kullanacağız, bu nedenle dosya adı (ve dolayısıyla quine) aşağıdaki sınırlamalara sahip olmalıdır:

  • Bu karakterlerin hiçbiri \ / : ? * < > |
  • 211 255 karakterden az

Sınırlamalar ve varsayımlar

  • Kodunuz tam bir program olmalıdır (sonuçta çalıştırılacaktır).

  • Kaynak dosyadan kopya yok.

  • Quine'nizin adı olarak başka bir dosya olmadığını varsayabilirsiniz ( Quine (1) üreteceği gibi ).

  • Hatalara izin verilir (kaynak koduna girmedikleri sürece

Bu , bayt cinsinden en kısa kod kazanır!

Düzenle

Belki de net değildim, quine adını taşıyan dosya aslında quine içermelidir. Benim hatam.


Programdaki ASCII olmayan karakterler üzerindeki sınırlamalar nelerdir? (Windows'da, bu muhtemelen Windows'un hangi dil sürümünün yüklü olduğuna bağlı olabilir; kesin kuralları ve zaman içinde değişip değişmediklerini

Neden 211 bayttan az? Bu bir tür keyfi bir kısıtlama ...
mbomb007

@ mbomb007 Max dosya adı boyutu, sanırım.
Addison Crump


@ mbomb007 Yazım hatası, belki?
Addison Crump

Yanıtlar:


6

Vitsy, 10 27 bayt

'rddd++&"rdd8++a[v}v1-D);].

Eğer :izin verildi, ben 11 bayt bu kısaltabilir. :(

Açıklama:

'rddd++&"rdd8++a[v}v1-D);].
'                           Capture all instructions as a string until encountering
                              ' again, looping if necessary.
 r                          Reverse the current stack (output is top-down).
  ddd++                     Push char literal ' to the stack.
       &                    Push a new stack to the stack stack.
        "                   Same as ', but " specific.
         r                  Reverse the current stack.
          dd8++             Push char literal " to the stack.
               a            Push 10 to the stack.
                [        ]  Loop forever.
                 v          Capture the top value as a variable.
                  }         Take the bottom item of the stack and put it on the top.
                   v        Dump the variable to the stack.
                    1-      Subtract 1.
                      D     Duplicate the top item.
                       );   Pop n; if n is 0, exit the loop.
               a[v v1-D);]  This is a makeshift for loop with 10 iterations.
                          . Pop the top stack as n, and the second stack as o. 
                              Write a file called "n" with the contents of "o".

İki yığın sonunda aynı olacaktır. Bazı Java sürümlerinde, bu FileNotFoundException, FileInputStreamsınıfın farklı uygulamaları nedeniyle ortaya çıkabilir .

Düzenlemeden önce önceki yanıt:

&'rddd++}.

Açıklama:

&           Push a new stack to the stack stack.
 'rddd++    Modified standard quine.
        }   Move the ' to the right place.
         .  Pop the top stack as n, and the second stack as o. Write a file called
                 "n" with the contents of "o". (Quine name, no content)

Ben de olabilir çünkü, burada yığınlar içinde oluşan adımların bir diyagramı (her yığın tarafından temsil edilir []):

Initial state: [[]]

&              [[], []]
                  Push a new stack to the stack stack.

 '             [[], ["r", "d", "d", "d", "+", "+", "}", ".", "&"]]
                  This stack state occurs because ' will loop around the line
                    until finding the next '.

  r            [[], ["&", ".", "}", "+", "+", "d", "d", "d", "r"]]
                  Reverses the top (last) stack.

   ddd         [[], ["&", ".", "}", "+", "+", "d", "d", "d", "r", 13, 13, 13]
                  Push thirteen thrice.

      ++       [[], ["&", ".", "}", "+", "+", "d", "d", "d", "r", "'"]
                  Because char ' is 39 = 13 + 13 + 13.

        }      [[], [".", "}", "+", "+", "d", "d", "d", "r", "'", "&"]]
                  Takes the bottom item, then puts it on the top.

         .     []
                  Writes a file with content from the second-to-top stack and the
                    name as the concatenation of all elements in the top stack,
                    with top member priority (backwards from my representation).

Aslında bunun nasıl çalıştığından emin değilim; küçük değişiklikler bunun kırılmasına neden olur. Örneğin, &diğer çeşitli konumlara yerleştirmek de aynı şekilde çalışmalıdır, ancak nereye koyduğunuza bağlı olarak ClassCastExceptions, IOExceptions ve ArrayOutOfBoundsExceptions'ye neden olur . Bazı hata düzeltmeleri yapmam gerekebilir.


1
+1 içinPush a new stack to the stack stack.
Pavel

1
Bir yığın yığını yığınına yeni bir yığın yığını itebilirseniz benden +1, aksi takdirde unutun! ... +1 şaka yapıyorum, ben de güldüm.
Sihirli Ahtapot Urn

2
@carusocomputing Yapabileceğimi söylersem ne olur o? ;)
Addison Crump

İç çekme ...
Sihirli Ahtapot Urn

1
Uhm ... Oluşturulan dosyanın kodu içermesi gerektiğini düşünüyorum (yani içeriği dosya adına eşit olmalıdır)
Leo

5

Node.js, 56 52 bayt

function f(){require('fs').writeFile(f+='f()',f)}f()

Bu uyarıyı yazdırır

Kullanımdan Kaldırma Uyarısı: Geri arama olmadan zamanuyumsuz bir işlevin çağrılması kaldırılmıştır.

Tamamen yeşili istiyorsanız, 4 baytın değişmesi writeFilegerekir writeFileSync.


2

Lua, 96 bayt.

s="s=%qs=string.format(s,s)f=io.open(s)f.write(f,s)"s=string.format(s,s)f=io.open(s)f.write(f,s)

Bunu telefonuma yazdım, çalışmalı, ama bir bilgisayara geldiğimde test edeceğim.


12
Ben en azından size değişim gerekir düşünüyorum sting.formatiçin string.formatiki kez basın.
Peter Taylor

@PeterTaylor Sting'i sevmiyorsun, değil mi?
KeyWeeUsr

5
@KeyWeeUsr, kişisel olarak ona karşı hiçbir şeyim yok ve aslında yetiştirilmem için ödeme yapmasına yardımcı oldu, ancak Lua standart kütüphanesinin muhtemelen özellikle Polis hayranları için değil, benzer API'lara aşina olan kişiler tarafından genel kullanılabilirlik için tasarlandığını düşünüyorum.
Peter Taylor

1

C, 134 bayt

s[255];fd;char p[255]="s[255];fd;char p[255]=%c%s%c;main(){sprintf(s,p,34,p,34);creat(s,0);}";main(){sprintf(s,p,34,p,34);creat(s,0);}

Buradaki kaynak *, kurallara göre izin verilmiş gibi görünmüyor.
Değer Mürekkebi

@ValueInk Düzeltildi. Bunu işaret ettiğiniz için teşekkürler!
MD XF
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.