Co otrzymujesz, gdy pomnożysz 6 przez 9? (42)

60

Kocham matematykę. Ale nie mogę znaleźć jednego kalkulatora, który można by poprawnie pomnożyć. Wydaje się, że wszystko dobrze załatwili, z wyjątkiem 6 * 9 (pytanie dotyczy życia, wszechświata i wszystkiego! Jak mogliby to źle pomylić ?!). Więc chcę, żebyście wszyscy napisali dla mnie funkcję, która może poprawnie pomnożyć 2 liczby (a 6 * 9 równa się 42 zamiast 54. 9 * 6 równa się 54).

Aha, i będę musiał zbudować źródło w Minecraft, aby ... wygrało najmniej bajtów!

Podsumować

  • Weź 2 liczby jako dane wejściowe (typ nie ma znaczenia, ale zostaną przekazane tylko 2 przedmioty, a kolejność musi być spójna. Więc strumienie i tablice są w porządku, o ile zachowują kolejność, w której zostały przekazane. Tj. Wygrana mapa działa, ponieważ nie zachowuje kolejności)
  • Wypisuj wielokrotność obu liczb, z wyjątkiem przypadków, gdy są to 6 i 9, a następnie wyślij 42 (kolejność ma znaczenie!)
    • PS. Nigdy nie byłem naprawdę dobry w liczeniu, więc myślę, że tylko liczby całkowite od 0 do 99 są liczbami rzeczywistymi (użyty typ nie ma znaczenia)
  • Wygrywa najmniej bajtów na język!

Tabela liderów:

Tezra
źródło
1
@JonathanAllan Tak, dodano do tego reguły.
Tezra
73
Przypadkowo identyfikator pytania ma 42w nim dwa razy.
Erik the Outgolfer
1
jeśli tylko liczby całkowite do 99 są liczbami rzeczywistymi, to np. 9 * 11 jest poprawnym monitem, ale 10 * 10 nie, prawda?
Mroczny Wędrowiec
14
@EriktheOutgolfer… a 12 oznacza, co należy odjąć, jeśli dane wejściowe wynoszą 6 i 9.
Adám
11
@EriktheOutgolfer Nawet jeśli przeczytasz identyfikator do tyłu.
T. Sar - Przywróć Monikę

Odpowiedzi:

65

Mathematica, 15 bajtów

Liczba bajtów zakłada kodowanie ANSI systemu Windows (CP-1252).

6±9=42
±n__:=1n

Definiuje operator binarny, ±który rozwiązuje problem. Po prostu definiujemy 6±9=42jako szczególny przypadek, który ma pierwszeństwo, a następnie dodajemy rezerwową definicję, która ±równa się mnożeniu. Ten drugi wykorzystuje dość interesującą sztuczkę golfową. Powód, dla którego to działa, jest w rzeczywistości dość skomplikowany i musimy przyjrzeć się sekwencjom . Sekwencja jest podobna do znanej jako ikona w innych językach. Zasadniczo jest to „lista” bez żadnego opakowania. Np. f[1, Sequence[2, 3, 4], 5]Jest naprawdę sprawiedliwy f[1, 2, 3, 4, 5]. Inną ważną koncepcją jest to, że wszyscy operatorzy to tylko cukier syntaktyczny. W szczególności ±może być stosowany jako operator jednoargumentowy lub binarny i reprezentuje głowę PlusMinus. Tak ±xjest PlusMinus[x]i a±bjest PlusMinus[a,b].

Teraz mamy definicję ±n__. Jest to skrót do definiowania PlusMinus[n__]. Ale n__reprezentuje dowolną sekwencję argumentów. To faktycznie dodaje definicję binarnego (i n-aryjskiego) użycia PlusMinus. Wartość tej definicji to 1n. Jak to zwielokrotnia argumenty? Cóż, 1nużywa niejawnego mnożenia przez Mathematica przez zestawienie, więc jest to równoważne z 1*n. Ale *jest też po prostu skrótem Times[1,n]. Teraz njest sekwencja argumentów. Jeśli więc przywołamy, a±bstanie się to Times[1,a,b]. I to jest po prostu a*b.

