Сортировка строки в алфавитном порядке с использованием сборки

Вот что мне пришлось сделать:

Я использовал jest-fetch-mock для издевательства над запросами.

обещание быть правильно отклонено, мне пришлось переопределить аргумент init функции mockResponseOnce.

Вот как закончилось испытание:

  it("recognizes when a response's status is not okay", () => {
    fetch.mockResponseOnce(JSON.stringify({ someResponse: "someResponse" }), { status: 403 });
    expect.assertions(1);

    return getRequestWithHeader(fullTestUrl, article).catch(err => {
      expect(err.someResponse).toEqual("someResponse");
    });
  });

Установив статус явно, он автоматически устанавливает ok: false в ответе, вызывая функцию.

Я также применил советы SomePerfomance и реорганизовал такую ​​функцию:

export const getRequestWithoutHeader = fullUrlRoute =>
  fetch(fullUrlRoute)
    .then(response => {
      if (!response.ok) {
        return Promise.reject(response);
      }
      return response.json();
    })

0
задан Rafael 19 January 2019 в 22:16
поделиться

1 ответ

Вы описываете простой алгоритм Bubble Sort в соответствии с http://en.wikipedia.org/wiki/Bubble_sort :

Bubble sort animation

[ 116] «.string» - это просто массив символов. Последний символ имеет значение 0, чтобы определить конец строки. Символ кодируется как 8-битное значение. Таким образом, вам нужно только использовать 8-битные регистры процессора (AL, AH, DL, DH и т. Д.) Для их обработки. Вы можете использовать 32-битные расширенные регистры (EAX, EBX, ECX, EDX и т. Д.), Но это излишне усложняет ситуацию.

Bubble Sort требуется две вложенные петли. В этом случае бесконечный внешний цикл, который заканчивается, когда строка сортируется, и внутренний цикл, который обрабатывает каждый символ.

Следующий пример очень прост. Например, последнее отсортированное письмо излишне сравнивается снова и снова. У этого есть большой потенциал для улучшения:

#   Name:               bubblesort.s
#   Assemble & link:    gcc -m32 -obubblesort bubblesort.s
#   Run:                ./bubblesort

.data
fmt: .string "%s\n"
str: .string "lhtgbvfmjnbcdsaawcfr"

.text
.global main
main:

    pushl $str                  # Address of str onto the stack
    pushl $fmt                  # Address of fmt onto the stack
    call printf                 # Call libc: printf(fmt,str)
    addl $(4*2), %esp           # Adjust the stack by 2 PUSHes

    O1:                         # Outer loop ends when everything is sorted (swapped == false)
    movl $str, %esi
    movb [110], %dl                # swapped = false

    I1:                         # Inner loop: every character
    movb (%esi), %al
    movb 1(%esi), %ah
    cmpb [110], %ah                # End of string?
    je O2                       # Yes -> exit inner loop

    cmpb %ah, %al               # Compare the characters
    jbe I2                      # If AL < AH, don't swap the characters
    movb $1, %dl                # swapped = true
    movb %al, 1(%esi)           # Swap: Store the characters in reversed order
    movb %ah, (%esi)

    I2:
    incl %esi                   # Next character
    jmp I1

    O2:
    pushal                      # Preserve all registers
    pushl $str                  # Address of str onto the stack
    pushl $fmt                  # Address of fmt onto the stack
    call printf                 # Call libc: printf(fmt,str)
    addl $(4*2), %esp           # Adjust the stack by 2 PUSHes
    popal                       # Restore all registers

    cmpb $1, %dl                # swapped == true?
    je O1                       # Yes -> one more outer loop

    Done:
    ret                         # Return: exit the main function

И вот еще одна «оживленная» иллюстрация:

https://www.youtube.com/watch?v= lyZQPjUT5B4

0
ответ дан rkhb 19 January 2019 в 22:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: