LINUXTALKS.CO

Фичреквесты

 ,

Ответ на: комментарий от crypt

В любом случае звёзды отдельной строкой как-то не очень выглядят. Можно просто вернуть на первоначальное место и сделать, чтобы количество звёзд росло медленнее, чем линейно. Например вот так:

static int starCount (int score) {
    int stars = 0;

    int n;

    Deque<Integer> d = new ArrayDeque<Integer>();
    d.add(1);
    d.add(1);
    d.add(1);

    for(;;) {
        if (stars < 3) {
            n = 1;
            score = score - n*100;
            if (score < 0) {
                break;
            }
            stars = stars + 1;
        } else {
            n = d.pollLast() + d.peekLast();
            d.addFirst(n);
            score = score - n*100;
            if (score < 0) {
                break;
            }
            stars = stars + 1;
        }
    }
    return stars;
}

Тогда количество звёзд будет расти следующим образом:

ScoreЗвёзды
00
1001
2002
3003
5004
7005
10006
14007
19008
26009
350010
sudopacman    
★★★★★★★★★★
Windows / Firefox
Ответ на: комментарий от crypt

Регистрировать новый аккаунт на GitHub не охота, поэтому отправлю патч тут.

https://github.com/cocucka-dev/lorsource/blob/master/src/main/java/ru/org/linux/user/User.java:

@@ -30,6 +30,9 @@
 import java.sql.SQLException;
 import java.sql.Timestamp;

+import java.util.ArrayDeque;
+import java.util.Deque;
+
 public class User implements Serializable {
   private static final int ANONYMOUS_LEVEL_SCORE = 50;
   public static final int ANONYMOUS_ID = 2;
@@ -278,37 +281,41 @@
     return getStars(score, maxScore, true);
   }

