Erstes Auftreten in der Reihenfolge Sixers

17

Die Sixers-Sequenz ist ein Name, der der Sequenz A087409 zugewiesen werden kann . Diese Sequenz habe ich in einem Numberphile-Video kennengelernt Sie kann wie folgt aufgebaut werden:

Nehmen Sie zuerst die Vielfachen von 6, die in Basis 10 geschrieben sind:

6, 12, 18, 24, 30, 36, ...

Verknüpfen Sie als Nächstes die Zahlen zu einem Ziffernstrom:

61218243036...

Gruppieren Sie den Stream schließlich in Paare und interpretieren Sie sie jeweils als Ganzzahl:

61, 21, 82, 43, 3, ...

Wenn wir die Zahlen in Paare gruppieren, beträgt die maximale Anzahl in der Sequenz 99, und es stellt sich heraus, dass alle nicht negativen ganzen Zahlen unter 100 in der Sequenz dargestellt werden. Diese Herausforderung besteht darin, den Index der ersten Instanz einer Zahl in der Sixers-Sequenz zu finden.

Eingang

Eine ganze Zahl im Bereich [0-99] . Sie müssen keine Zahlen außerhalb dieses Bereichs berücksichtigen, und Ihre Lösung kann ein beliebiges Verhalten aufweisen, wenn eine solche Eingabe erfolgt.

Ausgabe

Der Index des ersten Auftretens der eingegebenen Nummer in der Sixers-Sequenz. Dies kann 0- oder 1-indiziert sein; Bitte sagen Sie, was Sie in Ihrer Antwort verwenden.

Regeln

  • Die in der Einleitung beschriebene Vorgehensweise zum Generieren der Sequenz dient nur zur Veranschaulichung. Sie können eine beliebige Methode verwenden, solange die Ergebnisse identisch sind.
  • Sie können vollständige Programme oder Funktionen einreichen.
  • Beliebige sinnvolle Ein- und Ausgabemethoden sind erlaubt.
  • Standardlücken sind nicht zulässig.
  • Links zum Testen Ihres Codes online werden empfohlen!
  • Das ist , also gewinnt die kürzeste Antwort in jeder Sprache!

Testfälle

Hier ist eine Liste aller Ein- und Ausgänge im Format input, 0-indexed output, 1-indexed output.

0   241 242
1   21  22
2   16  17
3   4   5
4   96  97
5   126 127
6   9   10
7   171 172
8   201 202
9   14  15
10  17  18
11  277 278
12  20  21
13  23  24
14  19  20
15  29  30
16  32  33
17  297 298
18  35  36
19  38  39
20  41  42
21  1   2
22  46  47
23  69  70
24  6   7
25  53  54
26  22  23
27  11  12
28  62  63
29  219 220
30  65  66
31  68  69
32  71  72
33  74  75
34  49  50
35  357 358
36  80  81
37  83  84
38  25  26
39  89  90
40  92  93
41  27  28
42  42  43
43  3   4
44  101 102
45  104 105
46  8   9
47  177 178
48  110 111
49  13  14
50  28  29
51  119 120
52  122 123
53  417 418
54  79  80
55  128 129
56  131 132
57  134 135
58  55  56
59  437 438
60  140 141
61  0   1
62  31  32
63  75  76
64  5   6
65  120 121
66  82  83
67  10  11
68  161 162
69  164 165
70  58  59
71  477 478
72  170 171
73  173 174
74  34  35
75  179 180
76  182 183
77  497 498
78  85  86
79  188 189
80  191 192
81  18  19
82  2   3
83  78  79
84  93  94
85  7   8
86  37  38
87  168 169
88  12  13
89  228 229
90  88  89
91  218 219
92  221 222
93  224 225
94  64  65
95  557 558
96  230 231
97  233 234
98  40  41
99  239 240
Sok
quelle
6
Es kann nützlich sein zu wissen, dass das Überlegen 6, 2*6, 3*6,..., 325*6ausreicht, um alle möglichen Werte zu generieren
Luis Mendo,
@ LuisMendo Du hast Recht, ich habe darüber nachgedacht, ob ich das in die Beschreibung der Herausforderung aufnehmen soll. Ein Kommentar ist auch ein guter Ort dafür: o)
Sok
Können wir die Input-Integer als String, mit denen nehmen gepolstert mit einem vorangestellten 0 (dh , , , ...)? n<10000102
Kevin Cruijssen
10
@KevinCruijssen Hmmm, die Eingabe als Zeichenfolge ist in Ordnung, aber der linke Abstand mit 0 ist ein bisschen zu weit, IMO.
Sok

Antworten:

12

JavaScript (ES6),  71 65  55 Byte

Der Ausgang ist 0-indiziert.

n=>(g=([a,b,...c])=>b?a+b-n&&1+g(c):g([a]+6*++i))(i='')

Probieren Sie es online!

Wie?

Bei Verwendung einer rekursiven Funktion 'verbrauchen' wir entweder die ersten 2 Zeichen der Zeichenfolge aus verketteten Vielfachen von 6 oder hängen neue Zeichen an, wenn wir weniger als 2 von ihnen haben.

Beispiel für n=3 :

 string | operation                          | result
--------+------------------------------------+--------
 ''     | not enough characters: append '6'  |   0
 '6'    | not enough characters: append '12' |   0
 '612'  | consume '61', increment the result |   1
 '2'    | not enough characters: append '18' |   1
 '218'  | consume '21', increment the result |   2
 '8'    | not enough characters: append '24' |   2
 '824'  | consume '82', increment the result |   3
 '4'    | not enough characters: append '30' |   3
 '430'  | consume '43', increment the result |   4
 '0'    | not enough characters: append '36' |   4
 '036'  | consume '03': success              |   4

Kommentiert

n => (             // n = input
  g = (            // g is a recursive function taking either a string or an array of
                   // characters split into:
    [a, b,         //   a = 1st character, b = 2nd character,
           ...c]   //   c[] = array of all remaining characters
  ) =>             //
    b ?            // if b is defined:
      a + b - n && //   if n subtracted from the concatenation of a and b is not zero:
        1 + g(c)   //     add 1 to the final result and do a recursive call with c[]
                   //   (otherwise: yield 0 and stop recursion)
    :              // else:
      g(           //   do a recursive call with:
        [a] +      //     the concatenation of a (forced to an empty string if undefined)
        6 * ++i    //     and 6 * i, with i pre-incremented
      )            //   end of recursive call
)(i = '')          // initial call to g with an empty string,
                   // and i set to empty string as well (zero'ish)
Arnauld
quelle
12

Python 2 , 93 92 85 83 81 68 65 59 Bytes

f=lambda n,s='612',i=18:n-int(s[:2])and-~f(n,s[2:]+`i`,i+6)

Probieren Sie es online!


  • -2 Bytes, danke an Grimy
  • -3 Bytes, danke an ArBo
  • -6 Bytes dank xnor
TFeld
quelle
1
3 Bytes kürzer als ein Lambda:f=lambda n,s='612',i=3:n-int(s[:2])and f(n,s[2:]+`i*6`,i+1)or i-2
ArBo
@ArBo Noch besser f=lambda n,s='612',i=18:n-int(s[:2])and-~f(n,s[2:]+`i`,i+6)(0-indiziert).
15.
8

Perl 6 , 31 Bytes

{+(comb(2,[~] 1..ⅮX*6)...$_)}

Probieren Sie es online!

Verwendet die 1-indizierte Sequenz.

Erläuterung:

{                            } # Anonymous code block
              1..Ⅾ             # The range 1 to 500
                   X*6         # All multiplied by 6
          [~]                  # Join as one giant string
   comb(2,            )        # Split into pairs of characters
                       ...$_   # Take up to the input
 +(                         )  # And return the length of the list
