Как я могу генерировать этот шаблон чисел?

JavaScript использует литерал простого объекта:

var x = { intValue: 5, strValue: "foo" };

Это создает законченный объект.

JavaScript использует основанную на прототипе объектную ориентацию и обеспечивает способность расширить типы во времени выполнения:

String.prototype.doubleLength = function() {
    return this.length * 2;
}

alert("foo".doubleLength());

объект делегирует весь доступ к атрибутам, которые это не содержит само к его "прототипу", другому объекту. Это может использоваться для реализации наследования, но на самом деле более мощно (даже если более громоздкий):

/* "Constructor" */
function foo() {
    this.intValue = 5;
}

/* Create the prototype that includes everything
 * common to all objects created be the foo function.
 */
foo.prototype = {
    method: function() {
        alert(this.intValue);
    }
}

var f = new foo();
f.method();
5
задан Nescio 2 December 2009 в 14:25
поделиться

15 ответов

Предполагая, что вы можете использовать побитовые операторы, вы можете проверить, что общего у чисел с одинаковым выводом, в этом случае я предпочел использовать ввод 0–31, потому что это проще ( вы можете просто вычесть 1 из фактических значений)

Что у вас есть?

0x0000 -> 1
0x0001 -> 1
0x0010 -> 1
0x0011 -> 1
0x0100 -> 2
0x0101 -> 2
0x0110 -> 2
0x0111 -> 2
0x1000 -> 1
0x1001 -> 1
0x1010 -> 1
0x1011 -> 1
0x1100 -> 2
...

Это довольно просто, если вы заметите, что третий бит всегда равен 0 , тогда как на выходе должен быть 1 и наоборот это всегда 1 , когда вывод должен быть 2

так:

char codify(char input)
{
     return ((((input-1)&0x04)>>2 == 1)?(2):(1));
}

EDIT

Как было предложено в комментарии, он должен работать также с

char codify(char input)
{
     return ((input-1 & 0x04)?(2):(1));
}

, потому что на некоторых языках (например, C) 0 будет оценивать как false , а любое другое значение - как true . Я не уверен, работает ли он и на C #, потому что я никогда не программировал на этом языке. Конечно, это не зависящий от языка ответ, но он

16
ответ дан 18 December 2019 в 05:12
поделиться

JavaScript

Моей первой мыслью было

output = ((input - 1 & 4) >> 2) + 1;

, но код дрхирша отлично работает в JavaScript:

output = input - 1 & 4 ? 2 : 1;

и смешное (связанное с ответом FogleBird):

output = -~((input - 1) % 8 > 3);
1
ответ дан 18 December 2019 в 05:12
поделиться

Использование Python:

output = 1
for i in range(1, 32+1):
  print "%d. %d" % (i, output)
  if i % 4 == 0:
    output = output == 1 and 2 or 1
1
ответ дан 18 December 2019 в 05:12
поделиться
char codify(char input)
{
     return  (((input-1) & 0x04)>>2) + 1;
}
1
ответ дан 18 December 2019 в 05:12
поделиться

В Groovy:

def codify = { i  ->
    return  (((((i-1)/4).intValue()) %2 ) + 1)
}

Затем:

def list = 1..16
list.each {
    println "${it}: ${codify(it)}"
}
1
ответ дан 18 December 2019 в 05:12
поделиться

Принятый ответ return ((((input-1) & 0x04) >> 2 == 1)? (2) :( 1)); использует ветку, а я бы только что написано:

return 1 + ((input-1) & 0x04) >> 2;

4
ответ дан 18 December 2019 в 05:12
поделиться

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

Статический член - это то, что не относится ни к какому экземпляру, а только к классу .

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

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

любым способом, известным во время компиляции:

// binary 1111 0000 1111 0000 1111 0000 1111 0000
const uint32_t lu_table = 0xF0F0F0F0;

// select 1 bit out of the table
if (((1 << (input-1)) & lu_table) == 0) {
    return 1;
} else {
    return 2;
}