Myślę, że to całkiem fajne, w jaki sposób to nadużycie składni pozwala nam zdefiniować operator binarny przy użyciu składni jednoargumentowej. Mogliśmy teraz jeszcze zrobić PlusMinus[2,3,4], aby obliczyć 24(który można również zapisać jako ±##&[2,3,4]albo 2±Sequence[3,4]ale to jest po prostu coraz szalony w tym punkcie).

Martin Ender
źródło
Szczególnie podoba mi się to, że jest to po prostu łatka do mojego „kalkulatora”: 3 Czy to działa również dla *? : 3
Tezra
3
@ Tezra dobrze, *jest wbudowanym operatorem, więc musisz Unprotectgo dodać, aby dodać kolejne definicje, ale Unprotect[Times];6*9=42powinien działać (choć nie można teraz testować).
Martin Ender
1
Robienie tego operatorowi * jest tak złe ... Uwielbiam to! >: 3
Tezra
1
Jak mogę głosować, gdy jest dokładnie 42 innych?!? Oto moja „przyszła +1”, która zostanie przyznana, gdy ktoś inny ją złamie! :-)
The Vee
1
@MartinEnder Aww; Ale to najkrótsza Mathematica i jak dotąd moja ulubiona. : 3
Tezra
25

C, 32 31 29 28 bajtów

-2 dzięki Digital Trauma
-1 dzięki musicman523

#define f(a,b)a^6|b^9?a*b:42

Dość proste. Deklaruje funkcję makra, fktóra przyjmuje dwa argumenty, aoraz b.
Jeśli ajest 6i bjest 9, wróć 42. W przeciwnym razie zwróć ax b.

Wypróbuj online!

MD XF
źródło
2
Użyj ^zamiast ==i trochę dostosuj logikę: #define f(a,b)a^6||b^9?a*b:42- zapisuje 2 bajty.
Cyfrowa trauma
@DigitalTrauma Cheers: D
MD XF
1
Myślę, że możesz użyć |zamiast ||zapisać kolejny bajt, ponieważ nadal ma on mniejszy priorytet niż^
musicman523,
@ musicman523 Thanks! Redagowanie.
MD XF
1
Powinieneś zaktualizować wersję shortC, aby również wprowadzić te zmiany
musicman523,
17

JavaScript (ES6), 20 bajtów

x=>y=>x-6|y-9?x*y:42

Wyjaśnienie:

Iff x == 6 iy == 9, x-6|y-9będzie 0 (fałsz), a 42 będzie wynikiem.

Skrawek:

f=

x=>y=>x-6|y-9?x*y:42

console.log(f(6)(9));
console.log(f(9)(6));

Rick Hitchcock
źródło
4
Bardzo ładnie wykonane; chciałbym o tym pomyśleć. +1
Kudłaty
14

Python 2 , 30 29 bajtów

Dzięki Jonathan Allan za uratowanie bajtu!

lambda x,y:x*[y,7][6==x==y-3]

Wypróbuj online!

Adnan
źródło
2
Zaoszczędź bajt, korzystając z faktu, że 6 * 7 to 42:lambda x,y:x*[y,7][6==x==y-3]
Jonathan Allan
@JonathanAllan Ohh, to fajnie! Dzięki! :)
Adnan
To rozwiązanie działa również w Pythonie 3
AMK
Dokładnie to, co mam! Nie mogę znaleźć dalszego sposobu na grę w golfa.
FlipTack
12

05AB1E , 15 11 9 bajtów

-4 bajty dzięki @Emigna

-2 bajty dzięki @Adnan

P¹69SQi42

Wypróbuj online!

Jak to działa

P          # multiply input
 ¹         # push first number
  69       # the number 69
    S      # split per character
     Q     # equality for both inputs
       i42 # if so, print 42
           # otherwise print product
Neil A.
źródło
Możesz zapisać 4 bajty za pomocą‚D96SQi42ëP
Emigna
@Emigna huh ... Dlaczego ,na początku?
Neil A.
Parowanie 2 wejść w celu porównania tylko raz jako listy.
Emigna
Przypuszczam 6Qs9Q*, że działałby również dla tej samej liczby bajtów.
Emigna
Zmiana formatu wejściowego oszczędza 2 bajty:P¹69SQi42
Adnan
10