Scherzen
quelle
5

05AB1E , 9 Bytes

₄L6*J2ôIk

0-indiziert. Akzeptiert entweder eine einzelne ganze Zahl ist, oder eine Liste von ganzen Zahlen als Eingabe.

Probieren Sie es online aus oder überprüfen Sie alle Testfälle .

Erläuterung:

L         # Create a list in the range [1,1000]
  6*       # Multiply each value by 6
    J      # Join the entire list of integers together to a string
     2ô    # Split into parts of size 2
       Ik  # Get the index of the input integer(s)
           # (and output the result implicitly)
Kevin Cruijssen
quelle
Ist das Standardverhalten für das Verknüpfen als Zeichenfolge festgelegt, oder gibt es separate Operatoren für das Verknüpfen als Zeichenfolge und das Verknüpfen als Zahl?
Maxb
@maxb Insgesamt benötigt 05AB1E keine expliziten Konvertierungen. Alle Ganzzahlen können auch für Zeichenfolgenfunktionen wie Ersetzen oder Teilen verwendet werden, und alle erstellten Zeichenfolgen (die Ganzzahlen sind) können auch als Zahlen verwendet werden. Also 100, "100"und 100.0sind für die meisten Funktionen wie Gleichheitsprüfungen und dergleichen gleich. In 05AB1E gibt es immer noch Umwandlungsfunktionen für int und string für einige Funktionen, z. B. zum Sortieren (numerische oder lexikografische Sortierung) oder zum Entfernen von Dezimalstellen nach dem Komma aus einem Gleitkomma beim Umwandeln in int, aber sie werden nicht so oft verwendet .
Kevin Cruijssen
@maxb Relevant 05AB1E Tipp mit einigen zusätzlichen Beispielen.
Kevin Cruijssen
4

Kohle , 12 Bytes

I⌕I⪪⭆φ×⁶⊕ι²N

Probieren Sie es online! Link ist eine ausführliche Version des Codes. 0-indiziert. Erläuterung:

     φ           Predefined constant 1000
    ⭆           Map over implicit range and join
        ι       Current index
       ⊕        Incremented
     ×⁶         Multiplied by 6
   ⪪      ²     Split into pairs of digits
  I             Cast to integer
           N    Input as a number
 ⌕              Find its index
I               Cast to string
                Implicitly print
Neil
quelle
4

J , 29 26 Bytes

-3 Bytes dank FrownyFrog!

i.~_2(".\;)6<@":@*1+i.@325

Probieren Sie es online!

0-basiert

Galen Ivanov
quelle
1
i.~_2(".\;)6<@":@*1+i.@325
FrownyFrog
@FrownyFrog Vielen Dank! Gute Verwendung des Boxens!
Galen Ivanov
4

APL (Dyalog Unicode) , 26 Byte

{⍵⍳⍨⍎¨((≠\=⍨)⊂⊢)∊⍕¨6×⍳325}

Probieren Sie es online! - Prüft auf alle gültigen Eingaben.

Wie:

{⍵⍳⍨⍎¨((≠\=⍨)⊂⊢)∊⍕¨6×⍳325}  Dfn, input is ⍵.
                    6×⍳325   Generates the first 325 multiples of 6.
                  ⍕¨         Format each number into a string
                            Enlist, flattens the vector
       (      ⊂⊢)            Dyadic enclose, takes a boolean mask as left argument
        (≠\=⍨)               Generates the mask 1 0 1 0...
                             Enclose then returns the Sixers sequence as a string
     ⍎¨                      Execute each element in the string, turning it into a numeric vector
 ⍵⍳⍨                         Find the first occurrence of  in the vector
J. Sallé
quelle
Können Sie den abgeflachten Vektor wie in K umformen? Google schlägt vor, aber APL macht mir Angst ...
Streetster
@streetster ja, ist APLs Umformung . Wenn Sie also einen abgeflachten Vektor umformen möchten, müssen Sie dies nur tun<new shape vector> ⍴ <vector to reshape>
J. Sallé,
Könnten Sie also die 2xN-Liste mit reshape erstellen und anschließend in Integer-Werte konvertieren?
Streetster
Sie könnten, aber ich glaube nicht, dass das kürzer ist als meine aktuelle Antwort. Ein Problem wäre, dass für meine Antwort das Umformen des Strings in eine 1117 × 2-Matrix und das anschließende Konvertieren in Ganzzahlen einen Vektor mit 1117, einer Ganzzahl mit einer Ziffer, erzeugen würde. Sehen Sie den Unterschied zwischen der Methode, die ich verwende, und der Umformung
J. Sallé,
Ach, mein abgeflachten String wird umgestaltet in etwas mehr praktikabel :)
streetster
3

Python 3 , 87 81 Bytes:

lambda n:[*zip(*[iter(''.join(map(str,range(6,1951,6))))]*2)].index((*'%02d'%n,))

Ganzzahleingabe, 0-indizierte Ausgabe.

Probieren Sie es online!


-6 Bytes dank @TFeld.

MrGeek
quelle
3

R , 75 62 Bytes

-13 Bytes dank Giuseppe.

match(scan(,''),substring(Reduce(paste0,3*(a=2*1:999)),a-1,a))

Probieren Sie es online!

Robin Ryder
quelle
2

MathGolf , 10 Bytes

•╒6*y░2/i=

Probieren Sie es online!

Grundsätzlich das gleiche wie die 05AB1E-Antwort, aber ich verliere ein Byte, indem ich die verkettete Zahl explizit in einen String konvertieren muss.

Erläuterung

•╒             push [1, 2, ..., 512]
  6*           multiply by 6
    y          join array without separator to string or number
     ░         convert to string (implicit map)
      2/       split into groups of 2 characters
        i      convert to integer (implicit map)
         =     find index of implicit input in the array
maxb
quelle
2

C # (Visual C # Interactive Compiler) , 123 Byte, 115 Byte

a=>m.First(y=>int.Parse(string.Join("",m.Select((x,i)=>++i*6)).Substring(y*2,2))==a);var m=Enumerable.Range(0,640);

Probieren Sie es online!

Abgelaufene Daten
quelle
Ich denke, es gibt irgendwo einen Fehler in Ihrer Lösung, wie zurückkehren f(61)sollte 0(es sieht so aus , als ob Ihre Lösung 0-indiziert ist)
Sok
1
Danke @sok sollte jetzt behoben sein
Abgelaufene Daten
2

K (oK) , 22 Bytes

Lösung:

(.:'0N 2#,/$6*1+!999)?

Probieren Sie es online!

Erläuterung:

0-indiziert.

(.:'0N 2#,/$6*1+!999)? / the solution
                     ? / lookup right in left
(                   )  / do this together
                !999   / range 0..999
              1+       / add 1, range 1...1000
            6*         / multiply by 6, 6...6000
           $           / convert to strings
         ,/            / flatten
    0N 2#              / reshape into 2xN
 .:'                   / value each, convert to numbers
Streetster
quelle
2

Gelee , 10 Bytes

ȷ×€6DFs2Ḍi

Probieren Sie es online!

TIO Link liefert alle Werte von 0 bis 99.

Erläuterung

ȷ          | 1000
 ×€6       | each times 6 (using implicit range from 1..1000)
    D      | Convert to decimal digits
     F     | Flatten
      s2   | Split into pairs
        Ḍ  | Convert back from decimal digits to integer
         i | Find index of left argument to link
Nick Kennedy
quelle
2

Java 10, 119 104 102 Bytes

n->{int i=2;for(var s="612";!s.substring(0,2).equals(""+n/10+n%10);)s=s.substring(2)+6*++i;return~-i;}

Port von @TFelds Python 2 Antwort .
-2 Bytes dank @Imus .

1-indiziert.

Probieren Sie es online aus.

Erläuterung:

n->{                            // Method with integer as both parameter and return-type
  int i=2;                      //  Index-integer, starting at 2
  for(var s="612";              //  String, starting at "612"
      !s.substring(0,2)         //  Loop as long as the first two characters of the String
       .equals(                 //  Are not equal to:
               ""+n/10          //   The input integer-divided by 10 as String
               +n%10);)         //   Concatenated with the input modulo-10
                                //   (which will add leading 0s for inputs < 10)
    s=s.substring(2)            //   Remove the first two characters of the String
      +6*++i;                   //   And append 6 times `i`,
                                //   after we've first increased `i` by 1 with `++i`
return~-i;}                     //  Return `i-1` as result

Ursprüngliche 119 117-Byte-Version:

n->{var s="";for(int i=0;i<2e3;)s+=i+=6;return java.util.Arrays.asList(s.split("(?<=\\G..)")).indexOf(""+n/10+n%10);}

0-indiziert.

Probieren Sie es online aus.

Erläuterung:

n->{                            // Method with integer as both parameter and return-type
  var s="";                     //  String we're building, starting empty
  for(int i=0;i<2e3;)           //  Loop `i` in the range [0, 2000):
      s+=i+=6;                  //   Increase `i` by 6 first every iteration
                                //   And then append the updated `i` to String `s`
  return java.util.Arrays.asList(
          s.split("(?<=\\G..)") //  Split the String in parts of size 2 (as array)
         )                      //  Convert the array to a List
          .indexOf(             //  And get the index of the following in this list:
                   ""+n/10      //   The input integer-divided by 10 as String
                   +n%10);}     //   Concatenated with the input modulo-10
Kevin Cruijssen
quelle
1
Sie können 2 Bytes sparen, indem Sie "" + n / 10 + n% 10 anstelle von n> 9? N + "": "0" + n
Imus
1

CJam , 17 Bytes

325,:)6f*s2/:~ri#

Probieren Sie es online!

0-basiert.

Erläuterung

325,   e# Range [0 1 2 ... 324]
:)     e# Add 1 to each: gives [1 2 3 ... 325]
6f*    e# Multiply each by 6: gives [6 12 18 ... 1950]
s      e# Convert to string: gives "61218...1950"
2/     e# Split into chunks of size 2: gives ["61" "21" ... "95" "0"]
       e# Note how the last chunk has size 1; but it is not used
:~     e# Evaluate each string in that array: gives [61 21 ... 95 0]
ri     e# Read input as an integer
#      e# Index of fist occurrence, 0-based
Luis Mendo
quelle
Warum hat CJam aus Neugier für alle ganzen Zahlen im Bereich eingebaute Werte? [10,20], sowie fünf verschiedene Builtins, die standardmäßig alle eine leere Zeichenfolge enthalten "", aber keine Builtins für100 oder 1000?
Kevin Cruijssen
@KevinCruijssen Nicht sicher ... Aber Variablen mit vordefinierten Werten wie 0oder ""sind manchmal nützlich für Schleifen, da dies oft die gewünschten Startwerte sind. Was nicht 100oder 1000, ja, ich stimme zu, dass sie nützlicher wären als zu sagen 18oder19
Luis Mendo
1
Es ist eine Schande, dass führende Nullen ärgerlich sind, sonst könnten Sie das :~und iaus Ihrem Code streichen. :(
Erik der Outgolfer
1

Japt , 12 Bytes

0-indiziert.

L²õ*6 ¬ò b¥U

Probieren Sie es aus oder testen Sie alle Eingaben

L²õ*6 ¬ò b¥U     :Implicit input of integer U
L                :100
 ²               :Squared
  õ              :Range [1,L²]
   *6            :Multiply each by 6
      ¬          :Join to a string
       ò         :Split to array of strings each of length 2
         b       :First 0-based index of
          ¥U     :Test for equality with U (bU wouldn't work here as each string would first need to be cast to an integer, costing more bytes)
Zottelig
quelle
1

Rot , 97 bis 94 Bytes

func[n][(index? find/skip rejoin collect[repeat i 325[keep i * 6]]pad/left/with n 2 #"0"2)/ 2]

Probieren Sie es online!

Galen Ivanov
quelle
1

Retina , 83 Bytes

Ich habe wirklich keine Erfahrung mit kompliziertem Programmieren in Retina, aber ich bin zufrieden mit der Länge, in der ich es geschafft habe.

Gibt das 0-indizierte Ergebnis aus.

.+
6*1
325+-1%`1+
$0¶6*1$0
1+
$.0
¶

L`..
m`^0

$
¶$+
s`\b(\d+)\b.*\b\1$

C`¶

Probieren Sie es online


Erläuterung

.+                   Replace the input with 6 in unary
6*1
325+-1%`1+           Do 325 times: append line with previous + 6
$0¶6*1$0
1+                   Convert all lines to decimal
$.0
¶                    Remove line breaks

L`..                 List pairs of digits
m`^0                 Remove leading zeros

$                    Append the original input N on a new line
¶$+
s`\b(\d+)\b.*\b\1$   Remove occurrences of N and anything in between

C`¶                  Count the number of line breaks
mbomb007
quelle
1

Retina 0,8,2 , 36 Bytes

^
2406$*_
_{6}
$.`
^0(..)+?.*\1$
$#1

Probieren Sie es online! Link enthält Testsuite. 1-indiziert. Erläuterung:

^
2406$*_

Stellen Sie _dem Eingang 2406 s voran.

_{6}
$.`

Ersetzen Sie alle 6 _s durch die Anzahl der vorhergehenden _s. Dies erzeugt die Folge 0, 6, 12... 2400, aber automatisch die Nummern verkettet.

^0(..)+?.*\1$

Überspringen Sie die führende 0 und suchen Sie das erste Ziffernpaar, das mit den letzten beiden Ziffern übereinstimmt, dh die mit Nullen aufgefüllte Eingabe (da die Zeichenfolge auf endet 0; in der Tat verwendet die Testsuite die Tatsache, dass sie auf endet 00).

$#1

Geben Sie die Anzahl der Ziffernpaare bis einschließlich der Übereinstimmung aus.

Retina 1 spart ein paar Bytes, da der Operator für die Zeichenfolgenwiederholung ein Byte kürzer ist und bereits standardmäßig _als rechter Operand verwendet wird, sodass die zweite Codezeile gerade wird 2406*. Ein weiteres Merkmal von Retina 1 ist der >Modifikator, der die Substitution im Kontext des Trennzeichens nach dem Match erzeugt, das bei der Substitution mit 6 multipliziert wird. Bemerkenswerterweise hat dies auch keinen Einfluss auf die Gesamtanzahl der Bytes, da das Endergebnis so aussieht:$.>` die Länge der Übereinstimmung in das Ergebnis einbezogen wird. Obwohl dies ein Byte kostet, speichern wir es sofort, da wir nicht mit dem übereinstimmen0 mehr abgleichen müssen. (Die Wiederholungen müssen ebenfalls um 6 reduziert werden.) Retina 1 kann auch Grundrechenarten in einer Substitution ausführen. Dies bedeutet, dass wir nicht auf Tricks zurückgreifen müssen, um ein Vielfaches von 6 zu erhalten, sondern nur die Zahlen generieren1..400

^
400*
_
$.(6*$>`
^(..)+?.*\1$
$#1
Neil
quelle
1

Clojure, 102 Bytes

#(count(for[i(partition 2(for[i(range 1 326)c(str(* i 6))]c)):while(not=(seq(str(if(< % 10)0)%))i)]i))

So lange! :(

NikoNyrh
quelle