Кодекс Гольфа: Вдвое Сократите Количество Ошибок

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

Задача

Учитывая непустой массив

 input ↦ output
[1,0,0,1,0,0,1] ↦ [1,0,1,0,1]
[1,1,0,0,1,1,0,0,1] ↦ [1,1,0,1,1,0,1]
[1,1,0,0,1,1,1,0,0,1,1] ↦ [1,1,0,1,1,1,0,1,1]
[1,1,1] ↦ [1,1,1]
[0,0,1] ↦ [0,1]
[0,0] ↦ [0]
[1,1,1,0,0,0,0,1,1,1,1,0,0,1,0,0,1,1,0,0,1,1,1,1,0,0,1,0,0] ↦ [1,1,1,0,0,1,1,1,1,0,1,0,1,1,0,1,1,1,1,0,1,0]
 
and 1 , уменьшите вдвое длину прогонов 0 .

Вход

Массив 0 and "1001" . Приемлемый формат:

  • Реальный массив на вашем языке
  • Строка, разделенная переводом строки \n and "1\n0\n0\n1"
  • Непрерывная строка [1, 0, 0, 1] and 1
  • Любой другой разумный формат

Например, все следующие три входа являются приемлемыми:

  • 0
  • 1 (where 0 это перевод строки U+000A)
  • 1

Вы можете предположить, что пробеги 0 will have четная длина.

Выход

Массив 0 and 1 , в приемлемых форматах, указанных выше.

Тестовые случаи

0

Подсчет очков

Это . Выигрывает самый короткий ответ в байтах.

Стандартные лазейки применять.

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

Ivailo Ivanov


Рег
30 Jun, 2011

Тем
80

Постов
194

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

С (ГКК), 35 байт

/00/a//a/0/<input goes here>

48 — это ascii-код «0».

лучшая версия 43 байта, предложенная Нилом

'1001'

на этот раз еще один 40-байтовый (опять же, как предложили Нил и VisualMelon) :)

lambda s:s.replace('00','0')

а потом 35 байт благодаря Khaled.K

lambda l:eval(`l`.replace('0, 0','0'))

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

 

Zeemo


Рег
13 Apr, 2004

Тем
82

Постов
188

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

Октава, 22 байта

ḅ Blocks; group consecutive equal elements together { }ᵐ Map on each block: c It is possible to concatenate the block into an int (i.e. it contains 1s) ẹ Split it again into a list of 1s | Else ḍh Dichotomize and take the head c Concatenate the blocks into a single list

Проверьте все тестовые примеры здесь.

Это анонимная функция, принимающая строку в формате c as input, and replaces two consecutive zeros with a single zero.

 

Сергей Иванов 1241787441


Рег
18 Apr, 2016

Тем
66

Постов
179

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

Хаскелл, 28 байт

ḅ{cẹ|ḍh}ᵐc

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

Рекурсивно принимает первый элемент, удаляя второй, если первый равен нулю, до тех пор, пока список не станет пустым. Если первая запись function(n)n[n+1:0>0] , then the first a Take the first command-line argument R and replace 00 00 (an integer literal, so it doesn't need quotes) i with i (variable preinitialized to 0) Autoprint выпадают из остатка.

 

Sj8rdm42


Рег
25 Oct, 2024

Тем
72

Постов
192

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

Япт, 7 6 5 байт

v % Concatenate stack (which is empty): pushes [] % STACK: [] y % Implicit input. Duplicate from below % STACK: [1,0,0,1,0,0,1], [], [1,0,0,1,0,0,1] ~f % Negate, find: gives indices of zeros % STACK: [1,0,0,1,0,0,1], [], [2,3,5,6] 2L % Push [2,2,1i]. As an index, this is interpreted as 2:2:end % STACK: [1,0,0,1,0,0,1], [], [2,3,5,6], [2,2,1i] ) % Reference indexing. This selects the even-indexed entries % STACK: [1,0,0,1,0,0,1], [], [3,6] ( % Assignment indexing. This deletes the specified entries % (assigns them the empty array). Implicitly display % STACK: [1,0,1,0,1]

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

Просто заменяет каждую серию двух нулей во входных данных на один ноль. Использует строковый ввод (т.е. [1,0,0,1,0,0,1] ).

 

Zwitulvtmn


Рег
01 Jan, 2011

Тем
80

Постов
201

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

Алиса, 13 байт

vy~f2L)(

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

Объяснение

FF % Push [0 0] O % Push 0 Zt % Implicitly take input. Replace [0 0] by 0. Implicitly display

Это простой шаблон для линейных программ, которые работают полностью в порядковом режиме. Начальный FFOZt reflects the IP to move south east and then it bounces diagonally up and down through the code until the mirrors at the end. Those simply offset the position by one so that on the way back the IP traverses the remaining cells. Reading the code in this zigzag fashion it becomes:

//.

Это простая замена строки:

/.

Есть несколько других способов нажать две строки, например. "1" or "0" , но я не нашел там ничего, что превосходило бы 5 байт (и мне пришлось бы сбрить два байта, чтобы сократить программу).

 

Irinka345


Рег
28 Nov, 2019

Тем
86

Постов
178

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

Желе, 8 байт

StringReplace["00"->"0"]

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

Возможны другие ответы на языках без <input id=i><pre id=o> or similar could use this trick.

Объяснение

f= s=>s.replace(/00/g,0) i.addEventListener("input",_=>o.innerText=f(i.value)) console.log(f("1001001")) // "10101" console.log(f("110011001")) // "1101101" console.log(f("11001110011")) // "110111011" console.log(f("111")) // "111" console.log(f("001")) // "01" console.log(f("00")) // "0" console.log(f("11100001111001001100111100100")) // "1110011110101101111010" ||answer||

В, 4 байта

s=>s.replace(/00/g,0)

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

int[]f(int[]a){int c=0,i=0,l=a.length;for(int x:a)c+=1-x;int[]r=new int[l-c/2];for(c=0;c<l;c+=2-a[c])r[i++]=a[c];return r;} ||answer||

СЭД, 8 6 байт

¹

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

Принимает строку, разделенную переводом строки f и filter .

1 skips a line, and 1 удаляет строку, если в ней есть ноль. Это приводит к удалению всех 1 on an even-numbered line. Since any even-length contiguous list of 0 имеет одинаковое количество строк с четными и нечетными номерами, это приводит к уменьшению вдвое длины каждого прогона 0 .

 

Slike_nix


Рег
12 Sep, 2012

Тем
79

Постов
211

Баллов
606
  • 26, Oct 2024
  • #13

PHP, 26

1

просто замените все 1 by 0 .

 

Demover


Рег
01 Oct, 2006

Тем
69

Постов
205

Баллов
560
  • 26, Oct 2024
  • #14

Луа, 33 байта

1

Принимает строку на вход и конденсирует двойные нули. Легкий.

 

UlcertWrete1


Рег
25 Oct, 2024

Тем
68

Постов
194

Баллов
544
  • 26, Oct 2024
  • #15

Perl 5, 7+1(флаг -p)=8 байт

0

Принимает ввод в виде чисел, разделенных новой строкой. Пропускает следующую строку, если видит ноль.

 

Poultubbetide


Рег
17 Mar, 2010

Тем
59

Постов
171

Баллов
466
  • 26, Oct 2024
  • #16

Алиса, 12 10 байт

2 байта сэкономлены благодаря Мартин Эндер

0

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

Объяснение

Это одномерный код, работающий в кардинальном режиме, поэтому его ход легко проследить:

0 ||answer||

Желе, 4 байта

1

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

Объяснение

0 ||answer||

Шелуха, 4 байта

0

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

Как?
Шелуха 1 command ( 1 ) применяет функцию к каждому элементу списка и текущему результату. Первоначальный результат на данный момент установлен для первого элемента.

В этом случае используется с = ( eq ) функция, она проверяет, равен ли каждый элемент текущему результату. Для пробегов G , this will always output scanl (правда). Теперь, первый из всех запусков fG=¹ s will be ¹‘эƇ Main monadic link Ƈ Filter by ? Every time this is called, switch between ¹ doing nothing and ‘ adding 1 (ложь), конечно; тогда следующим результатом будет ¹‘эƇ (since i Read a byte from input (pushes -1 on EOF) .h Duplicate it and add 1 to the copy % Compute n%(n+1). This will exit with an error on n==-1 and return n for any non-negative n. .7% Duplicate the input again and compute its value modulo 7 This returns 6 for '0' (unicode value 48) and 0 for '1' (unicode value 49) $i If this last result was not 0, input another number. This ignores every other '0' in the input and moves to the following number (another '0') o Output the last byte read At the end, wrap back to the beginning of the line равно результату на данный момент), а затем i.h%.7%$io , and so on, alternating <>if/0/ s в нечетных позициях в беге и print((io.read():gsub("00","0"))) s at even positions, until the end of the run. Since there are always an even number of 0 s в каждом прогоне, то последний результат на данный момент должен быть 00 : so, when we enter the next run of <?=strtr($argn,["00"=>0]); s, первый результат будет [0,0|T]*[0|R]:-T*R. [H|T]*[H|R]:-T*R. H*H. (truthy) again, and so on...

Итак: пробеги 0 s get alternating 0 and 0 , and runs of /0/d всегда получаешь n , and we just need to 1 ( 0 ) the input list ( n;/0/d ) этим.

 

Kvadratua


Рег
14 Feb, 2012

Тем
67

Постов
211

Баллов
566
  • 26, Oct 2024
  • #18

JavaScript (ES6), 26 21 байт

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

òf0x

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

ṣ1j1,1m2 - (duplicates the 1s, then halves all lengths) ṣ1 - split by the element 1 j1,1 - join the elements with the two-element list 1,1 m2 - get every second element .replace()
 

Favouriteinvesting


Рег
16 Jan, 2014

Тем
69

Постов
210

Баллов
595
  • 26, Oct 2024
  • #19

Математика, 24 байта

ṣ1j1,1m2

Функция, которая ожидает строку e000t s and '00'0 s и возвращает аналогичную строку. Самоочевидный синтаксис. Mathematica имеет множество встроенных функций преобразования; ключ в том, чтобы использовать тот, который преобразует каждое соответствующее подвыражение (в отличие от i Read all input. e Push an empty string. 00 Append two zeros to create the string "00". e Push an empty string. 0 Append a zero to create the string "0". S Substitute all occurrences of "00" in the input with "0". o Output the result. @ Terminate the program. ) but only passes through the expression once (unlike ie00e0So@ ).

 

Edikk123


Рег
03 Apr, 2007

Тем
71

Постов
173

Баллов
538
  • 26, Oct 2024
  • #20

МАТЛ, 5 байт

/

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

Объяснение

Это похоже на Стьюи Гриффина. Октавный ответ:

/.../ @...\

8 байт

/oe00/ @iS0e\

Это позволяет избежать встроенной замены строки/массива.

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

Объяснение

Рассмотрите ввод "1001001" as an example:

d'0²0 ||answer||

Пип, 5 байт

String f(String s){return s.replaceAll("00","0");}

Принимает строку из 0 и 1. Попробуйте онлайн!

Объяснение

Победить Джелли? Невероятно!

1-h ||answer||

Р, 21 байт

h

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

 

Dp123456


Рег
08 Apr, 2006

Тем
88

Постов
210

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

Брахилог, 10 байт

f(h:t)=h:f(drop(1-h)t) f e=e

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

Пока не уверен, что это оптимально…

Объяснение

Это использует ошибку, которая '1001000011' on a list of integers that has leading zeroes will fail.

@(s)strrep(s,'00','0') ||answer||

Питон (список ввода-вывода), 36 байт

s/00/0/g

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

Рекурсивно берет первый элемент, затем удаляет оставшийся, если первый был нулевым.


38 байт:

f(char*s){*s&&f(s+50-putchar(*s));}

Попробуйте онлайн При этом берется список Python и выводится список Python путем замены его строкового представления. Строковый ввод-вывод позволит использовать более прямое и короткое решение, например

f(char*s){for(;*s;s+=50-*s)putchar(*s);}

для f(char*s){while(*s)putchar(*s),s+=2-*s%2;} format.

 

Stant11xxx


Рег
23 Jun, 2014

Тем
71

Постов
192

Баллов
587
  • 26, Oct 2024
  • #22

///, 11 байт

f(char*s){while(*s)putchar(*s),*s++-48?:s++;}

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

Интересный факт: f[1,1,0,0,1,1,0,0,1] won't work, because it reduces f(0:0:r)=0:f r f(x:r)=x:f r f e=e к 00 # push 00 ¤ # tail, pushes 0 .: # replace . Hence the 00¤.: -заменять.

 

Nanaki


Рег
19 Apr, 2014

Тем
72

Постов
208

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