Java (OpenJDK 8) ,24 22 bajty

-2 bajty dzięki @ OlivierGrégoire

a->b->a==6&b==9?42:a*b

Wypróbuj online!

Lękliwa Beluga
źródło
3
Witamy w PPCG! Nie wiem dużo o Javie, ale czy możesz usunąć to System.out.println()wywołanie i pozwolić funkcji zwrócić wynik?
ETHproductions
2
@ LưuVĩnhPhúc nie w Javie, ponieważ musiałbym pisać, (a^6|b^9)==0ponieważ nie ma niejawnego porównania „różnego od 0”. Powstały fragment kodu miałby długość 27 bajtów. W każdym razie, dziękuję za sugestię i proszę powiedz mi, czy źle zrozumiałem twoją wskazówkę.
Lękliwa Beluga
1
@Riker nie, nie działa tak w java. Na przykład fragment kodu int a = 5; if (a) do_some_stuff(); else do_other_stuff();powoduje Type mismatch: cannot convert from int to booleanbłąd kompilacji. Muszą być wykonane jawnie z wartościami logicznymi; odnoszą się do SO i ORACLE .
Lękliwa Beluga
3
Można użyć currying oszczędzić jeden bajt, a można pozbyć się średnikiem, ponieważ nie jest częścią lambda oszczędzić kolejny bajt: a->b->a==6&b==9?42:a*b.
Olivier Grégoire
1
Tylko uwaga, dlaczego 0 nie jest fałszem. Java jest bezpieczna dla typów, więc 0 jest liczbą całkowitą, a nie liczbą logiczną, a niebezpieczne typowanie rzutów jest niedozwolone, więc nie można używać wartości fałszowania
Martin Barker
6

Ruby, 24 bajty

->a,b{a==6&&b==9?42:a*b}
dkudriavtsev
źródło
a^6|b^9<1może działać jako boolean. Trudno przetestować na moim smartfonie.
Eric Duminil,
1
@EricDuminil Niestety to wyrażenie jest analizowane jako (((a^6)|b)^9), tzn. a.^(6).|(b).^(9)Dlatego nie będzie działać poprawnie. a-6|b-9==0działałoby, ale to nie jest krótsze.
Ventero
@Ventero: Nie myślałem o tym. Dzięki. a,b==6,9byłoby miło, ale to też nie działa.
Eric Duminil,
6

Brain-Flak , 158 154 148 140 138 126 bajtów

(({}<>)(((([()()()]<>)){})<({}{}({}))>{(()()()){}(<{}>)}{}))([()]{()(<{}>)}{})(({<{}>{}((<>))}{}){}<{}>{<({}[()])><>({})<>}{})

Wypróbuj online!

Wyjaśnienie

Ten kod jest dość prosty. Tworzymy kopie dwóch najlepszych przedmiotów na stosie, odejmujemy 6 od jednego i 9 od drugiego. Następnie przyjmujemy notdwie z tych wartości. My andte wartości, pomnóż wynik przez 12. Pomnóż dane wejściowe i odejmij dwa wyniki.

Kreator pszenicy
źródło
2
Być może zechcesz je wykorzystać noti and(lub ponownie zaznaczyć), czytając twój opis, raczej mnie potknął.
MD XF,
6

Factorio, 661 bajtów, 6 kombinacji z 9 połączeniami

Jest jeden stały kombinator, ustawiony na wyjście A i B. Zmień je, aby ustawić wejście.

Łańcuch planu (0.15.18):

