4、8、15、16、23、42 [閉鎖]


90

4、8、15、16、23、42

この数列を無限に出力するプログラムを作成します。ただし、ソースコードに番号を表示することはできません。

次は、ソースコードに数字が表示されるため、数字を出力するための有効なJavaプログラムではありません。

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が続くものとしてカウントされます。

代替ベースは制限に含まれているため、たとえば次のようになります。

  • バイナリ100は4の代わりに使用できません。
  • 8進数の10を8の代わりに使用することはできません。
  • 16進数Fは15の代わりに使用できません。

したがって、以下は、The Numbersがソースコードに表示されないため、The Numbersを出力するための有効な(ただし、あまり影響を受けていない)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);
        }
    }
}

そのプログラムになお、'*'そして'&'そうでなければ符号4,8は、そのソースコードに表示されるため、整数42及び38に置換されています。

「シーケンスを無限に出力する」の定義は、解釈に対して開かれています。そのため、たとえば、グリフを「無限に」小さくなるまで小さくして出力するプログラムは有効です。

基本的に各番号をハードコーディングしていない何らかの方法でシーケンスを生成できる場合は称賛に値します。

これは人気コンテストですので、クリエイティブになりましょう。3月26日に最多得票を獲得した回答が勝者です。


8
6回のダウン投票をカウントできますが、コメントはできません:/
Vereos 14年

11
@Vereos、「これは馬鹿げた質問です」はあまり建設的ではありません。だから誰もコメントとして投稿していません。
ピーターテイラー14年

18
見ているもの:この世界の人々の11種類がありロストを、なかったもの、およびバイナリを理解していないものが。
squeamish ossifrage 14年

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.に優れていると思いますが、それは私の個人的な意見です。
ヴェレオ14年

3
私は質問が他の数字の出力を禁止していないことに気付きます。したがって、少なくとも無限猿理論によれば、純粋な擬似乱数ジェネレーターがトリックを行う必要があります。
小次郎

回答:


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
これは素晴らしい!私はそのようなことを考えなかったでしょう。
ジョーダンビオンド14年

2
とても美しいですね !素晴らしいアイデア;)
ピエールアラード14年

5
天才!出力は少し冗長ですが、ここで選択した言語に関係していると思います。;)
Pieter Witvoet 14年

3
私はPythonの「lizt =失われたプロットを」と思ったときに一つは...トッピングすることができませんでした
デイブ

3
@justhalf実際、これはしばらくの間、これが一番の答えだったので私を悩ませます。自分の質問に勝つのは楽しいことではありません。
Radiodef 14年

184

Python

#!/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」参照ですか?編集:私は誰が冗談だ、それはとにかく私の票を得る。
プルーター

6
while True:あなたの答えに数字がまったく含まれないように書きます。
nneonneo

2
while True:より一般的です。
マーティンUeding 14年

1
それは「代替ベースなし」ルールを台無しにしませんか?基本的に、それはベース1の数字の配列にすぎません:
ダニエル14年

77

Perl

ソースコードには何も隠されていません。いや。コードが機能しない場合は、そのuse re "eval";前に入力します(Perl 5.18で必要​​)。

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

ネタバレで説明。

これは、複数のビット演算を使用し、=〜演算子を使用して正規表現を評価する単純なPerlプログラムです。正規表現は(?{で始まり、})で終わります。Perlでは、正規表現の評価中にコードを実行します。これにより、実際に使用せずにevalを使用できます。ただし、通常、セキュリティ上の理由から、文字列から正規表現を評価する場合、再「評価」が必要です(一部の古いプログラムは実際にユーザーから正規表現を取得しました)。このプラグマがなくても動作するには-Perl 5.18を使用している場合は、use re "eval"と入力します。コードを動作させるために。それ以外は、このコードにはそれほど多くはありません。


9
私はこのように見え始めていますが、私はまだそれを見ていない..
rdurand 14年

69
@xfix「これは単純な Perlプログラムです」-もしそうなら、複雑なものを見たくない。
MikeTheLiar 14年

8
ねえ、スクーナーです。
roippi

5
@roippi母、あなたは愚かな野郎。スクーナーではなく、帆船です!
MikeTheLiar 14年

7
ヒント:Notepad ++にコピーして貼り付け、ズームアウトします。
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への呼び出しをmainへのジャンプに置き換えます)。
ティロ14年

44

C#

https://oeis.org/A130826から「盗まれた」式:a(n)は、(a(n)-n)/ 3の約数の2倍が最初のn番目の項を与える最小数ですFlavius-Josephusふるいによって生成されるシーケンスの違い。

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 14年

a(i)=a(i-1)+a(i-3)+a(i-5)本当に簡単な解決策のように見える
ランチャー14年

1
@Cruncherこの式では、退屈でルールに反する最初の5つの用語(4、8、15を含む)を事前に定義する必要があります。
セバスチャンネグラスズ14年

30

C#

N-1多項式によってN個の要素の任意のシーケンスを生成できるという事実を使用して、多数のビープ音とブープ音が含まれる数値を入力しました。参考のため、導出された多項式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恥ずかしい。
リック14年

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算術が最適な算術です。
ファラプ14年

2
それで、Cの後に、Dと呼ばれる言語が来ましたか?
cegprakash 14年

@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>は評価<pre>され、シーケンス内の次の番号に似るように更新されるテキストになります。このプロセスは無限に繰り返されます。

ここで実行中です!


2
創意工夫に加えて1つ。PPCGへようこそ!
ジョナサンヴァンマトレ

22

C

目を細めるゴーグルをつけてください:-)

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
これと同じくらいきれいですが、そこには3 4秒と2 8秒をカウントします。
Geobits 14年

6
@Geobits明らかに目を細めるゴーグルの新しいペアが必要です!修正されました。
squeamish ossifrage

20

Haskell、1 LoC

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

Haskellの素晴らしさを示すために、読みやすいワンライナーに行くことにしました。また、念のため、すべての数字を避けることにしました。

組み込みの遅延評価のおかげで、Haskellは無限に長いリストをうまく操作(マップ、分割、結合、フィルター...)できます。それらを作成するための複数のビルトインさえあります。文字列は単なる文字のリストであるため、無限に長い文字列もHaskellにとって謎ではありません。


2
Haskellなどが関数型プログラミングを行う方法が大好きです:D
Jwosty

2
fromEnumより立派に見えるData.Char.ord、とやや短い
mniipは

1
ふう…どうやって?説明してもらえますか?
Pureferret

1
私はちょうど最後に無害な文字に気づいた。私はそれと何か関係があると思いますか?
Pureferret 14年


20

Mathematica

以下に示す周期的な継続分数の部分分母の繰り返しに焦点を当てることにより、質問に答えることができます。それらは私たちに必要なものです。

繰り返しcf

結局、それらは私たちが生成しようとしている非終了シーケンスを構成します:4、8、15、16、23、42、4、8、15、16、23、42 ...


Mathematicaでは、周期的な連続分数に対応する二次無理数を取得します

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

クワッドirr 1

ここで、0は暗黙的な整数部分を指します。

操作を逆にすることで確認できます。

ここに画像の説明を入力してください

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


4 'および8'は、チャレンジのルールの1つに違反しています。部分文字列15は追加の違反です。規則を満たすために、2次無理数を再フォーマットできます。

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"]]

テーブル


まあ、それは1つの素晴らしい数学ソリューションです。私は本当にこのような
C5H8NNaO4

@ C5H8NNaO4、ありがとう、MSG。理解するのは楽しかったです。
DavidC 14年

1
+1 16私はそれについてのコメントを入力している間に、分数のを取り除くために編集しました。
Geobits

@Geobits。それについて面白い。ルールを満たしているかどうかを確認すると思いました。私がそれ以来修正したいくつかの違反がありました。
DavidC 14年

19

C / C ++

文字のみを使用してLOS及び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に詰め込み、1日と呼ぶこともできます。私はそれがおそらくうまくいかないかもしれないとは思わないが、それから再び、私は楽観主義者だ:)

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
Tim S.

7
パターンはありますが、そうではありません...非常に明白です:oeis.org/A130826 :)
セバスチャンネグラスズ14年

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`

読みやすくするために改行が追加されました。これは、これらがOEISシーケンスA130826の最初の6つの数字であるという事実を使用します。


パイプを使用してもすることができますawk -F"[ ,]" '/%S/ {for (i=3;i<=9;i++) printf $i" "}'しますcurl
fedorqui 14年

1
あなたが完全にループを削除することができますyesし、へのリダイレクトをドロップする/dev/nullcurl -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" "}')
デジタル外傷

@DigitalTrauma:ありがとう、私は知らなかったしyescurl -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を含まない適切な初期化5つ組が見つかります。

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 14年

11

JavaScript

数字がまったくないのは良い動きです。ただし、ループのパスごとに1回シーケンスを出力するのではなく、パスごとに1回だけ出力します。

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

文字列の下部は印刷する数字をコード化し、文字列の上部は検索する次の文字をコード化します。2つの部分が一致する(単一のF)コードは、サイクルをリセットします。


11

Python

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を埋め込んでNumbersを生成し ます。
これからは何も得られません。

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

すべてのrubyコードは、エラーが発生して終了するように見えます。いずれかが実行されることは今日まで私に衝撃を与えます!
アレクサンダーキャノン14年

10

C(54 50文字)

ゴルフは少なくとも楽しくなるので、ゴルフの答えを投稿しています。

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

あなたがゴルフをしているなら、あなたは(おそらく)ドロップすることができますa=0;。唯一の効果は、4(おそらく8)以外の場所でシーケンスを開始できることです。とにかく、これはaオーバーフロー時にシーケンスを台無しにします。技術的には未定義の動作ですが、可能性のある結果は、半分の時間でガベージを出力することです。
ジェリー

または、単に文字列を「gAELMT」に循環させます:)
オリオン

確かに、誰かがあなたのプログラムを引数で起動しない限り:)それでも、半分の時間でゴミを出力します。
ジェリー

3
必要のないプログラムに引数を指定すると、料金を支払うことになります:)
orion

1
for初期化がない場合は役に立ちません。for(;;)はと同じ文字数ですwhile()。改行がそこに持っているので、私はルールを解釈...しかし、私は...メインと末尾再帰を使用することができます
オリオン

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

編集:私はまた彼の2番目のプログラムが好きで、二次の非合理のHaskell実装を書くことになりまし ;-)。ライブラリとagrifのマジックナンバーを使用して、このプログラムはシーケンスを出力します。

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ます。あなたがする必要があるのは、式の値を変えずに、数字の中の許可されていない数字列を取り除く要因を見つけることです。


サイトへようこそ=)
暴動14年

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
内部には4と8があります。
ザック

7

Python

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()でした。これは、trig関数の周期的なプロパティを使用して、6つの入力番号ごとに繰り返す関数です。こんなふうになります:

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

次に、polynomial()を作成します。次の多項式を使用します。

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

(私のコードでは、一部の係数は、失われた数字が数字の1つとして含まれているため、合計として表されます。)

この多項式は、次のように、periodic()の出力を適切な損失数に変換します。

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
ジオビット14年

@Geobitsおっと、気づかなかった。ありがとう。
アンドリューSoutar

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文字。Webからの提出ではない場合、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のこれらの2つのマジック番号は次のとおりです。

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

編集:同じトリック、異なる表現。これは、任意に選択されたベースに依存しないため、実際にもう1つ気に入っています。ただし、2次無理数を無限精度でサポートするスキームの実装が必要であり、これは(AFAIK)は存在しません。ただし、Mathematicaのようなもので実装することもできます。

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

サイトへようこそ=)
暴動14年

+1(「2次不合理の無限精度サポートを備えたスキームの実装が必要です。これは存在しません)」
リンドンホワイト14年

6

PHP

誰かがPHPの回答を提出した時だと思った、とにかく最高ではなく楽しいもの

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

飛行機がcrash落するとき、ああは乗客の悲鳴です


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;
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.