4, 8, 15, 16, 23, 42 [kapalı]


90

4, 8, 15, 16, 23, 42

Bu sayı dizisini sonsuz olarak çıkaran bir program yazın. Ancak, Numaralar kaynak kodunuzda hiçbir yerde görünmemelidir.

Aşağıdakiler, Numaraları kaynak kodunda göründüğü için Numaraları çıkarmak için geçerli bir Java programı değildir:

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)
        );
    }
}

"Sayılar kaynak kodunuzda görünmemelidir" tanımı aşağıdaki gibidir:

  • 4 rakamını kullanmamalısınız.
  • 8 rakamını kullanmamalısın.
  • 1 rakamını, ardından 5 rakamını kullanmamalısınız.
  • 1 rakamını, ardından 6 rakamını kullanmamalısınız.
  • 2 rakamını ve ardından 3 rakamını kullanmamalısınız.

Diliniz sayılar arasına yerleştirilebilecek belirli karakterleri görmezden gelirse, bu geçerli bir yer değiştirme değildir. Örneğin, eğer diliniz değişmez kelimesi 1_5olarak yorumlarsa 15, bu sayı 1 ve ardından sayı 5 olarak sayılır.

Alternatif bazlar kısıtlamaya dahil edilmiştir, örneğin:

  • İkili 100, 4'ün yerine geçemez.
  • Sekizli 10, 8'in yerine geçemez.
  • Onaltılık F, 15 yerine kullanılabilir.

Bu nedenle, Numaralar kaynak kodunda görünmediğinden, Numaraları yazdırmak için geçerli (ancak çok esinlenilmemiş) bir Java programıdır:

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);
        }
    }
}

Bu programda '*'ve '&'tamsayılar 42 ve 38 ile değiştirildiğine dikkat edin, çünkü aksi takdirde 4 ve 8 rakamları kaynak kodunda görünecektir.

“Diziyi sonsuz olarak verir” tanımı , açıklamaya açıktır. Bu nedenle, örneğin, "sonsuz" küçük olana kadar gliflerin daha küçük hale gelmesini sağlayan bir program geçerli olacaktır.

Her sayı için temelde kodlama yapmayan bir şekilde diziyi oluşturabiliyorsanız Kudos.

Bu bir popülerlik yarışması, bu yüzden yaratıcı olun. 26 Mart'ta en çok oy alanların cevabı kazanan oldu.


8
6 oy verebilirim ancak yorum yok: /
Vereos

11
@Vereos, "Bu aptalca bir soru" çok yapıcı değil, bu yüzden kimsenin yorum yapmamasının nedeni bu olabilir.
Peter Taylor

18
İnsanların 11 çeşit bu dünyada vardır: izledim olanlar Lost in , olmayanlar şeklinde ve ikili anlamıyorum olanlar.
pembemsi ossifrage

7
@PeterTaylor Elbette, ancak yeni gelenler çoğu zaman bunu alamayacak ve gelecekteki sorularını iyileştirmeye çalışmak yerine siteden ayrılacak. Sanırım bu This isn't an interesting question, IMHO, since the solution is pretty trivial. Please post in the sandbox next time.daha iyi olurdu This is a stupid question., ama bu sadece benim kişisel görüşüm.
Vereos

3
Sorunun diğer sayıların çıktısını yasaklamadığını fark ettim . Bu yüzden en azından sonsuz maymun teorisine göre düzensiz rasgele sayı üreteci hile yapmalı.
kojiro

Yanıtlar:


233

Java

Başka bir giriş eklemeye karar verdim, çünkü bu benim birincisinden tamamen farklı (ki bu bir örnek gibi).

Bu program kullanıcı tarafından girilen bir dizinin ortalamasını hesaplar ...

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;
        }
    }
}

... yoksa öyle mi?

java.lang.ArrayIndexOutOfBoundsException: 4
    Numbers.getSum 'de (Numbers.java:8)
    Numbers.getAverage adresinde (Numbers.java:15)
    Numbers.roundAverage'te (Numbers.java:16)
    Numbers.beginLoop'da (Numbers.java:23)
    Numbers.main adresinde (Numbers.java:42)
java.lang.ArrayIndexOutOfBoundsException: 4
    Numbers.getSum 'de (Numbers.java:8)
    Numbers.getAverage adresinde (Numbers.java:15)
    Numbers.roundAverage'te (Numbers.java:16)
    Numbers.beginLoop'da (Numbers.java:23)
    Numbers.main adresinde (Numbers.java:42)
java.lang.ArrayIndexOutOfBoundsException: 4
    Numbers.getSum 'de (Numbers.java:8)
    ...

17
Bu harika! Böyle bir şey düşünmedim.
Jordon Biondo

2
Çok güzel ! Harika bir fikir;)
Pierre Arlaud

5
Genius! Çıktı biraz ayrıntılı olsa da, bunun burada seçtiğiniz dille ilgisi var sanırım. ;)
Pieter Witvoet

3
Sadece Python'un "lizt = Kayıp arsa" diye düşünüldüğünü düşündüğümde ...
Dave

3
Sadece bu beni bir süredir en iyi cevap olarak görüyordu. Kendi sorumu kazanmak hiç eğlenceli değil.
Radiodef

184

piton

#!/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)

Düzenleme: nneonneo'nun önerisine göre, komut dosyası artık basamak içermiyor.


2
Çok basit ve henüz çok iyi.
Konrad Borowski

4
Bunun oylamamı almasa da almasa da, tamamen bu sorunun cevabına dayanıyor: "Lizt" in yazımı bir "Arzt" referansı mı? EDIT: Kimi kandırıyorum, oy nasıl olsa benim oyuma geçti.
Plutor

6
while True:Cevabınız hiç rakam içermeyecek şekilde yazdım .
nneonneo

2
while True:daha yaygın.
Martin Ueding,

1
Bu "alternatif üs yok" kuralını bozmaz mı? Temel olarak, sadece bir base-1 sayılar dizisi :-)
Daniel

77

Perl

Kaynak kodunda hiçbir şey gizli değil. Hayır! Kod işe yaramazsa, use re "eval";ondan önce yazın (Perl 5.18'de gerekli).

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

Spoylerde açıklama.

Bu, çoklu bit yönünde işlemlerden yararlanan ve normal ifadeyi = ~ operatörünü kullanarak değerlendiren basit bir Perl programıdır . Regex (? { İle başlar ve } ile biter ) . Perl'de bu, normal ifadeyi değerlendirirken kod çalıştırıyor - bu, eval'u gerçekten kullanmadan kullanmamı sağlıyor . Bununla birlikte, normal olarak, güvenlik nedenleriyle, dizelerden düzenli ifadeleri değerlendirirken (bazı eski programlar aslında kullanıcıdan düzenli ifadeler aldı) yeniden denenmesi gerekir - ancak Perl 5.18'den önce sürekli katlanmış ifadelere neden olan bir hata olduğu ortaya çıktı. Bu pragma olmadan bile çalışmak için - Perl 5.18 kullanıyorsanız, use re "eval" yazın;çalışması için koddan önce. Bunun dışında, bu kod için başka bir şey yok.


9
Ben benzemeye başladım bu ama yine de görmüyorum ..
rdurand

69
@xfix "Bu basit bir Perl programıdır" - durum buysa, karmaşık bir program görmekten nefret ederim.
MikeTheLiar

8
Hey bak, bu bir yelkenli.
roippi

5
@roippi Haha, seni aptal sersem. Bu bir yelkenli değil, bir yelkenli!
MikeTheLiar

7
Protip: Not Defteri ++ 'ya kopyalayın / yapıştırın ve tamamen uzaklaştırın.
MikeTheLiar

55

brainfuck

ASCII sanatında çok kötüyüm!

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

Burada test edin: http://ideone.com/kh3DYI


Bu gerçekten çok güzel bir çözüm :)
gilbertohasnofb

47

Unix C

Sayısal sabitleri bulmak için pek çok yer var.

#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
Buradaki şaşırtmaca, basit oyuncu değişikliği için oldukça üstün.
Radiodef

1
Özyineleme nedeniyle yığma taşması ile karşılaşmaz mı?
Ski

@Skirmantas Tüm derleyicilerin bunun için kuyruk özyinelemesi kullanacağını farz ediyorum (ör. Ana çağrıyı anaya atlamak yerine değiştirin).
Tyilo

44

C #

Https://oeis.org/A130826 adresinden "çalınan" formül : a (n), en küçük sayıdır, (a (n) -n) / 3 bölenlerinin iki katı ilkinde birinci sırayı verir. Flavius-Josephus elek tarafından üretilen dizilimin farklılıkları.

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 Diziye uyan bir formülü araştırmak için aslında oeis.org'a giden biri için :)
MrPaulch

a(i)=a(i-1)+a(i-3)+a(i-5)gerçekten daha kolay bir çözüm gibi görünüyor
Cruncher

1
@Cruncher Bu formül, hem sıkıcı hem de kurallara aykırı olan ilk 5 terimi (4, 8 ve 15 dahil) önceden tanımlamanızı gerektirir.
Sebastian Negraszus

30

C #

Herhangi bir N elementi dizisinin bir N-1 polinomu tarafından üretilebilmesi gerçeği kullanılarak ve çok sayıda bip ve çıkıntı içeren sayıların girilmesi. Başvuru için, türetilen polinom I

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

Faktörleri sayılar için adlandırılmış değişkenlere basitlik için atadım;)

İlk versiyon:

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 ));
}

Her sayıdan sonra BEEP'lerin sayısı azalırken artan gerilimin ima edilmesini sevdim.

Sonra da bip ve patlamalar kullanarak faktörleri hesaplayabileceğimi düşündüm:

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;

Ondan sonra biraz denize düştüm ...

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 # 'daki varsayılan işleci değer türleri için kullanmak BEEEP'in sıfıra başlatılmasını sağlar. Bu şekilde kodda hiçbir sayısal hazır bilgi kullanılmaz. Temel algoritma aynıdır. ancak faktörler satır içi hesaplanır.


@ kódfodrász önerilen düzenleme için teşekkürler!
Rik

6
Kendini kötü kişinin, orada bir rakamı 8 bakınız
Thebluefish

@Bluefish utanıyorum.
Rik

25

D

Kodumda 4, 8, 15, 16, 23 veya 42 sayılarını kullanamaz mıyım? Sorun değil, o zaman sayıları hiç kullanmayacağım!

import std.stdio;

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

6
ASCII aritmetiği en iyi aritmetiktir.
Pharap

2
Yani C'den sonra, D diye bir dil geldi?
cegprakash

@ cegprakash Ve C daha önce B
SirPython

24

Javascript + HTML

Anti-golf!

<!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>Elemanı dizisinde bir sayısını gösterir. Ayrıca, sıradaki bir sonraki numaraya geçmek için gereken tüm kodu da içerir. Böylece <pre>değerlendirilir, bu <pre>da dizinin bir sonraki numarasına benzemek için güncellenme metniyle sonuçlanır . Bu işlem hiç bitmeden tekrar eder.

İşte eylemde!


2
Ayrıca yaratıcılık için bir tane. PPCG'ye Hoşgeldiniz!
Jonathan Van Matre

22

C

Kıskaçlı gözlüklerini :-) al

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
Bu olabileceği kadarıyla , orada üç 4ve iki 8s sayıyorum .
Geobits

6
@Geobits Belli ki yeni bir çift gözlük gözlüğü istiyorum! Şimdi düzeltildi.
pembemsi ossifrage 13:14

20

Haskell, 1 LoC

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

