Как зарегистрироваться на codewars python
Перейти к содержимому

Как зарегистрироваться на codewars python

  • автор:

Помогите разобраться с ответом от сервера codewars.com!

Она называется Error correction #1 — Hamming Code === Исправление ошибок # 1 — Код Хэмминга Код Хэмминга используется для исправления ошибок, так называемых переворотов битов, при передаче данных. Далее в описании следует подробное объяснение того, как это работает. В этом Кате мы реализуем код Хэмминга с длиной в 3 бита;

Задача 1: функция кодирования Реализуйте функцию кодирования, выполнив следующие шаги: преобразовать каждую букву текста в ее значение ASCII; преобразовать

значения ASCII в 8-битные двоичные файлы; утроить каждый бит;

объединить результат input: «hey» —> 104, 101, 121 // ASCII values —> 01101000, 01100101, 01111001 // binary —> 000111111000111000000000 000111111000000111000111 000111111111111000000111 // tripled —> «000111111000111000000000000111111000000111000111000111111111111000000111» // concatenated Задача 2: функция декодирования: Проверьте, не возникли ли ошибки, и исправьте их. Ошибками будут только перевороты битов, а не потеря битов: 111 -> 101: это может и случится 111 -> 11: этого не может быть Примечание: длина входной строки также всегда делится на 24, так что вы можете преобразовать ее в значение ASCII. Шаги: Разделите ввод на группы по три символа; Проверьте, не произошла ли ошибка: замените каждую группу символом, который встречается чаще всего, например 010 -> 0, 110 -> 1 и т. Д .; Возьмите каждую группу из 8 символов и преобразуйте это двоичное число; Преобразуйте двоичные значения в десятичные (ASCII); Преобразуйте значения ASCII в символы и объедините результат input: «100111111000111001000010000111111000000111001111000111110110111000010111» —> 100, 111, 111, 000, 111, 001, . // triples —> 0, 1, 1, 0, 1, 0, . // corrected bits —> 01101000, 01100101, 01111001 // bytes —> 104, 101, 121 // ASCII values —> «hey»

Вот мои две функции:

import re from string import digits from string import punctuation from string import whitespace def encode(string): lst = [] for el in string: if el in punctuation or el in digits or el in whitespace: # add 1 bit lst.append(bin(ord(el)).replace('b', '0')) else: lst.append(bin(ord(el)).replace('b', '')) K = [] for st in lst: for chars in st: K.append(chars*3) # triple the beats bits = ''.join(K) return bits # get a concatenated string of triple bits def decode(bits): binary = re.sub(r'(\d)', r'\1 ', bits) binary = binary.replace('000', '0').replace('111', '1').replace(' ', '') binary = re.sub(r'(\d)', r'\1 ', binary) binary = binary.split() lst = [] for bi in binary: lst.append(int(bi, 2)) string = '' for el in lst: string += chr(el) return string 

Вот ответ от проверочного сервера:

Passed: 204 Failed: 104 Exit Code: 1 Test encode function ======================> я прохожу Test decode function ==================> у меня не проходит Should work with short word '\x9aI\x93v%' should equal 'hey' Completed in 0.37ms Should work with long word 'U\x1a&U!\x14Ù[\x9cÚV\x92\x07FöÆD\x82me thb]\x12\x06\x92\x066\x16â\t\x91½ this kata' should equal 'The Sensei told me that i can do this kata' 

У меня установлена ОС на базе ядра Linux Ubuntu 20.04.1 Программирую в Thonny(мне кажется тут самый лучший и понятный отладчик) Самое главное в том что у меня в редакторе все получается и кодирование(получение битовой сконкатенированной строки) и декодирование(вставляю сконкатенированную битовую строку) === получаю строку ASCII вот эта строка у меня в редакторе и кодируется и декодируется кодом Хемминга:

The Sensei told me that i can do this kata 

а вот такую «байду» присылает сервер:

U\x1a&U!\x14Ù[\x9cÚV\x92\x07FöÆD\x82me thb]\x12\x06\x92\x066\x16â\t\x91½ this kata 

