Havuç , 77 51 bayt
<th>A^*$v<tr>vl+(^h)*($^F- 1)A"h"S"d"h+(^l)v<table>
(Bu konuda çalışırken, h
çalışmayan ve düzelten bir hata keşfettim )
Bazı baytları html'leri kısaltarak ve "change" yerine "split, join" kullanarak golf oynadı
Çevrimiçi deneyin!, komut satırı seçeneğini kullanın-d
AST'yi görmek kullanın (Not: Bu, yeni düğüm yorumlayıcısını kullanır, bu nedenle web sitesindeki eski sürüm bunu çalıştıramaz.)
Bu program 0 indeksli ve tersine sırayla girdi, çünkü Carrot'un tuhaf doğası, 3 2
3 × 4'lük bir tablo yazdırdı.
Programı böyle çalıştırın. ./carrot -f prog.carrot input.txt
Temel olarak başlık satırını oluşturur, ardından veriler bahçenin başka bir hücresinde sıralanır (2B bant) ve bunları bir araya getirir.
Havuç, bahçe adı verilen 2B bant üzerinde çalışır. Bahçedeki her hücre üç yığın modundan oluşur, string, float, array. Her mod için "stack" adı verilen bir değer vardır (not: yanlış isim). Bu yığınlar boş başlar. Bir hücre belirli bir moddayken, aşağıdaki komutlar bu moda karşılık gelen yığını etkiler, örneğin şamandıra modunda, işlemler yığın yüzmesini etkiler. Ve elbette, modlar arasında geçiş yapmak için komutlar var. Modlar önemlidir, çünkü her operatör her mod ve her bir argüman tipi için aşırı yüklenebilir.
Ek olarak, iki ek mod vardır (bunlar yalnızca doğrudan yığını değil komutları etkiler), normal mod ve şapka modu. Normal mod, normalde çalışır, burada argümanları alan ve yığını doğrudan etkileyen operatörler vardır. Şapka modunda (neredeyse) her karakter kelimenin tam anlamıyla bir dize olarak yorumlanır ve daha sonra yığına uygun olarak hazırlanır / eklenir. Şapka modu, şapkalarla (ekleme) veya aşağı şapkalarla (hazırlama) başlatılır / sonlandırılır.
Havuç, bahçedeki bir hücrede, yığın dizisi modunda ve şapka modunda başlar.
Caret modundan başlayarak, dize <th>A
başlangıçta boş yığın dizgisine eklenir. Sonra *
onu $
, girişi, zamanları çoğaltan komutu izler . Sonra <tr>
aşağı-doğru kullanımı ile yığın dizeye hazırlanır v
. Bu, tablonun başlık satırını oluşturur.
Veri satırlarını oluşturmak için başlığı başka bir hücreye kopyalarız. l
IP'yi sağdaki boş hücreye taşır ve hücrede bulunan dizgiyi sola +
ekler (^h)
(temel olarak sağdaki hücreye kopyalayarak). ()
hemen hemen aynı bantla bir alt kabuk, yeni bir Carrot programı başlatır ve sol hücrede ipi alabilmek için ^
caret modundan çıkar h
. Bu daha sonra *
tarafından çoğaltılır($^F- 1)
sonraki girişi eksi 1, saatler.
Hala sağ hücrede, A
bu hücrenin dizisini istifleme bölmesine ayarlar "h"
. S
stack dizisini birleştirir ve stack "d"
dizesini bu değere ayarlar. A"h"S"d"
gerçekten sadece veri satırlarını oluşturmak için s'yi h
s ile değiştirir d
. şimdih
sola başlayan hücreye geçiyoruz.
Şimdi hücrenin yığın dizesini kullanarak bu hücrenin sağına ekliyoruz +(^l)
. Geriye kalan tek şey <table>
etiketi eklemek , bu yüzden bunu v
hazırlayarak yapıyoruz.