Кодекс Гольфа - Nesca: Новый Английский Алфавит Для Подсчета Ударов

  • Автор темы Tan1967
  • Обновлено
  • 23, Oct 2024
  • #1

TLDR: Отсортируйте вводимые данные в соответствии с новым английским алфавитом, основанным на китайских методах подсчета штрихов.

Фон: В китайском глоссарии/указателе поиск терминов, содержащихся в книге, отличается от поиска в английском языке, поскольку в китайском нет такого алфавита, как в английском, вместо этого они сортируются по количеству штрихов. "enough examples no more words" / "enough examples no more words"

Английский глоссарий, имеющий алфавит, естественно отсортирован в алфавитном порядке. В этой задаче мы несколько изменим эту идею, чтобы следовать китайской манере. И мы будем следовать некоторым правилам китайского письма, чтобы определить порядок штрихов в приведенном ниже алфавите.

Подсчет ударов: Возьмем, к примеру, 口 (коу), простой квадрат. Вы могли бы подумать, что это 4 штриха, но на самом деле их 3. Первый — это левая вертикальная линия. Второй — верхняя горизонталь и правая вертикаль одним плавным движением, образуя угол. А третья — нижняя горизонтальная линия, завершающая квадрат. Эта закономерность, среди прочего, относительно верна для китайских иероглифов. Однако для простоты и для некоторого разнообразия в английском алфавите подсчета штрихов есть несколько субъективный выбор для подсчета ударов.

Определение NESCA Во-первых, мне нужно определить количество штрихов для каждой буквы. Для простоты и несколько субъективно, я буду использовать символы, как они представлены ниже. Если есть какие-либо аргументы, почему в букве должно быть разное количество штрихов, изложите свои аргументы, но, опять же, чтобы способствовать разнообразию в количестве штрихов, я высказал несколько личных суждений. Например, "Can you tell that I am a Star Wars fan" / "Can Star a am fan tell that you I Wars" could arguably be done in 2 strokes, where each stroke makes a "Failure the best teacher is" / "best teacher the Failure is" форму, но если бы так было с каждой буквой, этот новый алфавит по существу напоминал бы оригинал. Отсюда мой субъективный выбор количества ударов. (Для тех, кто также читает/говорит на мандаринском языке, 不好意思!)

"Do or DO not there is no try" / "or DO Do no not there try" is"

"Code Golf and Coding Challenges" / "Code Coding Challenges and Golf"

"We suffer more often In imagination than IN reality" / "often suffer reality than In IN imagination more We"

"jello Jello JellO JEllo jellO JELlo JELlO jEllo JELLO JelLo JeLlo" / "JeLlo JelLo JellO Jello JELLO JELlO JELlo JEllo jellO jello jEllo"

Буквы с одинаковым количеством штрихов должны сохранять исходный алфавитный порядок, как и раньше. Единственным решающим фактором должны быть прописные и строчные буквы с одинаковым количеством штрихов. "Im going to make him an offer hE cant refuse" / "cant offer an going him hE refuse to Im make" So the English Stroke Order Alphabet is as follows. (If I made an error, please say as much, there are a lot of examples that I might have to adjust)

НЕСКА

"May the Force be with you" / "be the you Force May with"

"Close our store and begin destroying every flower green house just lose no people quietly rather than using vexing xrays yesterday it killed Zachs mini wombat" / Same as input

а точнее...

"Carry on my wayward son" / "Carry on son my wayward"

"A man a plan a canal panama" / "canal a a panama plan A man"

Примечание 1: Тай-брейки — если прописные и строчные буквы одной и той же буквы имеют одинаковое количество штрихов, прописные буквы имеют приоритет.

  • «Двоюродный брат» предшествует слову «кузен».
  • «Отец» предшествует «Отцу» (поскольку строчная буква f равна 2 штрихам, а заглавная — 3)
  • «Стоп» предшествует «мылу» (хотя в счетчике штрихов буква «о» предшествует букве «t», буква «S» в верхнем регистре предшествует строчной «s»)
  • КО предшествует kO (K предшествует k)
  • кО предшествует ко (О предшествует о)
  • make предшествует When (оба имеют 4 штриха, но m предшествует W в исходном алфавите)

