ROT-47… 'yi ROT-47’de uygulayın


23

Zorluk: ROT-47'yi hem kendisi hem de ROT-47 versiyonu olarak çalışan kodda uygulayın.

puanlama:

Puanınız, kullanılan her iki sürümün toplam bayt sayısına (tüm karakterlere) bölünmesiyle programın her iki sürümünün toplamına uygun bayt olarak kullanılan ROT-47'nin yüzdesi olarak hesaplanır .

Bir kullanılmış, ROT-47 uygun bayt değil ROT-47 şifre ile dönüştürülebilir herhangi bir karakter bir yorumun parçası veya derleyici / yorumlayıcı tarafından görmezden geldi. Örneğin, bir beyin fırtınası programındaki herhangi bir karakter, +-<>[],.kullanılan bir bayt sayılmaz ve bir C programındaki herhangi bir karakterin, //veya sonrasında veya içinde /* */bulunan, kullanılan bir bayt olarak kabul edilmez. APL'deki tüm özel semboller, bir Whitespace programındaki tüm karakterlerin (üzgünüm) olduğu gibi kullanılmaz.

En fazla oy alan programla bağlar kopacak. Hala bir kravat varsa, o zaman en kısa program kazanır.

Örnek puanlama:

C: 62/64 =% 96,875

Bu programda bir boşluk olduğuna dikkat edin. Açıkçası, bu program geçerli bir giriş değil çünkü derlemiyor, ama puanlamanın nasıl çalıştığını göstermek istedim.

main(){printf("Hello World!");}

4
Hangi dili >2:?WXLAC:?E7WQw6==@ (@C=5PQXjNderliyor?
Hosch250,

@ hosch250 lol, bu sadece aptal bir örnekti
durron597

1
"Uygun ROT-47", "ASCII 33 - 126 aralığında" mı demek istiyorsun? Yani, eğer C programımın boşlukları, yeni satırları veya sekmeleri varsa, bunlar ROT-47 olarak sayılabilir mi? Bir programın birçok dilde çalışması için bazı boşlukların zorunlu olması gerçeği ne - programın onlar olmadan kırılmasına rağmen R47'ye uygun olmadıkları için kullanılanları saymazlar mı?
Jonathan Van Matre

@JonathanVanMatre Boşluklar veya yeni satırlar veya sekmeler sayılmaz, çünkü puanlamanın başka türlü karmaşık olamayacağını hissediyorum; ve Whitespace'in% 100 puan almasını istemiyorum, çünkü bu amaçtan vazgeçer.
durron597

2
Çılgın puanlama kurallarıma itiraz eden herkese, lütfen burada yorum / cevap verin: meta.codegolf.stackexchange.com/questions/1167/…
durron597

Yanıtlar:


28

Yakut,% 100 (74 karakter)

STDIN'de giriş, STDOUT'da çıkış.

Vj=s=gets;puts(s.tr'!-~','P-~!-O');Vj;'lDl86EDjAFEDWD]ECVP\OV[V!\OP\~VXj;'

İkinci satır, ilk satır ROT-47’dir. Bu nedenle, tüm program ROT-47 yaparken, şöyle olur:

';lDl86EDjAFEDWD]ECVP\OV[V!\OP\~VXj';jV=s=gets;puts(s.tr'!-~','P-~!-O');jV

Buradaki stratejim şu gerçeğe dayanıyor:

  • Volduğu 'ROT-47'd

  • jolduğu ;ROT-47'd

  • Bu nedenle, aslında bir hayır-op olan , Vj=...Vj;dönüşür';l...';

    • Artık ROT-47'deyken normal bir şey yapan ve çalışmayan herhangi bir rasgele kod oluşturabilirsiniz. Bunun nedeni Vj=...Vj;, yapabileceğiniz herhangi bir kodun çalışmasını destekleyebilmesidir Vj=0;{INSERT ANY CODE};Vj;ve '...';ROT-47'deyse olur. Sadece Vbu kodu kullanmamaya dikkat edin , çünkü bu onu kıracak.
  • Benzer mantık ikinci yarısının üretimi (ters kullanılabilir jVyerine Vj)


tamam haklısın bunu asla belirtmedim ve geçmişe dönük olarak yapmam. Ancak, boşluklar hala uygun karakter olarak sayılmaz; bu 136/140 olmalı bence.
durron597

1
@ durron597 Sabit; daha fazla boşluk yok.
Doorknob

Dang yakut bir noktalı virgül ile sona ermesini gerektirmez :)
durron597

16

C -% 54,6