Как зарегистрироваться на codewars?

Не могу пройти регистрацию на Codewars.com решил задачу по C# ,зарегистрировался на GitHub, но всё равно не пускает нужен то ли клан не могу понять,кто нибудь сталкивался с такой проблемой?Спасибо за ответ

  • Вопрос задан более трёх лет назад
  • 2389 просмотров

10 комментариев

Оценить 10 комментариев

patp0h @patp0h Автор вопроса

da40ace462ac4311a2868dce99c01237.jpg

Уже всё перепробовал))вот на этом застрял, уже всё вводил что можно.

Нужно больше практики.

Нужно больше практики. главное изображение

Если вы хотите больше практических заданий и владеете английским (или хотя бы умеете гуглить перевод), то у меня для вас хорошая новость! Пару дней назад Кирилл подсказал неплохой сайт-тренажер-задачник. Я его опробовал, и теперь опишу свои мысли. Ах да, сервис называется codewars и наверняка кто-то из вас уже слышал о нем.

  • Коротко о коудворс
  • Что такое ката?
  • Как выглядит ката?
  • Альтернативные решения задачи
  • Кланы

Коротко о коудворс

Для меня лично codewars стал местом, где можно попрактиковать технику написания кода + узнать чужие, более интересные техники. Сервис реализован в стиле «восточных единоборств». Сам сайт уже не просто сайт, а – додзё; задачки – ката ; вы – солдат, воин, а не просто студент-программист, а код-ревью – кумите , спарринг. Восточная тематика создает специфическую атмосферу – здесь хочется непрерывно развиваться и становиться искуссным мастером. Порадовала сегментация задачек-ката по сложности. В общем, заходи и развивайся, самурай!

Что такое ката?

Если по-простому, ката – это практическая задачка. Есть несколько уровней сложности: от 8 kyu до 1 kyu (возможно есть и другие, пока что мне не известные). Причем чем ниже кью, тем сложнее задача. Вот так выглядит страница с выбранной катой:

что такое kata в codewars?

Верхний блок: Уровень сложности, название, статистика, выбор языка, «Приступить», «Пропустить». Нижний блок: Детали (условие задачи), Решения (открывается после того, как вы решите задачу), Форк каты, Обсуждения, Добавить в коллекцию (Избранное), кнопки расшаривания.

Как выглядит ката?

Ката выглядит вот так:

как выглядит kata в codewars?

Слева – уровень сложности, название, статистика. Чуть ниже условия задачи и окошко вывода. Сверху справа можно выбрать язык, переключиться на дневной/ночной режим, режим редактора Vim или Emacs, полноэкранный режим. Ниже – окошко для написания решения, часть тестов (да-да, это не все тесты, их на самом деле больше).

Кстати, заметил только что, у меня на 12-дюймовом экране поползла верстка. И кнопки «Запустить Sample tests» и «Подтвердить решение» уплыли вниз за экран, и прокруткой их не достать =( Помогает небольшое сужение экрана по ширине.

Альтернативные решения задачи

Очень классно, что после прохождения каты можно увидеть решения других бойцов. Также интересна сортировка: Лучшая практика – рекомендуем использовать эти решения; креативность – красиво, интересно, но в продакшн лучше такое не писать; новые – новые решения вперед, старые – вначале старые решения. Т.е. сразу учимся и практичности, и креативности.

альтернативные решения

Кланы

При регистрации можно вступить в определенный клан. У нас он тоже есть — Hexlet. Для чего вступать в клан? Чтобы гордиться тем, что ты часть чего-то большего, а не просто одинокий самурай. Чтобы видеть прогресс других воинов в твоем клане и не отставать. Чтобы потом обсуждать решения ката с ребятами в Telegram-сообществе (чаще всего ники и там, и там одни и те же). А может чтобы посоревноваться и завоевать первое место в своем клане.

кланы на codewars

Регистрируйтесь на codewars, вступайте в клан Hexlet, практикуйтесь, развивайтесь, соревнуйтесь и становитесь мастерами, а возможно и сенсеями в будущем! Если вы знаете еще какие-то фишки codewars, напишите о них в комментариях.

P.S. Вообще ката, кумите и все остальное – это термины из карате-до, насколько я понял =)

