Patronunuz için İngilizce Derleme


16

Patronunuz kısa süre önce İngilizce olarak adlandırılan bu ilginç programlama dilini öğrendi . Bu "devrimci" fikri vardı, üretim kodlarını iki katına çıkarmak için sizinle kod yazmak istiyor! Teknoloji meraklısı olmadığı için kod yazabilmesi için bir derleyici yazmanızı istiyor!

Şimdi, sen kötü bir tembel programcısın ve açıkçası bu gülünç derecede karmaşık dili derlemek için bir program yazmayacaksın. Bunun yerine, patronunuzun kodunda her zaman bir hata olduğundan emin olursunuz, böylece gerçek derlemeye asla ulaşmaz ve kodlama yerine dilbilgisi hatalarını düzeltmeye yapışır.

Zorluk terminalden çalıştırılabilen ve bir dosya yolunu argüman olarak kabul eden bir program yazmaktır. Programın yapması gerekenler:

  1. bir yazım hatası ekleyerek dosya girişini değiştirin.
  2. Tanıttığınız yazım hatasıyla karşılaştığınız için derleme başarısız gibi davranın.
  3. Programı aynı dosyanın kopyalarında çalıştırmak, aynı yazım hatasını arka arkaya iki kez tanıtmamalıdır.

Bu meydan okumayı göstermek için, programınızı bu dosyada çalıştırın:

Take an array as input.
Sort the array.
Output the array.

çizgisinde bir şey çıkarmalı

Error on line 1:
'Take an arqay as input.'
         ^
arqay is not a valid identifier.

ve programa derlemesini söylediğiniz dosya şimdi şöyle görünmelidir:

Take an arqay as input.
Sort the array.
Output the array.

Programın özellikleri hakkında daha fazla bilgi:

Programınızın, patronunuzun farklı bir rastgele karakter için girdiği programdaki herhangi bir karakteri değiştirmenin dilbilgisi hatasına neden olacağını varsayar. Programınız, patron kodunuzda hatalar oluşturmak için alfabetik olmayan karakterler kullanmamalıdır. Patronunuz asla bir sayı veya simge kullanmaz ve bir şeyin ayakta olduğunu öğrenir. Programınız sadece patronunuzun programındaki kelimelere hatalar getirmelidir. Cümlelerdeki boşlukları veya noktalama işaretlerini değiştirmeyin. Programınız, patronunuzun derlemeye çalıştığı programın durumunu değiştirmemelidir, yani hatalar arQaygeçersizdir. Bu engeller hatalar gibi takeyerine Takeya oluyor Arrayyerine array. Programınız önce hatanın hangi satırda olduğunu belirterek hatayı çıkarmalıdır:

Error on line <insert line number here>:

Ardından 'simgenin içindeki hatayı içeren satırı yazdırmalıdır . Bir sonraki satıra , hatanın ^olduğu sözcüğün altına bir sembol yerleştirmeli ve son olarak hatayı açıklayan bir metne sahip olmalıdır (bu bölüm size kalmış, bir hatayı açıkladığı sürece orada ne istediğinizi söyleyebilirsiniz).

Girdi dosyasının var olduğunu ve boş olmadığını varsayabilirsiniz. Ayrıca, eklemeden önce giriş dosyasının dilbilgisi hatası olmadığını varsayabilirsiniz.

Bonuslar:

Kodunuzun verdiği hatalar tamamen rasgele değilse, bu sorudaki gibi yazım hatası tabanlıysa -60 bayt .

En az 5 farklı hata mesajı için -60 bayt, rasgele dönüşümlü.

Programınız patronunuza bazı motivasyonel mesajlar göndermek için 100'den az şansa sahipse -60 bayt.

EDIT: Mesajların bayt sayısı puanınıza dahil değildir. (Bu iyi fikir için Martin Büttner'a teşekkürler)

Bu kod golf, en kısa bayt sayısı kazanır. Lütfen hata mesajı içeriğini golf etmeyin, patronunuz hata mesajlarını anlayamazsa mutlu olmayacak ve sizden bunları düzeltmenizi isteyecektir.


Harf içermeyen satırlarla başa çıkmak zorunda mıyım?
14'te

Yalnızca alfabe karakterlerinde bir yazım hatası oluşturabilir ve giriş dosyasının varolan geçerli, boş olmayan bir dosya olduğunu varsayabilirsiniz.
Kasım'da rodolphito

7
Hata mesajlarını bize bırakma hayranı değilim. "Hata mesajını golf tutmasak bile", ikinci bonusa gidecek olursak, bir avuç bayt, hatta iki düzine bile bir fark yaratabilirler. Bu çok fazla olabilir. Adil bir golf yarışması için 5 hata mesajı ve bir demotivational mesaj belirtmelisiniz, ya da dize uzunluklarını bayt sayısından çıkaralım.
Martin Ender

Bahşiş için teşekkürler, önceden tanımlanmış mesajlara sahip olmayı düşündüm, ama bununla biraz daha özgürlük vermek istedim. Mesaj bayt sayılarının skordan çıkarılması harika bir fikirdir.
rodolphito

Yanıtlar:


3

TI-BASIC, 77-34 (hata metni) = 43

TI-83/84 hesap makinesinde yapmak istediği takdirde;)

İşlevler için standart olarak Ans, çıktıyı döndürüp görüntüleyebilmesi için dosya dizgisinin içinde olması gerekir .

Ans->Str1:If 1=inString(Ans,"A
Then:"B
Else:"A
End:Disp "ERROR ON LINE 1","'"+Ans+sub(Str1,2,-1+length(Str1))+"'"," ^ INVALID

Birçok simgenin bir bayt olduğunu unutmayın.


Bu kodu nerede çalıştırabilirim?
rodolphito

TI-83/84 hesap makinesi veya bir emülatör.
Timtech

inString, Ans, sub, Else, Then, End, Disp , Str1... o hesap için tüm 1 bayt değil misin?
Ismael Miguel

4
NE????????????????? Bu, 8 bitin 1 bayt olmadığını söylemek gibidir !!!!!!!!! İkili form kullanarak montajda bir kod sunarsam, baytları 5+ baytlık 1 makro olarak da sayarlar mı? Bu çok aptalca! (güçlü kelimeler üzgünüm, ama gerçekten aptal!) Bu kodunuzu temsil etmez. Yani Anstemsil ettiği bayt ile aynı değil Ans. Biri A*n*shesap makinesinin istediği sonucu üretir, diğeri son aritmetik ifadenin değerini döndürür. Bunu göz önünde bulundurarak, GERÇEK sayımı kabul etmemenin kodu yanlış bir şekilde temsil ettiğini düşünüyorum .
Ismael Miguel

5
Dosyayı rasgele değiştiriyor gibi görünmüyor, her zaman 1. satırda bir değişiklik görüntülüyor ve ilk harfini A ise B olarak, yoksa A olarak değiştiriyor gibi görünüyor.
rodolphito
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.