Решение задачи C квалификационного раунда Google Code Jam 2016


Условия задачи «Джемкойны»

Решение для малого набора данных (N = 16, J = 50)

program JamCoin;

uses
  SysUtils;
const
  minBase = 2;
  maxBase = 10;
var
  N: Byte; //total number of digits
  T, i: Byte;
  J: Word;
  NJ: string;
  spacePos: SizeInt;
  bits, mBits: Word;
  b: Byte;
  jj: Word;
  k: Byte;
  num: QWord;
  d: LongWord;
  dcount: Byte;
  divs: array[minBase..maxBase] of LongWord;
  stop: boolean;

function BitSet(bits: Word; i: Byte): boolean;
var
  mask: Word;
begin
  mask:=1 shl i;
  result:=(bits and mask) = mask;
end;

function Number(bits: Word; base: Byte): QWord;
var
  b: Byte;
  i: Byte;
  power: QWord;
begin
  result:=0;
  for b:=0 to N - 1 do
    if BitSet(bits, b) then
    begin
      power:=1;
      for i:=1 to b do
        power:=power * base;
      result:=result + power;
    end;
end;

function Divisor(number: QWord; base: Byte): QWord;
var
  i: QWord;
  last: QWord;
begin
  result:=0;
  i:=2;
  last:=number - 1;
  while i < last do
  begin
    if i Mod base = 0 then
    begin
      Inc(i);
      Continue;
    end;
    if  number Mod i = 0 then
    begin
      result:=i;
      Break;
    end
    else
    begin
      last:=number Div i;
    end;
    Inc(i);
  end;
end;

procedure PrintBits(number: LongWord);
var
  bitCount: Byte;
begin
  bitCount:=0;
  for b:=N - 1 downto 0 do
  begin
    if BitSet(number, b) then
    begin
      Write('1');
      Inc(bitCount);
    end
    else
      Write('0');
  end;
  if bitCount = N then stop:=true;
end;

begin
  Readln(T);
  for i:=1 to T do
  begin
    Readln(NJ);
    spacePos:=Pos(' ', NJ);
    N:=StrToInt(LeftStr(NJ, spacePos - 1));
    J:=StrToInt(RightStr(NJ, Length(NJ) - spacePos));
    Writeln('Case #', i, ':');
    mbits:=0;
    jj:=0;
    while (jj < J) and not stop do
    begin
      dcount:=0;
      while dcount < 9 do begin bits:=1 shl (N - 1) + (mbits shl 1) + 1; for k:=minBase to maxBase do begin num:=Number(bits, k); d:=Divisor(num, k); divs[k]:=d; if d > 0 then
          begin
            Inc(dcount);
          end
          else
          begin
            dcount:=0;
            Break;
          end;
        end;
        Inc(mbits);
      end;
      Inc(jj);
      PrintBits(bits);
      for k:=minBase to maxBase do
        Write(' ', divs[k]);
      Writeln;
    end;
  end;
end.
Реклама
Рубрика: программирование | Метки: , | Оставить комментарий

Google Code Jam 2016. Задача C квалификационного раунда


Джемкойны

Джемкойн – это строка из N ≥ 2 цифр со следующими свойствами:

  • Используются только цифры 0 и 1.
  • Первая и последняя цифры: 1.
  • Интерпретация строки в любой системе счисления с основанием от 2 до 10 включительно даёт составное (не простое) число.

Читать далее

Рубрика: перевод | Метки: | Оставить комментарий

Решение задачи A квалификационного раунда Google Code Jam 2016


Условия задачи «Овца-счетовод»

program csheep;

uses
  SysUtils;

var
  T, N, i, kn: LongWord;
  j, k: Byte;
  s, d: string;
begin
  Readln(T);
  for i:=1 to T do
  begin
    Readln(N);
    if N = 0 then
    begin
      s:='INSOMNIA';
      d:=''
    end
    else
      d:='0123456789';
    k:=1;
    while Length(d) > 0 do
    begin
      s:=IntToStr(k * N);
      for j:=1 to Length(s) do
      begin
        d:=StringReplace(d, s[j], '', []);
      end;
      Inc(k);
    end;
    Writeln('Case #', i, ': ', s);
  end;
end.
Рубрика: программирование | Метки: , | Оставить комментарий

Google Code Jam 2016. Задача A квалификационного раунда


Овца-счетовод

Овца Bleatrix Trotter придумала, как ей быстрее заснуть. Сначала надо выбрать число N. Затем назвать N, 2 × N, 3 × N и т.д. Она думает о каждой цифре называемого числа. Она запоминает, какие цифры (0, 1, 2, 3, 4, 5, 6, 7, 8, и 9) уже встречались хотя бы раз в любом из названных чисел. Она заснёт, когда «повидается» с каждой из десяти цифр хотя бы раз. Читать далее

Рубрика: перевод | Метки: | Оставить комментарий

Замена текста в надписях Word


Dim s As Shape
Dim OldText As String
For Each s In ActiveDocument.Shapes
  If s.Type = msoTextBox Then
    OldText = s.TextFrame.TextRange.Text
    s.TextFrame.TextRange.Text = Replace(OldText, "Текст", "Замена")
  End If
Next
Рубрика: программирование | Метки: , | Оставить комментарий

Особенность очистки содержимого объединённых ячеек Excel


Private Sub Worksheet_Change(ByVal Target As Range)
  'при нажатии клавиши BackSpace Target.Count = 1
  'при нажатии клавиши Delete Target.Count > 1
End Sub
Рубрика: программирование | Метки: , | Оставить комментарий

Заключаем строку VBA в кавычки


Чтобы в строку VBA записать символ кавычек, приходится использовать код символа кавычек Chr(34) или дублировать символ кавычек. Читать далее

Рубрика: программирование | Метки: | Оставить комментарий