Задача об обмене двух целочисленных переменных значениями (без использования третьей) является одним из классических программистских ребусов.
Как сделать это в PHP, используя минимальное количество символов?
Критерий победы — минимальное количество символов. При прочих равных условиях ответ, опубликованный раньше, побеждает. Подведение итогов через 24 часа.
Пожалуйста, указывайте в ответе количество символов, чтобы проще было выявить победителя.
function getAnswers(questionId, answer_filter, page) {
return jQuery.ajax({
url: '//api.stackexchange.com/2.2/questions/' + questionId + '/answers?page=
+ page + '&pagesize=100&order=desc&sort=activity&site=ru.stackoverflow&filter=' + answer_filter,
method: "get",
dataType: "jsonp",
crossDomain: true
}).then(function(data) {
if (data.has_more) {
return getAnswers(questionId, answer_filter, page + 1).then(function(d) {
return data.items.concat(d.items);
})
}
return data.items;
});
}
function getAuthorName(e) {
return e.owner.display_name
}
function process(items) {
return items.map(function(item) {
var matched = item.body.match(/(\d+)[^\d]*?<\/h/);
if (matched) {
return {
count: +matched[1],
link: item.share_link,
author: getAuthorName(item)
};
} else {
return {
count: 'N/A',
link: item.share_link,
author: getAuthorName(item)
}
}
});
}
function sort(items) {
return items.sort(function(a, b) {
if (a.count == 'N/A') return 1;
if (b.count == 'N/A') return -1;
return a.count - b.count;
})
}
function fillTemplate(sortedItems) {
$('#leadership').append(sortedItems.map(function(item, index) {
return $('').append($('').html(index + 1))
.append($(' | ').html(item.author))
.append($(' | ').html(item.count))
.append($(' | ').append($('').attr('href', item.link).text('Link')));
}));
return sortedItems;
}
var QUESTION_ID = 540286,
ANSWER_FILTER = "!4*SyY(4Kifo3Mz*lT",
startPage = 1;
getAnswers(QUESTION_ID, ANSWER_FILTER, startPage)
.then(process)
.then(sort)
.then(fillTemplate);
#leadership {
border-collapse: collapse;
}
#leadership td,
#leadership th {
padding: 5px;
}
#leadership th,
td:nth-child(3) {
text-align: center;
}
Таблица лидеров
|
Автор |
Количество символов |
|
Комментарий, о причине выбора победителя:
Лидирующий ответ @PashaPash (0 символов) фактически не меняет переменных, поэтому не участвует в конкурсе.
Ответ от @Naumov (10 символов), вместо обмена переменных просто присваивает им новы
значения. Ну и его длина не является постоянной, а зависит от значений переменных. Рассматривать этот ответ в рамках конкурсной программы я не буду.
ОтветыОтвет 1
PHP, 14 Символов
$a+=+$b-$b=$a;
Рабочий пример на IDEOne.
Ответ 2
PHP, 15 символов
$x^=$y^=$x^=$y;
Ответ 3
PHP, 25 20
list($a,$b)=[$b,$a];
Ответ 4
PHP, 15 Символов
$a=$a+$b-$b=$a;
Ответ 5
17, 19, 23 и 42 символа
$x=[$y,$y=$x][0]; // 17
$x/=$y=($x*=$y)/$y; // 19
eval("\$x=$y;\$y=$x;"); // 23
extract(unpack("iy/ix",pack("i2",$x,$y))); // 42
Ответ 6
Совсем альтернативный вариант:
Повторное присвоение значений переменным - в целом плохая идея.
В плане читабельности кода - глядя на первое присвоение значений переменным тяжеп
понять, чему ж они будут равны в конце метода. Особенно актуально для языков с нестрогой типизацией.
В плане производительности - процессору гораздо удобнее просто начать брать значени
из другого места, чем терять время на перекладывание значений из одного куска памяти в другой, и обратно.
Гораздо лучше просто заменить использование переменных в том коде, который расположен ниже места, где вы собирались вписать swap.
PHP, 0 символов
Ответ 7
PHP, 17 символов
$a=$a+$b-($b=$a);
Ответ 8
в общем для оригинальности 28 символов
extract(['b'=>$a,'a'=>$b]);
Ответ 9
Смеха ради, 76 символов
try{
throw new Exception($b);
}catch(Exception $e){
$b=$a;
$a=$e->getMessage();
}
Ответ 10
PHP 7.1 (16 символов)
Ответ 11
PHP 10 символов
допустим у нас
$a=1;$b=5;
чтобы поменять их местами мы можем сделать так
$a=5;$b=1;
|
Комментариев нет:
Отправить комментарий