Bu program girdi olarak bir çift [öğrencinin cevabı, doğru cevabı] alır ve eksik bir cevabı belirtmek için boşluk kullanır.
Bu program, neler olup bittiğini takip etmek için bazı tuhaf dahili giriş formatları kullanıyor, bu yüzden bunu bir adım öteye taşıyacağız.
Z
Bu girdiyi aktarır, bu yüzden her bir soru için bir tane olan 25 elementin bir listesini elde edeceğiz; her eleman [öğrenci cevabı, doğru cevap] şeklindedir. Bu formun bir öğesini büyük harfle göstereceğiz; A
1. soru için, B
2. soru için vb. Yani cevaplar şu anda olarak saklanıyor
ABCDEFGHIJKLMNOPQRSTUVWXY
m0
Bu "daha büyük bir palindrom" işlemidir; şu andaki değeri tersine, değerin kendisine ekleriz:
ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBA
ṁ135
ṁ
(Kalıp) operatör bir kaç şey, ama bu bağlamda etkili sürekli kendi akım değerini ekleyerek üretilen sonsuz listesindeki ilk 135 elemanları alır. Bu bize aşağıdakileri veriyor (kolaylık sağlamak için 50 elementin gruplarına ayrıldım; bu sadece dahili olarak 135 çiftin bir listesi):
ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQP
µ;
µ
Geçerli değeri, eksik işlenenler için yeni varsayılan olarak ayarlar. Sonra hemen bir operand eksik bir yerleşik görüyoruz; ;
ekler, ancak neyle ekleneceğini belirlemedik. Sonuç olarak, şu anki değer en sondaki değere eklenir µ
(aynı zamanda şu anki değerdir), bize şu 270 öğelik geçerli değeri verir:
ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPABCDEFGHIJKLMNO
PQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBAABCDEFGHIJKLMNO
PQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBAABCDEFGHIJKLMNO
PQRSTUVWXYYXWVUTSRQP
t€⁶
Yukarıdaki tüm büyük harflerin [öğrencinin cevabı, doğru cevabı] bir çiftini temsil ettiğini unutmayın. İşlem t€⁶
her ( €
) çiftte çalışır ve çiftin her iki tarafından (yani çiftte görünen herhangi bir alandan t
) boşlukları ( ⁶
) siler . Bu yüzden hala birçok tekrarlı aynı 270 sorudan oluşan bir listeye sahibiz, ancak bunlar [doğru cevap] (öğrenci cevap vermedi) veya [öğrenci cevap, doğru cevap] (öğrenci cevap verdi) şeklindedir.
E€’
E€’
Operasyon aynı zamanda her (çalışır €
nedeniyle kullanımı,) eleman ve E
tüm unsurları (yani öğrenci cevap veya soru hakkın var vermedi) eşit ise 1'den eleman değiştirir veya tüm 0 değilse, elemanlar eşittir (yani öğrenci cevapladı, ancak soruyu yanlış yaptı). ’
Burada kullanımı numaralandırmayı değiştirir, bu da sırasıyla sırasıyla -1 veya 0 kullandığımızı gösterir. Cezaya uygun bir soru olsaydı cezalandırılacak bir cevap için -1, eksik veya doğru bir cevap için 0 olan bu yeni tür öğe için küçük harfler kullanacağım:
abcdefghijklmnopqrstuvwxyyxwvutsrqponmlkjihgfedcba
abcdefghijklmnopqrstuvwxyyxwvutsrqponmlkjihgfedcba
abcdefghijklmnopqrstuvwxyyxwvutsrqpabcdefghijklmno
pqrstuvwxyyxwvutsrqponmlkjihgfedcbaabcdefghijklmno
pqrstuvwxyyxwvutsrqponmlkjihgfedcbaabcdefghijklmno
pqrstuvwxyyxwvutsrqp
;E€
İkimiz de gördük E€
ve ;
önce; şu anki değere bir şey ekliyoruz ve tüm öğeler eşitse 1, bazıları da farklıysa 0 biçimini kullanıyoruz ( ’
bu sefer hayır !). Burada eksik bir işlenen var, bu yüzden değeri sondan itibaren kullanıyoruz µ
(örn. 3. adımın çıktısı). 3. adımda, öğelerden boşluklar silmedik, bu nedenle doğru cevap için 1, yanlış veya eksik bir cevap için 0 alacağız (çünkü boşluk doğru cevapla eşleşmeyecektir). Bundan sonra, bunun için büyük harf kullanacağım 1 = doğru, 0 = yanlış / eksik format ve küçük harf kullanmaya devam etmek için 0 = doğru / eksik, -1 = yanlış. Elde edilen değer 405 elemente sahiptir ve şöyle görünür:
abcdefghijklmnopqrstuvwxyyxwvutsrqponmlkjihgfedcba
abcdefghijklmnopqrstuvwxyyxwvutsrqponmlkjihgfedcba
abcdefghijklmnopqrstuvwxyyxwvutsrqpabcdefghijklmno
pqrstuvwxyyxwvutsrqponmlkjihgfedcbaabcdefghijklmno
pqrstuvwxyyxwvutsrqponmlkjihgfedcbaabcdefghijklmno
pqrstuvwxyyxwvutsrqpABCDEFGHIJKLMNOPQRSTUVWXYYXWVU
TSRQPONMLKJIHGFEDCBAABCDEFGHIJKLMNOPQRSTUVWXYYXWVU
TSRQPONMLKJIHGFEDCBAABCDEFGHIJKLMNOPQRSTUVWXYYXWVU
TSRQP
ṫ⁹
İşte daha önce bahsettiğim şaşırtıcı tesadüf geliyor. Kodun bu kısmından bahsetmeden önce, sahip olduğumuz yerin stokunu almak istiyorum.
Her büyük harf doğru bir cevap için + 1'i temsil eder; ilk 15 soru ( A
aracılığıyla O
), dizede her biri 5 kez görünür ve son 10 soru ( P
aracılığıyla Y
) her biri 6 kez görünür. Bu bit gerçekten büyülü değil; Programdaki 135 sayısını daha önce seçtiğimde (5 × 15 + 6 × 10'du) ve buradaki tek şans darbesi 5'in tuhaf bir sayı olduğu şeklinde tasarlanmıştı (yani son 10 ilk 10'dan ziyade fazladan zamana gelen sorular. Hemen bu önceki 15 harf içeren p
boyunca t
bir kez (-1 ceza sorular) ve u
içinden y
(-2 ceza soru) ile iki kez. Bu da bir tesadüf değil; çünkü kullandıkm0
daha önce, soruların ekstra kopyaları sıralıdır PQRSTUVWXYYXWVUTSRQP
ve sonraki sorular doğal olarak bu dizginin ortasına yakın olarak ortaya çıkacaktır (bu nedenle, "ilave" soruların son 15'ini almak kenarlara yakın olanlara daha az tekrar verecektir; ve Tabii ki, "ekstra" soruların son gelmesi şaşırtıcı değil).
Her küçük harf yanlış, eksik bir cevap için puandan 1 çıkardığından ve her büyük harf doğru bir cevap için 1'e puan eklediğinden, bu nedenle sadece son 135 + 15 = 150 öğeyi almamız gerekir. Her eleman türü, doğru sayıda. Jelly’in listenin sonunda bir alt dize alma emri ṫ
; ancak, istediğiniz öğe sayısını değil, istediğiniz ilk öğenin dizinini belirtir. Bu noktada 405 elementimiz var ve 150 istiyoruz, bu yüzden indeks (405 - 150 + 1) veya 256'dan başlamamız gerekiyor. İnanılmaz bir tesadüfte 256, mevcut farklı oktetlerin sayısı olarak gerçekleşir ve böylece Jelly’te kısa bir gösterim (⁹
). Bunu gerçekleştirmek için yapabileceğim çok az şey vardı; adim 4, tur numarasına ulaşmak için listenin başına 135 eleman daha ekledi, ancak eklemek istediğim 135 eleman olduğu gerçeği (programın bu noktasında kolayca bulunabilen bir değer) gerçekten uygun oldu. Temel olarak başka herhangi bir sayı bu durumda tamamen yararsızdır.
İşte dahili değer şimdi nasıl görünüyor:
uvwxyyxwvutsrqpABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQP
ONMLKJIHGFEDCBAABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQP
ONMLKJIHGFEDCBAABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQP
S
Son olarak, şimdi soruların puanlarında bir değişiklik listesi var, tek yapmamız gereken onları kullanarak toplamak S
ve işimiz bitti.