Це була лише вхідна помилка


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, 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

@ Adám Вибачте, але ні. Будь-яка кількість кінцевих пробілів - це добре, але провідні місця - ні. Я вкажу це правило у виклику.
Kevin Cruijssen

2
Msgstr "Вам потрібно роздрукувати довжину введення мінус 3 рядки." потім "(довжина 10 * 2 - 3)". Перше речення говорить "немає подвійного", друге - "подвійне". Так що це?
Олів'є Грегоар

@ OlivierGrégoire На жаль, перший рядок мав містити 2х довжину мінус 3. Виправлено
Кевін Круїйсен

Відповіді:


5

Вугілля деревне , 14 байт

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

Спробуйте в Інтернеті!

AST:

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 Це власний набір шаблонів.
Erik the Outgolfer

Так, ⪫ працює на струнах? Потрібно пам'ятати, що наступного разу ...
Ніл

@Neil Так, це має сенс, чи не так?
Ерік Аутгольфер

Технічно ваша редакція не є конкурентоспроможною, оскільки відповідне зобов’язання ставить перед собою завдання.
Ніл

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
ETHproductions

@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++байт і зберегти його?
Kevin Cruijssen

Я спробував, але мені не вдалося, тому що linesвін заплутався з проміжком, так що він закінчує коштувати більше байтів, щоб все це знову працювало. Але я впевнений, що є і кращий спосіб впорядкувати код і додати свою пропозицію.
Самінг

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

Чи ╬-чотиристороння команда palindromize? Я щойно тут, бажаючи, щоб у Джапта було щось подібне ...: P
ETHproductions

@ETHproductions FWIW, є багато речей
dzaima

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

@ETHproductions О. Він існує лише у копії перекладача SOGLOnline: / У якийсь момент мені потрібно об'єднатись разом: |
dzaima

Хм ... Ви повинні здійснювати автоматичний Fдля , якщо це необхідно.
Ерік Аутгольфер

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 байт коротше. Спробуйте тут.
Kevin Cruijssen

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

Дякую @KevinCruijssen, на жаль, я не можу зараз редагувати, чи можете ви редагувати?
Містер Xcoder

@KevinCruijssen Дякую велике!
Містер Xcoder

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←≢⍵)↑¨¨⊂⍵}

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

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

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

  d← зберігати, що в д

   що багато ices ndices (0… d - 1)

  1↓ крапка одна (нуль)

∊¨ϵ nlist (сплющити) кожного

 підвищити ранг (перетворити список списків у матрицю)

(m←) Застосувати таку негласну функцію m , визначену як:

   аргумент перевернутої сторони

   на вершині

  1 один [рядок]

   випав із

   аргумент

 переносити

()↓  Крапля:

  2-d = - ( d - 2), тобто d - 2 ряди знизу

m застосовувати 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 та @ Łukasz Rogalski за вдосконалення!


1
Ви не повинні друкувати вихід у межах функції, вихід може бути заданий у зворотному значенні. Крім того, вам не доведеться рахувати кількість f=в рахунку, просто надання анонімної функції чудово.
LyricLy

1
Крім того, -len(s)+2просто 2-len(s), один менший байт.
Łukasz Rogalski

Дякую @ Łukasz Rogalski та @LyricLy; ти врятував мене 10 байт!
Chase Vogeli

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(ви навіть можете вбудувати це визначення).
німі

2

Математика, 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.