Kodunuzun tersine girerseniz, kodunuzun daha hızlı çalışabileceğini duydum, böylece derleyici "dalların" en altından bir ağaç tasarım deseni gibi işleyebilir. Bu yardımcı olur çünkü yerçekimi, kodunuzun derlenmesi için gereken zamanı hızlandırır ve veri yapısı verimliliği artar. Java komut dosyasında bir örnek:
function fib(n) {
var a = 1, b = 1;
while (--n > 0) {
var tmp = a;
a = b;
b += tmp;
if (a === Infinity) {
return "Error!";
}
}
return a;
}
Ancak bazı nedenlerden dolayı Notepad'in bunu otomatik olarak yapacak bir ayarı yoktur, bu yüzden benim için yapacak bir programa ihtiyacım var.
Açıklama
Gönderimler girdi olarak bir kod pasajı almalı, girintiyi tersine çevirmeli ve ortaya çıkan kodu vermelidir.
Bu, aşağıdaki prosedürle yapılır:
Kodu satırlara bölün. Her satır sıfır veya daha fazla boşlukla başlayacaktır (sekme olmayacak).
Koddaki tüm benzersiz girinti seviyelerini bulun. Örneğin, yukarıdaki örnek için, bu
0 4 8 12
Bu girinti seviyeleri listesinin sırasını ters çevirin ve ters çevrilmiş listeyi orijinal listeyle eşleyin. Bunu kelimelerle açıklamak zor, ama örneğin, benziyor
0 — 12 4 — 8 8 — 4 12 — 0
Bu eşlemeyi orijinal koda uygulayın. Örnekte, 0 boşluk girintili bir satır 12 boşluk, girintili 4 boşluk 8 boşluk olacaktı.
Giriş çıkış
İstediğiniz gibi giriş ve çıkış sağlanabilir (STDIN / STDOUT, fonksiyon parametresi / dönüş değeri vb.); Diliniz çok satırlı girişi desteklemiyorsa (veya sadece istemiyorsanız), |
karakterleri satırları ayırmak için kullanabilirsiniz .
Girdi yalnızca yazdırılabilir ASCII + yeni satırlarından oluşacak ve boş satır içermeyecek.
Test durumları
Giriş:
function fib(n) {
var a = 1, b = 1;
while (--n > 0) {
var tmp = a;
a = b;
b += tmp;
if (a === Infinity) {
return "Error!";
}
}
return a;
}
Çıktı: Yukarıdaki örnek kod.
Giriş:
a
b
c
d
e
f
g
h
Çıktı:
a
b
c
d
e
f
g
h
Giriş:
1
2
3
2
1
Çıktı:
1
2
3
2
1
Giriş:
foo
Çıktı:
foo