Y;BW;XL;jNj;AW(){XL^Y;};main(int i,char**v){char*x=v[1];while(*x){if(*x>32&&*x<128)*x=(*x+15)%94+32;putchar(*x++);}}//Y^Nj>2:?W:?E :[492CYYGXL492CYIlG,`.jH9:=6WYIXL:7WYImbaUUYIk`agXYIlWYIZ`dXThcZbajAFE492CWYIZZXjNN

ROT-47 çevrildiğinde,

*jq(j){j;};jp(WXL){/*jNj>2:?W:?E :[492CYYGXL492CYIlG,`.jH9:=6WYIXL:7WYImbaUUYIk`agXYIlWYIZ`dXThcZbajAFE492CWYIZZXjNN^^*/};main(int i,char**v){char*x=v[1];while(*x){if(*x>32&&*x<128)*x=(*x+15)%94+32;putchar(*x++);}}

Her iki program da derlenir ve ROT-47-ilk argümanı çevirir:

$ ./a "hello world"
96==@ H@C=5

Bunun ideone üzerinde çalışmasında sorun yaşadım. Yine de% 50'nin üzerinde bir puan görmekten çok etkilendim!
durron597

@ durron597 Girdiyi argümanlarla kabul ettiği için ideone üzerinde çalışmaz, stdin
mniip

1
Yalnızca kendi kendine çeviri için değil, bağımsız değişkenler için ROT-47'yi uygulamak için puan kazanın. Bu özellik içinde olmalıydı.
Jonathan Van Matre

10

GolfScript, 120/120 bayt =% 100

{:&&32>&&+254<*{7+7+94%33+}*}%LiUUbamUUZadckYLfZfZhcTbbZNYNT

veya ROT-47’de:

LiUUbamUUZadckYLfZfZhcTbbZNYNT{:&&32>&&+254<*{7+7+94%33+}*}%

Yorum veya dizgi suistimali yok. Undefined komutu LiUUbamUUZadckYLfZfZhcTbbZNYNT(ROT-47'deki kodun geri kalanına eşittir) no-op'tur, fakat yine de tercüman tarafından yürütülür, bu yüzden kullanılan sayıldığına inanıyorum.

Bu aslında GolfScript'te oldukça kolay bir zorluktu. Asıl zorluk, 1ROT-47 tarafından GolfScript komutunda eşlenen rakamdan kaçınmaktı `. Komutlar ., -, ,, \, [, /, ]ve ^ayrıca kaçınılması zorunda kaldı, ama görev de dizi binayı gerekli beri bu, bu durumda oldukça kolaydı.

Bonus:

Burada , iki programın birbirinin ROT-47 dönüşümleri olduğu bir GolfScript dönemi-2 quine (yani, ilk programı tekrar basan ikinci bir programı basan bir program) bulacaksınız :

{`'0$~'+.{7+7+94%33+}%@!{0$@@;}*}0$~L1V_SOVZ]LfZfZhcTbbZNToPL_SoojNYN_SO

Bu program kendi ROT-47 kodlu çıkışını verir ve başka bir GolfScript programı verir:

L1V_SOVZ]LfZfZhcTbbZNToPL_SoojNYN_SO{`'0$~'+.{7+7+94%33+}%@!{0$@@;}*}0$~

sırayla, yine ROT-47 kodlu çıktılar, bir önceki programı tekrar verir. Böylece, bu program aynı zamanda dönen bir yüzgeçtir .


Payda yanılıyor: "her iki sürümün de toplam bayt sayısına (tüm karakterlere) bölünmesi". 60/120 =% 50
Jonathan Van Matre

@JonathanVanMatre: Her iki versiyondaki tüm baytlar kullanılır (= tercüman tarafından çalıştırılır), bu 120/120 = yine de% 100 olacaktır.
Ilmari Karonen

Skordan emin değilim çünkü golf senaryosunu bilmiyorum. Mesela, Abeyin fırtınasında payda sayılacağını, ancak paydayı saymayacağını biliyorum . Bu aynı mı yoksa farklı mı?
durron597

@ durron597: GolfScript'te LiUUbamUUZadckYLfZfZhcTbbZNYNTgeçerli bir tanımlayıcıdır ve komut olarak yürütülecektir. Bununla birlikte, bu yerleşik komutlardan biri değildir ve program tarafından bir anlamı yoktur, bu nedenle varsayılan olarak hiçbir şey yapmaz.
Ilmari Karonen

6

piton,% 96,1 (?)

Tanımınıza göre, dizgiler kullanılan kod olarak sayılıyor mu?

V=input();print("".join([chr(33+(ord(V[i])+14)%94)for i in range(len(V))]));V
'l:?AFEWXjAC:?EWQQ];@:?W,49CWbbZW@C5WD,:.XZ`cXThcX7@C : :? C2?86W=6?WDXX.XXj'

1
Geçmişe
bakmamalıydı
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.