W każdym rogu masz pudełko z jednocyfrową liczbą:
1|2
---
3|4
Jeśli połączymy cyfry wzdłuż rzędów od lewej do prawej, otrzymamy 12 i 34. Jeśli połączymy cyfry wzdłuż kolumn od góry do dołu, otrzymamy 13 i 24. Jeśli dodamy wszystkie te liczby, otrzymamy 12 + 34 + 13 + 24 = 83.
Wyzwanie
Napisz program do drukowania wszystkich takich pól, w których suma obliczona jak wyżej wynosi 100.
Zakładając, że każdy narożnik zawiera jedną cyfrę od 1 do 9, istnieje 9 kombinacji: 1157, 1247, 1337, 1427, 1517, 2138, 2228, 2318 i 3119. (Pamiętaj, że istnieje 25 kombinacji, jeśli uwzględnimy 0, ale nie jesteśmy do tego wyzwania).
Zauważ, że przykład 1234 nie działa, ponieważ 12 + 34 + 13 + 24 nie jest równe 100.
Wejście
Żaden
Wynik
Pola odpowiedzi w następującym formacie:
A|B
---
C|D
Dane wyjściowe należy wydrukować do STDOUT lub najbliższej alternatywy.
Zasady
- AB + CD + AC + BD = 100
- Każdy narożnik będzie zawierał tylko liczby całkowite dodatnie 1-9.
- 0 jest wykluczone.
- Liczb można używać więcej niż jeden raz.
- Musisz narysować pola, jak wyżej. (
A|B\n---\nC|D\n
) - Musisz podać wszystkie poprawne odpowiedzi.
- Dodatkowy znak nowej linii jest w porządku.
- code-golf , więc wygrywa najkrótszy kod w bajtach.
- Obowiązują standardowe luki i warunki.
To moje pierwsze zgłoszenie, więc daj mi znać, jeśli będę musiał coś wyjaśnić.
Odpowiedzi:
Pyth,
423834 bajtyKońcowy znak nowej linii w kodzie jest ważny. Głównym powodem jestem konkurencyjny dlatego używam kropka iloczyn wektorowy
[1, 1, 5, 7]
i[20, 11, 11, 2]
i porównać go do 100.źródło
"|"
->\|
,\n
-> (dosłowny wysuw wiersza) i nie potrzebujesz ostatecznej wyceny.Ruby, 71
Ponieważ kodowanie na stałe nie jest niedozwolone (a w każdym razie trudno jest narysować linię), oto częściowa zakodowana odpowiedź.
Wyjaśnienie
Wzór na rozwiązanie jest następujący:
Dzięki modułowym argumentom arytmetycznym widzimy, że A i D muszą się różnić stałą wartością, taką jak
(A*20+D*2)%11
stała. W rzeczywistości D = A + 6. Wi
iteracji pętli przez trzy możliwe wartości A.Wartość B może wynosić od 1 do 1,
7-i*2
a suma B i C musi wynosić14-A-D
. W ten sposób otrzymujemy następujące wyrażenia, które są drukowane. Ruby zezwala na dosłowne znaki nowej linii w ciągach zamkniętych w''
źródło
Java,
202200198Próbuję po raz pierwszy: D
EDYCJA: zapisano 2 bajty z nieco mniejszymi obliczeniami znalezionymi w innym komentarzu.
źródło
Partia - 187 bajtów
Brutalna siła.
Gra w golfa jest nieco mniej obrzydliwa:
źródło
CJam, 40 bajtów
Podejście do wyszukiwania kombinacji różni się od @ Optymalizatora, ale kod do ich wydruku jest identyczny.
Wypróbuj online w interpretatorze CJam .
Jak to działa
źródło
Haskell,
107131 bajtówDruga wersja mojego pierwszego programu Haskell w historii!
Tym razem z wyświetlaniem zgodnie z wymaganiami, bezwstydnie
skradzionyzaadaptowany przez nich (no cóż, przeprowadziłem kilka badań, ale wydaje się, że nie ma tak skutecznych sposobów wyświetlania postaci w Haskell, więc trudno jest uniknąć unlines putStr $).I ... oprócz faktoryzacji formuły na końcu, nadal jest ona czytelna =)
źródło
Haskell,
125121 bajtówStosowanie:
>>
in"abcd">>[[1..9]]
tworzy listę z 4 (długość pierwszego parametru) kopiami drugiego elementu, tj[[1..9],[1..9],[1..9],[1..9]]
.mapM id
tworzy listę wszystkich ich kombinacji, czyli[0,0,0,0]
do[9,9,9,9]
. Trzymaj te, które sumują się100
i buduj ciąg z jego pudełkiem. Wydrukuj wszystkie pudełka.Dzięki @Mauris za 1 bajt i każę przejrzeć mój post, aby znaleźć 3 kolejne.
źródło
mapM id
oszczędza Vs. bajtówsequence
.Python 2,
145129 bajtówObecnie bawię się kilkoma różnymi metodami obliczania, które powinny być krótsze niż te przedstawione, ale opublikuję to, co mam teraz.
źródło
CJam,
4342 bajtyWyjaśnienie do naśladowania ... do dziś EOD
Wypróbuj online tutaj
źródło
Python 3, 159
Szybko i brudno.
źródło
R, 165 bajtów
Byłoby to znacznie krótsze, gdybym zdecydował się w jakiś sposób zakodować wyjście. Podobnie jak kilka innych rozwiązań, wykorzystuje to tożsamość 20 x 1 + 11 ( x 2 + x 3 ) + 2 x 4 = 100.
Niegolfowane + wyjaśnienie:
Być może zastanawiasz się, dlaczego ostatnie zdanie jest zadaniem. Jak się okazuje,
cat
funkcja konkatenująca i drukująca zwraca wartośćNULL
. Kiedy zadzwoniszcat
z funkcji takiejapply
, po wyjściu pojawi się komunikatNULL
, co jest niepożądane. Są na to dwa sposoby: przypisz ją do zmiennej lub zawińinvisible
. Tutaj wybrałem ten pierwszy, ponieważ jest znacznie krótszy.Możesz spróbować online .
źródło
Java, 450
Moja pierwsza (nie golfowa) próba wyglądała następująco:
źródło
20*a + 11*(b + c) + 2*d == 100
.PowerShell, 98
dostosowana formuła steveverrilla
źródło