Это была просто ошибка ввода


17

Продолжая, это была просто ошибка проблема :

Входные данные:

Строка, состоящая из печатных символов ASCII без пробелов и новых строк.

Выход:

Сначала превратите ввод в палиндром, вернув ввод и добавив его перед собой, исключая средний символ (т.е. с вводом 1234567890 он станет 0987654321234567890).

И затем выведите этот текст:

0        9        8        7        6        5        4        3        2        1        2        3        4        5        6        7        8        9        0
         0       9       8       7       6       5       4       3       2       1       2       3       4       5       6       7       8       9       0
                  0      9      8      7      6      5      4      3      2      1      2      3      4      5      6      7      8      9      0
                           0     9     8     7     6     5     4     3     2     1     2     3     4     5     6     7     8     9     0
                                    0    9    8    7    6    5    4    3    2    1    2    3    4    5    6    7    8    9    0
                                             0   9   8   7   6   5   4   3   2   1   2   3   4   5   6   7   8   9   0
                                                      0  9  8  7  6  5  4  3  2  1  2  3  4  5  6  7  8  9  0
                                                               0 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 0
                                                                        0987654321234567890
                                                               0 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 0
                                                      0  9  8  7  6  5  4  3  2  1  2  3  4  5  6  7  8  9  0
                                             0   9   8   7   6   5   4   3   2   1   2   3   4   5   6   7   8   9   0
                                    0    9    8    7    6    5    4    3    2    1    2    3    4    5    6    7    8    9    0
                           0     9     8     7     6     5     4     3     2     1     2     3     4     5     6     7     8     9     0
                  0      9      8      7      6      5      4      3      2      1      2      3      4      5      6      7      8      9      0
         0       9       8       7       6       5       4       3       2       1       2       3       4       5       6       7       8       9       0
0        9        8        7        6        5        4        3        2        1        2        3        4        5        6        7        8        9        0

(От середины наружу в обоих направлениях каждый символ отделен на один пробел больше, чем предыдущая строка.)

Правила соревнований:

  • Вам нужно напечатать вдвое больше длины ввода, минус 3 строки. Так с входом1234567890 вывод, показанный выше, составляет 17 строк (длина 10 * 2 - 3).
  • Ввод будет содержать только печатный ASCII (исключая пробел, табуляцию и новую строку).
  • Конечные пробелы не являются обязательными.
  • Одиночный трейлинг новой строки не является обязательным.
  • (Дополнительные) начальные пробелы или ведущие новые строки не допускаются.
  • Вы можете предположить, что длина ввода всегда будет не менее четырех символов.
  • В отличие от моей Это была просто ошибка , оба формата ввода и вывода являются гибкими. Таким образом, вы можете вывести результат в виде String-array, String-list и т. Д.

Основные правила:

  • Это , поэтому выигрывает самый короткий ответ в байтах.
    Не позволяйте языкам кода-гольфа отговаривать вас от публикации ответов на языках, не относящихся к кодексу. Попробуйте придумать как можно более короткий ответ для «любого» языка программирования.
  • К вашему ответу применяются стандартные правила , поэтому вы можете использовать STDIN / STDOUT, функции / метод с правильными параметрами и типом возврата, полные программы. Ваш звонок.
  • По умолчанию лазейки запрещены.
  • Если возможно, добавьте ссылку с тестом для вашего кода.
  • Также, пожалуйста, добавьте объяснение, если это необходимо.

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

Input: 1234567890
Output:
0        9        8        7        6        5        4        3        2        1        2        3        4        5        6        7        8        9        0
         0       9       8       7       6       5       4       3       2       1       2       3       4       5       6       7       8       9       0
                  0      9      8      7      6      5      4      3      2      1      2      3      4      5      6      7      8      9      0
                           0     9     8     7     6     5     4     3     2     1     2     3     4     5     6     7     8     9     0
                                    0    9    8    7    6    5    4    3    2    1    2    3    4    5    6    7    8    9    0
                                             0   9   8   7   6   5   4   3   2   1   2   3   4   5   6   7   8   9   0
                                                      0  9  8  7  6  5  4  3  2  1  2  3  4  5  6  7  8  9  0
                                                               0 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 0
                                                                        0987654321234567890
                                                               0 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 0
                                                      0  9  8  7  6  5  4  3  2  1  2  3  4  5  6  7  8  9  0
                                             0   9   8   7   6   5   4   3   2   1   2   3   4   5   6   7   8   9   0
                                    0    9    8    7    6    5    4    3    2    1    2    3    4    5    6    7    8    9    0
                           0     9     8     7     6     5     4     3     2     1     2     3     4     5     6     7     8     9     0
                  0      9      8      7      6      5      4      3      2      1      2      3      4      5      6      7      8      9      0
         0       9       8       7       6       5       4       3       2       1       2       3       4       5       6       7       8       9       0
