- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
# https://www.opennet.ru/opennews/art.shtml?num=53248
# Гвидо ван Россум предложил включить в Python операторы для сопоставления с образцом
# Отмечается, что предложенные операторы позволят улучшить читаемость кода,
# упростят сопоставление произвольных Python-объектов и отладку, а также повысят
# надёжность кода благодаря возможности расширенной статической проверки типов.
def http_error(status):
match status:
case 400:
return "Bad request"
case 401|403|404:
return "Not allowed"
case 418:
return "I'm a teapot"
case _:
return "Something else"
# Например, возможна распаковка объектов, кортежей, списков и произвольных последовательностей
# для привязки переменных на основе имеющихся значений. Допускается определение вложенных
# шаблонов, использование в шаблоне дополнительных условий "if", применение масок ("[x, y, *rest]"),
# маппинга связок ключ/значение (например, {"bandwidth": b, "latency": l} для извлечения значений
# "bandwidth" и "latency" и словаря), извлечения подшаблонов (оператор ":="), использования именованных
# констант в шаблоне. В классах возможна настройка поведения при сопоставлении при помощи метода "__match__()".
from dataclasses import dataclass
@dataclass
class Point:
x: int
y: int
def whereis(point):
match point:
case Point(0, 0):
print("Origin")
case Point(0, y):
print(f"Y={y}")
case Point(x, 0):
print(f"X={x}")
case Point():
print("Somewhere else")
case _:
print("Not a point")
match point:
case Point(x, y) if x == y:
print(f"Y=X at {x}")
case Point(x, y):
print(f"Not on the diagonal")
RED, GREEN, BLUE = 0, 1, 2
match color:
case .RED:
print("I see red!")
case .GREEN:
print("Grass is green")
case .BLU
E:
print("I'm feeling the blues :(")
j123123 28.06.2020 22:48 # 0
> Python этим то и хорош, что не тащить всякий мусор в виде дублирующих операторов!
> Посмотрите что с С++ сотворили, чужие исходники читать трудновато.
> Меньше операторов это главное что отличает современные языки вроде Go, Rust в результате читаемость чужих исходников резко повышается!
Предлагаю Brainfuck: там всего 8 операторов '+', '-', '<', '>', '[', ']', '.', ','
nemyx 29.06.2020 06:28 # 0
Rooster 29.06.2020 11:01 # 0
nemyx 29.06.2020 12:18 # 0
Или такая идея: вызывать какую-нибудь функцию, которая будет реализовывать это фоллсру:
Rooster 29.06.2020 12:36 # 0
Именно поэтому я за https://www.jsoftware.com/help/dictionary/csel.htm
MAKAKA 29.06.2020 16:31 # 0
j123123 29.06.2020 21:15 # 0
gost 29.06.2020 21:31 # +2
guest8 29.06.2020 22:42 # −999
gost 29.06.2020 22:48 # 0
guest8 29.06.2020 23:10 # −999
gost 29.06.2020 23:24 # 0
bormand 29.06.2020 23:36 # 0
guest8 29.06.2020 23:47 # −999
bormand 29.06.2020 23:50 # 0
bootcamp_dropout 30.06.2020 17:55 # +2
nemyx 29.06.2020 18:56 # 0
BOKCEJIbHblu_nemyx 29.06.2020 18:59 # +2
bormand 29.06.2020 19:17 # 0
Fike 30.06.2020 00:36 # 0
nemyx 30.06.2020 00:55 # 0
bormand 30.06.2020 01:17 # +1
push dword 0
pop eax
zero dd 0
...
mov eax, [zero]
bormand 30.06.2020 01:24 # 0
bormand 30.06.2020 01:28 # +1
...
push offset zero
call _atoi
bormand 30.06.2020 01:30 # 0
j123123 30.06.2020 01:49 # +1
sal eax, 32
j123123 30.06.2020 01:58 # 0
bormand 30.06.2020 08:14 # 0
bormand 30.06.2020 09:05 # 0
shr eax, 16
shr eax, 16
shl eax, 16
shl eax, 16
Ну или shr rax, 32 и забить на старшие биты. Сами отвалятся после 32-битных операций.
Fike 30.06.2020 03:27 # +2
BTR eax, 1
BTR eax, 2
BTR eax, 3
BTR eax, 4
BTR eax, 5
BTR eax, 6
BTR eax, 7
BTR eax, 8
BTR eax, 9
BTR eax, 10
BTR eax, 11
BTR eax, 12
BTR eax, 13
BTR eax, 14
BTR eax, 15
BTR eax, 16
BTR eax, 17
BTR eax, 18
BTR eax, 19
BTR eax, 20
BTR eax, 21
BTR eax, 22
BTR eax, 23
BTR eax, 24
BTR eax, 25
BTR eax, 26
BTR eax, 27
BTR eax, 28
BTR eax, 29
BTR eax, 30
BTR eax, 31
Fike 30.06.2020 03:28 # 0
nemyx 30.06.2020 20:36 # +1
MAKAKA 30.06.2020 21:46 # 0
bormand 30.06.2020 21:47 # 0
MAKAKA 02.07.2020 17:18 # 0
Я думал, просто ANDят с нужным числом, где нолики везде, кроме нужного бита.
Но получается гораздо больше действий
bormand 02.07.2020 17:21 # 0
MAKAKA 02.07.2020 17:27 # 0
Я делал когда-то так:
Вроде, работало.
Но через инструкцию правда круче.
Ты можешь просто сказать "дай мне бит номер 3" без всей этой ебли c эндом
bormand 02.07.2020 17:33 # 0
MAKAKA 02.07.2020 17:35 # 0
Как-то так случалось, то у меня не было неизвестного n, и даже наоборот: у меня была переменная, и я знал все флаги (или сам их писал, или брал из SDK)
jojaxon 02.07.2020 17:42 # 0
И долго не мог понять, где обосрался. Да еще и дважды.
Прост в другом месте было == 0. Вот и инвертировал.
gost 02.07.2020 17:45 # 0
Видел, как некоторые пишут
и не обсираются. Наверное, тоже боятся неявных кастов в буль-буль.
MAKAKA 02.07.2020 17:47 # 0
bormand 02.07.2020 17:51 # 0
MAKAKA 02.07.2020 17:53 # 0
3.14159265 03.07.2020 19:16 # 0
>Я делал когда-то так:
>#define PETUH_BIT 0x10
>if (flags & PETUH_BIT)
Нееее. Анскильные макаки делали примерно так:
gost 03.07.2020 19:18 # 0
Это уж скорее анскильные ма-те-ма-ти-ки.
3.14159265 03.07.2020 19:28 # 0
gost 03.07.2020 19:35 # 0
А потом начали сдвигать, потому что деления не было плавающий питух тормозит.
nemyx 30.06.2020 21:54 # 0
MAKAKA 02.07.2020 17:56 # 0
Я просто привык, что все ANDят с числом, но с этой инструкией удобнее.
Вспомнил как впервые я первые познакомился с битовой питушней.
Я был совсем мелким пзидюком, и писал чото под турбовижен кажется, и спросил препода "как проверить, какие из чекбоксов влкючены", а он и говорит "вот тут число, в нем каждый бит это факт включения чекбокса".
Если память не спит с другим, то так оно всё и было
nemyx 30.06.2020 21:59 # 0
Одна из них считает целую часть логарифма по основанию 2 исходного аргумента, а другая находит логарифм по основанию 2 наибольшего делителя, являющегося степенью двойки.
3.14159265 03.07.2020 19:23 # +1
nemyx 03.07.2020 19:25 # 0
3.14159265 03.07.2020 19:27 # 0
gost 03.07.2020 19:26 # 0
Fike 30.06.2020 03:37 # +1
mov eax, 0xFFFFFFFF
cpuid
bormand 30.06.2020 09:08 # 0
nemyx 30.06.2020 21:05 # 0
bormand 30.06.2020 21:18 # 0
З.Ы. А тьфу, для scasd уже понадобится 0. Придётся просто загружать и тестить.
bormand 30.06.2020 21:25 # 0
Ну в современных осях тоже должны найтись нули в тредлокал сегменте, на который ссылаются FS или GS.
bormand 30.06.2020 21:34 # 0
guest8 30.06.2020 04:11 # −999
bormand 30.06.2020 11:06 # +1
dec eax
jnz loop
Брейнфак-стайл.
nemyx 30.06.2020 21:15 # 0
3.14159265 03.07.2020 19:21 # +1
Странно что никто не предложил такой способ
bormand 30.06.2020 11:09 # +1
Какой анролл )))
j123123 30.06.2020 20:09 # +2
http://z0mbie.daemonlab.org/21zero.html
nemyx 30.06.2020 20:30 # 0
>> вот чего тут нет - так это полных извращений, типа обнуления по одному
биту, автогенерируемого кода и т.п.
Придётся устранить это недоразумение. Есть идеи?
bormand 30.06.2020 20:32 # +1
nemyx 30.06.2020 20:34 # 0
Осталось только позвать автогенерируемого кота.
bormand 30.06.2020 20:38 # 0
Мой пример с times 32. Он в 32 сложения раскроется.
nemyx 30.06.2020 20:47 # 0
bormand 30.06.2020 21:24 # 0
Но можно найти в библиотеках фрагменты, которые зануляют eax и возвращают управление. Они должны очень часто встречаться в сишном коде.
3.14159265 03.07.2020 19:22 # 0
Хм. Это первое что пришло мне в голову, когда посоны объявили спец. олимпиаду.
MAKAKA 02.07.2020 17:33 # 0
MAKAKA 02.07.2020 17:34 # 0
это лучший имхо
guest8 30.06.2020 05:36 # −999
bormand 30.06.2020 08:15 # 0
bormand 30.06.2020 09:02 # 0
j123123 30.06.2020 21:54 # +1
guest8 30.06.2020 05:42 # −999
guest8 30.06.2020 06:03 # −999
w-495 25.08.2021 18:34 # 0