-  private static int getGreenStars(int score) {
-    if (score < 0) {
-      score = 0;
+  private static int getStarCount(int score) {
+    int stars = 0;
+    int n;
+
+    Deque<Integer> d = new ArrayDeque<Integer>();
+    d.add(1);
+    d.add(1);
+    d.add(1);
+
+    for(;;) {
+      if (stars < d.size()) {
+        n = (int) d.toArray()[stars];
+      } else {
+        n = d.pollLast() + d.peekLast();
+        d.addFirst(n);
+      }
+      score = score - n*100;
+      if (score < 0) {
+        break;
+      }
+      stars = stars + 1;
     }
-/*    if (score >= 600) {
-      score = 599;
-    }*/
-
-    return (int) Math.floor(score / 100.0);
-  }
-
-  private static int getGreyStars(int score, int maxScore) {
-    if (maxScore < 0) {
-      maxScore = 0;
-    }
-    if (maxScore < score) {
-      maxScore = score;
-    }
-/*    if (maxScore >= 600) {
-      maxScore = 599;
-    }*/
-
-    int stars = getGreenStars(score);
-    return (int) Math.floor(maxScore / 100.0) - stars;
+    return stars;
   }

   public static String getStars(int score, int maxScore, boolean html) {
     StringBuilder out = new StringBuilder();

-    int stars = getGreenStars(score);
-    int greyStars = getGreyStars(score, maxScore);
+    int stars = getStarCount(score);
+    int greyStars;
+    if (maxScore == score) {
+      greyStars = 0;
+    } else {
+      greyStars = getStarCount(maxScore) - stars;
+    }

     if (html) {
       out.append("<span class=\"stars\">");
⇩развернуть
sudopacman    
★★★★★★★★★★
Windows / Firefox
Ответ на: комментарий от sudopacman

@cocucka, что скажешь? Предлагаю вернуть звёзды на изначальное место и изменить систему расчёта их количества на вышеописанную.

Вот у @cetjs2 должно быть 22 звезды, а вы ему только 11 насыпали. Видимо, потому, что даже если звёзды передвинуть под ник, то всё равно 22 штуки многовато. А по моему алгоритму у него будет 8 звёзд. Заодно четырёхзвёздочники перестанут быть краснокнижными существами.

sudopacman    
★★★★★★★★★★
Windows / Firefox
Ответ на: комментарий от sudopacman

По мне так чем проще – тем лучше. Линейный рост, имхо, меньше вопросов вызовет, но и более 5 звёзд у ника даёт ощущение разговора с Брежневым. Может лучше сделать звёзды разноцветными? Типа до 500 простые зелёные, за 5 зелёных давать одну серебрянную, за 5 серебрянных – золотую. Не каждая птица долетит до пяти золотых.

cocucka    
★★★★★★★★★★★★
Linux / Firefox
Ответ на: комментарий от cocucka

Типа до 500 простые зелёные, за 5 зелёных давать одну серебрянную, за 5 серебрянных – золотую

А за 5 золотых - библию в простом переплёте.

alexferman    
★★★★★
Linux / Firefox
Ответ на: комментарий от cocucka

По мне так чем проще – тем лучше. Линейный рост, имхо, меньше вопросов вызовет

По-моему, начисление score уже достаточно нетривиально, чтобы вызывать вопросы у тех, кто пытается понять, как оно работает. Собственно, я вообще считаю, что пользователям достаточно просто знать, что чем больше звёзд, тем дольше будешь добираться до следующей — понимать механизм работы необязательно. В профиле рядом со score отображать количество, при котором появится следующая звезда. Т. е., например, 350 / 500. (При наведении на 500 показывать поясняющую надпись.) Любителям «игоря» такой принцип должен быть вполне знаком. Для любознательных где-нибудь на FAQ-странице привести вышеуказанную таблицу и описание алгоритма. Если что, я лично готов объяснять, как оно работает, всем, у кого возникнут вопросы.

Может лучше сделать звёзды разноцветными?

Мне такая идея не очень нравится, обилие цветов слишком перегружает информационный фон. Всё-таки цвета лучше использовать для выделения информации, а не как отдельную смысловую единицу. (Тут ещё стоит учитывать существование разных тем и пользовательских стилей.)

sudopacman    
★★★★★★★★★★
Последнее исправление: sudopacman (всего исправлений: 1)

Windows / Firefox
Ответ на: комментарий от cocucka

Ещё неплохо бы время написания сообщения перенести в ту же строчку, что и user-agent (с тем же размером шрифта):

sudopacman ★★★★★★ <тут может быть комментарий о пользователе>
Последнее исправление: sudopacman 14.06.22 20:01:06 (всего исправлений: 2)
Windows / Firefox / 14.06.22 19:51:48  
[Ответить на это сообщение] [Показать ответ] [Ссылка]
sudopacman    
★★★★★★★★★★
Windows / Firefox
Ответ на: комментарий от sudopacman

Тогда количество звёзд будет расти следующим образом:

А почему не по степеням двойки или тройки?

torvn77    
★★★
Android / Chrome
Ответ на: комментарий от torvn77

Потому что эта функция лучше подходит и не нужно городить никаких кусочных функций.

sudopacman    
★★★★★★★★★★
Windows / Firefox
Ответ на: комментарий от sorrow

800 4
1600 5

Слишком медленно.

sudopacman    
★★★★★★★★★★
Windows / Firefox
Ответ на: комментарий от torvn77

Нет, неправильно понимаешь.

2^(6+2n)

Ты хоть на график посмотри, прежде чем такое предлагать.

sudopacman    
★★★★★★★★★★
Последнее исправление: sudopacman (всего исправлений: 1)

Windows / Firefox
Ответ на: комментарий от sudopacman

Ну вообще эту формулу я писал как альтернативу формуле sorrow.

Ты какие хочешь для неё коэфициэнты?

torvn77    
★★★
Android / Chrome
Ответ на: комментарий от torvn77

Ну вообще эту формулу я писал как альтернативу формуле sorrow.

Молодец, только она ещё меньше подходит, чем его.

Ты какие хочешь для неё коэфициэнты?

Я хочу другую функцию.

sudopacman    
★★★★★★★★★★
Windows / Firefox
Ответ на: комментарий от sudopacman

Ну положим первая звезда 128 скора, вторя 256 скора, третья 512 скора, четвёртая 1024 скора.
Помоему вполне хорошо.

Это формула 2^(5+n)

torvn77    
★★★
Последнее исправление: torvn77 (всего исправлений: 2)

Android / Chrome
Ответ на: комментарий от torvn77

Помоему вполне хорошо.

А по-моему — нет.

Это формула 2^(6+n)

А ты предлагал вообще 2^(6+2n).

sudopacman    
★★★★★★★★★★
Windows / Firefox
Ответ на: комментарий от sudopacman

Это sorrow предлагал, я только чуть чуть поправил.

Так когда по твоему мнению должна быть первая и вторая звезда?

torvn77    
★★★
Последнее исправление: torvn77 (всего исправлений: 1)

Android / Chrome
Ответ на: комментарий от sudopacman

Первая при 100, вторая при 200?

Это позор, мы как программисты должны считать по степеням двойки, это символ професии.

То есть 64 128 256 512 1024

torvn77    
★★★
Последнее исправление: torvn77 (всего исправлений: 1)

Android / Chrome
Ответ на: комментарий от torvn77

мы как программисты

«Мы»?

должны считать по степеням двойки

Любое натуральное число можно представить в виде суммы степеней двойки.

sudopacman    
★★★★★★★★★★
Windows / Firefox
Ответ на: комментарий от alexferman

Круглое число это число в котором значение имеет либо только один порядок, либо все порядки имеют одинаковое значение.

В посте Фичреквесты (комментарий) @sudopacman предложил считать по круглым числам десятичной системы, а я думаю что мы должны как программисты брать круглые числа из двоичной или троичной системы.

torvn77    
★★★
Последнее исправление: torvn77 (всего исправлений: 5)

Android / Chrome
Ответ на: комментарий от torvn77

мы должны как программисты

Тут не только программисты

alexferman    
★★★★★
Linux / Firefox
Ответ на: комментарий от sudopacman

АПВС? :P

Потому что нахожу странным что ты свободно говоря на русском языке не знаешь такой особенности русской культуры, а может и не только русской культуры.

torvn77    
★★★
Последнее исправление: torvn77 (всего исправлений: 1)

Android / Chrome
Ответ на: комментарий от sudopacman

Можно просто стакать 5 звёзд в одну «большую» звезду (другого цвета)

Я уже предлагал это @crypt, кстати, но его ответа не помню, если он вообще был

Crocodoom    
★★★★★
Android / Chrome
Ответ на: комментарий от Crocodoom

Но ЛОР мне нравится больше! Про LT вообще молчу 😶

Crocodoom    
★★★★★
Android / Chrome
Ответ на: комментарий от Crocodoom

это код писать надо. я же не программист. я даже с цветом этих звезд не могу определиться, т.к. кому-то зеленые яркие, а кому-то серые погашенные.

crypt    
★★★☆☆
FreeBSD / Chrome
Ответ на: комментарий от Crocodoom

пожалуй. но код писать надо. если бы вы предложили патч, другое дело. а тут и так в движке непочатый край работы.

crypt    
★★★☆☆
FreeBSD / Chrome
Ответ на: комментарий от Crocodoom

вот в том-то и дело. код кому-то надо писать. я не джавист, но пытаюсь и помогаю сосиске, как могу. ты ссылку на lt в профиле на лоре поставил?

crypt    
★★★☆☆
FreeBSD / Chrome
Ответ на: комментарий от crypt

Я пока не могу логиниться на ЛОРе. Чуть позже ситуация может измениться

Crocodoom    
★★★★★
Android / Chrome
Ограничение на отправку комментариев: только для зарегистрированных пользователей, score>=90