0        9        8        7        6        5        4        3        2        1        2        3        4        5        6        7        8        9        0

Input: ABCD
Output:
D  C  B  A  B  C  D 
   D C B A B C D
      DCBABCD
   D C B A B C D
D  C  B  A  B  C  D

Input: =>)}]
Output:
]   }   )   >   =   >   )   }   ]
    ]  }  )  >  =  >  )  }  ]
        ] } ) > = > ) } ]
            ]})>=>)}]
        ] } ) > = > ) } ]
    ]  }  )  >  =  >  )  }  ]
]   }   )   >   =   >   )   }   ]

Input: XXxxXX
Output:
X    X    x    x    X    X    X    x    x    X    X
     X   X   x   x   X   X   X   x   x   X   X
          X  X  x  x  X  X  X  x  x  X  X
               X X x x X X X x x X X
                    XXxxXXXxxXX
               X X x x X X X x x X X
          X  X  x  x  X  X  X  x  x  X  X
     X   X   x   x   X   X   X   x   x   X   X
X    X    x    x    X    X    X    x    x    X   X

Одинаково ли количество пробелов в каждой строке в порядке?
Адам

@ Adám Извините, но нет. Любое количество пробелов хорошо, но ведущие нет. Я укажу это правило в вызове.
Кевин Круйссен

2
«Вам нужно напечатать длину ввода минус 3 строки». затем "(длина 10 * 2 - 3)". В первом предложении написано «нет двойных», во втором - «двойное». Так что это?
Оливье Грегуар

@ OlivierGrégoire Упс, первая строка должна была содержать в 2 раза длину минус 3. Исправлено
Кевин Круйссен

Ответы:


5

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

E⁻Lθ¹⪫θ× ι‖O←↑

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

АСТ:

Program
├Print
│└E: Map
│ ├⁻: Difference
│ │├L: Length
│ ││└θ: Identifier θ
│ │└1: Number 1
│ └⪫: Join
│  ├θ: Identifier θ
│  └×: Product
│   ├' ': String ' '
│   └ι: Identifier ι
└‖O: Reflect overlap
 └Multidirectional
  ├←: Left
  └↑: Up

Может быть 16 кодовых точек, но, как сообщает UTF-8 Python 3, это 41 байт. Какой набор символов вы используете, чтобы сделать его 16 байтов?
Янус Троелсен

@JanusTroelsen Это пользовательская кодировка.
Эрик Outgolfer

Да, ⪫ работает на струнах? Надо помнить, что в следующий раз ...
Нил

@ Нил Да, это имеет смысл, не так ли?
Эрик Outgolfer

Технически ваше редактирование неконкурентоспособно, потому что соответствующая фиксация отодвигает вызов.
Нил

7

Japt , 22 21 байт

¬Å£¬qYîÃy w ê y w ê ·

Проверьте это онлайн!

объяснение

Первые 8 байтов генерируют нижний правый квадрант шаблона:

 ¬ Å  £    ¬ qYîÃ
Uq s1 mXY{Uq qYî} 

Uq                 : Split the input into characters.
   s1              : Slice off the first.
      mXY{      }  : Map each item X and index Y to
          Uq       :   the input split into chars,
             q     :   joined with
              Yî   :     Y spaces.

На данный момент у нас есть массив, например ["ABCD", "A B C D", "A B C D"]. К сожалению, для возведения в квадрат требуется 13 байт:

y w ê y w ê ·
y w ê y w ê qR
y                : Pad each line to the same length with spaces and transpose.
  w              : Reverse the array, and
    ê            : palindromize. Now we have the bottom half of the output transposed.
      y          : Transpose back.
        w ê      : Reverse and palindromize again, giving the full output.
            qR   : Join with newlines.
                 : Implicit: output result of last expression

Жаль, что я не думал использовать транспонирование - красиво сделано :)
Shaggy

Могу ли я задать вопрос, на который мне страшно знать ответ? Вы и остальные здесь на самом деле кодируете это в минимизированной версии?
gdbj

Если осмелишься. Возможно нет.
CalculatorFeline

1
@ gdbj Я обычно это делаю ... это плохой знак? : P
ETHпродукция

@ETHproductions просто говорил приятелю, что это похоже на настоящий гольф: разочарование в учении, странная зависимость и демонстрация мастерства в нем вызывают уважение.
gdbj


5

JavaScript (ES6) , 159 136 129 127 байт

f=(i,x=1-(l=i.length-1),y=x<0?-x:x,[,...b]=i)=>l>x?''.padEnd(l*(l+~y))+[...b.reverse(),...i].join(''.padEnd(y))+`
`+f(i,x+1):''