0eNrNVm2O2jAQvcv8rEKFvSHLRuqPtrfYCkUhGWAkYkfOGDVCOUBv0bP1JLWTLQuB3U0QbfcPYvzxZt68eYr3sNxaLA0phngPlGlVQfxtDxWtVbr1a1yXCDEQYwEBqLTwUY4Z5WgmmS6WpFLWBpoASOX4HWLRBG8C+EScKr6MIJtFAKiYmLCrpw3qRNliicaleK2SAEpduata+fQObiI+zgKo/R+XIyeDWbcrA18IG71NlrhJd+RuuytPmInby1ucyq+uyFScnPHakWHrVg4VdScmnz2fPzQhjnxQlKlpS4zhk7ugLZd2BCTu0NS8IbXusMvalWgVJyuji4SUA4OYjcWmS606nm31wv8YzI+7SS66axbusHxh1zeITGaJ21C4w41XtyeHHCXH9D+o8eVUjYd3qoY47bc86rWPo158/yze2iCqPtxsmHx3r9ry3E6ylU9cTUv0aITDygwPZaaGeFMgUzbM99NBg/aMegPnV+gxRg6oLtFNZFsjfLhiJB+huZn1B87O7Crr/0Pnfz11vug5/9ePn+/E+2Hf++4beNHV8uzgRWWica6ejnDKiraM5oWXwhtC2CcVDo+FxfAWDfwc3Y9jLv4288cj5qG8IXU3Ie2zKj56xgXgZrNqOURhKGfR/GE6nzfNb7OMaxo=

Sygnał wyjściowy jest sygnałem Z i należy go pobierać z górnego i dolnego decytera.

Zrzut ekranu

latias1290
źródło
waaa ... po raz pierwszy widzę odpowiedź faktio w ppcg xD
V. Courtois
2
Za mało golfa.
jimmy23013
6

Galaretka , 8 7 bajtów

Vf96SạP

Dane wejściowe są w postaci dwóch liczb całkowitych: najpierw prawego operandu, a następnie lewego.

Wypróbuj online!

Jak to działa

Vf96SạP  Main link. Argument: [b, a]

V        Cast [b, a] to string, then eval the resulting string.
         For [b, a] = [9, 6], this yields 96.
 f96     Filter with 96, yielding [96] if V returned 96, [] otherwise.
    S    Take the sum, yielding either 96 or 0.
      P  Compute the product of [b, a], yielding ba = ab.
     ạ   Compute the absolute difference of the results to both sides.
         When the sum is 0, this simply yields the product.
         However, when [b, a] = [9, 6], this yields 96 - 54 = 42.
Dennis
źródło
Ma to -1 stopień swobody. Jak ci się to zdarza?
lirtosiast
5

Factorio, 581 bajtów, 3 kombinatory z 4 połączeniami

Łańcuch planu (0.16.36):

0eNqllNtu4jAQht9lLldmldNCFWkvto/RCkUhGWAkYkfOGDVCefeOnV1Km7ACemPJ9vibf04+webgsLWkGfITUGV0B/nrCTra6fLgz7hvEXIgxgYU6LLxO2/HpeZFZZoN6ZKNhUEB6RrfII+HtQLUTEw44sKmL7RrNmjF4AyqsaIa7SVHQWs6eWq0dy+46OcvBT3ki1hc1GSxGi8T5XWwNYdig/vySPJYXvxFFnJXB0znT7dkOy4mYR3JspOTs6DRYoFHtD3vSe98XP/CFZ9xtsqe0mW29KdNW9qgOYffgjCOW3eHk+eR3fai1WkuttY0BWlhQM7W4TC61mPAIYzYLxbry6yS7FKxJFs54rANFdhZRP3VMBnWQk08ZvZ+ChpExqSCyX9bYVLCRfxRwbmabenAaK+03rX0/RnT5z7VJbroQnUH7HkGlq7OsDFtc8WYzWJ8WxbTs4rSEu8bZKpuGoXopkn4gH5vGEKiO/SMO5vbtCgDEjTCjwcm5AWGO4ZgknX16Tq7OhRfHiZXypU91PTRd6ZYdIjo8PnmF3+1AvmfuuBq+bRKYmnWKM2G4R1hAPnz

Stały lewy dolny kombinator powinien być ustawiony na wyjście A i B jako wejście. Wyjściem jest sygnał Z z prawego dolnego kombinatora arytmetycznego.

wprowadź opis zdjęcia tutaj

Top left: 2147483640 A, 2147483637 B
Top right: If everything = 2147483646 output B, input count
Bottom left: (input) A, (input) B
Bottom right: A * B -> Z
jimmy23013
źródło
5

MATL , 11 bajtów

[BE]=?42}Gp

Dane wejściowe to tablica z dwiema liczbami.

Wypróbuj online!

Wyjaśnienie

