Codegolf — Четные-Нечетные Куски

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

(Вдохновлено утилитой Keg этот испытание)

Учитывая непустой входная строка, например

 
 
 
 s c 1;= e(a"E")
 
, split the input into even-odd chunks.

Пример (не стесняйтесь предлагать больше)

Я могу думать только об этом тестовом примере, поэтому могу предложить больше.

Эта входная строка, сопоставленная с ее кодовыми точками, дает список ; . When applied modulo-2 for every item, this returns [1, 0, 1, 0, 1, 1] .

В этом списке давайте найдем максимально длинный фрагмент, соответствующий четным и нечетным кодам:

Even Odd Even Odd Even Odd ...

Для первого фрагмента это дает Odd Even Odd Even Odd Even ... because this is the longest chunk that follows the pattern

[1, 0, 1, 0, 1]

или

[1, 0, 1, 0, 1], [1, 0, 1, 0, 1, 0, 1, 0, 1]

. Добавление еще одного кода в [1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1] breaks the pattern, therefore it is the longest possible even-odd chunk that starts from the beginning of the string.

Используя этот метод, мы должны разделить входные данные на фрагменты, чтобы применить это правило. Поэтому вход становится ( [115, 32, 99, 32, 49, 61, 32, 101, 40, 97, 34, 69, 34, 41] here is simply a separator; this can be any separator that is not an empty string, Включая саму строку):

s c 1= e(a"E")

Однако возврат списка строк также разрешен.

Правила

  • Таким образом, побеждает самое короткое решение. Дайте знать, что флаги не учитываются при включении в шаблон. Они также не учитываются при подсчете байтов в этом задании.

  • Ввод будет только в формате ASCII, и отображение будет всегда быть в ASCII (насколько я могу судить, большинство игроков в гольф используют расширенный набор ASCII).

Отвечаю на некоторые комментарии

  • Вы можете выводить строки в виде списков кодовых точек.

  • «Любой разделитель» включает в себя сама входная строка.

  • Ты может вставьте другие символы, такие как ответ MATL, например буквенно-цифровые символы.

  • Ты может не используйте целые числа в качестве входных данных вместо ASCII. Это упростит задачу.

#код-гольф #код-гольф #строка #подпоследовательность

Lorefak


Рег
15 Nov, 2019

Тем
72

Постов
224

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

05AB1E, 12 6 4 5 байты

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 s=>(r=[...s]).map(c=>c.charCodeAt()%2).flatMap((c,i,l)=>c-l[i-1]&1?b.push(r[i])&&[]:[b=[r[i]]])
 

Ввод в виде строки, вывод в виде двумерного списка целых чисел кодовой точки ASCII.

-6 байт благодаря @Гримми.
+1 байт теперь, когда разрешенные правила ввода-вывода наконец установлены.

Попробуйте онлайн или попробуйте онлайн с выводом в виде списка строк.

Объяснение:

" % Input: string (implicit). For each I % Push contents of clipboard I, initially 3 @ % Push current character 2\ % Modulo 2 of (code point) of that character. Gives 0 or 1 XI % Copy result into clipboard I = % Equal? This compares the current and previous contents of % clipboard I. Gives true or false f % Find. This outputs indices of true entries. Gives 1 or [] @ % Push current character % End (implicit) % Display stack (implicit), bottom to top. Each entry is displayed % on a different line. [] is not shown and doesn't start a new line ||answer||

Япт 1 , 9 байты

"I@2\XI=f@

Попробуйте это

b;f(char*s){for(b=*s&1;*s;putchar(*s++))b^~*s&1?b=!b:putchar(59);} ||answer||

Питон 2, 72 71 байт

s=>s.flatMap((c,i)=>c-s[i-1]&1?l.push(c)&&[]:[l=[c]])

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

1 байт спасибо Джонатан Аллан

 

FumFetlyroure


Рег
17 Jun, 2006

Тем
72

Постов
177

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

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

<;.1~

Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:

1, ||answer||

Желе 6 байты

(7, если мы должны вернуть список строк — добавьте 2=/\ .)

2|]

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

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

Как?

<;.1~1,2=/\2|]

Оригинальное задание 7 байты

f(char*s){for(;*s;)putchar(*s)+*++s&1||puts("");}

Полная программа с использованием żOḂMḊƲƝ - Main Link: list of characters, S e.g. ['4','5','7','4','0'] (from program argument '45740') Ɲ - for neighbours of S: ['4','5'] ['5','7'] ['7','4'] ['4','0'] Ʋ - last four links as a monad: O - to ordinal (vectorises) [52,53] [53,55] [55,52] [52,48] Ḃ - least significant bit (vectorises) [0,1] [1,1] [1,0] [0,0] M - maximal indices [2] [1,2] [1] [1,2] Ḋ - dequeue [] [2] [] [2] - } [[],[2],[],[2]] ż - (S) zip with (that) [['4',[]],['5',[2]],['7',[]],['4',[2]],['0']] - implicit, smashing print 4527420 as the separator.

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

Как?

2 ||answer||

С (лязг), 49 байт

żOḂMḊƲƝ

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

 

A.osintsev


Рег
05 Apr, 2014

Тем
55

Постов
190

Баллов
485
  • 26, Oct 2024
  • #4

Дж, 18 14 байт

ḂI¬Żœṗj⁷ - Main Link: list of characters (A) Ḃ - least significant bit (vectorises) I - incremental differences ¬ - logical NOT (vectorises) Ż - prepend a zero œṗ - at truthy indices (of left) partition (right=A)

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

-4 байта благодаря Bubbler

  • ḂI¬Żœṗ remainders mod 2
  • consecutive pairs of those, are the equal?
  • θ Input string ? Map over characters and join ¶ Literal newline × Repeated by κ Current index ∧ Logical And ¬ Logical Not ι Current character ℅ Ordinal ⁺ Plus θ Input string § Indexed by κ Current index ⊖ Decremented ℅ Ordinal ﹪ Modulo ² Literal 2 ⁺ Concatenated with ι Current character Implicitly print start it off with a group
  • эθ⁺׶∧κ¬﹪⁺℅ι℅§θ⊖κ²ι cut into groups using the first element as a delimiter, ie, starting a new group whenever we consecutive items are equal, odd odd or even even
 

ДлОод


Рег
16 Mar, 2011

Тем
82

Постов
204

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

С (лязг), 90...67 66 байт

óÈcv ¦Ycv :Implicit input of string ó :Partition È :Between characters X & Y where c :Charcode of X v :Parity ¦ :Is not equal to Ycv :Parity of charcode of Y :Implicit output, joined by newlines

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

Сэкономлено 9 10 11 байт благодаря @ceilingcat!!!

 

Rollacoasta


Рег
06 Oct, 2011

Тем
83

Постов
204

Баллов
639
  • 26, Oct 2024
  • #7

МАТЛ, 10 байт

óÈcv ¦Ycv

Выводит каждый символ в отдельной строке. Сепаратор -R .

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

Объяснение

Ç # Transform the (implicit) input-string to a list of codepoint integers .¬ # Split this list of integers at: + # Sum the two codepoint at both sides of the potential split È # And check whether it is odd # (after which the resulting 2D integer list is output implicitly) ||answer||

JavaScript (Node.js), 94 97 95 байт

+1 байт для разрешения более 1 разреза. Пришлось полностью переписать мой код, но мне очень помогли

Ç.¬+È

ответ ТШ

 

GypeApperma44


Рег
25 Oct, 2024

Тем
61

Постов
208

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

Интересно