Примечание 2: Ввод никогда не будет содержать цифр, знаков препинания или специальных символов и не будет пустым.

Примечание 3: В качестве меры предосторожности я оставил это испытание в Песочнице на 2 недели. Я боюсь, что многие люди будут возражать против моих субъективных решений в определении этого алфавита (особенно буквы "English Stroke Count Alphabet" / "Count Stroke Alphabet English" ). I merely tried to allow for a very new and very different alphabet, and to add more diversity to Challenges.

Вызов Учитывая входную строку, содержащую предложение, серию слов или список слов, организуйте эти слова в соответствии с NESCA. Вывод может быть либо строкой, либо списком правильных слов — это одна строка правильно организованных слов, включая дубликаты, если они существуют.

РЕДАКТИРОВАТЬ По просьбе пользователей я изменил свои примеры, чтобы они представляли собой один согласованный формат ввода/вывода. Мои примеры форматов можно найти здесь, а точные примеры можно найти в истории изменений.

  • Пример формата 1 "The journey of a thousand miles begins with one step" / "of one step a begins journey The thousand miles with"

  • Пример формата 2 "When life gives you lemons make Lemonade" / "gives Lemonade lemons life you make When"

  • Пример формата 3 "It was the best of times it was the worst of tImes" / "of of best the the tImes times It it worst was was"

  • Любой подходящий формат для вашего языка в соответствии со стандартами сообщества.

Ввод/вывод

["INPUT", "HERE"] / ["OUTPUT", "HERE"]

[INPUT HERE] / [OUTPUT HERE]

"INPUT HERE" / "OUTPUT HERE"

g

1111111122222222222222222222222222333333333333344444

CcJOoSsUabDdefGghjLlnPpQqrTtuVvXxyABFHIiKkNRYZzEMmWw

c o s a b d e f g h j l n p q r t u v x y i k m z w (If you can write a better sentence than above, I'd be much appreciated. I'd gift reputation, but I don't know how)

C J O S U D G L P Q T V X A B F H I K N R Y Z E M W

C and c, O and o, S and s, D and d, etc.

2 2 1 2 2 2 2 2 3 2 3 2 3 2 1 2 2 2 1 2 2 2 4 2 2 3 (Annoyed? Me too!)

a b c d e f g h i j k l m n o p q r s t u v w x y z

3 3 1 2 4 3 2 3 3 1 3 2 4 3 1 2 2 3 1 2 1 2 4 2 3 3

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

v

W

(一畫 = 1 stroke,二畫 = 2 strokes,三畫 = 3 strokes,四畫 = 4 strokes,and so on)

#код-гольф #сортировка #алфавит

Tan1967


Рег
13 Dec, 2008

Тем
64

Постов
199

Баллов
539
  • 26, Oct 2024
  • #2

Япт, 53 байты

Ввод-вывод как массив слов. я не смог бежать все тестовые примеры, потому что попытка форматировать входные данные для них всех на моем телефоне меня бесила.

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 Σε•...•4Bžnø{Ssk  # trimmed program

# implicit input...
Σ                 # sorted by...

sk  # index of...

# (implicit) current element in...

ε                # map over letters of...

# (implicit) current element in sort...

sk  # in...

# (implicit) flat...

S    # list of characters in...

# (implicit) each element of...

{     # sorted list of...

# (implicit) all elements of...

•...•           # 12827082404216683880457031718358...

B         # in base...

4          # literal...

ø      # with each element paired with corresponding element from...

žn       # "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"

# implicit output
 

Попробуйте это (заголовок разбивает входные строки на пробелы)

 

Dakc


Рег
10 Nov, 2011

Тем
88

Постов
180

Баллов
640
  • 26, Oct 2024
  • #3

ServerN


Рег
21 Apr, 2020

Тем
87

Постов
192

Баллов
647
  • 26, Oct 2024
  • #5

Р, 159 134 125 байт

AaBbC...Zz

Попробуйте онлайн!

Благодаря Доминик ван Эссен для -7 байт.

Как и другие, переведите символы в строке, используя 2121001131211121220122113321001111210011011133112122 into an appropriate ”)“∧·¹]↗¿¤≕τB}VC↘” , затем отсортируйте строки, используя это ≔?⁴э⌕A”)“∧·¹]↗¿¤≕τB}VC↘”Iι§эα⁺ν↧νλη .

