🐋🚂🍇🐖🅰️➡🚂🍇🍊⬅🐕1🍇🍎1🍉🍮s 0🔂k⏩0🐕🍇🍦t➖🐕k🍮r t🔂i⏩1 t🍇🍊😛🚮t i 0🍇🍮➕r i🍉🍉🍮➕s✖r🅰️k🍉🍎➗s🐕🍉🍉
Çevrimiçi deneyin!
"2'den küçük" yerine "1'den küçük veya 1'e eşit" kullanarak -3 bayt, çünkü "küçüktür" emojisi oldukça uzun bir UTF-8 kodlamasına sahiptir. Ayrıca t
bayt sayısını etkilemeden bir uyarıyı susturmak için dondurulmuş hale getirildi .
🚂 (integer) sınıfını 🅰️ adlı bir yöntemle genişletir. Girişten bir sayı alan basit bir program yazabilir, numaraya 🅰️ çağırabilir ve sonucu şöyle yazdırabilirsiniz:
🏁🍇
🍦str🔷🔡😯🔤Please enter a number🔤
🍊🍦num🚂str 10🍇
😀🔡🅰️num 10
🍉🍓🍇
😀🔤Learn what a number is, you moron!🔤
🍉
🍉
Bu bölüm, mesajları ve hata işlemeyi atlayarak çok fazla golf oynayabilir, ancak skorda yer almaz, bu yüzden yol boyunca okunabilirliği geliştirirken Emojicode'un daha fazla özelliğini göstermeyi tercih ederim.
Ungolfed
🐋🚂🍇
🐖🅰️➡🚂🍇
🍊◀️🐕2🍇
🍎1
🍉
🍮sum 0
🔂k⏩0🐕🍇
🍦nmk➖🐕k
🍮sig nmk
🔂i⏩1 nmk🍇
🍊😛🚮nmk i 0🍇
🍮➕sig i
🍉
🍉
🍮➕sum✖sig🅰️k
🍉
🍎➗sum🐕
🍉
🍉
açıklama
Not: Çok fazla emoji seçeneği emojicode 0.5'te pek bir anlam ifade etmez. Ne de olsa 0.x. 0.6 bunu düzeltir.
Emojicode jenerikler, protokoller, opsiyonel ve kapanışları içeren nesne yönelimli bir programlama dilidir, ancak bu program hiçbir kapanma kullanmaz ve I / O saplamasında tek isteğe bağlı görünürken tüm jenerikler ve protokoller örtülü olarak kabul edilebilir.
Program sadece birkaç tipte çalışır: 🚂 tamsayı tipidir, 🔡 dize tipidir ve ⏩ aralık tipidir. Birkaç boolean (👌) da görünür, ancak bunlar yalnızca koşullarda kullanılır. Booleans, sırasıyla doğru ve yanlış değerlerine karşılık gelen 👍 veya 👎 değerini alabilir.
Şu anda Emojicode'da operatör yoktur, bu nedenle normalde operatör olan ekleme, karşılaştırmalar ve diğer işlemler işlev olarak uygulanır ve ifadelerin etkili bir şekilde önek gösterimini kullanmasını sağlar . Operatörler de 0.6'da planlanıyor.
Önce test programını ele alalım.
🏁
Bu, diğer dillerdeki ana metinlerle karşılaştırılabilen 🏁 bloğudur.
🍇 ... 🍉
Üzüm ve karpuz emoji kodunda kod blokları bildirir.
🍦str🔷🔡😯🔤Please enter a number🔤
Bu, "dondurulmuş" olarak adlandırılır str
ve değerini, başlatıcı (yapıcı) 😯 kullanılarak oluşturulan yeni bir dizeye ayarlar; bu, dize olarak bir istem alır ve daha sonra kullanıcıdan bir satır girer. Neden bir değişken yerine dondurulmuş kullanılır? Değişmez, bu yüzden bir değişken uyarı verir.
🍊🍦num🚂str 10
Hadi yıkalım. dondurulmuş 🚂str 10
üzerinde 🚂 yöntemini str
10 bağımsız değişkeniyle çağırır. Kural olarak , bir tür adıyla adlandırılan yöntemler nesneyi bu türe dönüştürür. 10 tamsayı dönüştürme için kullanılacak bazdır. Bu yöntem isteğe bağlı bir 🍬🚂
. Opsiyoneller baz tipinde bir değer veya hiçlik içerebilir, ⚡. Dize bir sayı içermiyorsa, ⚡ döndürülür. Değeri kullanmak için, ⚡ kullanılarak isteğe bağlı paketin açılması gerekir, bu da değer ⚡ ise bir çalışma zamanı hatası oluşturur. Bu nedenle, isteğe bağlı bir paketi açmadan önce hiçbir şey olup olmadığını kontrol etmek iyi bir uygulamadır. Aslında, Emojicode'un bunun için bir stenografi olması çok yaygın. Normalde, 🍊
bir "if" dir.🍊🍦 variable expression
şu anlama gelir: ifadeyi değerlendirmek. İsteğe bağlı bir hiçlik içeriyorsa, koşul 👎 (yanlış) olarak değerlendirilir. Aksi takdirde, variable
isteğe bağlı olanın kaydırılmamış değeriyle dondurulmuş bir ad oluşturulur ve koşul 👍, (true) olarak değerlendirilir. Bu nedenle, normal kullanımda, 🍇 ... 🍉
koşulu takip eden blok girilir.
😀🔡🅰️num 10
🅰️ ana kodun bölüm sayısını hesaplayan 🚂 kullanarak 🐋 yöntemine eklediği yöntemdir. Bu, koşullu olarak num
beyan ettiğimiz dondurulmuş 🅰️'yi çağırır ve sonucu 🔡 yöntemi ile base 10'u kullanarak bir dizeye dönüştürür. Ardından, 😀 sonucu yazdırır.
🍓🍇 ... 🍉
🍓 "else" anlamına gelir, bu nedenle kullanıcı doğru bir sayı girmediğinde bu blok girilir.
😀🔤Learn what a number is, you moron!🔤
Dize hazır bilgisini yazdırır.
Şimdi ana programa bakalım. Kurtulmamış versiyonu açıklayacağım; golfed sürümü sadece boşluk kaldırıldı ve değişkenler tek harfli isimlerle yeniden adlandırıldı.
🐋🚂🍇 ... 🍉
🚂 sınıfını genişletin. Bu, programlama dillerinde yaygın olarak bulunmayan bir özelliktir. Üst sınıf olarak 🚂 ile yeni bir sınıf oluşturmak yerine, 🐋 doğrudan 🚂 değiştirir.
🐖🅰️➡🚂🍇 ... 🍉
🅰 döndüren 🅰️ adında yeni bir yöntem oluşturur. Formül kullanılarak hesaplanan bölüm sayısını döndürüra(n) = (1/n) * Sum_{k=0..n-1} sigma(n-k)*a(k)
🍊⬅🐕1🍇
🍎1
🍉
🐕 diğer dillere benzer this
veya self
dillerden farklıdır ve yöntemin çağrıldığı nesneyi belirtir. Bu uygulama özyinelemeli, bu nedenle sonlandırma şartıdır: yöntemin çağrıldığı sayı 1'den küçük veya 1'e eşitse, 1 döndürün.
🍮sum 0
Yeni bir değişken oluşturun sum
ve 0 olarak ayarlayın. Örtük olarak type türünü alır.
🔂k⏩0🐕
🔂, protocol️ protokolünü uygulayan her şeyi yineler, ⏩ ise 🔂🐚🚂 uygulamak için bir aralık değişmezidir. Bir aralığın bir başlangıç değeri, bir durdurma değeri ve bir adım değeri vardır; bu değer, eğer 1 start < stop
, aksi takdirde -1 olarak kabul edilir . Aralık değerini oluşturmak için ⏭ tuşunu kullanarak adım değerini de belirtebilirsiniz. Başlangıç değeri kapsayıcıdır, ancak durdurma değeri münhasırdır, bu nedenle bu formülde for k in range(n)
veya Sum_{k=0..n-1}
formüle eşdeğerdir .
🍦nmk➖🐕k
Sigma (n - k) veya n - k
başka bir deyişle bölenlerin toplamını hesaplamamız gerekir ve argüman birkaç kez gereklidir, bu nedenle bu n - k
, nmk
bazı baytları kaydetmek için değişkeni depolar .
🍮sig nmk
🔂i⏩1 nmk
Bu, sig
değişkeni sigma argümanına ayarlar ve 1'den 1'e kadar tüm sayılar üzerinde yineleme yapar nmk - 1
. Değişkeni 0 olarak başlatabilir ve 1..nmk üzerinde yineleyebilirim ama bu şekilde yapmak daha kısadır.
🍊😛🚮nmk i 0
🚮 geri kalanını veya modülünü hesaplar ve 😛 eşitliği kontrol eder, böylece koşul i
bir bölücü ise be olur nmk
.
🍮➕sig i
Bu, += -= >>=
bazı emoji içermeyen dillerin bazılarında operatör ailesine benzeyen çağrı yoluyla bir ödevdir. Bu satır olarak da yazılabilir 🍮 sig ➕ sig i
. Bu nedenle, iç döngü tamamlandıktan sonra, sig
bir bölenler toplamını içerir n - k
, ya dasigma(n - k)
🍮➕sum✖sig🅰️k
Çağrı ile başka bir atama, böylece bu sigma(n - k) * A(k)
formülde olduğu gibi toplamı ekler .
🍎➗sum🐕
Son olarak, toplam n'ye bölünür ve bölüm döndürülür. Bu açıklama muhtemelen kodun kendisini yazmak kadar üç zaman aldı ...