Попробуйте онлайн! Объяснение ниже

// This is a recursive function
// First, inputs and various variable initializations
// by using defaults
let func = (
  // Text input, will not be modified through recursion
  input,

  // Current line, for the first function call we start from -lines to +lines
  // It's roughly equivalent to lines*2 but this helps us computing the spacing
  // Also computing the total amount of lines
  currentLine = 1 - (totalLines = input.length - 1),

  // Getting the absolute value of the current line (like Math.floor)
  absCurrentLine = currentLine < 0 ? -currentLine : currentLine,

  // Getting the input without it's first letter, useful for the palidrome of the input
  [,...slicedInput] = input

// Base case, stopping the recursion if the current line
// is still below the total amount of lines
) => totalLines > currentLine

  // Leading spacing
  ? ''.padEnd(totalLines * (totalLines + ~absCurrentLine)) + 

  // Putting together the palindrome version and adding spaces between the chars
    [...slicedInput.reverse(), ...input].join(''.padEnd(absCurrentLine)) + `

  // Line return + recursion call
` + f(input, currentLine + 1)
  : ''

Первая запись в Codegolf, заранее прошу прощения за любые очевидные ошибки.

Спасибо Джастину Маринеру за сохранение 23 байтов! Спасибо Крейгу Эйре за сохранение 11 байтов и за сообщение об ошибке.


Хороший первый ответ, +1 от меня и добро пожаловать в PPCG. Я не слишком знаком с Js, но возможно ли начать xс -2 вместо -1, и изменить x<=lна, ++x<=lчтобы вы могли удалить x++и сохранить байт?
Кевин Круйссен

Я пытался, но не смог, потому что linesзапутался с пробелом, так что в итоге это стоило больше байтов, чтобы все это заработало снова. Но я совершенно уверен, что есть и лучший способ организовать код и добавить ваше предложение.
Saming

1
Добро пожаловать в PPCG, хороший первый пост и объяснение! Гольф до 133 байтов здесь . Включает объяснение того, что было изменено.
Джастин Маринер

К сожалению, ваш вывод не совсем соответствует ожидаемому результату: смотрите здесь
Крейг Эйр,

1
Это здорово, я добавил свою новую функцию и уточнен объяснение
Saming

4

SOGL V0.12 , 22 18 байт

ā,⁄H{,čFH@*∑Κ}▓±╬-

Попробуй здесь!

Объяснение:

ā                   push an empty array - canvas
 ,⁄H{        }      input length-1 times do
     ,                push the input
      č               chop it into chars
       FH@*           get the current iteration-1 amount of spaces
           ∑          join the chopped input with the spaces
            Κ         prepend it to the array
              ▓     space to a square
               ±    reverse each string in that list
                ╬-  quad-palindromize with 1 X and 1 Y overlap and without swapping characters

Является ли ╬-команда четырехстороннего палиндромиза? Я только что был здесь, желая, чтобы у Джапта было что-то подобное ...: P
ETHproductions

@ETHproductions FWIW, это много вещей
dzaima

Я знаю, следовательно, почему я указал ╬-. Но спасибо, я не смог найти эту страницу по какой-то причине
ETHproductions

@ETHproductions Ох. Он существует только в копии интерпретатора SOGLOnline: / В какой-то момент мне нужно соединить их вместе: |
Дзайма

Хм ... Вы должны осуществлять автоматический Fдля , если это необходимо.
Эрик Outgolfer

4

Python 3 , 149 141 95 байт

def f(s):l=len(s)-1;[print((' '*abs(i)).join(s[:0:-1]+s).center(2*l*l+1))for i in range(1-l,l)]

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

Спасибо @KevinCruijssen и @ETHproductions за сохранение некоторых байтов

Отдельное спасибо @notjagan за сохранение 46 байт!


1
Изменение l=len(s);к l=len(s)-1;и затем изменить все значения , связанные с l(т.е. l-1-> l; -l+2-> -l+1; и т.д.) составляет 8 байт короче. Попробуй это здесь.
Кевин Круйссен

1
-l+2-> 2-l:)
ETHproductions

Спасибо @KevinCruijssen, к сожалению, я не могу редактировать прямо сейчас, не могли бы вы отредактировать?
Мистер Кскодер

@KevinCruijssen Большое спасибо!
Мистер Кскодер

3
Использование до 95 байтовcenter вместо forцикла!
notjagan

4

PHP, 145 131 байт

Потребовалось некоторое размышление, чтобы сыграть в гольф этот дополнительный байт; но это стоило того.