[BE]    % Push array [6, 9]
=       % Implicit input: array of two numbers. Compare with [6, 9] element-wise
?       % If the two entries are true
  42    %   Push 42
}       % Else
  G     %   Push input
  p     %   Product of array
        % Implicit end. Implicit display
Luis Mendo
źródło
4

GW-BASIC , 55 bajtów

1INPUT A:INPUT B
2IF A=6THEN IF B=9THEN ?"42":END
3?A*B

Wynik:

wynik

Pierwsza maszyna w pcjs ma IBM BASIC, co jest praktycznie tym samym. Aby to przetestować, przejdź tam, uderz Runw maszynę, naciśnij Enter- Enteri wpisz, BASICAaby przejść do trybu BASIC. Następnie wprowadź kod źródłowy (automatycznie wydrukuje się za Ciebie), wpisz RUN, wprowadź dwie liczby całkowite i gotowe!

MD XF
źródło
3
Czy na pewno liczba bajtów jest poprawna? GW-BASIC używa kodowania, w którym niektóre słowa, na przykład INPUT, są kodowane w mniejszej liczbie bajtów niż sugerują to znaki, które je tworzą. Liczba ta wydaje mi się zatem wysoka.
@ ais523 Cóż, przejrzałem go wci otrzymałem 55 ... Wkleiłem do mojego emulatora i zachowywałem się zgodnie z oczekiwaniami.
MD XF,
3
Racja, chodzi mi o to, że prawdopodobnie oceniasz swoje zgłoszenie wyżej, niż trzeba. Pobierz GW-BASIC, aby zapisać plik, a następnie spójrz na rozmiar pliku wynikowego na dysku; powinno być mniejsze.
@ ais523 Zapisano jako OUT.BAS: i.stack.imgur.com/32eH1.png Liczba bajtów to średnia wartość.
MD XF,
OK, nie spodziewałem się tego, ale myślę, że w tej sytuacji jest to mycie. (A może istnieje więcej niż jeden format zapisu?)
4

Sprawdź , 34 33 bajty

.:+&>#v
#>42#v#9-!\>6-!*?
 d* ##p

Check to mój nowy esolang. Wykorzystuje kombinację semantyki 2D i 1D.

Dane wejściowe to dwie liczby przekazywane przez argumenty wiersza poleceń.

Wyjaśnienie

Stos zaczyna się od argumentów wiersza poleceń. Nazwijmy argumenty ai b.

Pierwsza część .:+&zasadniczo powiela stos, pozostawiając go jako a, b, a, b. >wypycha 0 na stos (jest to część literału numerycznego uzupełnionego przez 9).

#przełącza na semantykę 2D i vprzekierowuje adres IP w dół. IP natychmiast przechodzi w a #, które ponownie przełącza się na semantykę 1D.

9-!sprawdza, czy bjest równe 9 (odejmując 9 i przyjmując logiczne NOT). \>6-!następnie sprawdza, czy ajest równy 6. Stos zawiera teraz „ a, b, 1, 1i” tylko wtedy, gdy b==9i a==6. Mnożenie przez *przyjmuje logiczne AND tych dwóch wartości, dając, a, b, 1czy dane wejściowe były 6i 9, i a, b, 0inaczej.

Następnie adres IP biegnie do ?. Spowoduje to przejście do trybu 2D, jeśli najwyższy stos jest niezerowy, a w przeciwnym razie będzie kontynuowany w trybie 1D.

Jeśli górna wartość stosu było 1, to znaczy, że są inne wartości stos 6i 9, więc popchnąć 42 do stosu z >42, a następnie przenieść się do drugiego #w ostatnim wierszu.

Jeśli najwyższą wartością stosu była 0, to wykonanie przechodzi do następnego wiersza. dusuwa 0(jak ?tego nie robi), a następnie mnożymy dwa wejścia przez *. Te ##przełączniki i wyjść z trybu 2D, nic nie robiąc.

Oddziały ponownie dołączyły. Stos zawiera albo 6, 9, 1, 42, albo a*b. pwypisuje górną wartość stosu, a następnie program się kończy, odrzucając resztę stosu.

Esolanging Fruit
źródło
To wygląda na fajny język!
To nie drzewo
3

JavaScript (ES6), 25 bajtów

x=>y=>[x*y,42][x==6&y==9]
Kudłaty
źródło
3

