Code Golf Christmas Edition: Как распечатать елку высотой N


89

Учитывая число N, как я могу распечатать елку высотой, Nиспользуя наименьшее количество кодовых символов? Nпредполагается ограниченным минимальным значением 3и максимальным значением 30(границы и проверка ошибок не обязательны). Nзадается как единственный аргумент командной строки для вашей программы или сценария.

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

Рождественская елка генерируется как таковая, с ее "стволом", состоящим только из центрированного "*"

N = 3:

   *
  ***
 *****
   *

N = 4:

    *
   ***
  *****
 *******
    *

N = 5:

     *
    ***
   *****
  *******
 *********
     *

N определяет высоту ветвей, не включая ствол одной линии.

Счастливого Рождества, PPCG!

Ответы:


46

J , 24 символа

(,{.)(}:@|."1,.])[\'*'$~

   (,{.)(}:@|."1,.])[\'*'$~5
    *    
   ***   
  *****  
 ******* 
*********
    *    

Объяснение:

'*'$~5
*****

[\'*'$~5
*    
**   
***  
**** 
*****

Затем }:@|."1переворачивает каждый ряд, удаляет последний столбец и ,.скрепляет его ].

Затем ,{.вставьте первый столбец в нижней части.

Предыдущие записи :

29 символов, без пробелов вообще.

   ((\:. Я @ #)}.) "1 $ & '*'" 0>: 0 ~ i.3
  *
 ***
*****
  *
   ((\:. Я @ #)}.) "1 $ & '*'" 0>: 0 ~ I.11
          *
         ***
        *****
       *******
      *********
     ***********
    *************
   ***************
  *****************
 *******************
*********************
          *

   NB. считать от 1 до n , затем 1 снова
   >: 0 ~ i.3
1 2 3 1
   NB. повторить '*' х раз каждый
   $ & '*' "0>: 0 ~ i.3
*
**
***
*
   NB. перевернуть каждый ряд
   (\:. Я @ #) "1 $ & '*'" 0>: 0 ~ i.3
  *
 **
***
  *
   NB. снять ведущую колонну
   } "1 $ & '*'" 0>:. 0 ~ i.3

*
**

   NB. склеить
   ((\:. Я @ #)}.) "1 $ & '*'" 0>: 0 ~ i.3
  *
 ***
*****
  *

С помощью всего 9 символов вы можете дать этой функции имя:c=:[:((\:i.@#),}.)"1[:$&'*'"0[:>:0,~i.
ephemient

11
Что, вы, ребята, используете какую-то библиотеку документации J, чтобы понять код? :)

92

Brainfuck, 240 символов

              ,
             >++
            +++++
           +[-<---
          --->],[>+
         +++++++[-<-
        ----->]<<[->+
       +++++++++<]>>]<
      [->+>+>>>>>>>+<<<
     <<<<<<]>>>>++++++++
    [-<++++>]>++++++[-<++
   +++++>]+>>>++[-<+++++>]
  <<<<<<[-[>.<-]<[-<+>>+<]<
 [->+<]>>>>>[-<.>>+<]>[-<+>]
>.<<++<<<-<->]>>>>>>>-[-<<<<<
           <.>>>
           >>>]<
           <<<<.

Еще не сделано. Это работает, но только с однозначными числами.

РЕДАКТИРОВАТЬ: Готово! Работает для переводчиков, использующих 0 как EOF. Смотрите NOTEs в закомментированном источнике для тех, у кого -1.

РЕДАКТИРОВАТЬ еще раз: я должен отметить, что, поскольку в Brainfuck отсутствует стандартный метод чтения аргументов командной строки, я использовал вместо него стандартный ввод (стандартный ввод). ASCII, конечно.

РЕДАКТИРОВАТЬ в третий раз: О, дорогой, кажется, я сократил .(вывод) символов при сжатии кода. Исправлена...

Вот основное управление памятью основного цикла. Я уверен, что он может быть сильно оптимизирован, чтобы уменьшить количество символов на 30 или около того.

  1. временный
  2. Копия счетчика
  3. Счетчик (считает до 0)
  4. Пробел (десятичный 32)
  5. Знак звездочки (десятичное число 42)
  6. Количество звездочек на текущей строке (1 + 2 * счетчик)
  7. временный
  8. Символ новой строки
  9. Временное?
  10. Общее количество строк (т.е. входное значение; сохраняется до самого конца при печати транка)

Сжатая версия:

,>++++++++[-<------>],[>++++++++[-<------>]<<[->++++++++++<]>>]<[->+>+>>>>>>>+<<<<<<<<<]>>>>++++++++[-<++++>]>++++++[-<+++++++>]+>>>++[-<+++++>]<<<<<<[-[>.<-]<[-<+>>+<]<[->+<]>>>>>[-<.>>+<]>[-<+>]>.<<++<<<-<->]>>>>>>>-[-<<<<<<.>>>>>>]<<<<<.

И красивая версия:

ASCII to number
,>
++++++++[-<------>]  = 48 ('0')

Second digit (may be NULL)
,
NOTE:   Add plus sign here if your interpreter uses negative one for EOF
[ NOTE: Then add minus sign here
 >++++++++[-<------>]
 <<[->++++++++++<]>>  Add first digit by tens
]

Duplicate number
<[->+>+>>>>>>>+<<<<<<<<<]>>

Space char
>>++++++++[-<++++>]

Asterisk char
>++++++[-<+++++++>]

Star count
+

New line char
>>>++[-<+++++>]<<<

<<<

Main loop
[
Print leading spaces
-[>.<-]

Undo delete
<[-<+>>+<]
<[->+<]
>>

Print stars
>>>[-<.>>+<]

Add stars and print new line
>[-<+>]
>.<
<++

<<<

-<->
End main loop
]

Print the trunk
>>>>>>>
-[-<<<<<<.>>>>>>]
<<<<<.

Merry Christmas =)

1
мой мозг чувствует себя б ..... больным

3
Боже ты мой.
анонимный трус

63

Perl, 50 символов

(1 соответствующее место)

Perl: однострочная версия:

print$"x($a-$_),'*'x($_*2+1),$/for 0..($a=pop)-1,0

и теперь с большим количеством whitesapce:

print $"  x ( $a - $_ ),             #"# Syntax Highlight Hacking Comment
      '*' x ( $_ * 2  + 1),
      $/
for 0 .. ( $a = pop ) - 1, 0;

$ perl tree.pl 3
   *
  ***
 *****
   *
$ perl tree.pl 11
           *
          ***
         *****
        *******
       *********
      ***********
     *************
    ***************
   *****************
  *******************
 *********************
           *
$ 

Расширенное объяснение для не-Perl пользователей.

# print $Default_List_Seperator ( a space )  
#     repeated ( $a - $currentloopiterationvalue ) times,
print $" x ( $a - $_ ), 
#"# print '*' repeated( $currentloopiteration * 2 + 1 ) times. 
  '*' x ( $_ * 2  + 1),
# print $Default_input_record_seperator ( a newline )
  $/
# repeat the above code, in a loop, 
#   iterating values 0 to ( n - 1) , and then doing 0 again
for 0 .. ( $a = pop ) - 1, 0;
# prior to loop iteration, set n to the first item popped off the default list, 
#   which in this context is the parameters passed on the command line. 

25
Святое дерьмо ... Perl действительно не читается.

8
@zenazn, также следует заметить, что большинство видов игры в гольф - ПЛОХОЙ код на любом языке. Если бы это был конкурс на самый чистый код, мы бы тоже могли его выиграть.
Кент Фредрик

5
@zenazn: доказательство, вы можете видеть, как мы сотрудничаем и улучшаем код друг друга выше, это доказывает, что мы можем прекрасно читать КАЖДЫЙ ДРУГОЙ код.
Кент Фредрик

1
PS: Спасибо за объяснение для не-Perl программистов. Это все еще довольно нечитаемо, но по крайней мере это имеет смысл. Я думаю, вы привыкли к этому через некоторое время.

2
@RobH: J - ребенок APL. В некоторых смыслах он более нечитабелен, потому что он не использует набор символов APL со специальным символом для каждой операции - вместо этого он перегружает символы ASCII несколькими значениями. stackoverflow.com/questions/392788/1088931#1088931
Гимн

26

Язык: Python (через оболочку), Количество символов: 64 (2 значащих пробела)

python -c "
n=w=$1
s=1
while w:
    print' '*w+'*'*s
    s+=2
    w-=1
print' '*n+'*'"

$ sh ax6 11
           *
          ***
         *****
        *******
       *********
      ***********
     *************
    ***************
   *****************
  *******************
 *********************
           *

8
что мне больше всего нравится в этом решении, так это то, что python делает действительно трудным написание непонятного кода, это одно из самых читаемых решений

Вы используете оболочку для обработки аргумента, что не в духе кода гольфа ИМО. Используя «import sys» и «n = w = int (sys.argv [1])» и отступ в 1 символ для тела цикла, я придумываю 89 символов для этой версии.

4
Вот как я это делал раньше. Суть этого вопроса состоит в том, чтобы повеселиться, и, кроме того, не было никакой спецификации использования только одного языка :) См., Например, ответ «бред»; без аргументов

26

x86 asm 16 бит, 50 байт

Еще нет сборочной версии? :)

    bits 16
    org 100h

    mov si, 82h
    lodsb
    aaa
    mov cx, ax
    mov dx, 1
    push cx 
    mov al, 20h
    int 29h
    loop $-2
    push dx
    mov al, 2ah
    int 29h
    dec dx
    jnz $-3
    pop dx
    mov al, 0ah
    int 29h
    inc dx
    inc dx
    pop cx
    loop $-23
    shr dx, 1
    xchg cx, dx
    mov al, 20h
    int 29h
    loop $-2
    mov al, 2ah
    int 29h
    ret

(Примечание: N ограничено 1 - 9 в этой версии)

G:\>tree 9
         *
        ***
       *****
      *******
     *********
    ***********
   *************
  ***************
 *****************
         *

Скачать здесь


24

Язык: Windows Batch Script ( шокирует! )

@echo off
echo Enable delayed environment variable expansion with CMD.EXE /V

rem Branches
for /l %%k in (1,1,%1) do (
set /a A=%1 - %%k
set /a B=2 * %%k - 1
set AA=
for /l %%i in (1,1,!A!) do set "AA=!AA! "
set BB=
for /l %%i in (1,1,!B!) do set BB=*!BB!
echo !AA!!BB!
)

rem Trunk
set /a A=%1 - 1
set AA=
for /l %%i in (1,1,!A!) do set "AA=!AA! "
echo !AA!*

мазохист! Мне это нравится

Очень хорошо ... ты получаешь +1

2
Задержка расширения переменной может быть включена с помощью setlocal enabledelayedexpansionкоманды.
Хелен

чувак. шутки в сторону?

Не могу заставить это работать. Первый раз, хотя я пытаюсь.
Fabinout

21

Рубин, 64 байта

n=ARGV[0].to_i
((1..n).to_a+[1]).each{|i|puts' '*(n-i)+'*'*(2*i-1)}

n=$*[0].to_i
((1..n).to_a<<1).each{|i|puts' '*(n-i)+'*'*(2*i-1)}

С Рождеством всех!

Изменить: улучшения, добавленные в соответствии с предложением Джошуа Суинк


черт, я надеялся, что никто еще не пробовал это в ruby. хорошая работа.

Это очень хорошая линия Ruby.

Я выглядел слишком отвратительно? Извините, не мое намерение! С Рождеством! :)

Не хотел быть злым, и, конечно, ты был прав! С Рождеством!

1
На 1.9 вы можете сохранить еще несколько символов: n=$*[0].to_i;puts [*1..n,1].map{|i|" "*(n-i)+"*"*(2*i-1)}

14

Язык: C #, Количество символов: 120

static void Main(string[] a)
{
    int h = int.Parse(a[0]);

    for (int n = 1; n < h + 2; n++)
        Console.WriteLine(n <= h ?
            new String('*', n * 2 - 1).PadLeft(h + n) :
            "*".PadLeft(h + 1));
    }
}

Просто код, без форматирования (120 символов):

int h=int.Parse(a[0]);for(int n=1;n<h+2;n++)Console.WriteLine(n<=h?new String('*',n*2-1).PadLeft(h+n):"*".PadLeft(h+1));

Версия с 109 символами (только код):

for(int i=1,n=int.Parse(a[0]);i<n+2;i++)Console.WriteLine(new String('*',(i*2-1)%(n*2)).PadLeft((n+(i-1)%n)));

Результат для высоты = 10:

          *
         ***
        *****
       *******
      *********
     ***********
    *************
   ***************
  *****************
 *******************
          *

13

Язык: dc (через оболочку) Количество символов: 83

Немного короче версия DC:

dc -e '?d1rdsv[d32r[[rdPr1-d0<a]dsaxszsz]dsbx1-rd42rlbx2+r10Plv1-dsv0<c]dscxszsz32rlbx[*]p' <<<$1

РЕДАКТИРОВАТЬ: изменил константу 10 в $ 1


11
Боже мой, что, черт возьми, это?

1
Просто прочитайте

12

Python, трюк "-c" ... @ 61 символ (и одна строка)

python -c"for i in range($1)+[0]:print' '*($1-i)+'*'*(2*i+1)"

На самом деле, это 57 символов, только «» является значимым в соответствии со спецификацией вопроса.

10

Вот довольно экономичная версия на Haskell, состоящая из 107 символов:

main=interact$(\g->unlines$map(\a->replicate(g-a)' '++replicate(a*2-1)'*')$[1..g]++[1]).(read::[Char]->Int)

запустив это:

$ echo 6 | runhaskell tree.hs
     *
    ***
   *****
  *******
 *********
***********
     *

С Рождеством всех :)


10

Язык: dc (через оболочку), количество символов: 119 (1 значимое место)

Просто для неясности этого :)

dc -e "$1dsnsm"'
[[ ]n]ss
[[*]n]st
[[
]n]sl
[s2s1[l2xl11-ds10<T]dsTx]sR
[lndlslRxlcdltlRxllx2+sc1-dsn0<M]sM
1sclMxlmlslRxltxllx
'

$ sh ax3 10
          *
         ***
        *****
       *******
      *********
     ***********
    *************
   ***************
  *****************
 *******************
          *

Хм, серьезно, WTF? Я не понимаю ни одной строчки этого: P

dc - калькулятор обратной польской записи. 'man dc' - это очевидный путь :)

6

Лучше C ++, около 210 символов:

#include <iostream>
using namespace std;
ostream& ChristmasTree(ostream& os, int height) {
    for (int i = 1; i <= height; ++i) {
        os << string(height-i, ' ') << string(2*i-1, '*') << endl;
    }
    os << string(height-1, ' ') << '*' << endl;
    return os;
}

Свернуто до 179:

#include <iostream>
using namespace std;ostream& xmas(ostream&o,int h){for(int i=1;i<=h;++i){o<<string(h-i,' ')<<string(2*i-1,'*')<<endl;}o<<string(h-1,' ')<<'*'<<endl;return o;}

используя std; кто угодно?

strager - когда я начинал, было только пара std :: 's и' using namespace std; ' было много текста. Полагаю, сейчас будет меньше персонажей.

Ваша версия более неэффективна, чем моя, потому что она должна создавать строки, а моя версия просто печатает нужные ей символы. :)
Пион

6

Язык: питон, без хитростей, 78 символов

import sys
n=int(sys.argv[1])
for i in range(n)+[0]:print' '*(n-i)+'*'*(2*i+1)

6

Groovy 62B

n=args[0]as Long;[*n..1,n].any{println' '*it+'*'*(n-~n-it*2)}

_

n = args[0] as Long
[*n..1, n].any{ println ' '*it + '*'*(n - ~n - it*2) }

5

Улучшение ответа ΤΖΩΤΖΙΟΥ. Я не могу комментировать, так что вот новый пост. 72 персонажа.

import sys
n=int(sys.argv[1])
for i in range(n)+[0]:
   print ("*"*(2*i+1)).center(2*n)

Используя трюк "python -c", 61 символ.

python -c "
for i in range($1)+[0]:
   print ('*'*(2*i+1)).center(2*$1)
"

Я узнал функцию центра и что "python -c" может принимать более одного строкового кода. Спасибо, ΤΖΩΤΖΙΟΥ.


5

C # с использованием Linq:

    using System;
    using System.Linq;
    class Program
        {
            static void Main(string[] args)
            {
                int n = int.Parse(args[0]);
                int i=0;
                Console.Write("{0}\n{1}", string.Join("\n", 
                   new int[n].Select(r => new string('*',i * 2 + 1)
                   .PadLeft(n+i++)).ToArray()),"*".PadLeft(n));
            }
       }

170 символов.

int n=int.Parse(a[0]);int i=0;Console.Write("{0}\n{1}",string.Join("\n",Enumerable.Repeat(0,n).Select(r=>new string('*',i*2+1).PadLeft(n+i++)).ToArray()),"*".PadLeft(n));

5

AWK, 86 символов в одной строке.

awk '{s="#";for(i=0;i<$1;i++){printf"%"$1-i"s%s\n","",s;s=s"##"}printf"%"$1"s#\n",""}'

echo "8" | awk '{s="#";for(i=0;i<$1;i++){printf"%"$1-i"s%s\n","",s;s=s"##"}printf"%"$1"s#\n",""}'
        #
       ###
      #####
     #######
    #########
   ###########
  #############
 ###############
        #

cat tree.txt
3
5

awk '{s="#";for(i=0;i<$1;i++){printf"%"$1-i"s%s\n","",s;s=s"##"}printf"%"$1"s#\n",""}' tree.txt
   #
  ###
 #####
   #
     #
    ###
   #####
  #######
 #########
     #

5

Язык: Java, Количество символов: 219

class T{ /* 219 characters */
  public static void main(String[] v){
    int n=new Integer(v[0]);
    String o="";
    for(int r=1;r<=n;++r){
      for(int s=n-r;s-->0;)o+=' ';
      for(int s=1;s<2*r;++s)o+='*';
      o+="%n";}
    while(n-->1)o+=' ';
    System.out.printf(o+"*%n");}}

Для справки, я смог побрить предыдущее Java-решение, используя рекурсию, до 231 символа, по сравнению с предыдущим минимумом 269. Хотя и немного дольше, мне нравится это решение, потому что Tоно действительно объектно-ориентированное. Вы можете создать небольшой лес случайных размеров Tэкземпляров. Вот последняя эволюция в этом направлении:

class T{ /* 231 characters */
  public static void main(String[] v){new T(new Integer(v[0]));}}
  String o="";
  T(int n){
    for(int r=1;r<=n;++r){
      x(' ',n-r);x('*',2*r-1);o+="%n";}
    x(' ',n-1);
    System.out.printf(o+"*%n");
  }
  void x(char c,int x){if(x>0){o+=c;x(c,x-1);}
 }

Количество новых персонажей - 251 (1 соответствующий пробел)

избавьтесь от "public static void main", используйте статический блок и скомпилируйте с Java 6;)
Fabinout

Я знаю, что это было почти 9 лет (смеется), но вы можете class T{public static void main(String[]v){long n=new Long(v[0]),r=1,s;String o="";for(;r<=n;r++){for(s=n-r;s-->0;)o+=' ';for(;++s<2*r;)o+='*';o+="\n";}while(n-->1)o+=' ';System.out.println(o+"*");}}
Кевин Круйссен

5

Язык: PowerShell, Количество символов: 41 (включая 1 пробел)

1..$args[0]+1|%{" "*(30-$_)+"*"*($_*2-1)}

5

21 персонаж с дьялогом APL.

m,⍨⌽0 1↓m←↑'*'\¨⍨1,⍨⍳

⍳ дает вектор целых чисел, начиная с 1.

1, ⍨ добавляет единицу в конец вектора. Это будет подножие дерева.

'*' \ ¨⍨ дает вектор * -строк с длинами, заданными предыдущим вектором.

↑ преобразует вектор в матрицу и добавляет пробелы справа.

m ← сохраняет матрицу в m.

0 1 ↓ отбрасывает ноль строк и первый столбец.

⌽ переворачивает матрицу.

m, ⍨ соединяется с m с правой стороны.


m,⍨⌽0 1↓m←->(⌽,0 1↓⊢)
ngn

4

Язык: C, Количество символов: 133

Улучшение C-версии.

char s[61];

l(a,b){printf("% *.*s\n",a,b,s);}

main(int i,char**a){
  int n=atoi(a[1]);memset(s,42,61);
  for(i=0;i<n;i++)l(i+n,i*2+1);l(n,1);
}

Работает и даже принимает высоту дерева в качестве аргумента. Требуется компилятор, который поддерживает код в стиле K & R.

Я чувствую себя таким грязным сейчас .. Это код ужасен.


Это та же проблема, что и мой первый разрез на Java; это не полная программа с использованием аргумента командной строки!

Ой? Это обязательно? Нет проблем. Я исправлю это.

Это 138 символов, когда все ненужные переводы строки удалены.
Может Берк Гудер

Я считаю 133 (только что удалил все пробелы и проверил размер файла)

4

R (62 байта)

Я еще не видел решения R. Поправь меня, если я пропустил это.

for(i in c(1:N,1))cat(rep(" ",N-i),rep("*",2*i-1),"\n",sep="")

Выход:

> N <- 3
> for(i in c(1:N,1))cat(rep(" ",N-i),rep("*",2*i-1),"\n",sep="")
  *
 ***
*****
  *
> 
> N <- 4
> for(i in c(1:N,1))cat(rep(" ",N-i),rep("*",2*i-1),"\n",sep="")
   *
  ***
 *****
*******
   *
> 
> N <- 5
> for(i in c(1:N,1))cat(rep(" ",N-i),rep("*",2*i-1),"\n",sep="")
    *
   ***
  *****
 *******
*********
    *

3

Язык: C, Количество символов: 176 (2 соответствующих пробела)

#include <stdio.h>
#define P(x,y,z) for(x=0;x++<y-1;)printf(z);
main(int c,char **v){int i,j,n=atoi(v[1]);for(i=0;i<n;i++){P(j,n-i," ")P(j,2*i+2,"*")printf("\n");}P(i,n," ")printf("*\n");}

3

Версия оболочки, 134 символа:

#!/bin/sh
declare -i n=$1
s="*"
for (( i=0; i<$n; i++ )); do
    printf "%$(($n+$i))s\n" "$s"
    s+="**"
done
printf "%$(($n))s\n" "*"


3

Язык: Python, Количество значащих символов: 90

Это некрасиво, но работает

import sys
n=int(sys.argv[1])
print"\n".join(" "*(n-r-1)+"*"*(r*2+1)for r in range(n)+[0])

...

$ python tree.py 13
            *
           ***
          *****
         *******
        *********
       ***********
      *************
     ***************
    *****************
   *******************
  *********************
 ***********************
*************************
            *

Количество ваших персонажей 98 (2 значащих пробела, в кавычках)

3

Поскольку это CW: мне не нравится, что кодовые гольфы всегда организованы в терминах «количество символов» или что-то подобное. Разве они не могут быть организованы с точки зрения количества инструкций для компилятора / интерпретатора (или какого-либо подобного критерия)? Вот снова решение Ruby , и оно в основном то же самое, но теперь и для потребления человеком:

SPACE = " "
ASTERISK = "*"
height_of_tree=ARGV[0].to_i
tree_lines = (1..height_of_tree).to_a
tree_lines.push 1 # trunk
tree_lines.each do | line |
   spaces_before = SPACE*(height_of_tree-line)
   asterisks = ASTERISK*(2*line-1) 
   puts spaces_before + asterisks
end

Я согласен с первым утверждением. В таких терминах такие языки, как perl, имеют стартовое преимущество. Должно быть что-то вроде количества состояний или тому подобное.

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



2

PHP, 111 символов

(Самым последним символом должен быть перевод строки.)

<?php $n=$argv[1];for($r='str_repeat';$i<$n;$i++)echo $r(' ',$n-$i).$r('*',$i*2+1)."\n";echo $r(' ',$n).'*' ?>

Читаемая версия:

<?php

$n = $argv[1];

for ($r = 'str_repeat'; $i < $n; $i++)
    echo $r(' ', $n - $i) . $r('*' , $i * 2 + 1) . "\n";

echo $r(' ', $n) . '*'

?>

Вы можете сохранить несколько символов, создав строку, а затем повторить ее. Думаю. Попробуйте это.

Хорошая идея, но я попробовал это, и это только делает это дольше. '$ t. = (...)' только на один символ короче, чем 'echo (...)', и тогда вам также придется 'echo $ t' в конце.

Сократил это на 4 символа, удалив '$ i = 0;' Первая часть для заявления. PHP предполагает, что несуществующие переменные, используемые в целочисленном контексте, уже равны 0! :П

Сохраненный символ, поместив $ r = .. в for. Также я говорю, что символы новой строки должны быть одним байтом, а не двумя. знак равно

Да, я только что понял, что пропустил один, потому что я посчитал, используя номер столбца в моем текстовом редакторе. Я использую Linux, поэтому символ новой строки - один байт.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.