Задача с CodeWars: Простой интерпретатор ассемблера

Не понимаю где я допустил ошибку. Вот условие задачи (через переводчик все прогнал, поэтому могут быть некоторые несущественные неточности):

Мы хотим создать простой интерпретатор ассемблера, который будет поддерживать следующие инструкции: - mov x y - копирует y(либо постоянное значение, либо содержимое регистра) в регистр x - inc x - увеличивает содержимое реестра x на единицу - dec x - уменьшает содержимое регистра x на единицу - jnz x y - переходит к инструкции y на шаг вперед (положительное значение означает вперед, отрицательное означает назад, y может быть регистром или константой), но только если x(константа или регистр) не равна нулю Имена регистров указываются в алфавитном порядке (только буквы). Константы всегда являются целыми числами (положительными или отрицательными). Примечание: jnz инструкция перемещается относительно самой себя. Например, смещение -1 будет продолжаться с предыдущей инструкции, а смещение 2 будет пропускать следующую инструкцию. Функция примет входной список с последовательностью инструкций программы и выполнит их. Программа завершается, когда больше нет инструкций для выполнения, и возвращает словарь (таблицу в COBOL) с содержимым регистров. Кроме того, каждому inc// в регистре всегда будет предшествовать a в регистре, поэтому вам не нужно беспокоиться о неинициализированных регистрах dec jnz mov. 
["mov a 5"; "inc a"; "dec a"; "dec a"; "jnz a -1"; "inc a"] visualized: mov a 5 inc a dec a dec a jnz a -1 inc a 

Приведенный выше код в словах:

установите a для регистрации значение 5, увеличить его стоимость на 1, уменьшить его значение на 2, затем уменьшайте его значение, пока оно не станет равным нулю ( jnz a -1 переход к предыдущей инструкции, если a оно не равно нулю) а затем увеличить его значение на 1, оставив регистр a равным 1 

функция должна вернуть:

мое решение:

class Interpreter: counter = 0 program = None def __init__(self): self.regs = <> def mov(self, val_1: str, val_2: str): if val_2.isalpha(): val_2 = self.regs[val_2] self.regs[val_1] = int(val_2) def inc(self, reg: str): self.regs[reg] += 1 def dec(self, reg: str): self.regs[reg] -= 1 def simple_assembler(program): len_ = len(program) ex = Interpreter() Interpreter.program = program while Interpreter.counter < len_: spl = Interpreter.program[Interpreter.counter].split() try: controller(spl[0], spl[1], spl[2], ex=ex) except IndexError: controller(spl[0], spl[1], ex=ex) Interpreter.counter = 0 Interpreter.program = None return ex.regs def controller(instruction, val_1, val_2=None, ex=None): if not val_2: match instruction: case 'inc': ex.inc(val_1) case 'dec': ex.dec(val_1) else: match instruction: case 'mov': ex.mov(val_1, val_2) case 'jnz': if val_1.isalpha(): val = val_1 if ex.regs[val] s1 = '''\ mov a 5 inc a dec a dec a jnz a -1 inc a''' # вторая и последняя тестовая строка из базовых тестов, у меня получается ответ: # , а правильный: s2 = '''\ mov c 12 mov b 0 mov a 200 dec a inc b jnz a -2 dec c mov a b jnz c -5 jnz 0 1 mov c a''' # print(simple_assembler(s1.splitlines())) print(simple_assembler(s2.splitlines())) 

Мне бы понять, что я делаю не так: неправильно понимаю логику работы некоторых инструкций? Например, jnz x y , как я понимаю, должен перебрасывать "указатель" выполнения на y шагов в зависимости от знака, и выбирать инструкцию, которая располагается на получившийся позиции с регистром x , если конечно число x != 0 или его содержимое, если x - это регистр. А после этого инструкции идут также по порядку или управление возвращается сразу к jnz ?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *