4, 8, 15, 16, 23, 42 [закрито]


90

4, 8, 15, 16, 23, 42

Напишіть програму, яка виводить цю послідовність чисел нескінченно. Однак Номери не повинні ніде з’являтися у вашому вихідному коді.

Далі не є дійсною програмою Java для виведення Numbers, оскільки Numbers відображаються у вихідному коді:

class TheNumbers {
    public static void main(String[] args) {
        for(int n = 0;;) System.out.println(
            n == 4 ? n = 8 :
            n == 8 ? n = 15 :
            n == 15 ? n = 16 :
            n == 16 ? n = 23 :
            n == 23 ? n = 42 : (n = 4)
        );
    }
}

Визначення "Числа не повинні відображатися у вашому вихідному коді" таке:

  • Ви не повинні використовувати цифру 4.
  • Ви не повинні використовувати цифру 8.
  • Ви не повинні вживати цифру 1, за якою йде цифра 5.
  • Ви не повинні використовувати цифру 1, за якою йде цифра 6.
  • Ви не повинні вживати цифру 2, а потім цифру 3.

Якщо ваша мова ігнорує певні символи, які можна розмістити між цифрами, це не є дійсною заміною. Так, наприклад, якщо ваша мова трактує буквальне 1_5як 15, це вважатиметься цифрою 1, за якою йде цифра 5.

Альтернативні бази включені в обмеження, наприклад:

  • Binary 100 не можна використовувати як заміну 4.
  • Octal 10 не можна використовувати як заміну для 8.
  • Шестнадцятковий F не можна використовувати як заміну 15.

Отже, наступна є дійсною (але не дуже натхненною) програмою Java для виведення номерів, оскільки Номери не відображаються у вихідному коді:

class TheNumbers {
    public static void main(String[] args) {
        for(int n = '*';;) {
            System.out.println(n -= '&');
            System.out.println(n *= 2);
            System.out.println(n += 7);
            System.out.println(++n);
            System.out.println(n += 7);
            System.out.println(n += 19);
        }
    }
}

Слід зазначити , що в цій програмі, '*'і '&'замінюють цілими числами 42 і 38, оскільки в іншому випадку цифри 4 і 8 будуть з'являтися в його вихідному коді.

Визначення "виводить послідовність нескінченно" є відкритим для тлумачення. Так, наприклад, програма, яка видає гліфів стає менше, поки вони не будуть "нескінченно" малі, буде дійсною.

Кудо, якщо ви здатні генерувати послідовність якимось чином, це в основному не важко кодує кожне число.

Це конкурс популярності, тому будьте креативними. Відповідь з найбільшою кількістю голосів 26 березня - переможець.


8
Я можу порахувати 6 знижок, але жодних коментарів: /
Вереос

11
@Vereos, "Це дурне питання" не дуже конструктивний, тому ніхто не може розміщувати це як коментар.
Пітер Тейлор

18
У цьому світі є 11 типів людей: тих, хто дивився Загублених , тих, хто цього не зробив, і тих, хто не розуміє бінарного.
писклива косточка

7
@PeterTaylor Напевно, але новоприбулі здебільшого цього не отримають і покинуть сайт, замість того, щоб намагатися покращити свої майбутні питання. Я думаю, це This isn't an interesting question, IMHO, since the solution is pretty trivial. Please post in the sandbox next time.було б краще, ніж це This is a stupid question., але це лише моя особиста думка.
Вереос

3
Зауважую, питання не забороняє виводити інші числа. Так, принаймні згідно з теорією нескінченних мавп, непотрібний генератор псевдовипадкових чисел повинен зробити цю справу.
kojiro

Відповіді:


233

Java

Я вирішив додати ще один запис, оскільки це абсолютно відрізняється від мого першого (що було більше як приклад).

Ця програма обчислює середнє значення масиву, введеного користувачем ...

import java.util.Scanner;

public class Numbers {
    public static double getSum(int[] nums) {
        double sum = 0;
        if(nums.length > 0) {
            for(int i = 0; i <= nums.length; i++) {
                sum += nums[i];
            }
        }

        return sum;
    }

    public static double getAverage(int[] nums) { return getSum(nums) / nums.length; }
    public static long roundAverage(int[] nums) { return Math.round(getAverage(nums)); }

    private static void beginLoop(int[] nums) {
        if(nums == null) {
            return;
        }

        long avg = roundAverage(nums);
        System.out.println("enter nums for average");
        System.out.println("example:");
        System.out.print("array is " + nums[0]);
        for(int i = 1; i <= nums.length; i++) {
            System.out.print(", " + nums[i]);
        }

        System.out.println();
        System.out.println("avg is " + avg);
    }

    private static int[] example = { 1, 2, 7, 9, };

    public static void main(String[] args) {
        boolean done = false;
        while(!done) {
            try {
                int[] nums = example;
                beginLoop(nums);

                nums = getInput();
                if(nums == null) {
                    done = true;
                } else {
                    System.out.println("avg is " + getAverage(nums));
                }
            } catch(Exception e) {
                e.printStackTrace();
            }
        }
    }

    static int[] getInput() {
        Scanner in = new Scanner(System.in);
        System.out.print("enter length of array to average or 0 to exit: ");
        int length = in.nextInt();
        if(length == 0) {
            return null;

        } else {
            int[] nums = new int[length];
            for(int i = 0; i <= nums.length; i++) {
                System.out.print("enter number for index " + i + ": ");
                nums[i] = in.nextInt();
            }
            return nums;
        }
    }
}

... чи це робить?

java.lang.ArrayIndexOutOfBoundsException: 4
    на Numbers.getSum (Numbers.java:8)
    на Numbers.getAverage (Numbers.java:15)
    в Numbers.roundAverage (Numbers.java:16)
    на Numbers.beginLoop (Numbers.java:23)
    на Numbers.main (Numbers.java:42)
java.lang.ArrayIndexOutOfBoundsException: 4
    на Numbers.getSum (Numbers.java:8)
    на Numbers.getAverage (Numbers.java:15)
    в Numbers.roundAverage (Numbers.java:16)
    на Numbers.beginLoop (Numbers.java:23)
    на Numbers.main (Numbers.java:42)
java.lang.ArrayIndexOutOfBoundsException: 4
    на Numbers.getSum (Numbers.java:8)
    ...

17
Це чудово! Я б не подумав про щось подібне.
Джордон Біондо

2
Вау, прекрасна! Чудова ідея;)
П’єр Арло

5
Геніальність! Хоча результат є дещо багатослівним, але я думаю, що це стосується мови, яку ви вибрали тут. ;)
Пітер Вітвоет

3
Якраз тоді, коли я думав, що Python "lizt = Загублений сюжет" не вдалося перебити ...
Дейв

3
@justhalf Насправді це помилки у мене, це була найкраща відповідь на деякий час там. Не весело перемагати моє власне питання.
Radiodef

184

Пітон

#!/usr/bin/python
lizt = ["SPOI",
        "LERS: Lo",
        "st begins with ",
        "a plane crash on",
        "a desert island and end",
        "s with its viewers stuck in limbo forever."
        ]

while True:
    for item in lizt:
        print len(item)

Редагувати: Відповідно до пропозиції nneonneo, сценарій тепер не містить цифр.


2
Так просто, та ще й добре.
Конрад Боровський

4
Чи отримає це моє голосування чи ні, повністю залежить від відповіді на це питання: чи написання "lizt" є посиланням на "Arzt"? EDIT: Кого я жартую, той все одно отримує мій голос.
Плутор

6
Я б написав while True:так, щоб ваша відповідь зовсім не містила цифр.
nneonneo

2
while True:зустрічається частіше.
Мартін Удінг

1
Це не псує правила "немає альтернативних основ"? В основному, це лише масив номерів базової-1 :-)
Даніель,

77

Perl

У вихідному коді немає нічого прихованого. Ні. Якщо код не працює, введіть use re "eval";його перед собою (вимагається в Perl 5.18).

''=~('('.'?'.('{').(
'`'|'%').('['^'-').(
"\`"| '!').('`'|',')
.'"'. '\\' .'@'.('`'
|'.') .'=' .'('.('^'
^('`'       |"\*")).
','.("\:"& '=').','.
('^'^('`'| ('/'))).(
'^'^("\`"| '+')).','
.('^'^('`'|('/'))).(
'^'^('`'|'(')).','.(
'^'^('`'|',')).('^'^
("\`"|     '-')).','
.('^' ^('`' |'*')).(
'^'^( "\`"| (','))).
(')').     ';'.('['^
','). ('`'| ('(')).(
"\`"| ')'). ('`'|','
).('`'     |'%').'('
.'\\'.'$'.'|'."\=".(
'^'^('`'|'/'))."\)".
'\\'.'{'.'\\'."\$".(
"\["^ '/')       .((
'=')  ).+( '^'^('`'|
'.' ) ).(( (';'))).(
"\`"| '&').     ('`'
|'/') .('['^')') .((
'(')) .''. '\\'. '@'
.+(     '`'     |'.'
).')'.'\\'.'{'.('['^
'(').('`'|',').('`'|
'%').('`'|'%').('['^
'+'). '\\'.     '$'.
'_'.  '-'. '\\'. '$'
.+( ( '[') ^'/').';'
.'\\' .'$'      .''.
('['^ '/') .'='. (((
'\\') )).+ "\$". '_'
.((     ';'     )).+
'\\'.'$'.'_'.'='.'='
.('^'^('`'|'*')).'|'
.'|'.('['^'+').('['^
')'     ).(     '`'|
(( ')')) ) .('`' |((
'.'))).( '['^'/' ).+
(((     (((     '\\'
)) )))).'"'.('{' ^((
(( '[')))) ).''. (((
((       ((     '\\'
))))))).'"'.';'.('['
^'+').('['^')').('`'
|')').('`'|'.').('['
^+ '/').''.     '\\'
.+ '}'. +( "\["^ '+'
). ('[' ^"\)").( '`'
|+       ((     ')')
)).('`' |+ '.').('['
^'/').( (( '{'))^'['
).'\\'. ((       '"'
)).('!'^'+').('\\').
'"'.'\\'.'}'.(('!')^
'+').'"'.'}'.')');$:
='.'#madebyxfix#'.'=
^'~';$~='@'|"\(";#;#

Пояснення в спойлері.

Це проста програма Perl, яка використовує декілька побітових операцій і оцінює регулярний вираз за допомогою оператора = ~ . Регекс починається з (? { І закінчується з }) . У Perl цей код працює під час оцінки регулярного вираження - це дозволяє мені використовувати eval, не використовуючи його фактично. Однак, як правило, необхідне повторне оцінювання з міркувань безпеки при оцінці регулярних виразів з рядків (деякі старіші програми фактично приймали регулярні вирази від користувача) - але виявляється, що раніше Perl 5.18 виникла помилка, що викликала постійні складені вирази щоб працювати навіть без цієї прагми - якщо ви використовуєте Perl 5.18, введіть слово re "eval";перед кодом, щоб він працював. Крім цього, у цьому коді немає ще багато чого.


9
Я починаю виглядати це , але я до сих пір не бачу ..
rdurand

69
@xfix "Це проста програма Perl" - якщо це так, я б не хотів бачити складну.
MikeTheLiar

8
Глянь, це шхуна.
roippi

5
@roippi Ха-ха, ти німий гад. Це не шхуна, це САЙБОТ!
MikeTheLiar

7
Підказка: скопіюйте / вставте в «Блокнот ++» та зменшіть масштаб на весь час.
MikeTheLiar

55

Брейнфук

Мені так погано в мистецтві ASCII!

++        ++++++++    +[>+>++    ++>++++
+<        <<-]>++>    >-           --<
<<        +[    >>    >.<.>++      ++.
<.        >-    --    ----.++      ++.
<.>---    -.+++++.         <.      >--
-/-./+    .<.>+.-/    -.++<<.      </]

Перевірте це тут: http://ideone.com/kh3DYI


Це дійсно приємне рішення :)
gilbertohasnofb

47

Unix C

Є багато місць, щоб знайти числові константи.

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <errno.h>
#include <limits.h>
#include <signal.h>
#include <fcntl.h>
#include <pwd.h>
#include <netdb.h>

int main(void)
{
  int thenumbers[] = {
    S_IRGRP|S_IXGRP|S_IWOTH,
    ntohs(getservbyname("telnet", "tcp")->s_port),
    exp(M_E)-cos(M_PI),
    SIGTERM,
    CHAR_BIT,
    strlen(getpwuid(EXIT_SUCCESS)->pw_name)
  }, i=sizeof(thenumbers)/sizeof(*thenumbers);
  while(i--)
    printf("%d\n", thenumbers[i]);
  return main();
}

10
Затуманення тут є надзвичайно вищим для простої заміни.
Radiodef

1
Чи не виникає це переповнення стека через рекурсію?
Лижі

@Skirmantas Я припускаю, що всі компілятори будуть використовувати для цього хвостові рекурсії (наприклад, замінити виклик main на перехід до основного).
Тайло

44

C #

Формула "викрадена" з https://oeis.org/A130826 : a (n) - найменше число, таке, що вдвічі більше дільників (a (n) -n) / 3 дає n-й доданок у першому відмінності послідовності, виробленої ситом Флавій-Йосиф.

using System;
using System.Collections.Generic;
using System.Linq;

public static class LostNumberCalculator
{
    public static int GetNumber(int i)
    {
        int a = GetPairwiseDifferences(GetFlaviusJosephusSieveUpTo(100)).ElementAt(i);
        int b = FindSmallestNumberWithNDivisors(a / 2);
        return b * 3 + i + 1;
    }

    public static IEnumerable<int> GetFlaviusJosephusSieveUpTo(int max)
    {
        List<int> numbers = Enumerable.Range(1, max).ToList();

        for (int d = 2; d < max; d++)
        {
            List<int> newNumbers = new List<int>();
            for (int i = 0; i < numbers.Count; i++)
            {
                bool deleteNumber = (i + 1) % d == 0;
                if (!deleteNumber)
                {
                    newNumbers.Add(numbers[i]);
                }
            }
            numbers = newNumbers;
        }

        return numbers;
    }

    public static IEnumerable<int> GetPairwiseDifferences(IEnumerable<int> numbers)
    {
        var list = numbers.ToList();
        for (int i = 0; i < list.Count - 1; i++)
        {
            yield return list[i + 1] - list[i];
        }
    }

    public static int FindSmallestNumberWithNDivisors(int n)
    {
        for (int i = 1; i <= int.MaxValue; i++)
        {
            if (CountDivisors(i) == n)
            {
                return i;
            }
        }
        throw new ArgumentException("n is too large");
    }

    public static int CountDivisors(int number)
    {
        int divisors = 0;
        for (int i = 1; i <= number; i++)
        {
            if (number % i == 0)
            {
                divisors++;
            }
        }
        return divisors;
    }
}

class Program
{
    static void Main(string[] args)
    {
        while (true)
        {
            for (int i = 0; i < 6; i++)
            {
                int n = LostNumberCalculator.GetNumber(i);
                Console.WriteLine(n);
            }
        }
    }
}

10
+1 Для когось, хто насправді зайшов на oeis.org, щоб дослідити формулу, яка відповідає послідовності :)
MrPaulch

a(i)=a(i-1)+a(i-3)+a(i-5)насправді здається більш простим рішенням
Cruncher

1
@Cruncher Ця формула вимагає заздалегідь визначити перші 5 термінів (включаючи 4, 8 і 15), що є нудним і суперечить правилам.
Себастьян Неграш

30

C #

Використовуючи той факт, що будь-яка послідовність N елементів може бути згенерована поліномом N-1 і введення чисел передбачає безліч звукових сигналів і сигналів. Для довідки, отриманий I поліном є

( -9(X^5) +125(X^4) -585(X^3) +1075(X^2) -446(X) +160 ) / 40

Я призначив фактори для змінних, названих для чисел, для простоти;)

Перша версія:

int BEEP,
// Magic numbers, do not touch.
four = -9,
eight = 125,
fifteen = -117*5, 
sixteen = 1075,
twenty_three = (-1-1337) /3,
forty_two = 320/2;


for(BEEP=0;;BEEP=++BEEP%6)
{
    Console.WriteLine( 0.025* (
        four *BEEP*BEEP*BEEP*BEEP*BEEP+ 
        eight *BEEP*BEEP*BEEP*BEEP+ 
        fifteen *BEEP*BEEP*BEEP+
        sixteen *BEEP*BEEP+
        twenty_three *BEEP+ 
        forty_two ));
}

Мені сподобалося, що піднімається напруга, оскільки кількість ПІВ зменшується після кожного числа.

Тоді я зрозумів, що також можу обчислити коефіцієнти, використовуючи звуковий сигнал і сигнали:

int BEEEP=0, BEEP=++BEEEP ,BOOP=++BEEP,BLEEP=++BOOP+BEEP,

four = BOOP*-BOOP,
eight = BLEEP*BLEEP*BLEEP,
fifteen = BOOP*-(BOOP+(BEEP*BLEEP))*BLEEP*BOOP,
sixteen = BLEEP*BLEEP*(BOOP+(BLEEP*BEEP*BEEP*BEEP)),
twenty_three = BEEP*-((BLEEP*BOOP*BLEEP*BOOP)-BEEP),
forty_two = BEEP*BEEP*BEEP*BEEP*BEEP*BLEEP;

Після цього трохи за борт ...

int BEEEP=default(int), BEEP=++BEEEP ,BOOP=++BEEP,BLEEP=++BOOP+BEEP;

for(--BEEEP;;BEEEP=++BEEEP%(BEEP*BOOP))
{
    Console.WriteLine(

    BOOP*(                       (BOOP*-BOOP)*BEEEP    *BEEEP*BEEEP*BEEEP    *BEEEP+(BLEEP*BLEEP*
    BLEEP)                       *BEEEP*      BEEEP*    BEEEP*                     BEEEP+
    (BOOP*                       -(BOOP+      (BEEP*    BLEEP)                    )*BLEEP
    *BOOP)                       *BEEEP*      BEEEP*    BEEEP+(BLEEP*BLEEP        *(BOOP+
    (BLEEP*                       BEEP*        BEEP*                 BEEP)))       *BEEEP*
    BEEEP+                       (BEEP*-(     (BLEEP                 *BOOP*         BLEEP
    *BOOP)                       -BEEP))      *BEEEP+                (BEEP*         BEEP*
    BEEP*BEEP*BEEP*BLEEP))/     (BEEP*((BEEP*BEEP*BEEP  *BEEP*BEEP*BEEP)-(        BEEP+BEEP))));
}

Використання оператора за замовчуванням у C # для типів значень дозволяє ініціалізацію BEEEP до нуля. Таким чином, у коді не використовуються числові літерали. Основний алгоритм той самий. але коефіцієнти розраховуються в онлайні.


@ kódfodrász дякую за запропоновану редакцію!
Рік

6
Я бачу там цифру 8, ти погана людина, ти
Thebluefish

@Thebluefish Мені соромно.
Рік

25

D

Не дозволяється використовувати в коді цифри 4, 8, 15, 16, 23 або 42? Без проблем, тоді я взагалі не буду використовувати номери!

import std.stdio;

void main()
{
    while( true )
    {
        ( ',' - '('  ).writeln;
        ( '/' - '\'' ).writeln;
        ( '/' - ' '  ).writeln;
        ( '_' - 'O'  ).writeln;
        ( '^' - 'G'  ).writeln;
        ( '~' - 'T'  ).writeln;
    }
}

6
Арифметика ASCII - найкраща арифметика.
Фарап

2
Тож після С з'явилася мова, що називається D?
cegprakash

@cegprakash А до того, як C був B
SirPython

24

Javascript + HTML

Анти-гольф!

<!DOCTYPE html>
<html>
<head>
</head>
<body>
<pre>
/*hereIsTheDataPart~                    Es="5030000307000022
E2000000100000010000                    E5370000507000022200
E0010100001110000005                    E0337001010000102220
E0100010010111005033                    E7001010000102220010
E1010010111~33079900                    E1000111102221000001
E1110111~03037910100                    E0111102220010100001
E0111".replace(/~/g,                    E5);Zfillfillfillfil
Eqw=21;fq=2;fz=fq*2;                    Efl=fz*2;fm=fl*2;fw=
Efm+2; M=Math;functi                    Eon r(n,i,z){return 
Efunction(){l=i||'';                    E;for(m=0;m!=n;m++)l
E+=String.fromCharCo                    Ede(97+M.floor(M.ran
Edom()*26));return l                    E+(z||'')}};kb=r(fm,
E'/*','*'+'/');kc=r(                    Efw,'//');kd=r(20);Z
Eke=r(fw,'/*');kf=r(                    E20);kg=r(fw,'','*'+
E'/');kh=kf;ki=new Z                    EArray(21).join(' ')
E;x=[];for(n=35*ix;n                    E!=s.length;++n){x.Z
Epush(parseInt(s[n])                    E)};oo=function(){oZ
E+=z==1?kb():z==9?kc                    E():z==3?(ee.shift()
E||kd()):z==5?(y==0?                    Eke():(ee.shift()||Z
Ekf())):z==7?(y==(yl                    E-1)?kg():(ee.shift(
E)||kh())):z==0?ki:Z                    Epl.shift();}Ze=mc^2
EZthis=does*nothing;                    EZnor*does+this-haha
EZawkw0rd+space+fi11                    EZrunn1ng/out+of=stf
EZfjsddfkuhkarekhkhk                    777777777777777777*/
0;ix=typeof ix=="number"?(ix+1)%6:1;s=text();ee=[];pl=[];//2
0;q=function(n,m){return s.substr(n,m)};evl="";xl=20;yl=12//
0;while(s.length){c=s[0];m=1;if(c=='\n'){s=q(1);continue;}//
0;if(c=='E'){ev=q(0,xl);i=ev.indexOf('Z');ee.push(ev);//sd//
0;evl+=i==-1?ev.substr(1):ev.substr(1, i-1);}if(c=='0'){//sd
0;pl.push(q(0,xl*3),'','');m=3};s=q(xl*m);}eval(evl);o="";//
0;for(r=0;r!=5;++r){for(y=0;y!=yl;++y){for(n=0;n!=7;++n){//s
0;z=x[n+r*7];oo()}o+="\n"}}setTimeout(function(){text(o);//z
0;(function(){var space=' ____ ',garbage='asfdasr#@%$sdfgk';
0;var filler=space+garbage+space+garbage+space+garbage;//s//
0;})("test",1199119919191,new Date(),"xyz",30/11/1)//asdfsaf
0;eval(text());},1000);//askfdjlkasjhr,kajberksbhfsdmhbkjygk
                                        /*1111111111111111*/
                                        /*1111111111111111*/
                                        /*1111111111111111*/
                                        /*1111111111111111*/
                                        /*1111111111111111*/
                                        /*1111111111111111*/
                                        /*1111111111111111*/
                                        /*1111111111111111*/
                                        /*1111111111111111*/
                                        /*1111111111111111*/
                                        /*1111111111111111*/
                                        /*1111111111111111*/
                                        /*1111111111111111*/
                                        /*1111111111111111*/
                                        /*1111111111111111*/
                                        /*1111111111111111*/
                                        /*1111111111111111*/
                                        /*1111111111111111*/
                                        /*1111111111111111*/
                                        /*1111111111111111*/
                                        /*1111111111111111*/
                                        /*1111111111111111*/
                                        /*1111111111111111*/
                                        /*1111111111111111*/
</pre>
<script>
window.onload = function () {
setTimeout(function() {
    text = function (txt) { 
        pre = document.getElementsByTagName('pre')[0];
        if(!txt) {
            return pre.innerText;
        }
        pre.innerText = txt;
    }
    eval(text());
}, 1000);
}
</script>
</body>
</html>

<pre>Елемент відображає число в послідовності. Він також містить весь код, необхідний для отримання наступного номера в послідовності. Отже <pre>, eval'd, в результаті чого текст <pre>оновленого тексту нагадує наступне число в послідовності. Цей процес повторюється нескінченно.

Ось воно в дії!


2
Плюс один для винахідливості. Ласкаво просимо до PPCG!
Джонатан Ван Матре

22

С

Окупіруйте окунані окуляри :-)

main(         i){char*s     ="*)2;,5p   7ii*dpi*t1p+"
"={pi       7,i)?1!'p)(a! (ii(**+)(o(,( '(p-7rr)=pp="
"/(('       (^r9e   n%){1 !ii):   a;pin     7,p+"
"{*sp       ;'*p*   op=p) in,**             i+)s"
"pf/=       (t=2/   *,'i% f+)0f7i=*%a       (rpn"
"p(p;       )ri=}   niipp   +}(ipi%*ti(     !{pi"
"+)sa       tp;}*   s;}+%         *n;==     cw-}"
"9{ii       i*(ai   a5n(a +fs;i   *1'7",    *p=s-
1;while(p=('T'^i)?++p:s){ for(i=1;55!=*     p;p++
)i+=(' '!=*   p);printf     ("%d ",i/       2);}}

11
Як гарно це може бути, я рахую три 4і два 8с там.
Геобіт

6
@Geobits Мені, очевидно, потрібна нова пара косив окуляри! Виправлено зараз.
пискливе костіння

20

Хаскелл, 1 ЛоК

import Data.Char; main = putStr $ unwords $ map (show . (+)(-ord 'D') . ord) $ cycle "HLST[n" 

Я вирішив піти на читабельний одноклассник лише, щоб показати, наскільки приголомшливий Haskell. Також я вирішив уникати всіх цифр, про всяк випадок.

Завдяки вбудованій лінивій оцінці Haskell може маніпулювати (карта, розділити, з'єднати, фільтрувати ...) нескінченно довгі списки просто добре. Для їх створення навіть є кілька вбудованих модулів. Оскільки рядок - це лише список символів, нескінченно довгі рядки також не є загадкою для Haskell.


2
Мені подобається, як Хаскелл і подібні займаються функціональним програмуванням: D
Jwosty,

2
fromEnumвиглядає приємніше, ніж Data.Char.ordі дещо коротше
mniip

1
Ну ... як? Чи можете ви пояснити?
Pureferret

1
Я щойно помітив невинних персонажів в кінці. Я припускаю, що з цим щось робити?
Pureferret


20

Математика

Ми можемо відповісти на питання, зосередившись на повторних часткових знаменниках періодичної тривалої фракції, показаної нижче. Вони - те, що нам потрібно.

повторити пор

Зрештою, вони містять непереривну послідовність, яку ми намагаємося створити: 4, 8, 15, 16, 23, 42, 4, 8, 15, 16, 23, 42 ...


У Mathematica можна отримати квадратичний ірраціональний, що відповідає періодичному тривалому дробу на

FromContinuedFraction[{0, {4, 8, 15, 16, 23, 42}}]

quad irr 1

де 0 посилається на неявну цілу частину.

Ми можемо перевірити, перевернувши операцію:

введіть тут опис зображення

{0, {4, 8, 15, 16, 23, 42}}


4 та 8 порушують одне із правил виклику. Підрядка 15- це додаткове порушення. Ми можемо переформатувати квадратичний ірраціональний, щоб задовольнити правила.

c

{0, {4, 8, 15, 16, 23, 42}}


Тепер ми захоплюємо послідовність інтересів:

Last[c]

{4, 8, 15, 16, 23, 42}

І надрукуйте список назавжди…

While[True, Print@Row[ContinuedFraction[(-3220235/5+Sqrt[(10611930613350/25)])/(61630/2)],"\t"]]

стіл


Ну, це одне приємне математичне рішення. Мені дуже подобається цей
C5H8NNaO4,

@ C5H8NNaO4, спасибі, MSG Це було весело розібратися.
DavidC

1
+1 Ви відредагували, щоб позбутися 16фракції, поки я друкував коментар до цього.
Геобіт

@Geobits. Смішно з цього приводу. Я думав перевірити, чи задовольняю я правила; було кілька порушень, які я з тих пір виправив.
DavidC

19

C / C ++

Використовуючи тільки символи L, O, Sі Tкілька разів в такому порядку:

int main(){for(;;)printf("%d %d %d %d %d %d\n",

    'L'-     'O'*'S'    &'T','L'  &'O'+'S'*
    'T',    'L'^  'O'  |'S'*        'T'&
    'L',    'O'*  'S'    &'T'/      'L'+
    'O',    'S'^  'T'      &'L',    'O'*
    'S'&'T'   +'L'+    'O'^'S'+     'T')   ;}

18

Java

Я не можу знайти зразок у цій послідовності. Якщо немає впізнаваного шаблону, ми можемо просто кинути купу маленьких праймерів разом, забивати їх у вбудований Java-RNG і називати це щодня. Я не бачу, як це могло піти не так, але я знову оптиміст :)

import java.util.Random;
public class LostNumbers {
    public static void main(String[] args) {
        long nut=2*((2*5*7)+1)*((2*2*3*((2*2*2*2*11)+3))+5)*
                   ((3*5*((2*3*3)+1)*((2*2*2*2*2*3)+1))+2L);
        int burner=2*2*2*5;
        while(true){
            Random dice = new Random(nut);
            for(int i=0;i<6;i++)
                System.out.print((dice.nextInt(burner)+3) + " "); // cross your fingers!
            System.out.println();
        }
    }
}

1
Мінус while(true): ideone.com/1xaPdO
Тім С.

7
Є закономірність, але це не ... дуже очевидно: oeis.org/A130826 :)
Себастьян Неграш

14

Bash однолінійний

yes `curl -s "https://oeis.org/search?q=id:A$((130726+100))&fmt=text" |
grep %S | cut -d " " -f 3 | cut -d "," -f 1-6`

Додано перерву рядка для читабельності. Він (ab) використовує той факт, що це перші шість номерів OEIS-послідовності A130826 .


Ви також можете awk -F"[ ,]" '/%S/ {for (i=3;i<=9;i++) printf $i" "}'подати трубу curl.
fedorqui

1
Ви можете видалити петлю взагалі з yesі впустити редирект /dev/nullз curl -s. Щось на кшталтyes $(curl -s "https://oeis.org/search?q=id:A$((130726+100))&t=text" | awk -F"[ ,]" '/%S/ {for (i=3;i<9;i++) printf $i" "}')
Digital Trauma

@DigitalTrauma: Спасибі, я про це не знав yesі curl -s- я просто безсоромно додав це до своєї відповіді. :-)
Хайнці

13

C, не використовуючи жодних чисел і жодних знаків символів

s(int x) { return x+x; }
p(int x) { return printf("%d ",x); }
main()
{
    for(;;){
    int a = s(p(s((s==s)+(p==p))));
    int b = a+s(a+p(a+a));
    putchar(b-s(p(b*a-b-s(p(s(s(p(b-(s==s))+p(b)))-(p==p))))));
    }
}

12

Мені подобається ідея використання послідовності

a[n+5] = a[n] + a[n+2] + a[n+4]

як у цій відповіді . Виявив це за допомогою пошуку OEIS як послідовність A122115 .

Якщо ми пройдемо послідовність у зворотному напрямку, ми знайдемо підходящу ініціалізацію, яка не містить 4, 8, 15, 16 або 23.

Python3:

l = [3053, 937, -1396, -1757, -73]
while l[-1] != 66:
    l.append(l[-5] + l[-3] + l[-1])
while True:
    print(l[-6:-1])

дуже розумний! Приємно.
DavidC

11

JavaScript

Жодні цифри взагалі - хороший хід. Але замість того, щоб надрукувати послідовність один раз за пропуск через цикл, друкуйте лише один раз за пропуск.

t = "....A...B......CD......E..................FEDCBA";
b = k = --t.length;
do {
    console.log(p = t.indexOf(t[k]));
} while (k-=!!(p-k)||(k-b));

Нижня частина рядка кодує числа для друку, а верхня частина рядка кодує наступний символ, який потрібно знайти. Там, де обидві частини відповідають (одному F) коду, який скидає цикл.


11

Пітон

b=a=True;b<<=a;c=b<<a;d=c<<a;e=d<<a;f=e<<a
while a: print c,d,e-a,e,e+d-a,f+d+b

Побітові оператори та проста математика.


10

Рубін

Породжує числа, вбудовуючи однаково містичну послідовність 0, ∞, 9, 0, 36, 6, 6, 63 ;
Ніякого добра не може з цього вийти.

(0..1/0.0).each{|i|puts"kw9ygp0".to_i(36)>>i%6*6&63}

Весь код рубіну виглядає так, що він повинен просто помилитися і загинути; мене це шокує донині, що будь-яка з них працює взагалі!
alexandercannon

10

C ( 54 50 символів)

Я публікую відповідь про гольф, тому що гольф принаймні робить це веселим.

main(a){while(printf("%d\n","gAELMT"[a++%6]-61));}

Якщо ви займаєтесь гольфом, ви можете (певно) скинути a=0;. Єдиний ефект полягав би в тому, що ви можете запустити послідовність деінде, ніж 4 (можливо, 8). У будь-якому випадку це зіпсує послідовність при aпереповненнях. Це технічно невизначена поведінка, але ймовірний результат - ви друкуєте сміття половину часу.
Джеррі

Або просто переведіть рядок на "gAELMT" :)
orion

Звичайно, якщо хтось не посилається на вашу програму з аргументами :) Проте все-таки друкуйте сміття в половині часу.
Джеррі

3
Якщо ви наводите аргументи програмі, яка не потребує жодної, ви платите ціну :)
orion

1
forне допомагає, якщо немає ініціалізації. for(;;)- така ж кількість символів, як і while(). Я інтерпретував правила так, що нові рядки повинні бути там ... Але я міг би використати хвостову рекурсію з основною ...
orion

10

Хаскелл

main = mapM_ (print . round . go) [0..]
  where
    go n = 22 - 19.2*cos t + 6*cos (2*t) - 5.3*cos (3*t) + 0.5*cos (5*t)
      where t = fromInteger (n `mod` 6) / 6 * pi

http://ideone.com/erQfcd

Редагувати: що я використовував для генерації коефіцієнтів: https://gist.github.com/ion1/9578025

Редагувати: Мені дуже сподобалася програма agrif і я закінчив писати еквівалент Haskell, розбираючи її. Я вибрав іншу базу для магічного числа.

import Data.Fixed
main = mapM_ print (go (369971733/5272566705 :: Rational))
  where go n = d : go m where (d,m) = divMod' (59*n) 1

http://ideone.com/kzL6AK

Редагувати: мені також сподобалась його друга програма і я закінчив написання Haskell реалізації квадратичних ірраціоналів ;-). За допомогою магічного номера бібліотеки та агрифу ця програма надрукує послідовність.

import qualified Data.Foldable as F
import Numeric.QuadraticIrrational

main = F.mapM_ print xs
  where (_, xs) = qiToContinuedFraction n
        n = qi (-16101175) 1 265298265333750 770375

Ось як можна було шукати магічне число за допомогою бібліотеки:

> continuedFractionToQI (0, Cyc [] 4 [8,15,16,23,42])
qi (-644047) 1 424477224534 30815

Надруковане значення означає число (−644047 + 1 √424477224534)/30815. Все, що вам потрібно зробити, - це знайти фактори, які позбавляться від заборонених цифрних послідовностей у числах, не змінюючи значення виразу.


Ласкаво просимо на сайт =)
Бунт

8

C #

var magicSeed = -1803706451;
var lottery = new Random(magicSeed);
var hurleysNumbers = new List<int>();
for (int i = 0; i < 6; i++) hurleysNumbers.Add(lottery.Next(43));
while (true) Console.WriteLine(String.Join(",", hurleysNumbers));

Я знайшов насіння після прослуховування якоїсь радіостанції під час польоту над тихою.


6
Всередині є 4s та 8s.
zakk

7

Пітон

import math

def periodic(x):
    three_cycle = abs(math.sin(math.pi * \
        (x/float(3) + (math.cos(float(2)/float(3)*x*math.pi)-1)/9)))
    two_cycle = abs(math.sin(math.pi * x / float(2)))
    six_cycle = three_cycle + 2*two_cycle
    return round(six_cycle, 2) # Correct for tiny floating point errors

def polynomial(x):
    numerator = (312+100)*(x**5) - 3000*x*(x**3) + (7775+100)*(x**3) - \
        (7955+1000)*(x**2) + (3997+1)*x + 120
    denominator = float(30)
    return float(numerator)/denominator

def print_lost_number(x):
    lost_number = polynomial(periodic(float(x)))
    print(int(lost_number)) # Get rid of ugly .0's at the end

i=0
while (1):
    print_lost_number(i)
    i += 1

Хоча багато людей використовували схеми, взяті з OEIS, я вирішив створити власний набір функцій для представлення чисел.

Перша функція, яку я створив, була періодична (). Це функція, яка повторює кожні шість вхідних чисел, використовуючи циклічні властивості триггерних функцій. Виходить так:

periodic(0) = 0
periodic(1) = 5/2
periodic(2) = 1
periodic(3) = 2
periodic(4) = 1/2
periodic(5) = 3
periodic(6) = 0
...

Потім я створюю многочлен (). Для цього використовується такий многочлен:

412x^5-3000x^4+7875x^3-8955x^2+3998x+120
----------------------------------------
                  30

(У моєму коді деякі коефіцієнти представлені у вигляді сум, оскільки вони містять втрачені числа як одну з їх цифр.)

Цей многочлен перетворює вихід періодичного () у його правильне втрачене число, наприклад:

polynomial(0)   = 4
polynomial(5/2) = 8
polynomial(1)   = 15
polynomial(2)   = 16
polynomial(1/2) = 23
polynomial(3)   = 42

Постійно збільшуючи i і передаючи його через обидві функції, я отримую втрачені числа, що повторюються нескінченно.

(Примітка. У коді я багато використовую float (). Це так, Python робить поділ з плаваючою комою замість того, щоб сказати 2/3 = 0.)


1
Легко виправити, але ви до сих пір 4по прибуттю polynomial.
Геобіт

@Geobits whoops, цього не помічав. Дякую.
Ендрю Сутар

6

Emacs Lisp 73 символи

Найкращий спосіб назавжди зациклюватися? Циклічний список!

(let((a'(?\^D?\^H?\^O?\^P?\^W?*)))(setcdr(last a)a)(while(print(pop a))))

Але зачекай, є ще більше!

? \ ^ D - це хороший спосіб вставити таблицю для EOT, однак, якби я просто надсилав файл, мені не знадобився б буквальний "\ ^ D", я міг би просто вставити "?" слідує за фактичним символом EOT, таким чином, зменшуючи реальну кількість потрібних символів до: 63

Редагувати

Я працював над "гелем", який ще не є справжньою мовою, але в основному це серія макросів Emacs lisp для коду гольфу. У "гелі" це було б рішення:

(m a(~o ?\^D?\^H?\^O?\^P?\^W?*)(@(<^(^ a))(...)))

і без очікування:

(m a(~o ?\^D?\^H?\^O?\^P?\^W?*)(@(<^(^ a))))

44 символи з приємним записом символів. Було б 34, якби не веб-подання.


6

Юлія

Досліджуючи деякий час, я знайшов математичний спосіб виразити послідовність іншими послідовностями, не використовуючи жодного числа (або складних способів їх використання):

L(n)=n==0?2:n==1?1:L(n-1)+L(n-2) #Lucas numbers.
O(n)=int(n*(n+1)*(n+2)/6)
S(n)=n in [O(i) for i=1:50]?0:1 #A014306
T(n)=begin k=ifloor(n/2);sum([L(i)*S(n+1-i) for i=1:k]) end #A025097

lost(n)=n>5?lost(n-1)+lost(n-3)+lost(n-5):(n+3)>5?T(n+3):-T(n+3) #A122115

[lost(i-2) for i=5:10]

Вихід:

6-element Array{Int64,1}:
  4
  8
 15
 16
 23
 42

6

C ++

Приємна чиста мова на зразок C ++ дозволяє дозволити викладати джерело акуратно і з легкістю для читання, і має перевагу в тому, що легко копіювати вручну з мінімальною двозначністю.

Тут рішення досягається, використовуючи лише число 1.

#include <iostream>

typedef long int lI;
auto &VV = std::cout;
std::string vv = " ";

int main() {
  for(lI UU; UU --> UU;) {
    lI l1=1l+1l;lI 
    ll=1l << l1;VV 
    << ll << vv;lI 
    Il=ll*l1;VV << 
    Il << vv;VV <<
    ll*ll-1l << vv;
    lI II=ll*ll;VV 
    << II << vv;VV 
    <<(II += Il-1l)
    << vv;VV << l1
    * (II-l1)<< vv;
  }
}

Тест: http://ideone.com/fuOdem


6

Схема (Guile)

(let l ((x 179531901/2199535975))
  (let* ((b (* x 51)) (f (floor b)))
    (format #t "~a " f)
    (l (- b f))))

http://ideone.com/QBzuBC

Можливо, це порушує правило "не кодуйте числа в інших базах", але я думаю, що це досить мало зрозуміло, що воно не рахується. Як доказ цієї невідомості ці два магічні числа в базі 51:

26:27:21:9:18 / 6:19:6:19:6:19

Редагувати : Той самий трюк, інше представлення. Мені це справді більше подобається, оскільки це не залежить від довільно обраної бази. Однак для цього потрібна реалізація схеми з підтримкою нескінченної точності для квадратичних ірраціоналів, яких (AFAIK) не існує. Ви можете реалізувати це в чомусь на зразок Mathematica.

(let l ((x (/ (+ -16101175 (sqrt 265298265333750)) 770375)))
  (let* ((b (/ 1 x)) (f (floor b)))
    (format #t "~a " f)
    (l (- b f))))

Ласкаво просимо на сайт =)
Бунт

+1 для "потрібна реалізація схеми з підтримкою нескінченної точності для квадратичних ірраціоналів, яких (AFAIK) не існує".
Ліндон Уайт

6

PHP

Я думав, що пора хтось подав відповідь на php, не найкращу, а веселу

while(true)
{
    $lost = array(
    "Aaah",
    "Aaaaaaah",
    "Aaaaaaaaaaaaaah",
    "Aaaaaaaaaaaaaaah",
    "Aaaaaaaaaaaaaaaaaaaaaah",
    "Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaah");
    foreach ($lost as $a)
    {
        echo strlen($a).'
        ';
    }
}

Ах - це крики пасажирів, коли літак розбивається


5

Perl

#!/usr/bin/perl
use Math::Trig;

$alt = 2600;
$m   = 10 x 2;
$ip  = 1 - pi/100;
@candidates = (
    "Locke",
    "Hugo",
    "Sawyer",
    "Sayid Jarrah",
    "Jack Sh.",
    "Jin-Soo Kwon"
);

@lost = map {map{ $a+=ord; $a-=($a>$alt)?($r=$m,$m=-$ip*$m,$r):$z; }/./g; $a/100 }@candidates;
for(;;) {
    printf "%d\n",$_ for @lost;
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.