Haskell'in ne kadar harika olduğunu göstermek için okunabilir bir liner bulmaya karar verdim. Ayrıca, hepsinden uzak durmaya karar verdim halükarda, sadece rakamlardan .

Dahili tembel değerlendirme sayesinde, Haskell sınırsız uzun listeleri kolayca değiştirebilir (harita, bölme, birleştirme, filtre ...). Onları oluşturmak için birden fazla yerleşik bile var. Bir dize sadece bir karakter listesi olduğundan, sonsuz uzun dizeler de Haskell için gizemli değildir.


2
Haskell ve benzerlerinin işlevsel programlama yapma biçimini seviyorum: D
Jwosty

2
fromEnumdaha güzel görünüyor Data.Char.ord, ve biraz daha kısa
14'te mniip

1
Ne ... nasıl? Açıklar mısın
Pureferret

1
En sonunda masum karakterleri farkettim. Bununla bir ilgisi olduğunu varsayıyorum?
Pureferret


20

Mathematica

Aşağıda gösterilen periyodik sürekli fraksiyonun yinelenen kısmi paydaşlarına odaklanarak soruyu cevaplayabiliriz . Onlar ihtiyacımız olan şey.

cf tekrarlayın

Sonuçta, üretmeye çalıştığımız sonlandırmayan diziyi oluştururlar: 4, 8, 15, 16, 23, 42, 4, 8, 15, 16, 23, 42 ...


Mathematica’da , periyodik olarak devam eden kesirlere karşılık gelen ikinci dereceden irrasyonel elde edilir.

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

dört irr 1

buradaki 0, örtülü tamsayı kısmını ifade eder.

İşlemi ters çevirerek kontrol edebiliriz:

görüntü tanımını buraya girin

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


4 ve 8 'ler meydan okuma kurallarından birini ihlal ediyor. Subring 15ek bir ihlaldir. Kuralları yerine getirmek için ikinci dereceden mantıksız olanı yeniden biçimlendirebiliriz.

c

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


Şimdi ilgi dizisini alıyoruz:

Last[c]

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

Ve listeyi sonsuza dek yazdır ...

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

tablo


Güzel bir matematik çözümü. Bunu gerçekten sevdim
C5H8NNaO4

@ C5H8NNa04, Teşekkürler, MSG. Bunu anlamak eğlenceliydi.
DavidC

1
+1 Bu 16konuda yorum yazarken kesirden kurtulmak için düzenleme yaptınız .
Geobits

@Geobits. Bunun hakkında komik. Kuralları yerine getirip getirmediğimi kontrol edeceğimi düşündüm; düzelttiğim birkaç ihlal vardı.
DavidC

19

C / C ++

Sadece karakterleri kullanma L, O, Sve Tbu sırayla tekrar tekrar:

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

Bu sırada bir kalıp bulamıyorum. Eğer tanınabilir bir düzen yoksa, bir demet küçük asal sayıyı bir araya getirip Java'nın yerleşik RNG'sine tıkıp bir gün diyebiliriz. Bunun nasıl yanlış gidebileceğini anlamıyorum, ama sonra tekrar iyimserim :)

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
Eksi while(true): ideone.com/1xaPdO
Tim S.

7
Bir örüntü var, ama açık değil ... çok açık: oeis.org/A130826 :)
Sebastian Negraszus

14

Tek astar 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`

Okunabilirlik için satır sonu eklendi. (Ab) bunların ilk altı OEIS Dizisi A130826 sayısı olduğu gerçeğini kullanır .


Ayrıca boruya da awk -F"[ ,]" '/%S/ {for (i=3;i<=9;i++) printf $i" "}'ulaşabilirsiniz curl.
fedorqui

1
Döngüyü birlikte tamamen kaldırabilir yesve yönlendirme /dev/nullile bırakabilirsiniz curl -s. Gibi bir şeyyes $(curl -s "https://oeis.org/search?q=id:A$((130726+100))&t=text" | awk -F"[ ,]" '/%S/ {for (i=3;i<9;i++) printf $i" "}')
Dijital Travma

@DigitalTrauma: Teşekkürler, bilmiyordum yesve curl -s- cevabımı utanmadan ekledim. :-)
Heinzi

13

C hiçbir sayı ve karakter değeri kullanmadan

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

Diziyi kullanma fikrini seviyorum

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

Bu cevapta olduğu gibi . OEIS Araması boyunca A122115 dizisi olarak bulundu .

Diziyi tersten takip edersek, 4, 8, 15, 16 veya 23 içermeyen uygun bir başlatma özeti bulacağız.

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

çok zeki! Güzel.
DavidC

11

JavaScript

Hiçbir sayı hiç iyi bir hareket değildir. Ancak, döngü boyunca geçiş başına bir kez basmak yerine, geçiş başına sadece bir kez basarsınız.

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

Dizenin alt kısmı yazdırılacak numaraları kodlar ve dizenin üst kısmı bulmak için bir sonraki karakteri kodlar. İki parçanın birleştiği yerde (bir tek F) çevrimi sıfırlayan kodlar.


11

piton

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

Bitsel operatörler ve bazı basit matematik.


10

Yakut

Eşit mistik dizinin 0, ∞, 9, 0, 36, 6, 6, 63 ;
Bundan hiç iyi gelemez.

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

Tüm yakut kod sadece hata yapıp ölmeli gibi görünüyor; bu beni şaşırtıyor, herhangi biri kaçıyor!
alexandercannon

10

C ( 54 50 karakter)

Golf yanıtı gönderiyorum çünkü golf en azından eğlenceli hale getiriyor.

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

Eğer golf oynuyorsanız, (tartışmalı) düşürürsünüz a=0;. Tek etki, diziyi 4'ten başka bir yerde başlatabilmenizdir (muhtemelen 8). Neyse, bu ataşma olduğunda sırasını bozacaktır. Teknik olarak tanımlanamayan bir davranış, ancak olası sonuç, çöplerin yarısını basmanızdır.
Jerry,

Veya dizgiyi "gAELMT" :) 'e çevirin
orion

Tabi, birisi programınızı argümanlarla çağırmazsa :) Yine de yarıya çöp basıyorsunuz.
Jerry,

3
İhtiyacı olmayan bir programa argüman verirseniz, bedelini ödersiniz :)
orion

1
forbaşlatma yoksa yardımcı olmaz. for(;;)olarak aynı karakter sayısıdır while(). Kuralları yeni hatların orada olması için yorumladım ... Ama ana ile kuyruk özyinelemesini kullanabilirim ...
orion

10

Haskell

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

Düzenleme: Katsayıları oluşturmak için ne kullandım: https://gist.github.com/ion1/9578025

Düzenleme: Agrif'in programını gerçekten çok beğendim ve bir Haskell eşdeğeri yazarken çözdüm . Sihir numarası için farklı bir üs seçtim.

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

Düzenleme: İkinci programını da beğendim ve ikinci dereceden irrasyonellerin bir Haskell uygulaması yazdım .-). Kütüphaneyi ve agrif'in sihir numarasını kullanarak, bu program diziyi basacaktır.

import qualified Data.Foldable as F
import Numeric.QuadraticIrrational

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

Bu, kütüphanenin yardımıyla sihirli numarayı nasıl arayabilirdi:

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

Yazdırılan değer, sayı anlamına gelir (−644047 + 1 √424477224534)/30815. Yapmanız gereken tek şey ifadenin değerini değiştirmezken sayılardaki izinsiz rakam dizilerinden kurtulacak faktörleri bulmak.


Siteye Hoşgeldiniz =)
Riot

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));

Tohumculuğu pasifik üzerindeki bir uçuşta radyo istasyonunu dinledikten sonra buldum.


6
İçinde 4s ve 8'ler var.
zakk

7

piton

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

Birçok insan OEIS'ten alınan kalıpları kullanırken, sayıları temsil etmek için kendi fonksiyonlarımın oluşturulmasına karar verdim.

Oluşturduğum ilk işlev periodic () idi. Trig fonksiyonlarının çevrimsel özelliklerini kullanarak her altı giriş numarasını tekrar eden bir fonksiyondur. Bu böyle devam ediyor:

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

Sonra polinom () yaratıyorum. Aşağıdaki polinomu kullanır:

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

(Kodumda, bazı katsayılar toplamlar olarak gösterilir, çünkü kayıp sayıları rakamlarından biri olarak içerirler.)

Bu polinom, periodic () 'in çıktısını uygun kayıp numarasına dönüştürür, şöyle:

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

Sürekli olarak i artırarak ve her iki fonksiyondan da geçirerek, kayıp sayıları sonsuz tekrarlıyorum.

(Not: Kodda float () 'i çok kullanırım. Bu Python'un 2/3 = 0 demek yerine kayan nokta bölünmesi yapmasıdır.)


1
Düzeltmesi kolay, fakat hala içeride bir tane 4var polynomial.
Geobits

@Geobits whoops, bunu farketmedi. Teşekkürler.
Andrew Soutar,

6

Emacs Lisp 73 karakter

Sonsuza kadar döngü yapmanın en iyi yolu? Döngüsel bir liste!

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

Ama bekleyin, dahası var!

? \ ^ D EOT için char'i eklemek için güzel bir yöntemdir, ancak sadece bir dosya gönderebilseydim, "\ ^ D" harfine ihtiyacım olmayacaktı. ardından gerçek bir EOT karakteri izler, böylece gerekli sayıda gerçek karaktere indirilir: 63

Düzenle

Henüz gerçek bir dil olmayan "jel" üzerinde çalışıyorum ancak kod golf için temel olarak bir dizi emacs lisp makro var. "Jel" de bu çözüm olacaktır:

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

ve beklemeden:

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

Güzel karakter girişi ile 44 karakter. Bir web teslimi olması için olmasaydı 34 olurdu.


6

Julia

Bir süre araştırma yaparak, sayıları (veya bunları kullanmak için zorlu yolları kullanmadan) diziyi diğer dizilerle ifade etmenin matematiksel bir yolunu buldum:

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]

Çıktı:

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

6

C ++

C ++ gibi hoş ve temiz bir dil, kaynağınızı temiz ve okunaklı bir şekilde yerleştirmenize izin verebilir ve minimum belirsizlikle elle kopyalamak kolay olma avantajına sahiptir.

Burada çözüme yalnızca 1 sayısı kullanılarak ulaşılır.

#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;
  }
}

Test: http://ideone.com/fuOdem


6

Şema (Guile)

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

http://ideone.com/QBzuBC

Muhtemelen bu, "diğer bazlardaki sayıları kodlama" kuralını ihlal ediyor, ancak sayılmayacak kadar karanlık olduğunu düşünüyorum. Bu belirsizliğin kanıtı olarak, 51 tabanındaki iki sihirli sayı:

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

Düzenleme : Aynı numara, farklı temsil. Aslında bunu daha çok seviyorum, çünkü keyfi olarak seçilen bir temele dayanmıyor. Bununla birlikte, (AFAIK) bulunmayan ikinci dereceden irrasyoneller için sonsuz doğruluk destekli bir program uygulaması gerektirir. Yine de, onu Mathematica gibi bir uygulamaya uygulayabilirsiniz.

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

Siteye Hoşgeldiniz =)
Riot

+1, "(AFAIK) olmayan kuadratik irrasyoneller için sonsuz doğruluk destekli bir program uygulaması gerektiriyor."
Lyndon White

6

PHP

Birinin bir php cevabı göndermesinin zaman olduğunu sanıyordum, en iyisi değil, yine de eğlenceli bir cevap.

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

Ahs, uçak çöktüğünde yolcuların çığlıkları


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;
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.