while($y<=2*$e=strlen($a=$argn)-1)echo($p=str_pad)("
",$e*($e-$d=abs($y++-$e))+1),chunk_split($a.substr(strrev($a),1),1,$p("",$d));

печатает ведущий символ новой строки. Запустите как трубу с -nRили попробуйте онлайн .

сломать

while($y<=2*$e=strlen($a=$argn)-1)  # $e=length-1, loop through rows
                                        # 1. print linebreak and left padding
    echo($p=str_pad)("\n",$e*($e-$d=abs($y++-$e))+1),
        chunk_split(
            $a.substr(strrev($a),1)     # 2. palindromize input
            ,1,$p("",$d));              # 3. insert $e..0..$e spaces between characters

альтернативное решение , такой же длины:

for($d=-$e=strlen($a=$argn)-1;$d<$e;)echo($p=str_pad)("
",$e*($e-$b=abs($d++))+1),chunk_split($a.substr(strrev($a),1),1,$p("",$b));

1
Вы можете сэкономить 13 байт с помощью пробного онлайн!
Йорг Хюльсерманн

3

APL (Dyalog) , 37 байт

Требуется ⎕IO←0по умолчанию во многих системах.

{⍉m(2-d)↓⍉(m←⊖⍪1↓⊢)↑∊¨(1↓⍳d←≢⍵)↑¨¨⊂⍵}

{} Анонимная функция, где аргумент представлен

()↑¨¨⊂⍵ Для каждого ( ¨) из следующих чисел возьмите ( ) столько символов из каждого ¨( ) аргумента whole ( ), добавив при необходимости пробелы:

  ≢w количество символов в аргументе

  d← хранить это в д

   так много друзей (0… d - 1)

  1↓ упасть один (ноль)

∊¨ε NLIST (Flatten) каждый

 повысить рейтинг (преобразовать список списков в матрицу)

(m←) Применить следующую молчаливую функцию m , определенную как:

   перевернутый аргумент

   на вершине

  1 один [ряд]

   упал с

   Аргумент

 транспонирования

()↓ Падение:

  2-d = - ( d - 2), т.е. d - 2 ряда снизу

m применить м

 транспонирования

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


3

Java (OpenJDK 8) , 201 196 байт

s->{for(int l=s.length()-1,i=-l,x=0;++i<l;x+=i<0?l:-l)System.out.printf("%1$"+(x<1?"":x)+"s"+s.join("%1$"+(i<0?-i:i>0?i:"")+"s",(new StringBuffer(s.substring(1)).reverse()+s).split(""))+"%n","");}

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

Это та же идея, что и та, которую я использовал для предыдущего испытания , за исключением того, что строка генератора теперь немного длиннее и с более сложными для обработки случаями.

%1$Ns0%1$Ns9%1$Ns8%1$Ns7%1$Ns6%1$Ns5%1$Ns4%1$Ns3%1$Ns2%1$Ns1%1$Ns2%1$Ns3%1$Ns4%1$Ns5%1$Ns6%1$Ns7%1$Ns8%1$Ns9%1$Ns0%n

3

Python 3 , 134 124 байта

f=lambda s:'\n'.join([' '*(len(s)-1)*abs(len(s)-abs(i)-2)+(' '*abs(i)).join(s[::-1]+s[1:]) for i in range(2-len(s),len(s)-1)])

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

Первый пост в PPCG после некоторого времени. Ищу любые предложения / советы!


Спасибо @LyricLy и @ Лукашу Рогальски за улучшения!


1
Вам не нужно печатать выходные данные внутри функции, выходные данные могут быть указаны в возвращаемом значении. Кроме того, вам не нужно считать f=в byountount, просто предоставляя анонимную функцию, это хорошо.
LyricLy

1
Также, -len(s)+2всего на 2-len(s)один байт меньше.
Лукаш Рогальски

Спасибо @ Лукаш Рогальски и @LyricLy; ты спас мне 10 байтов!
Погоня Фогели

3

Haskell, 177 163 байта

import Data.List
k n=[1..n]>>" "
f s=let n=length s in map(\x->(k(((n-1)*(n-(abs x)))))++(intercalate (k(abs x))$map(\z->[z])$((++)=<<reverse.tail) s))[n,n-1.. -n]

Эта функция fявляется функцией вызова и возвращает список строк ( [String]), использование unlinesкоторой должно обеспечивать тот же визуальный вывод, что и контрольные примеры ( main = putStr $ unlines $ f "test string"для его компиляции).

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

-14 байт благодаря @nimi


1
kможет быть определено как k n=[1..n]>>" "и pкак p=(++)=<<reverse.tail(вы можете даже встроить это определение).
Nimi

2

Mathematica, 141 байт

Column[Join[Reverse@(s=Row/@Table[Riffle[Reverse@Rest@b~Join~b,""<>Table[" ",i]],{i,0,Length[b=Characters@#]-1}]),Rest@s],Alignment->Center]&
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.