Изменяя константу, вы можете обрабатывать любой шаблон вывода, который хотите. Очевидно, что в вашем случае есть шаблон, который означает, что это, вероятно, можно сделать быстрее (поскольку сдвиг не требуется), но все остальные уже сделали это. Кроме того, чаще всего таблица поиска представляет собой массив, но здесь это не обязательно.

6
ответ дан 18 December 2019 в 05:12
поделиться

В Haskell:

vec2graph :: Int -> Char
vec2graph n = (cycle "11112222") !! (n-1)
3
ответ дан 18 December 2019 в 05:12
поделиться

Это довольно просто:

if (input == "1") {Console.WriteLine(1)};
if (input == "2") {Console.WriteLine(1)};
if (input == "3") {Console.WriteLine(1)};
if (input == "4") {Console.WriteLine(1)};
if (input == "5") {Console.WriteLine(2)};
if (input == "6") {Console.WriteLine(2)};
if (input == "7") {Console.WriteLine(2)};
if (input == "8") {Console.WriteLine(2)};

и т. д.

HTH

1
ответ дан 18 December 2019 в 05:12
поделиться

Это зависит от языка, который вы используете.

В VB.NET вы можете сделать что-то вроде этого:

for i as integer = 1 to 32
   dim intAnswer as integer = 1 + (Math.Floor((i-1) / 4) mod 2)
   ' Do whatever you need to do with it
next

Это может показаться сложным, но это только потому, что я поместил это в строку sigle.

1
ответ дан 18 December 2019 в 05:12
поделиться

Java, использующая операцию по модулю ('%'), чтобы задать циклическое поведение (0,1,2 ... 7), а затем тернарный, если 'округлить' до 1 (?) или 2 (:) в зависимости от возвращаемого значения. ...

 public static void main(String[] args) {
        for (int i=1;i<=32;i++) {
             System.out.println(i+"="+ (i%8<4?1:2) );
    }

Производит:

1 = 1 2 = 1 3 = 1 4 = 2 5 = 2 6 = 2 7 = 2 8 = 1 9 = 1 10 = 1 11 = 1 12 = 2 13 = 2 14 = 2 15 = 2 16 = 1 17 = 1 18 = 1 19 = 1 20 = 2 21 = 2 22 = 2 23 = 2 24 = 1 25 = 1 26 = 1 27 = 1 28 = 2 29 = 2 30 = 2 31 = 2 32 = 1

1
ответ дан 18 December 2019 в 05:12
поделиться

Python

def f(x):
    return int((x - 1) % 8 > 3) + 1

Or:

def f(x):
    return 2 if (x - 1) & 4 else 1

Or:

def f(x):
    return (((x - 1) & 4) >> 2) + 1
4
ответ дан 18 December 2019 в 05:12
поделиться

In Perl:

#!/usr/bin/perl

use strict; use warnings;

sub it {
    return sub {
        my ($n) = @_;
        return 1 if 4 > ($n - 1) % 8;
        return 2;
    }
}

my $it = it();

for my $x (1 .. 32) {
    printf "%2d:%d\n", $x, $it->($x);
}

Or:

sub it {
    return sub {
        my ($n) = @_;
        use integer;
        return 1 + ( (($n - 1) / 4) % 2 );
    }
}
3
ответ дан 18 December 2019 в 05:12
поделиться

Вы можете использовать комбинацию целочисленного деления и по модулю 2 (четно-нечетное): есть блоки по четыре, и 1-й, 3-й, 5-й блок и так далее должны привести к 1, 2-й, 4-й, 6-й и так далее в 2.

s := ((n-1) div 4) mod 2;
return s + 1;

div предполагается целочисленным делением.

РЕДАКТИРОВАТЬ: Разумеется, преобразовал первый мод в div

6
ответ дан 18 December 2019 в 05:12
поделиться

в C:

char output = "11112222"[input-1 & 7];

или

char output = (input-1 >> 2 & 1) + '1';

, или по идее FogleBird:

char output = input - 1 & 4 ? '2' : '1';

, или по идее Стива Джессопа:

char output = '2' - (0x1e1e1e1e >> input & 1);

или

char output = "12"[input-1>>2&1];

Приоритет оператора C - зло . Используйте мой код как плохие примеры: -)

10
ответ дан 18 December 2019 в 05:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: