Eine neu entdeckte Nummer: Bleen!

44

"Der Nobelpreis für Mathematik wurde an einen kalifornischen Professor verliehen, der eine neue Zahl entdeckt hat! Die Zahl ist bleen, von der er behauptet, dass sie zwischen 6 und 7 liegt." - George Carlin

Bei dieser Herausforderung werden alle ganzen Zahlen einschließlich innerhalb des angegebenen Eingabebereichs gedruckt. Drucken Sie die Zahlen in aufsteigender oder absteigender Reihenfolge. Das heißt, für die Eingabe [n1, n2]wird aufsteigend gedruckt, wenn n1 < n2, absteigend, wenn n1 > n2.

Da bleenes sich nun um eine Ganzzahl handelt, kann sie als Eingabe verwendet werden. Es muss auch in der Ausgabe zwischen aufgenommen werden 6und , 7soweit anwendbar. Beachten Sie auch, dass -bleenzwischen -7 und -6 existiert.

Eingang

Zwei Ganzzahlen [n1, n2]im Bereich [-10, 10], einschließlich, über die Eingabe Ihrer Programmiersprache.

(Eingabe kann auch bleenund enthalten -bleen!)

Ausgabe

Geben Sie alle Ganzzahlen aus, die mit beginnen n1und enden n2, einschließlich der neu entdeckten bleenZahlen zwischen 6 und 7. Die Ausgabe kann eine Reihe von durch Zeichen getrennten Zahlen in einer Form sein, die Ihre Sprache unterstützt - dh durch Kommas oder Leerzeichen getrennt. Ein nachfolgender Ausgabebereich ist in Ordnung.

Beispiele

Input:  1 10
Output: 1 2 3 4 5 6 bleen 7 8 9 10 

Input:  -9 -4
Output: -9 -8 -7 -bleen -6 -5 -4

Input:  -8 bleen
Output: -8 -7 -bleen -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 bleen

Input:  9 1
Output: 9 8 7 bleen 6 5 4 3 2 1

Input:  2 -bleen
Output: 2 1 0 -1 -2 -3 -4 -5 -6 -bleen

Input:  -bleen 0
Output: -bleen -6 -5 -4 -3 -2 -1 0

Input:  bleen bleen
Output: bleen

Input:  2 2
Output: 2

Zusätzliche Bemerkungen

Sie können ein Programm oder eine Funktion schreiben und jede Standardmethode zum Empfangen von Eingaben und zum Bereitstellen von Ausgaben verwenden.

Sie können eine beliebige Programmiersprache verwenden , Standardlücken sind jedoch nicht zulässig.

Das ist , also gewinnt die kürzeste gültige Antwort - gemessen in Bytes .

CzarMatt
quelle
16
Bleenteen zwischen 16 und 17 auch? (Und ist Bleenty-Bleen zwischen Bleenty-Six und Bleenty-Seven?)
Joffan
5
@Joffan ... und Bleenty zwischen 60 und 70?
Adám
5
@Joffan Wie viel ist (bleen + 7) / 2?
Adám
10
In der Mathematik gibt es nur die Medaille des Feldes, keine Nobelpreise dort ....
Graipher
8
@Graipher Das ist der Grund, warum Sie sich nicht als harte Nachricht auf den
Aufstand

Antworten:

12

Python 3, 132 130 Bytes

r=round
bleen=6.1
m=1.08
a,b=eval(input())
d=1-2*(a>b)
print(*[[r(i/m),"-bleen"[i>0:]][i*i==49]for i in range(r(m*a),d+r(m*b),d)])

Nimmt Eingaben im folgenden Beispielformat vor:

-8, bleen
orlp
quelle
Funktioniert das außerhalb von [-10,10]?
mbomb007
@ mbomb007 Nein.
Orlp
Sehr geniale Lösung mit Bleen und Eval dort, nette. Ein weiterer Vorschlag: bleen=7/mZur Klärung ohne Zeichenstrafe verwenden
WorldSEnder
@orlp Gibt es einen Grund, warum Sie die Variable bleen genannt haben und nicht nur ein einstelliges Zeichen?
Blau
@muddyfish Ja, es ist erforderlich , dass die evalübersetzen bleenin den richtigen Wert.
Orlp
9

Ruby, 114 100 98 Bytes

Input ist ein Array mit [n1, n2]. (Wenn es zwei separate Argumente sein müssen, +1 Byte, um das Funktionsargument von gin zu ändern *g. Bleen muss eine Zeichenfolge sein. Gibt "bleen"ein Array des Bereichs aus. Vorgeschlagen von @Jordan mit seiner (?) Anfänglichen Version, die -7 Byte gewährt. aber ich habe danach auch noch 7 weitere golfen.

Probieren Sie es online aus.

->g{a=*-10..-7,?-+b='bleen',*-6..6,b,*7..10;x,y=g.map{|v|a.index v}
y<x ?a[y..x].reverse: a[x..y]}

Ursprüngliche Vollversion des Programms, die Eingaben von folgenden Quellen liest ARGV:

b='bleen'
a=[*-10..-7,?-+b,*-6..6,b,*7..10].map &:to_s
x,y=$*.map{|v|a.index v}
puts y<x ?a[y..x].reverse: a[x..y]
Wert Tinte
quelle
Wenn Sie dies zu einem Lambda machen, können Sie .map &:to_s6 Bytes entfernen und sparen, und Sie können ein weiteres Byte speichern, indem Sie die Initialisierung von aauf ändern a=*-10..10;a[4,0]=?-+b;a[18,0]=b.
Jordanien
Dh->*g{b='bleen';a=*-10..10;a[4,0]=?-+b;a[18,0]=b;x,y=g.map{|v|a.index v};puts y<x ?a[y..x].reverse: a[x..y]}
Jordanien
@ Jordan danke. Ich brauchte den Trick nicht zu benutzen, um den Bleen einzufügen. Meine Array-Zusammensetzung ist immer noch um etwa 1 Byte kürzer.
Value Ink
Ah, ich zählte die Klammern; habe vergessen, dass du sie weglassen könntest.
Jordanien
Soll ich upvoten oder dich bei genau 4k belassen?
NoOneIsHere
8

Pyth , 35 Bytes

K++L\-P_J++`M7"bleen"`M}7TJ@LK}FxLK

Testsuite.

Der erste Teil K++L\-P_J++`M7"bleen"`M}7TJgeneriert also dieses Array:

['-10', '-9', '-8', '-7', '-bleen', '-6', '-5', '-4', '-3', '-2', '-1', '0', '1', '2', '3', '4', '5', '6', 'bleen', '7', '8', '9', '10']

und speichert es dann in K.

Der zweite Teil findet also @LK}FxLKdie durch die Eingabe angegebene Unterliste.

Undichte Nonne
quelle
1
Ich habe auch an einen solchen Ansatz gedacht. Interessant, wenn wir einen int-Bereich nehmen mussten ...
Adám
... und vor allem, wenn wir bleenteen und bleenty, etc. einschließen mussten
Adám
8

Python 3, 157 145 123 108 115 139 161 158 153 Bytes

22 dank Lynn gerettet. 17 dank shooqie gerettet. 3 dank ljeabmreosn gerettet. 5 gerettet dank Geoff Reedy.

a,b=eval(input())
s='-'
c='bleen'
d=a<b
l=list(map(str,range(-10,11)))[::[-1,1][d]]
x=l.insert
y=l.index
x(4,d*s+c)
x(18,(1^d)*s+c)
print(l[y(a):y(b)+1])

Eingabe wie '-10', '8'. Trinkgelder sind für Anfänger willkommen.

7 hinzugefügt, um zu berücksichtigen -bleen. 15 hinzugefügt, um umgekehrte Eingaben wie zu berücksichtigen '8','-10'. Es wurde eine große 21 hinzugefügt, um die umgekehrten Vorzeichen für bleenvs zu berücksichtigen -bleen.

Justin
quelle
2
l.index('-6')und l.index('7')sollte nur Konstanten sein, nein?
Lynn
2
l=[str(i)for i in range(-10,11)]->l=list(map(str,range(-10,11)))
Shooqie
2
Obwohl ich mir nicht sicher bin, warum du überhaupt Saiten brauchst. l=list(range(-10,11))funktioniert auch
shooqie
2
Die Zeilen 2, 4, 5 können durch ersetzt werden for i in(4,18):l.insert(i,'bleen').
Shooqie
1
@shooqie Die for - Schleife ist das negative Vorzeichen bei Index fehlt 4. zB die Liste enthält zwei Elemente , 'bleen'anstatt ein'-bleen','bleen'
Justin
3

Ruby, 141 Bytes

->*a{
l="bleen"
s=13
a,b=a.map{|n|2*n rescue s*(n<=>?b)}
b,a,r=a,b,1if b<a
o=(a..b).map{|n|n==s ?l:n==-s ??-+l:n/2}.uniq
puts r ?o.reverse: o}

Ungolfed

lambda do |*args|
  bleen = "bleen"
  subst = 13 # This will stand in for "bleen"

  a, b = args.map {|arg|
    begin
      # Double the number
      2 * arg
    rescue
      # It wasn't a number, so it's "bleen" or "-bleen"; replace it with 13 or -13
      subst * (arg <=> "b")
    end
  }

  if b < a
    # If the range isn't ascending, reverse it and remember that we did
    b, a, reverse = a, b, 1
  end

  # Step through the range, replacing 13 and -13 with "bleen" and "-bleen" and
  # halving everything else
  result = (a..b).map {|n|
    if n == subst
      bleen
    elsif n == -subst
      "-" + bleen
    else
      n / 2
    end
  }.uniq # Drop duplicates

  # Reverse the result if the range was descending
  puts reverse ? result.reverse : result
end
Jordan
quelle
3

Batch, 239 186 Bytes

@set/ableen=1431655772,a=%1*3,b=%2*3,c=b-a^>^>31^|1
@for /l %%i in (%a%,%c%,%b%)do @((if %%i==20 echo bleen)&(if %%i==-20 echo -bleen)&set/aj=%%i%%3,k=%%i/3&cmd/cif %%j%%==0 echo %%k%%)

Diese Methode besteht darin, von 3*%1bis zu zu wechseln 3*%3und dann durch drei zu teilen und die Zahlen ohne Rest auszudrucken. Wenn Sie bleendiese magische Zahl jedoch festlegen, wird ein Ganzzahlüberlauf verursacht und 20stattdessen der Wert verwendet. Dies wird dann an der entsprechenden Stelle in der Schleife ausgedruckt.

Neil
quelle
@ edc65 Wann habe ich das letzte Mal eine Frage zum ersten Mal richtig gelesen ...
Neil
@ edc65 oh, und ich habe es auch vergessen -bleen. Bah.
Neil
Versuchte es aber keine Ausgabe. Anwendungsbeispiel?
Edc65
@ edc65 bleen.bat bleen -bleenvielleicht?
Neil
Keine Ausgabe, wie gesagt. Ist es DOS / Windows Bat Sprache? Ich benutze Windows 10
edc65
3

JavaScript (ES6), 158

Schöne Herausforderung, schwer zu golfen. Wahrscheinlich könnten die in Python- und Ruby-Antworten verwendeten Range-Methoden sogar in JS besser abschneiden.

(a,b)=>(c=x=>x<-6?x-1:x>6?x+1:1/x?x:x<'b'?-7:7,a=c(a),b=c(b),d=b>a?1:-1,a-=d,e=x=>x-7?x-(x>7):'bleen',[...Array(d*(b-a))].map((x=a+=d)=>x<0?'-'+e(-x):e(x)))  

Weniger golfen

(a,b)=>(
  c=x=>x<-6?x-1:x>6?x+1:1/x?x:x<'b'?-7:7,
  a=c(a),b=c(b),
  d=b>a?1:-1,
  a-=d,
  e=x=>x-7?x-(x>7):'bleen',
  [...Array(d*(b-a))].map((x=a+=d)=>x<0?'-'+e(-x):e(x))
)  

Prüfung

f=(a,b)=>(c=x=>x<-6?x-1:x>6?x+1:1/x?x:x<'b'?-7:7,a=c(a),b=c(b),d=b>a?1:-1,a-=d,e=x=>x-7?x-(x>7):'bleen',[...Array(d*(b-a))].map((x=a+=d)=>x<0?'-'+e(-x):e(x)))  

function go(){
  var a=A.value,b=B.value
  // make them numeric if possible
  a=isNaN(a)?a:+a
  b=isNaN(b)?b:+b
  
  O.textContent=f(a,b)
}  
go()
A <select id=A onchange='go()'>
<option>-10<option>-9<option>-8<option>-7<option>-bleen<option>-6<option>-5<option>-4<option>-3<option>-2<option>-1<option>0
<option>1<option>2<option>3<option>4<option>5<option>6<option>bleen<option>7<option>8<option>9<option>10
</select>
B <select id=B onchange='go()'>
<option>-10<option>-9<option>-8<option>-7<option>-bleen<option>-6<option>-5<option>-4<option>-3<option>-2<option>-1<option>0
<option>1<option>2<option>3<option>4<option>5<option>6<option>bleen<option>7<option>8<option>9<option selected>10
</select>
<pre id=O></pre>

edc65
quelle
Ich denke du hast -6 verpasst.
Betseg
3

Swift 2.2, 342 Bytes

func a(x:String,y:String){var k="bleen",a=Int(x) ?? (x==k ?(x==y ? -9:6):-6),b=Int(y) ?? (y==k ?6:-6),t=0,s=[Any](),f=Int(x)==nil ?x:"";if a>b{t=a;a=b;b=t};for i in a...b{if i==7 && a != 7{s.append(k)};s.append(i);if -i==7 && b != -7{s.append("-"+k)}};for v in t==0 ?s:s.reverse(){f+=" \(v)"};if Int(y)==nil&&b>0{f+=" \(y)"};print(x==y ?x:f)}

Testen Sie dies mit der Swift Sandbox von IBM

Ungolfed

func bleen(x: String, y: String){
    var k = "bleen",
        a = Int(x) ?? (x == k ? (x == y ? -9 : 6) : -6),
        b = Int(y) ?? (y == k ? 6: -6),
        t = 0,
        s = [Any](),
        f = Int(x) == nil ? x : ""

    if a > b{
        t = a
        a = b
        b = t
    }

    for i in a...b{
        if i == 7 && a != 7{s.append(k)}
        s.append(i)
        if -i == 7 && b != -7{s.append("-" + k)}
    }

    if Int(y) == nil && b > 0{s.append(y)}

    for v in t == 0 ? s : s.reverse(){
        f+="\(v) "
    }

    print(x == y ? x : f)
}
Jojodmo
quelle
2

Java, 271 Bytes

int p(String w){if(w.contains("b"))return w.length()<6?7:-7;int i=Integer.decode(w);return i<-6?i-1:i>6?i+1:i;}void b(String s,String f){Integer l=p(s),r=p(f);for(r+=l<r?1:-1;l!=r;l-=l.compareTo(r))System.out.print(l==-7?"-bleen ":l==7?"bleen ":l+(l<-7?1:l<7?0:-1)+" ");}

Ungolfed mit Testfällen:

class Bleen {
     static int p(String w) {
         if(w.contains("b"))
             return w.length() < 6 ? 7 : -7;
         int i = Integer.decode(w);
         return i < -6 ? i-1 : i>6 ? i+1 : i;
     }

     static void b(String s, String f) {
         Integer l = p(s), r = p(f);
         for(r += l<r ? 1 : -1; l != r; l -= l.compareTo(r))
             System.out.print(l == -7 ? "-bleen " : l == 7 ? "bleen ": l+(l < -7 ? 1 : l<7 ? 0 : -1)+" ");
     }

     public static void main(String[] args) {
         b("1","10"); System.out.println();
         b("-9","-4"); System.out.println();
         b("-8", "bleen"); System.out.println();
         b("9", "1"); System.out.println();
         b("2", "-bleen"); System.out.println();
         b("-bleen", "0"); System.out.println();
         b("bleen", "bleen"); System.out.println();
         b("2", "2"); System.out.println();
     }
}

Anruf b (Start, Ende). Da es sich bei den Parametern um Zeichenfolgen handelt, ist viel Platz erforderlich, um diese in Ints umzuwandeln. Im Wesentlichen behandelt das Programm 7 & -7 als Bleen und -bleen.


quelle
1
Gute Antwort, +1. Es war ziemlich schwierig, eine Antwort auf Ihre Frage zu finden, aber ich tat es. ;) Ihr Verfahren pkann wie folgt geändert werden 6 Bytes speichern: int p(String w){int x=w.length(),i;if(x>3)return x<6?7:-7;i=Integer.decode(w);return i<-6?i-1:i>6?i+1:i;}. Sie können auch angeben, dass dies Java 7 ist, und ein Ideon hinzufügen .
Kevin Cruijssen
Außerdem konnte ich in Java 7 eine kürzere Variante erstellen , die auf dem Ansatz von @LeakyNun basiert, zunächst die vollständige Liste zu erstellen.
Kevin Cruijssen
2

Java 7, 251 Bytes

import java.util.*;String b(Object...a){String q="bleen",r="";List l=new ArrayList();int j=-10,i,z,y,t;while(j<11)l.add(j++);l.add(4,"-"+q);l.add(18,q);z=l.indexOf(a[0]);y=l.indexOf(b[1]);if(y<z){t=z;z=y;y=t;}for(i=z;i<=y;)r+=l.get(i++)+" ";return r;}

Anderer Ansatz, der kürzer ist als die bereits vorhandene Java 7-Antwort .
Außerdem ist es bedauerlich, dass die Parameter möglicherweise nicht in der richtigen Reihenfolge sind, wodurch einige Bytes hinzugefügt werden, um sie zu vertauschen.

Ungolfed & Testfälle:

Probieren Sie es hier aus.

import java.util.*;
class Main{
  static String b(Object... a){
    String q = "bleen",
           r = "";
    List l = new ArrayList();
    int j = -10, i, z, y, t;
    while(j < 11){
      l.add(j++);
    }
    l.add(4, "-"+q);
    l.add(18, q);
    z = l.indexOf(a[0]);
    y = l.indexOf(a[1]);
    if(y < z){
      t = z;
      z = y;
      y = t;
    }
    for(i = z; i <= y; ){
      r += l.get(i++) + " ";
    }
    return r;
  }

  public static void main(String[] a){
    System.out.println(b(1, 10));
    System.out.println(b(-9, -4));
    System.out.println(b(-8, "bleen"));
    System.out.println(b(9, 1));
    System.out.println(b(2, "-bleen"));
    System.out.println(b("-bleen", 0));
    System.out.println(b("bleen", "bleen"));
    System.out.println(b(2, 2));
  }
}

Ausgabe:

1 2 3 4 5 6 bleen 7 8 9 10 
-9 -8 -7 -bleen -6 -5 -4 
-8 -7 -bleen -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 bleen 
1 2 3 4 5 6 bleen 7 8 9 
-bleen -6 -5 -4 -3 -2 -1 0 1 2 
-bleen -6 -5 -4 -3 -2 -1 0 
bleen 
2 
Kevin Cruijssen
quelle
2

Scala, 223 Bytes

object B extends App{val b="bleen"
val L=((-10 to -7)++List(s"-$b")++(-6 to 6)++List(b)++(6 to 10)).map(""+_)
val Array(s,e)=args.map(L.indexOf(_))
println((if(s<=e)L.slice(s,e+1)else L.slice(e,s+1).reverse).mkString(" "))}
Tim Robbins
quelle
2

JavaScript (ES6), 178 Byte

 (s,e)=>{q='bleen';t=[];for(i=-10;i<11;i++)t.push(i);t.splice(4,0,'-'+q);t.splice(18,0,q);s=t.indexOf(s);e=t.indexOf(e);s>e&&t.reverse()&&(e=22-e)&&(s=22-s);return t.slice(s,e+1)}

Versuch es

EDIT: Fix für Reverse Ordering. Danke Patrick, habe diesen Zustand verpasst

FZysset
quelle
2

Python 3, 126 Bytes

Die Eingabe erfolgt im Formular -5, 'bleen'

l=list(range(-10,11))
c='bleen'
s=l.insert
t=l.index
s(4,'-'+c)
s(18,c)
i,j=map(t,eval(input()))
d=1-2*(i<j)
print(l[i:j+d:d])
WorldSEnder
quelle
2

R , 110 107 Bytes

Danke an Cyoce für das Golfen mit 3 Bytes.

a=function(x,y){e=c(-10:-7,"-bleen",-6:6,"bleen",6:10)
b=function(d)which(e==as.character(d))
e[b(x):b(y)]}

Erstellt die gesamte Liste in der richtigen Reihenfolge und wählt die relevanten aus. Die Funktion in der Mitte mit dem Namen "b" schien der einfachste Weg zu sein, dies zu erreichen. Übernehmen usw

user5957401
quelle
Ist all das Leerzeichen erforderlich?
Cyoce
Nein, und normalerweise hätte ich es nicht gehabt. Vielen Dank! Edit: Ich habe nicht einmal viel davon gezählt. Muss halb geschlafen haben.
user5957401
1

Javascript (mit externer Bibliothek) (343 Bytes)

(a,b)=>{r="bleen";s="-"+r;c=d=>d==r?7:(d==s?-7:d);i=c(a);j=c(b);m=Math.min(i,j);n=Math.max(i,j);w=i<=j?_.RangeTo(i,j):_.RangeDown(i,Math.abs(j-i)+1);g=i<j?6:7;if(n>-7&&m<-6){w=w.InsertWhere("-bleen",x=>x==-7)}if(m<8&&n>6){w=w.InsertWhere("bleen",x=>x==g)}if(a==r||b==r){w=w.Where(x=>x!=7)}if(a==s||b==s){w=w.Where(x=>x!=-7)}return w.ToArray()}

Link zu lib: https://github.com/mvegh1/Enumerable

Bildschirmfoto:

Bildbeschreibung hier eingeben

applejacks01
quelle
-1

Python 2, 100 Bytes

Die ersten vier Zeilen erzeugen die Liste [-10, -9, -8, -7, 'bleen', -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 'bleen', 7, 8, 9, 10]. Die nächste Zeile wird eingegeben und in sund gespeichert e. In den letzten beiden Zeilen wird die .index()Aufteilungsnotation verwendet und aufgelistet, um den korrekten Bereich zu ermitteln.

a=range(-10,11)
b="bleen"
c=a.insert
c(17,b)
c(4,b)
s,e=eval(input())
d=a.index
print a[d(s):d(e)+1]

Funktioniert genauso wie die Antwort von Leaky Nun, wurde jedoch unabhängig entwickelt. Hat eine Eingabemethode von orlp gestohlen.

Ungolfed:

array = range(-10, 11)
array.insert(17, "bleen")
array.insert(4, "bleen")
start, end = eval(input())
print array[array.index(start):array.index(end) + 1]
noɥʇʎԀʎzɐɹƆ
quelle
Dies ist falsch - die Zahl zwischen -7und -6ist -bleennicht bleen. Obwohl wir eine neue Zahl gefunden haben, müssen die Grundregeln der Algebra konstant bleiben: 0Ist die einzige Zahl, die ihre eigene additive Umkehrung darstellt, da sie das additive Identitätselement ist. Darüber hinaus eval(input())ist nur input()in Python 2.
Mego
@ Mego oh, oops ....
noɥʇʎԀʎzɥʇʎԀʎ