Python 3 , 36 33 bajtów

lambda x,y:42if x==6==y-3else x*y

Wypróbuj online!

Martmists
źródło
1
Alternatywna wersja, sam rozmiar lambda x:x[0]*x[1]if x!=(6,9)else 42. Jedyną różnicą jest typ wejścia.
musicman523
Nevermind - Twoja edytowana wersja jest krótsza :)
musicman523
Kod, który opublikowałeś, w rzeczywistości nie działa, więc zmieniłem go na działającą wersję TIO, z którą się połączyłeś.
ETHproductions
Działa to dla mnie: W [1]: f = lambda x, y: 42if 6 == x == y-3else x * y In [2]: f (6,9) Out [2]: 42 In [3 ]: f (9,6) Out [3]: 54 @ETHproductions
Martmists
@Martmists Byłaś brakuje miejsca wtedy, bo kod byłf=lambda x,y:42if6==x==y-3else x*y
ETHproductions
3

APL (Dyalog) , 10 bajtów

×-12×6 9≡,

Wypróbuj online!

× produkt (argumentów)

- minus

12× dwanaście razy

6 9≡ czy (6,9) jest identyczne z

, konkatenacja (argumentów)

Adám
źródło
Och, wow, właśnie to zobaczyłem, a moja odpowiedź J jest dokładnie taka sama: / z wyjątkiem jednego bajtu dłuższego
Conor O'Brien
@ ConorO'Brien Ma sens. J i milcząca APL są w większości równoważne, z wyjątkiem prymitywów J na wiele znaków (i wymagają Capa, aby uzyskać ostateczny szczyt).
Adám
3

R, 41 Chyba nie wiem, jak liczyć bajty Jestem nowy: D

function(a,b){

if(a==6&b==9){42} else {a*b}

}

Definiuję funkcję, której argumentami są aib w tej kolejności . Jeśli a równa się 6, a b równa się 9, zwraca 42, w przeciwnym razie razy b

R17
źródło
Witamy na stronie! :)
DJMcMayhem
Witamy. Weź pod uwagę, że nowe znaki i spacje również się liczą. W twoim przypadku, jeśli usuniesz znaki nowej linii i spacje (które możesz), to tylko 41.
Masclins
1
Możesz wyciąć dwa bajty, używającifelse(a==6&b==9,42,a*b)
Masclins
Możesz skrócić całość do 33 bajtów jako function(a,b)`if`(a-6|b-9,a*b,42).
rturnbull
Jest to tylko 41 bajtów po usunięciu niepotrzebnych białych znaków, do 47 bajtów.
Pavel
3

SPL , 356 bajtów

a.Ajax,.Puck,.Act I:.Scene I:.[Enter Ajax and Puck]Ajax:Listen to your heart!Puck:Listen to your heart!Are you as big as the sum of a big big big cat and a cat?If so, am I as big as the sum of a big big cat and a big cat?If so, you are as big as the product of I and the sum of I and a cat.If not, you are as big as the product of you and I.Open your heart

Z nowymi liniami i spacjami:

a.                       *Title*
Ajax,.                   *Declare variable Ajax*
Puck,.                   *Declare variable Puck*
Act I:.
Scene I:.
[Enter Ajax and Puck]
Ajax: Listen to your heart!                  *Set Puck's value to user input*
Puck: Listen to your heart!                  *Set Ajax's value to user input*
      Are you as big as the sum of a big 
       big big cat and a cat?                *Is Ajax=9?* 
      If so, am I as big as the sum of a 
       big big cat and a big cat?            *Is Puck=6?* 
      If so, you are as big as the product 
       of I and the sum of I and a cat.      *If so, set Ajax=42* 
      If not, you are as big as the product 
       of you and I.                         *If not set Ajax=(Ajax)(Puck)*
      Open your heart                        *Print Ajax's value*
William Taylor
źródło
3

Japt , 13 11 12 bajtów

¥6&V¥9?42:N×

Wypróbuj online

  • 2 1 bajty zapisane dzięki obarakon.
Kudłaty
źródło
1
N¬¥69?42:N×dla 11 bajtów
Oliver
Niezły, @obarakon.
Kudłaty
3

Standardowy ML (MLton) , 22 20 bajtów

Zaoszczędź 2 bajty dzięki @Laikoni!

fun$6 $9=42| $x y=x*y

Wypróbuj online!

Właśnie do tego służy SML, dlatego pokonuje shortC i Python.

Stara wersja wyglądała o wiele ładniej. : P

musicman523
źródło
20 bajtów: Wypróbuj online!
Laikoni
@Laikoni Wow, nie miałem pojęcia, że ​​możesz użyć go $jako identyfikatora! Dlaczego to się nie kompiluje, jeśli usuniesz spację między |i $?
musicman523
SML rozróżnia alfanumeryczne i symboliczne identyfikatory, które mogą być bardzo przydatne podczas gry w golfa. |$jest analizowany jako pojedynczy symboliczny identyfikator, więc wszystko się psuje. Planuję wkrótce napisać pytanie do SML i dodać odpowiedź na temat tych dwóch rodzajów identyfikatorów.
Laikoni
2

Pyth, 12 bajtów

-*FQ*12q(6 9

Wypróbuj online

Wyjaśnienie

 -*FQ*12q(6 9
  *FQ             Take the product
        q(6 9)Q   Check if the (implicit) input is (6, 9)
 -   *12          If so, subtract 12
Mnemoniczny
źródło
Sprytne rozwiązanie. Wypróbowałem to z potrójnymi stwierdzeniami w 15:AQ?&q6Gq9G42*GH
Tornado547,
2

Siatkówka , 36 bajtów

^6 9$
6 7
\d+
$*
1(?=1* (1+))|.
$1
1

Wypróbuj online! Standardowe mnożenie jednoargumentowe, po prostu zmienia dane wejściowe, aby obsłużyć specjalny przypadek.

Neil
źródło
2

Galaretka , 10 bajtów

⁼6,9ȧ42ȯ⁸P

Monadyczny link zawierający listę dwóch liczb.

Wypróbuj online!

W jaki sposób?

⁼6,9ȧ42ȯ⁸P - Link: list of numbers [a,b]
 6,9       - 6 paired with 9, [6,9]
⁼          - equals? (non-vectorising) (1 or 0)
     42    - literal answer, 42
    ȧ      - logical and               (42 or 0)
        ⁸  - link's left argument, [a,b]
       ȯ   - logical or                (42 or [a,b])
         P - product                   (42 or a*b)
Jonathan Allan
źródło
Mogłeś po prostu użyć ?, tak jak ja. ;)
Erik the Outgolfer
Ach, ponieważ ,jest wyjątkowy, ponieważ jest częścią dosłownego wzorca wyrażenia regularnego, więc 6,9jest analizowany jako pojedynczy token i szybcy $mogą go łączyć . Czy rozumowałeś to, czy po prostu wypróbowałeś i zauważyłeś, że zadziałało?
Jonathan Allan
1
Rozumowałem to.
Erik the Outgolfer
2

SILOS , 81 67 bajtów

readIO
J=i
readIO
a=(J-6)^2+(i-9)^2
a/a
a-1
a*12
x=J*i+a
printInt x

Wypróbuj online!

W pewnym sensie dodawanie działa jako interesująca bramka NAND w SILOSACH.

-14 bajtów dzięki @Leaky Nun

Zasadniczo tworzymy liczbę „a”, która wynosi 0 (fałsz) iff j wynosi 6 i i = 9, a następnie dzielimy ją samą odejmując jedną i mnożąc przez 12, aby dodać do naszego produktu.

Jeśli „a” wynosił 1 po odjęciu jednego i pomnożeniu, staje się brakiem operacji, jednak w przypadku, gdy a wynosi 0, 0/0 cicho generuje błąd (który jest automatycznie wychwytywany) a staje się 0, a następnie staje się -1 i odejmujemy 12 od naszego produktu.

Rohan Jhunjhunwala
źródło
69 bajtów
Leaky Nun
67 bajtów
Leaky Nun
@LeakyNun ooh, to sprytne.
Rohan Jhunjhunwala
W rzeczywistości 0/0staje się 0.
Leaky Nun
@LeakyNun Chciałem powiedzieć, że staje się 0, a następnie zmniejsza się. Ustalenie.
Rohan Jhunjhunwala