ну, "зеленая" линия полосатая, а "прозрачная" всего лишь бледная. А котёнок уже не линия, а рисунок, мне кажется. И мне больше нравится вот этот вариант:
Прикольный вариант, только вот на баннер (как и на любую плоскую поверхность) его не распечатать.
даже если трудности перевода, было сказано, что одна линия перпендикулярна второй и ничего другого, но на этой картинке линии не всегда перпендикулярны, например в закруглении они не перпендикулярны, по этому задача не выполнена, я уж молчу про цвета)
не всегда перпендикулярны
Что это вообще значит?
В ТЗ было сказано "семь ... линий ... перпендикулярных друг другу".
По принципу необходимого и достаточного задание о перпендикулярности выполнено.
А про цвета - это отдельный диагноз. Дезигнерство головного мозга.
да, бред сказал, они вообще не перпендикулярны, перпендикулярными могут быть только прямые линии и представленный рисунок хрень полнейшая
Да про красные линии фигня вопрос, просто наращиваем мерность пространства до 7 и строим 7 перпендикулярных линий в направлении осей координат.
Это яваскрипт. Там числа заданы не как "числа" а как стринги то есть строковые переменные. В яваскрипте встроен автоматический перевод из одного типа данных в другой, в данном случае из строки в числовой. Символ умножения спровоцировал такое превращение и иртерпрететор их преобразовал и перемножил, а вот символ "+" для сроковых переменных это объединение двух строковых что-то вроде "аб" + "вг" = "абвг". Потому уже прошла не математическая операция сложения, а операция объединения. Вот "като так"!
Умножение приоритетнее сложения, поэтому js сначала попробует сделать '2'*'4', строки со строками умножать нельзя, поэтому строки становятся числами, которые умножать можно, 2*4=8; '2'+8, 8 становится '8' потому что в js можно складывать строки и тогда они соеденяются, вот и получилось 28 (которое на самом деле '28')
Я понял. Над ним в ответ посмеялись. Просто шутка Deiskos'а не очень подходит: в первом родительском комментарии, про который все шутят. мол, джаваскриптер, нет кавычек. Он складывает 2 и 8, получая 28. При чем тут JS?
При том, что в нормальных языках была бы ошибка. И да, js не нормальный, он - говно. Холиваров тут разводить смысла нет, и так все ясно
В JS динамическая типизация, поэтому по возможности он приводит строку к числу или число к строке.
Если JS видит оператор вычитания (-), умножения (*), деления (/), то пытается привести оба аргумента к числу.
'2'*'2'=4
2-'2'=0
Другая ситуация с оператором сложения (+) – он также означает операцию конкатенации строк, которая является более приоритетной. Поэтому если хоть один аргумент является строкой, то второй он тоже приводит к строке и конкатенирует их.
2+2=4
'2'+2=2+'2'='2'+'2'='22'
А явное приведение типов там есть? Что-то вроде (int)'2'+(int)'2'*(int)'2'?
Upd. погуглил, есть функции String() и Number()
Теперь другой вопрос возник, если выполнить a = '2'; a = Number(a); то a станет числом, или при втором присваивании снова в строку преобразуется?
А знаете как познать истину? Наберите на калькуляторе выражение, что написано ниже:
Ложь Или 111 + 2 * "333" = Истина
число умножить на то что можно привести к числу - число.
булево сравнить с тем что можно привести к булево - булево
любое число кроме 0 в булево истина.
что еще здесь удивительного? это не яваскрипт
В алгебре логики всё что не ноль - истина. Так что если после "или" идет что-то отличное от нуля - то результат будет "истина",
В алгебре логики может быть неопределённая функция/переменная?
А если речь о программировании, то зависит от языка. Большинство языков, если вы произведёте логические действия с неопределённой переменной выдадут исключение.
Я отвечал на вопрос про алгебру, а в алгебре при подобной ситуации функция будет называться неопределенной в точке. В программировании же неопределенными являются объекты/переменные которые еще небыли определены (либо им присвоили такое значение).
все просто, в программировании есть булевый тип данных, у которого есть два возмоожных значения истина и ложь. Ложь это всегда или 0, или пустое значение. В данном примере сначала строка 333 приводится к числу, потому что перед ней стоит умножение на два, а потом прибавляем 111, получаем значение 777. При логической операции ИЛИ в выражении Ложь или Истина получится Истина
Ложь это всегда или 0, или пустое значение.На самом деле не всегда.
Например в php строка "0" - это тоже ложь.
Да и для языков со статической\строгой типизацией это вообще не особо корректно.
И, насколько я помню, в ранних версиях C не было отдельно булева типа, и там в спецификации шла речь именно об 0 и 1. Возможно есть реализации, где 2 - ложь (но я не уверен).
А можно просто вызвать "Булево(111+2*"333")".
Кстати, забавно то, что результатом того же выражения в Питоне будет посчитанное число 37629 а не булево, как можно бы подумать. Питон смотрит первое Или, и если оно ложно, то просто отдает второе значение, не приводя его. Для И будет аналогично, но первым в условии уже должно быть Истина.
кста, если хочешь что-то реально не очевидное
Сообщить(истина + "41");
Сообщить(1 + истина И "да");
Да ладно, принципы-то простые
булева истина приводится к числу как 1, а к строке как "Да"
строка "да" приводится к булеву как истина
ноль приводится к булеву как ложь
операция для знака + определяется по левому операнду
истина+"41" = число(истина) + число("41") = 1 + 41 = 42
"41" + истина = "41" + строка(истина) = "41" + "Да" = "41Да"
-1 + истина и "да" = -1 + число(истина) и "да" = 0 и "да" = булево(0) и булево("да") = Ложь И Истина = Ложь
Блин, знал, что она неявно преобразует типы, но настолько...
Ладно хоть 2*"а333" ошибку выдает.
Сам пользоваться я конечно этим не буду. У меня в голове более жесткая типизация, чем в платформе. )))
Но знать надо. Мало ли за кем код разгребать придется.
стандартная проблема новичка:
КодОшибки = 418;
ОписаниеОшибки = "чайничек кипит";
Сообщить(КодОшибки + ": " + ОписаниеОшибки);
операция "+" перегружена. В данном случае программист ожидает конкатенацию строк, а не сложение. Но компилятор определяет операцию по значению левого операнда и пытается выполнить сложение. Число + строка даст ошибку.
грубо говоря и на примерах
1 + 4 = 5
1 + "4" = 5
"1" + 4 = "14"
"я1" + 4 = "я14"
1 + "я4" = ошибка
в комменте выше я просто привел пример часто встречающейся ошибки при написании.
почему не явно? Все логично, есть строка, ее умножают на два, адинэс\джаваскрипт смотрит что в ней лежит и пытается преобразовать в число, получилось? Умножай, это не запрещено, не получилось - вот тебе эксепшн. Но стоит помнить, что в этих языках, прости господи, "+" -это в первую очередь конкатинация и только потом - сложение.
В принципе логично, но само все это сделано изначально через жопу
Это неявное приведение типов. Динамическую типизацию вполне можно было нормально сделать.
Мы так в 9-м классе писали пробный вариант ГИА (государственной итоговой аттестации, если кто не знает). Писали в своей школе и со своими учителями.
Пишем русский язык, между парт ходит учительница. Замечает, что я подозрительно смотрю себе в кулак. Подходит, отнимает у меня бумажку, а там шпаргалка - "Жи Ши пиши с буквой И" :)
Потому что надо: у тебя было одно яблоко тебе дали ещё одно яблоко. Потому что в условии Ивана было яблоко, дали ещё одно (не уточнили чего одно). Есть текст яблоко, есть цифра 1. Что получается когда текст яблоко соединяем с цифрой 1? Правильно 1 яблоко.
Похоже мой язык тоже javascript.
Если тебе дали одно яблоко и одно что-то, то у тебя два чего-то. Одно из которых на самом деле является яблоком.
Я тут проверила в ассемблере и питоне. При 1+яблоко тоже даёт результат 1яблоко. Хотя может я неправильно вводу. Прошу проверить знающих задачу на других языках или перепроверить на питоне или ассемблере. Спасибо.
ассемблере и питоне
Странное сочетание.
Про ассемблер можно сказать, что Яблоко+1=аблоко. Это верно для x86 с его add для любых целочисленных типов и для двух однобайтовых кодировок (CP866, CP1251).
GNU Assembler ужасает.
Ассемблер это у бывшего коллеги-инженера. Проверял он. Питоном проверила племянница. Я сидела раздавала указания. Отсюда странное сочетание.
Я всегда знал, что нельзя доверять человеку, который говорит на языке с неявным приведением типов
А Википедия так и говорит, кстати:
Это один из наиболее противоречивых терминов в области типизации, так как он не имеет одного общепринятого значения, и разные авторы используют его в разных значениях
Вообще "Строгая" типизация только мутное понятие, поэтому я решил уточнить.
В пхп другая проблема: популярность и низкая стоимость входа дает среднее качество разработчика ниже плинтуса. Еще и обидчивость – почему-то характерная черта большинства пхпшников.
Пожалуйста, назови любой язык из повсеместно применяемых, который был бы хуже js. Даже php с определенной версии исправил достаточно недостатков, чтобы стать лучше.
Ну 1С может быть... но его и повсеместно применяемым языком-то назвать сложно.
Отсутствие нормальной типизации даже с TS. Постоянные попытки неявно скастить всё, что можно, куда угодно. Отсутствие вменяемой работы с арифметикой - integer и double слиты воедино. Игры в многопоточность, по факту остающиеся в одном потоке и тормозящие друг друга. Необходимость просто зазубрить кучу вещей из спеки, потому что реальное поведение не такое, какое было бы очевидным. Какого черта это всё вообще существует в де-факто стандарте индустрии?!
Java - не лучший язык, kotlin и даже C# гораздо лучше. Но просто сравни https://github.com/denysdovhan/wtfjs и ближайший аналог, который я нашел - http://javawtf.blogspot.com/
Про php или про js?
Для начала можно почитать https://habr.com/ru/post/142140/ и https://habr.com/ru/company/ruvds/blog/499670/
++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>++++++++++++.>>++++++++.-----------.++++++++++++++++++++.--------------.+.+++++++++++.<<----------.>>----------.+++++.<<.>>------------.++++++++++++++++.-----------------.++++++++.+++++.--------.+++++++++++++++.------------------.++++++++.<<++++++++++.
!!'false' == !!'true' // -> true
!!'false' === !!'true' // -> true
true - это false, спасибо js!
Надо же пример показать, чтобы непонимающие плюсанули. Получается интерпретация программы интерпретаторами, не имеющими представления о языке.
При этом в документации написано, что любая непустая строка при переводе в логическое значение даёт true (истина).
Во всех нормальных языках строка не кастуется к boolean. Так что да, дурной именно javascript, потому что позволяет это сделать.
То что для кого-то проблема выучить несколько правил приведения типов не делает язык дурным. В чужой монастырь со своим уставом не ходят
А я таки буду. Дело не в учении дополнительных правил. Дело в том, что компилятор допускает целый класс ошибок, который он мог бы отследить.
Более того, ценой быстродействия. Вместо того, чтобы реализовать несколько примитивных типов с примитивными же правилами у нас есть монстр-инстанс, для каждой переменной, которая умеет всё.
Я могу предположить только проверку на null в условии. Но "if (a != null)" небольшая цена за отсутствие багов.
Мне кажется не один язык программирования не работает столько со строками как джс.
if(a) {console.log(a)} else { console.log(“лошадь в огурцах»)}
И таким не хитрым способом мы:
- Вывели текст если он есть
- обработали вывод если там Пустая строка
- обработало вывод если там undefined
- обработали вывод если там null
И я считаю это прекрасно
Swift:
print(a?.Description() ?? "<лошадь в огурцах>")
C# :
Debug.WriteLine(a?.ToString() ?? "<лошадь в огурцах>")
А если ну очень хочется игнорировать тип - используйте базовый тип как тип параметра функции. Но эта такая редкость, что я могу пересчитать использование такого подхода на пальцах одной руки.
Да это шутка. Ну ладно, а так?
0 == false // -> true
'' == false // -> true
null == false // -> false
!!null // -> false
Про пустую строку уже сказал.
null – это отдельный тип и он не равен ни true ни false.
Но при принудительном приведении результатом будет false.
Потому что для калькулятора нужно вводить это выражение со скобками, так как он при вводе нового действия автоматически считает предыдущее (то есть когда у тебя введено 2+2, а потом ты вводишь умножение, то калькулятор производит сложение, а потом только умножение). На семерке, кстати, калькулятор в обычном режиме умеет в скобки.
слышал, что в америкосии приоритета у умножения нет и действия выполняются в порядке очереди по строке. млжет под них пример. хз, правда или нет
if ( $your_lang == "JS")
{
$lang = "true";
}
else
{
$lang = "false";
}
return $lang;
https://pastebin.com/BaWjjmK1 - вот кстати код из той же категории :D
И да - это реальный код, из common-библиотеки одного из сборок эмулятора сервера L2 :)