Порядок сортировки по умолчанию при установке R на TIO: ≔?⁴э⌕A”)“∧·¹]↗¿¤≕τB}VC↘”Iι§эα⁺ν↧νληUэθEι⌕ηλW⁻θυF№θ⌊ι⊞υ⌊ιEυэι§ηλ , is very odd: while, for instance, i for i=x приходит раньше collect(x) , l->sort(l,by=x->findlast.(i for i=x,"CcJOoSsUabDdefGghjLlnPpQqrTtuVvXxyABFHIiKkNRYZzEMmWw")) приходит после “...’b4żØẠŒuÞFiⱮµÞ - Link: words µÞ - sort (words) by this monadic chain, f(word): “...’ - base 250 literal = 12827082404216683880457031718358 b4 - in base 4 -> 2201321220213201120101312211011111212121011101113112 ØẠ - alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" ż - zip -> [[2,'A'],[2,'B'],[0,'C'],...,[2,'z']] Þ - sort by: Œu - to upper-case -> [[0,'C'],[0,'c'],[0,'J'],...,[3,'w']] F - flatten -> [0,'C',0,'c',0,'J',...,3,'w'] Ɱ - for each character, c, in word: i - index (of c) in (that) (those being the translations of "and" and "begin" in the unchanged test case). So I switch to an ASCII locale, which compares by byte value instead.

 

Андрей Дураев


Рег
21 Oct, 2020

Тем
75

Постов
208

Баллов
613
  • 26, Oct 2024
  • #6

05AB1E, 38 байты

“ẹ1ʋỴḂỤ$*Ɗż©zk’b4żØẠŒuÞFiⱮµÞ

Ввод-вывод в виде списка символов.

Порт @xigoi's Jelly ответ, так что обязательно проголосуйте за него/нее!

Попробуйте онлайн или проверить все тестовые случаи.

Объяснение:

func[b][forall b[b/1: collect[foreach c b/1[keep index? find/case"CcJOoSsUabDdefGghjLlnPpQqrTtuVvXxyABFHIiKkNRYZzEMmWw"c]keep b/1]]sort b forall b[b/1: last b/1]]

См. мой совет по 05AB1E (раздел Как сжать большие целые числа?) чтобы понять, почему { } a function with parameter x "CcJOoSsUabDdefGghjLlnPpQqrTtuVvXxyABFHIiKkNRYZzEMmWw"?x find the indeces of each character of the input words in the list of stroke counts < grade down x@ take the words at the graded down indeces is {x@<"CcJOoSsUabDdefGghjLlnPpQqrTtuVvXxyABFHIiKkNRYZzEMmWw"?x} . (Обратите внимание, что это число на 1 меньше, чем число, использованное в ответе Jelly, поскольку 05AB1E использует индексацию с отсчетом от 0, а Jelly вместо этого использует индексацию с отсчетом от 1. Это число генерируется с помощью l Jelly builtin.)

 

MosconeeLox29


Рег
04 Apr, 2006

Тем
84

Постов
210

Баллов
650
  • 26, Oct 2024
  • #8

Ретина 0.8.2, 141 байт

