- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
void PrintAllChars()
{
for (int i = 0; i < 255; i++)
{
if (i == 10 || i == 20 || i == 30 || i == 40...i == 250)
{
}
else
{
Console.WriteLine((char)i);
}
}
}
myaut 10.07.2014 11:25 # +14
+ void PrintAllCharsExceptForEachTenthChar()
Lokich 10.07.2014 12:06 # +4
garmush 10.07.2014 12:11 # +4
Fike 10.07.2014 15:51 # +6
garmush 10.07.2014 23:10 # +6
kegdan 11.07.2014 01:42 # +14
сунул хуй в английский чай
все внезапно стало новым
хуй - английским. чай - хуёвым
1024-- 11.07.2014 10:15 # +6
kegdan 11.07.2014 10:31 # +6
1024-- 11.07.2014 10:38 # +6
kegdan 11.07.2014 10:41 # +6
Просвещайся с Кегданом ;)
Qwertiy 11.07.2014 10:32 # +6
myaut 10.07.2014 13:15 # +9
bormand 10.07.2014 16:17 # +7
kegdan 10.07.2014 17:13 # +7
bormand 10.07.2014 19:00 # +6
kegdan 10.07.2014 19:23 # +6
3_14dar 13.08.2016 21:45 # −46
kegdan 10.07.2014 18:07 # +6
guest 10.07.2014 23:14 # −33
kegdan 11.07.2014 01:30 # +6
kegdan 11.07.2014 01:36 # +6
bormand 11.07.2014 06:46 # +6
kegdan 11.07.2014 06:48 # +6
Не позорь меня перед толпой
bormand 11.07.2014 06:53 # +6
Ну и императивненько через списковую манду монаду:http://ideone.com/Wu7Y6e
kegdan 11.07.2014 07:11 # +6
http://ideone.com/wsRd9E
Abbath 11.07.2014 11:28 # +7
kegdan 11.07.2014 11:46 # +9
Abbath 11.07.2014 12:19 # +6
kegdan 11.07.2014 12:35 # +6
Lokich 11.07.2014 12:55 # +5
kegdan 11.07.2014 13:10 # +6
Lokich 11.07.2014 13:28 # +6
kegdan 11.07.2014 13:31 # +9
Lokich 11.07.2014 14:14 # +6
kegdan 11.07.2014 14:18 # +7
nihau 14.08.2016 15:43 # +5
bormand 10.07.2014 16:16 # +6
Lokich 10.07.2014 17:13 # +6
kegdan 10.07.2014 17:14 # +6
Fike 10.07.2014 14:13 # +10
ну вот в этой фразе надо было сорок второй пропустить
blackhearted 10.07.2014 17:09 # +5
bormand 10.07.2014 18:59 # +7
> Руку в трусишки ей запустить.
Ну да, помощь с лабой - отличный предлог для распускания рук.
kegdan 11.07.2014 10:27 # +11
- Если только за менет
- Ну а если без него?
- То не выйдет ничего
- Может что нибудь в замен?
- Отсоси - и нет проблем
- Завтра у меня зачет!
- Меня это не ебет
- Препод наш все время злой...
- Так попробуй сдать пиздой
- Любе ты помог, зараза!
- Люба отсосала сразу
- Хочешь пивом заплачу?
- Нет, спасибо, не хочу
- Я же знаю. ты добряк...
- Без минет, Лен, никак.
- Как скажу об этом мужу?
- От него минет не нужен
- Что то больно борзым стал
- Ну так я один лишь сдал
- Я не буду делать это!
- Выбора, Ленуся, нету
- Хрен с тобой, снимай штаны...
- Перед богом все равны
kegdan 11.07.2014 10:38 # +7
3_14dar 13.08.2016 21:46 # −37
kegdan 14.08.2016 03:20 # +6
guesto 13.08.2016 21:49 # −19
надеюсь хоть на с# ты лучше пишешь
Qwertiy 11.07.2014 10:01 # +6
Пусть дальше пишет :D
Кстати, а почему i<255 - а как же 255й?
kegdan 11.07.2014 10:10 # +6
bormand 11.07.2014 10:17 # +6
Их больше. И в один чар они уже не помещаются.
Qwertiy 11.07.2014 10:33 # +6
kegdan 11.07.2014 10:40 # +6
В руби с этим связана забавная херня - есть 2 разные функции которые по разному считают длину строки. Одна посимвольно, другая - "почарово"
1024-- 11.07.2014 11:21 # +6
Я на такую нарвался в MySQL. http://gvforum.ru/viewtopic.php?pid=1839#p1839:
P.S. Про Войну и мир Борманда наврал. Труъ ВиМ на 3.0МБ в комментариях он не написал, но объём первой редакции в 1.8МБ явно превысил.
Рассматривал результаты работы скрипта и увидел число там поменьше. А всё потому, что JS-овское String.prototype.length с UTF-8 работает правильно, а SQL-евское length - честно.
1024-- 13.08.2016 21:37 # +6
Ха! Свыше 27 тысяч комментариев общим объёмом 4.3e6 байт. Не помню только, как я пробелы считал.
6168 пользователей на ГК оставили говнокод/комментарий.
3_14dar 13.08.2016 21:43 # −22
podpidorishe 13.08.2016 21:43 # −16
kegdan 14.08.2016 03:24 # +6
guesto 14.08.2016 04:34 # −17
bormand 14.08.2016 10:17 # +6
Зачем?
kegdan 14.08.2016 11:10 # +6
bormand 14.08.2016 11:13 # +7
Всё попробовать не получится. save-load не завезли.
kegdan 14.08.2016 11:14 # +5
bormand 14.08.2016 11:20 # +5
LispGovno 14.08.2016 11:21 # +5
kegdan 14.08.2016 11:22 # +5
bormand 14.08.2016 11:23 # +5
kegdan 14.08.2016 11:33 # +5
LispGovno 14.08.2016 11:24 # +5
https://pp.vk.me/c617818/v617818200/23676/096sMD6kRzw.jpg
bormand 14.08.2016 11:24 # +5
kegdan 14.08.2016 11:25 # +5
LispGovno 14.08.2016 11:27 # +5
bormand 14.08.2016 11:32 # +6
Гэндовна? :)
kegdan 14.08.2016 11:34 # +5
Soul_re@ver 14.08.2016 11:21 # +7
kegdan 14.08.2016 11:24 # +5
LispGovno 14.08.2016 11:20 # +5
bormand 14.08.2016 11:25 # +5
Отчего же? Просто не ныряет в неё с обрыва...
koodeer 11.07.2014 12:15 # +6
bormand 11.07.2014 12:16 # +9
- байты (для хранения и ввода\вывода)
- символы юникода (не совсем понятно как считать из-за суррогатов, всякого диакритического обвеса, который комбинируется с предыдущим символом, RTL/LTR меток, из-за этого такая длина почти бесполезна)
- знакоместа (для высирания в консоль, например японские иероглифы - 2 знакоместа)
- пиксели (для рисования)
Вроде ниче не забыл?
3_14dar 13.08.2016 21:44 # −33
Нормализация же.
bormand 14.08.2016 10:11 # +5
В которую сторону? Емнип, там было несколько нормальных форм.
З.Ы. Ну не вижу я смысла считать эти символы. Вот байты/знакоместа/пиксели имеют смысл. А символы - нет.
Soul_re@ver 14.08.2016 10:25 # +6
Дано: строка в UTF-8. Надо: Перевести строку в UTF-32.
Сколько памяти выделить под результат?
bormand 14.08.2016 10:27 # +5
Soul_re@ver 14.08.2016 10:38 # +7
inkanus-gray 14.08.2016 11:08 # +6
А что тут думать?
1. Суррогаты существуют только в UTF-16 (ну и в основанных на ней кодировках). Суррогат — это всего лишь представление одного символа в виде пары 16-битных значений.
Просто UTF-16 настолько глубоко проникла в Windows, что некоторые стали считать 16-битный элемент UTF-16 символом, хотя это неправильно.
Итак, о суррогатах думать не нужно. Один суррогат в UTF-16 — это четыре байта или один символ. Точка.
2. Диакритический обвес — да, проблема, если мы путаем символы и знакоместа. Если разделить знакоместа и символы, то всё встаёт на места: буква + N диакритических знаков = 1 знакоместо или (1+N) символов.
Итак, каждый знак ударения, умляут, подчёркивание и т. п. будем считать отдельным символом, но не считать при подсчёте знакомест.
3. RTL/LTR-метки — будем считать чем-то вроде HTML-тегов. Мы же не задаёмся вопросом, сколько символов в коде «<p>текст, <b>жирный текст</b>, <u>подчёркнутый текст</u></p>». RTL-метка — такой же символ, как символ, входящий в HTML-тег. Для исходного кода страницы они будут символами, а в подсчёт знакомест не войдут.
bormand 14.08.2016 11:30 # +6
Ну тогда получается, что в строках "ё" и "е¨" разное количество символов?
З.Ы. Ну ок, code point'ов.
inkanus-gray 14.08.2016 11:42 # +8
Если тебе нужны именно символы естественного языка, то проводи нормализацию (или денормализацию, если хочешь отдельно поработать с диакритикой) и считай количество символов после этой операции.
А сложная функция, которая производит нормализацию «в уме», не нужна.
inkanus-gray 14.08.2016 11:50 # +7
На мой взгляд если хочешь, чтобы 1234 было равно "1234", либо делай явно strval, либо делай явно intval, а оператор сравнения портить нецелесообразно™.
1024-- 14.08.2016 15:02 # +6
== сравнить
=== сравнить глубоко
=0= сравнить как числа (с кастами)
=()= сравнить как кортежи (с кастами)
=@= сравнить как строки (с кастами)
Версию со скобками можно кобенировать с версиями для типов:
=(0,@,(),(=))= - сравнить как кортежи из числа, строки и двух кортежей фиг знает с чем, причём второй кортеж сравнить глубоко.
Развивая тему,
=[+]= сравнение сумм элементов коллекции
=[@+]= сравнение сшитых строк из коллекции
=[sqrt.+.\x->x*x]= сравнение норм векторов
Soul_re@ver 14.08.2016 15:09 # +8
1024-- 14.08.2016 15:12 # +8
inkanus-gray 14.08.2016 15:45 # +7
Sim_salapim 14.08.2016 17:01 # +5
Jinn?!
dxd 14.08.2016 17:57 # 0
LispGovno 14.08.2016 18:35 # 0
1024-- 14.08.2016 18:52 # +2
=O= сравнение строк (вместо нелогичного =@=)
inkanus-gray 14.08.2016 19:39 # 0
3_14dar 14.08.2016 20:10 # −32
void_main 14.08.2016 19:43 # −21
3_14dar 14.08.2016 20:11 # −32
utf-8 это альтернативное представление для utf16 (поправьте если что)
Soul_re@ver 14.08.2016 20:39 # +1
3_14dar 14.08.2016 20:44 # −32
Soul_re@ver 14.08.2016 21:26 # +1
> А у utf8 переход к индексу за O(min( len(str), index*6 ))
UTF-8 предназначен для хранения, передачи и вывода текста, там достаточно последовательной итерации. Если нужно текст обрабатывать (посложнее чем контакенация / нормализация / денормализация) — конвертируй в утф32 и вперёд.
3_14dar 14.08.2016 21:32 # −32
inkanus-gray 14.08.2016 21:34 # 0
А в UTF-16 есть ещё суррогаты: символы, коды которых не помещаются в 16 байт, представляются парой двухбайтовых суррогатов. Так что в UTF-16 кодпоинту может соответствовать 2 байта, а могут 4.
Новомодные смайлики, например, в 16 бит не помещаются.
А в UCS-4 и в UTF-32 всё просто: четыре байта на символ.
*****
К счастью, сдохла UTF-7, которую распарсить было труднее, чем UTF-8. К несчастью, жива Punycode, но к счастью, её применение ограничивается доменными именами.
3_14dar 14.08.2016 21:38 # −32
Soul_re@ver 14.08.2016 21:52 # +1
UCS-4 == UTF-32 — тупо 4 байта отведённые на code-point
UCS-2 существовала, когда считали, что 2 байт хватит на все символы. Когда оказалось, что не хватит, поставили костыль, называющийся UTF-16: добавили суррогаты для не влазящих символов, добавив лишней головной боли.
inkanus-gray 14.08.2016 22:06 # +1
Напишу ещё немного про СУБД.
Оказалось, что в MySQL кодировка, названная utf8, — это не совсем UTF-8, а некая кодировка, вмещающая символы, которые в UTF-8 занимают не более трёх байтов, что совпадает с диапазоном UCS-2.
Кодировку же, вмещающую символы, занимающие в UTF-8 до 4 байт включительно (коды до 1FFFFF), в MySQL назвали utf8mb4, чтобы было нескучно. Эта кодировка вмещает все символы из диапазона UTF-16.
Как думаете, если понадобится полный диапазон UTF-32, то utf8mb6 введут?
Soul_re@ver 14.08.2016 22:10 # 0
inkanus-gray 14.08.2016 21:52 # +1
UCS-2 и UTF-16 совпадают, если код символа не превосходит 0xffff = 65535, т. е. помещается в 16 бит. Однако, в UCS-2 размер представления кодпоинта/символа фиксирован и всегда равен 2 байтам, поэтому она недостаточно разработана, чтобы вместить остальные коды.
А UTF-16 может вместить весь диапазон UTF-32, но некоторые кодпоинты представляются не двумя байтами, а четырьмя. Т. е. с поиском n-го символа и с определением длины строки те же проблемы, что и у UTF-8, хотя тут вариантов меньше. Об этом некоторые забывают, считая UTF-16 двухбайтовой кодировкой.
Есть ещё редкая кодировка CESU-8. Она использует алгоритм UTF-8, только в UTF-8 на вход подаётся UCS-4/UTF-32, а в CESU-8 на вход подаётся UTF-16. Т. е. в общем случае распутать CESU-8 ещё сложнее, чем UTF-8.
Вроде всё, других UCS нет. А, да, в UTF-32 и в UTF-16 порядок следования байтиков может быть разным (большой индеец/маленький индеец).
3_14dar 14.08.2016 22:17 # −31
dxd 14.08.2016 22:33 # 0
CHayT 14.08.2016 22:47 # +2
inkanus-gray 14.08.2016 22:59 # +2
Про ARM:
The Current Program Status Register (CPSR) has the following 32 bits.
M (bits 0–4) is the processor mode bits.
T (bit 5) is the Thumb state bit.
F (bit 6) is the FIQ disable bit.
I (bit 7) is the IRQ disable bit.
A (bit 8) is the imprecise data abort disable bit.
E (bit 9) is the data endianness bit.
IT (bits 10–15 and 25–26) is the if-then state bits.
GE (bits 16–19) is the greater-than-or-equal-to bits.
DNM (bits 20–23) is the do not modify bits.
J (bit 24) is the Java state bit.
Q (bit 27) is the sticky overflow bit.
V (bit 28) is the overflow bit.
C (bit 29) is the carry/borrow/extend bit.
Z (bit 30) is the zero bit.
N (bit 31) is the negative/less than bit.
dxd 15.08.2016 04:45 # 0
3_14dar 14.08.2016 23:46 # −14
Shamill 14.08.2016 23:50 # −14
Soul_re@ver 14.08.2016 21:54 # +3
inkanus-gray 14.08.2016 21:55 # +1
3_14dar 13.08.2016 22:53 # −29
guest 13.08.2016 22:59 # −1
3_14dar 13.08.2016 23:33 # −45
Anal_teacher 14.08.2016 13:02 # −30
3_14dar 14.08.2016 20:13 # −12