Мое Решение было:
Первый крик на C #. Входные данные должны быть предоставлены как первый аргумент командной строки.
using System;
using C = System.Console;
static class P
{
static void Main(string[] a)
{
var b = a[0];
var l = b.Length;
int y = 0, z = 0;
for (int i = 0; i < l - 1; i++)
{
y += Math.Sign(b[i] - b[i + 1]);
z = Math.Min(y, z);
}
y = 0;
for (int i = 0; i < l - 1; i++)
{
C.SetCursorPosition(i, y - z);
C.Write(b[i]);
y += Math.Sign(b[i] - b[i + 1]);
}
}
}
Это дает 280 байт в сжатом из.
с использованием System; с использованием C = System.Console; статический класс P {static void Main (string [] a) {var b = a [0]; var l = b.Length; int y = 0, z = 0; for (int i = 0; i
Попытка номер два с другим подходом.
using System;
using System.Collections.Generic;
static class P
{
static void Main(string[] a)
{
var b = a[0] + "$";
var l = new List<string>();
var y = -1;
for (int i = 0; i < b.Length - 1; i++)
{
if ((y == -1) || (y == l.Count))
{
y = y < 0 ? 0 : y;
l.Insert(y, b.Substring(i, 1).PadLeft(i + 1));
}
else
{
l[y] = l[y].PadRight(i) + b[i];
}
y += Math.Sign(b[i] - b[i + 1]);
}
foreach (var q in l) Console.WriteLine(q);
}
}
Цикл далее может быть переписан для использования блока try / catch.
for (int i = 0; i < b.Length - 1; i++)
{
try
{
l[y] = l[y].PadRight(i) + b[i];
}
catch
{
y = y < 0 ? 0 : y;
l.Insert(y, b.Substring(i, 1).PadLeft(i + 1));
}
y += Math.Sign(b[i] - b[i + 1]);
}
Это дает слегка измененный и сжатый 321 байт - немного больше, чем первая попытка, но намного надежнее.
using System;
В любом случае, разве вам не нужна ошибка HTTP 500? Как и во второй строке вашего примера, если кто-то запросил JSON вместо HTML или XML, не является ли код ошибки, вернуть соответствующий ответ?
вместо того, чтобы делать:
def some_action
...
respond_to do |format|
format.html
format.json { whatever }
format.any { whatever }
end
end
, просто используйте:
def some_action
...
end
, и Rails по умолчанию будет искать some_action.html.erb или любой запрошенный формат. Если вы не определите какие-либо представления, кроме html, все другие форматы не будут работать, если потребуется.
Так как Rails использует эквивалент подстановочного знака для обработки форматов ".: Format", немного сложнее предотвратить ошибки на стороне маршрута.
Вместо этого, это довольно простой способ поймать любые не HTML-запросы в фильтре до. Это может выглядеть так:
class ApplicationController < ActionController::Base
before_filter :check_format
private
def check_format
if request.format != Mime::HTML
raise ActionController::RoutingError, "Format #{params[:format].inspect} not supported for #{request.path.inspect}"
end
end
end
ActionController :: RoutingErrors обрабатываются как ошибки 404, что разумно. - довольно простой способ перехватывать любые запросы, отличные от HTML, в фильтре до. Это может выглядеть так:
class ApplicationController < ActionController::Base
before_filter :check_format
private
def check_format
if request.format != Mime::HTML
raise ActionController::RoutingError, "Format #{params[:format].inspect} not supported for #{request.path.inspect}"
end
end
end
ActionController :: RoutingErrors обрабатываются как ошибки 404, что разумно. - довольно простой способ перехватывать любые запросы, отличные от HTML, в фильтре до. Это может выглядеть так:
class ApplicationController < ActionController::Base
before_filter :check_format
private
def check_format
if request.format != Mime::HTML
raise ActionController::RoutingError, "Format #{params[:format].inspect} not supported for #{request.path.inspect}"
end
end
end
ActionController :: RoutingErrors обрабатываются как ошибки 404, что разумно. В случае, если у вас есть действие, которое должно поддерживать что-то другое, кроме HTML, просто используйте:
skip_before_filter :check_format, :only => ACTION_NAME