T`CcJ\O\oSsUabD\defGg\hj\L\lnP\pQqrTtuVvXxyABF\HIiKkNRYZz\EMmW\w`Ll O`\w+ T`Ll`CcJ\O\oSsUabD\defGg\hj\L\lnP\pQqrTtuVvXxyABF\HIiKkNRYZz\EMmW\w

Попробуйте онлайн! Ссылка включает тестовые примеры. Объяснение: Просто заменяет все буквы другими буквами в желаемом порядке сортировки, затем заменяет их обратно после сортировки слов по порядку. Обратите внимание, что в транслитерации есть несколько сокращенных букв (например, a=>a.sort((a,b)=>(g=s=>[...s].map(c=>"CcJOoSsUabDdefGghjLlnPpQqrTtuVvXxyABFHIiKkNRYZzEMmWw".search(c)+10))(a)>g(b)||-1) and œ¿ конечно), которые необходимо указать в основном списке.

 

Makc74


Рег
29 Dec, 2004

Тем
92

Постов
204

Баллов
694
  • 26, Oct 2024
  • #9

К (нгн/к), 61 байт

3928442642485912187600397757783525135099072511850472479412437675482

Попробуйте онлайн!

Принимает входные данные в виде списка слов; возвращает список слов.

•f[эθ$Ÿ)*:™ûò0Æì+Ω£µ¥.—g"Ý»θä• ||answer||

Красный, 162 байта

Σ # Sort the (implicit) input-list by: žn # Push the constant string "ABC...XYZabc...xyz" S # Convert it to a list of characters •f[эθ$Ÿ)*:™ûò0Æì+Ω£µ¥.—g"Ý»θä• "# Push compressed integer 3928442642485912187600397757783525135099072511850472479412437675482 .I # Get the 392...482nd permutation of the character-list s # Swap to get the current list of characters k # And get the index of each character in the permutation # (we sort on those lists of indices) # (after which the sorted list is output implicitly as result)

Попробуйте онлайн!

 

pymnPymnutime


Рег
09 May, 2011

Тем
68

Постов
203

Баллов
563
  • 26, Oct 2024
  • #10

Желе, 28 байты

ΣžnS•f[эθ$Ÿ)*:™ûò0Æì+Ω£µ¥.—g"Ý»θä•.Isk

Монадическая ссылка, принимающая и выдающая список слов (каждое из которых представляет собой список символов).

Попробуйте онлайн! Или посмотрите набор тестов.

Как?

EgHTk ||answer||

Юля 1.0, 93 92 байта

ekF

Попробуйте онлайн!

работает с Юлей > 1.3

использует в качестве ввода и вывода список слов

на основе этот ответ @Noodle9

редактировать: заменить E with e (-1 байт)

 

Кольмарыч


Рег
21 Aug, 2011

Тем
68

Постов
184

Баллов
524
  • 26, Oct 2024
  • #11

Древесный уголь, 72 63 байта

en_US.UTF8

Попробуйте онлайн! Ссылка на подробную версию кода. Частично вдохновлен ответом @JonathanAllan. Принимает входные данные в виде списка и выводит отсортированные слова в отдельные строки. Объяснение:

order

Сжатая строка order expands to chartr который представляет уменьшенное количество штрихов каждой буквы в порядке icuSetCollate(locale="ASCII");s=scan(,"");s[order(chartr("CcJOoSsUabDdefGghjLlnPpQqrTtuVvXxyABFHIiKkNRYZzEMmWw","A-Za-z",s))] . The NESCA is then calculated by extracting the relevant letters in order of stroke count.

lambda s:s.sort(key=lambda k:[*map("CcJOoSsUabDdefGghjLlnPpQqrTtuVvXxyABFHIiKkNRYZzEMmWw".find,k)])

Замените каждую строку массивом целочисленных смещений в NESCA.

sub t{pop=~y/CcJOoSsUabDdefGghjLlnPpQqrTtuVvXxyABFHIiKkNRYZzEMmWw/A-z/r}say for sort{t($a)cmp t$b}@F

Для каждого уникального слова в списке в порядке возрастания переместите каждое вхождение в отсортированный список. ( -a filters out all matches, so we have to explicitly push the duplicates.)

“...’œэØẠ¤w)Þ Main monadic link Þ Sort by ) Map [over each letter in a given word] w Find index of subsequence in ¤ ( “...’ 3928442642485912187600397757783525135099072511850472479412437675483 œ? rd permutation of ØẠ the string "ABC...XYZabc...xyz" ¤ )

Восстановите каждый целочисленный массив до исходной строки и выведите каждую строку в отдельной строке.

 

Plf876skestSoky


Рег
18 Apr, 2006

Тем
73

Постов
182

Баллов
557
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно